index.d.mts 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. import * as vue from 'vue';
  2. import { ComponentPropsOptions, ExtractPropTypes, VNodeChild, VNode, ComponentInternalInstance, Ref, ComputedRef } from 'vue';
  3. type SlotsToProps<U extends RawSlots, T = MakeInternalSlots<U>> = {
  4. $children?: (VNodeChild | (T extends {
  5. default: infer V;
  6. } ? V : {}) | {
  7. [K in keyof T]?: T[K];
  8. });
  9. 'v-slots'?: {
  10. [K in keyof T]?: T[K] | false;
  11. };
  12. } & {
  13. [K in keyof T as `v-slot:${K & string}`]?: T[K] | false;
  14. };
  15. type RawSlots = Record<string, unknown>;
  16. type Slot<T> = [T] extends [never] ? () => VNodeChild : (arg: T) => VNodeChild;
  17. type VueSlot<T> = [T] extends [never] ? () => VNode[] : (arg: T) => VNode[];
  18. type MakeInternalSlots<T extends RawSlots> = {
  19. [K in keyof T]: Slot<T[K]>;
  20. };
  21. type MakeSlots<T extends RawSlots> = {
  22. [K in keyof T]: VueSlot<T[K]>;
  23. };
  24. type GenericProps<Props, Slots extends Record<string, unknown>> = {
  25. $props: Props & SlotsToProps<Slots>;
  26. $slots: MakeSlots<Slots>;
  27. };
  28. interface FilterPropsOptions<PropsOptions extends Readonly<ComponentPropsOptions>, Props = ExtractPropTypes<PropsOptions>> {
  29. filterProps<T extends Partial<Props>, U extends Exclude<keyof Props, Exclude<keyof Props, keyof T>>>(props: T): Partial<Pick<T, U>>;
  30. }
  31. type ClassValue = any;
  32. type Density = null | 'default' | 'comfortable' | 'compact';
  33. declare const allowedVariants: readonly ["elevated", "flat", "tonal", "outlined", "text", "plain"];
  34. type Variant = typeof allowedVariants[number];
  35. interface GroupItem {
  36. id: number;
  37. value: Ref<unknown>;
  38. disabled: Ref<boolean | undefined>;
  39. useIndexAsValue?: boolean;
  40. }
  41. interface GroupProvide {
  42. register: (item: GroupItem, cmp: ComponentInternalInstance) => void;
  43. unregister: (id: number) => void;
  44. select: (id: number, value: boolean) => void;
  45. selected: Ref<Readonly<number[]>>;
  46. isSelected: (id: number) => boolean;
  47. prev: () => void;
  48. next: () => void;
  49. selectedClass: Ref<string | undefined>;
  50. items: ComputedRef<{
  51. id: number;
  52. value: unknown;
  53. disabled: boolean | undefined;
  54. }[]>;
  55. disabled: Ref<boolean | undefined>;
  56. getItemIndex: (value: unknown) => number;
  57. }
  58. type BtnToggleSlotProps = 'isSelected' | 'select' | 'selected' | 'next' | 'prev';
  59. interface DefaultBtnToggleSlot extends Pick<GroupProvide, BtnToggleSlotProps> {
  60. }
  61. type VBtnToggleSlots = {
  62. default: DefaultBtnToggleSlot;
  63. };
  64. declare const VBtnToggle: {
  65. new (...args: any[]): vue.CreateComponentPublicInstance<{
  66. variant: "flat" | "text" | "elevated" | "tonal" | "outlined" | "plain";
  67. style: vue.StyleValue;
  68. disabled: boolean;
  69. multiple: boolean;
  70. tag: string;
  71. tile: boolean;
  72. density: Density;
  73. divided: boolean;
  74. } & {
  75. max?: number | undefined;
  76. border?: string | number | boolean | undefined;
  77. color?: string | undefined;
  78. class?: any;
  79. theme?: string | undefined;
  80. mandatory?: boolean | "force" | undefined;
  81. elevation?: string | number | undefined;
  82. rounded?: string | number | boolean | undefined;
  83. baseColor?: string | undefined;
  84. selectedClass?: string | undefined;
  85. } & {}, {
  86. next: () => void;
  87. prev: () => void;
  88. select: (id: number, value: boolean) => void;
  89. }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<{
  90. 'update:modelValue': (value: any) => true;
  91. }, "$children" | "v-slots" | "v-slot:default" | "modelValue" | "update:modelValue">, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & {
  92. variant: "flat" | "text" | "elevated" | "tonal" | "outlined" | "plain";
  93. style: vue.StyleValue;
  94. disabled: boolean;
  95. multiple: boolean;
  96. tag: string;
  97. tile: boolean;
  98. density: Density;
  99. divided: boolean;
  100. } & {
  101. max?: number | undefined;
  102. border?: string | number | boolean | undefined;
  103. color?: string | undefined;
  104. class?: any;
  105. theme?: string | undefined;
  106. mandatory?: boolean | "force" | undefined;
  107. elevation?: string | number | undefined;
  108. rounded?: string | number | boolean | undefined;
  109. baseColor?: string | undefined;
  110. selectedClass?: string | undefined;
  111. } & {}, {
  112. variant: "flat" | "text" | "elevated" | "tonal" | "outlined" | "plain";
  113. style: vue.StyleValue;
  114. disabled: boolean;
  115. multiple: boolean;
  116. tag: string;
  117. rounded: string | number | boolean;
  118. tile: boolean;
  119. density: Density;
  120. divided: boolean;
  121. }, true, {}, vue.SlotsType<Partial<{
  122. default: (arg: DefaultBtnToggleSlot) => vue.VNode[];
  123. }>>, {
  124. P: {};
  125. B: {};
  126. D: {};
  127. C: {};
  128. M: {};
  129. Defaults: {};
  130. }, {
  131. variant: "flat" | "text" | "elevated" | "tonal" | "outlined" | "plain";
  132. style: vue.StyleValue;
  133. disabled: boolean;
  134. multiple: boolean;
  135. tag: string;
  136. tile: boolean;
  137. density: Density;
  138. divided: boolean;
  139. } & {
  140. max?: number | undefined;
  141. border?: string | number | boolean | undefined;
  142. color?: string | undefined;
  143. class?: any;
  144. theme?: string | undefined;
  145. mandatory?: boolean | "force" | undefined;
  146. elevation?: string | number | undefined;
  147. rounded?: string | number | boolean | undefined;
  148. baseColor?: string | undefined;
  149. selectedClass?: string | undefined;
  150. } & {}, {
  151. next: () => void;
  152. prev: () => void;
  153. select: (id: number, value: boolean) => void;
  154. }, {}, {}, {}, {
  155. variant: "flat" | "text" | "elevated" | "tonal" | "outlined" | "plain";
  156. style: vue.StyleValue;
  157. disabled: boolean;
  158. multiple: boolean;
  159. tag: string;
  160. rounded: string | number | boolean;
  161. tile: boolean;
  162. density: Density;
  163. divided: boolean;
  164. }>;
  165. __isFragment?: never;
  166. __isTeleport?: never;
  167. __isSuspense?: never;
  168. } & vue.ComponentOptionsBase<{
  169. variant: "flat" | "text" | "elevated" | "tonal" | "outlined" | "plain";
  170. style: vue.StyleValue;
  171. disabled: boolean;
  172. multiple: boolean;
  173. tag: string;
  174. tile: boolean;
  175. density: Density;
  176. divided: boolean;
  177. } & {
  178. max?: number | undefined;
  179. border?: string | number | boolean | undefined;
  180. color?: string | undefined;
  181. class?: any;
  182. theme?: string | undefined;
  183. mandatory?: boolean | "force" | undefined;
  184. elevation?: string | number | undefined;
  185. rounded?: string | number | boolean | undefined;
  186. baseColor?: string | undefined;
  187. selectedClass?: string | undefined;
  188. } & {}, {
  189. next: () => void;
  190. prev: () => void;
  191. select: (id: number, value: boolean) => void;
  192. }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<{
  193. 'update:modelValue': (value: any) => true;
  194. }, "$children" | "v-slots" | "v-slot:default" | "modelValue" | "update:modelValue">, string, {
  195. variant: "flat" | "text" | "elevated" | "tonal" | "outlined" | "plain";
  196. style: vue.StyleValue;
  197. disabled: boolean;
  198. multiple: boolean;
  199. tag: string;
  200. rounded: string | number | boolean;
  201. tile: boolean;
  202. density: Density;
  203. divided: boolean;
  204. }, {}, string, vue.SlotsType<Partial<{
  205. default: (arg: DefaultBtnToggleSlot) => vue.VNode[];
  206. }>>> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & (new <T>(props: {
  207. modelValue?: T;
  208. "onUpdate:modelValue"?: (value: T) => void;
  209. }, slots: VBtnToggleSlots) => GenericProps<typeof props, typeof slots>) & FilterPropsOptions<{
  210. modelValue: {
  211. type: null;
  212. default: undefined;
  213. };
  214. multiple: BooleanConstructor;
  215. mandatory: vue.PropType<boolean | "force">;
  216. max: NumberConstructor;
  217. selectedClass: StringConstructor;
  218. disabled: BooleanConstructor;
  219. color: StringConstructor;
  220. variant: {
  221. type: vue.PropType<Variant>;
  222. default: string;
  223. validator: (v: any) => boolean;
  224. };
  225. theme: StringConstructor;
  226. tag: {
  227. type: StringConstructor;
  228. default: string;
  229. };
  230. rounded: {
  231. type: (StringConstructor | BooleanConstructor | NumberConstructor)[];
  232. default: undefined;
  233. };
  234. tile: BooleanConstructor;
  235. elevation: {
  236. type: (StringConstructor | NumberConstructor)[];
  237. validator(v: any): boolean;
  238. };
  239. density: {
  240. type: vue.PropType<Density>;
  241. default: string;
  242. validator: (v: any) => boolean;
  243. };
  244. class: vue.PropType<ClassValue>;
  245. style: {
  246. type: vue.PropType<vue.StyleValue>;
  247. default: null;
  248. };
  249. border: (StringConstructor | BooleanConstructor | NumberConstructor)[];
  250. baseColor: StringConstructor;
  251. divided: BooleanConstructor;
  252. }, vue.ExtractPropTypes<{
  253. modelValue: {
  254. type: null;
  255. default: undefined;
  256. };
  257. multiple: BooleanConstructor;
  258. mandatory: vue.PropType<boolean | "force">;
  259. max: NumberConstructor;
  260. selectedClass: StringConstructor;
  261. disabled: BooleanConstructor;
  262. color: StringConstructor;
  263. variant: {
  264. type: vue.PropType<Variant>;
  265. default: string;
  266. validator: (v: any) => boolean;
  267. };
  268. theme: StringConstructor;
  269. tag: {
  270. type: StringConstructor;
  271. default: string;
  272. };
  273. rounded: {
  274. type: (StringConstructor | BooleanConstructor | NumberConstructor)[];
  275. default: undefined;
  276. };
  277. tile: BooleanConstructor;
  278. elevation: {
  279. type: (StringConstructor | NumberConstructor)[];
  280. validator(v: any): boolean;
  281. };
  282. density: {
  283. type: vue.PropType<Density>;
  284. default: string;
  285. validator: (v: any) => boolean;
  286. };
  287. class: vue.PropType<ClassValue>;
  288. style: {
  289. type: vue.PropType<vue.StyleValue>;
  290. default: null;
  291. };
  292. border: (StringConstructor | BooleanConstructor | NumberConstructor)[];
  293. baseColor: StringConstructor;
  294. divided: BooleanConstructor;
  295. }>>;
  296. type VBtnToggle = InstanceType<typeof VBtnToggle>;
  297. export { VBtnToggle };