index.d.mts 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750
  1. import * as vue from 'vue';
  2. import { Ref, ComponentPropsOptions, ExtractPropTypes, VNodeChild, VNode, PropType, Component } from 'vue';
  3. type ClassValue = any;
  4. type ExpandProps = {
  5. expandOnClick: boolean;
  6. expanded: readonly string[];
  7. 'onUpdate:expanded': ((value: any[]) => void) | undefined;
  8. };
  9. declare function provideExpanded(props: ExpandProps): {
  10. expand: (item: DataTableItem, value: boolean) => void;
  11. expanded: Ref<Set<string>> & {
  12. readonly externalValue: readonly string[];
  13. };
  14. expandOnClick: Ref<boolean>;
  15. isExpanded: (item: DataTableItem) => boolean;
  16. toggleExpand: (item: DataTableItem) => void;
  17. };
  18. type SlotsToProps<U extends RawSlots, T = MakeInternalSlots<U>> = {
  19. $children?: (VNodeChild | (T extends {
  20. default: infer V;
  21. } ? V : {}) | {
  22. [K in keyof T]?: T[K];
  23. });
  24. 'v-slots'?: {
  25. [K in keyof T]?: T[K] | false;
  26. };
  27. } & {
  28. [K in keyof T as `v-slot:${K & string}`]?: T[K] | false;
  29. };
  30. type RawSlots = Record<string, unknown>;
  31. type Slot<T> = [T] extends [never] ? () => VNodeChild : (arg: T) => VNodeChild;
  32. type VueSlot<T> = [T] extends [never] ? () => VNode[] : (arg: T) => VNode[];
  33. type MakeInternalSlots<T extends RawSlots> = {
  34. [K in keyof T]: Slot<T[K]>;
  35. };
  36. type MakeSlots<T extends RawSlots> = {
  37. [K in keyof T]: VueSlot<T[K]>;
  38. };
  39. type GenericProps<Props, Slots extends Record<string, unknown>> = {
  40. $props: Props & SlotsToProps<Slots>;
  41. $slots: MakeSlots<Slots>;
  42. };
  43. interface FilterPropsOptions<PropsOptions extends Readonly<ComponentPropsOptions>, Props = ExtractPropTypes<PropsOptions>> {
  44. filterProps<T extends Partial<Props>, U extends Exclude<keyof Props, Exclude<keyof Props, keyof T>>>(props: T): Partial<Pick<T, U>>;
  45. }
  46. declare function deepEqual(a: any, b: any): boolean;
  47. type SelectItemKey<T = Record<string, any>> = boolean | null | undefined | string | readonly (string | number)[] | ((item: T, fallback?: any) => any);
  48. type EventProp<T extends any[] = any[], F = (...args: T) => void> = F;
  49. declare const EventProp: <T extends any[] = any[]>() => PropType<EventProp<T>>;
  50. interface DataTableItemProps {
  51. items: any[];
  52. itemValue: SelectItemKey;
  53. itemSelectable: SelectItemKey;
  54. returnObject: boolean;
  55. }
  56. interface SelectableItem {
  57. value: any;
  58. selectable: boolean;
  59. }
  60. type SelectionProps = Pick<DataTableItemProps, 'itemValue'> & {
  61. modelValue: readonly any[];
  62. selectStrategy: 'single' | 'page' | 'all';
  63. valueComparator: typeof deepEqual;
  64. 'onUpdate:modelValue': EventProp<[any[]]> | undefined;
  65. };
  66. declare function provideSelection(props: SelectionProps, { allItems, currentPage }: {
  67. allItems: Ref<SelectableItem[]>;
  68. currentPage: Ref<SelectableItem[]>;
  69. }): {
  70. toggleSelect: (item: SelectableItem) => void;
  71. select: (items: SelectableItem[], value: boolean) => void;
  72. selectAll: (value: boolean) => void;
  73. isSelected: (items: SelectableItem | SelectableItem[]) => boolean;
  74. isSomeSelected: (items: SelectableItem | SelectableItem[]) => boolean;
  75. someSelected: vue.ComputedRef<boolean>;
  76. allSelected: vue.ComputedRef<boolean>;
  77. showSelectAll: vue.ComputedRef<boolean>;
  78. };
  79. /**
  80. * - match without highlight
  81. * - single match (index), length already known
  82. * - single match (start, end)
  83. * - multiple matches (start, end), probably shouldn't overlap
  84. */
  85. type FilterMatch = boolean | number | [number, number] | [number, number][];
  86. type FilterFunction = (value: string, query: string, item?: InternalItem) => FilterMatch;
  87. type FilterKeyFunctions = Record<string, FilterFunction>;
  88. type FilterKeys = string | string[];
  89. type FilterMode = 'some' | 'every' | 'union' | 'intersection';
  90. interface InternalItem<T = any> {
  91. value: any;
  92. raw: T;
  93. }
  94. type DataTableCompareFunction<T = any> = (a: T, b: T) => number | null;
  95. type DataTableHeader<T = Record<string, any>> = {
  96. key?: 'data-table-group' | 'data-table-select' | 'data-table-expand' | (string & {});
  97. value?: SelectItemKey<T>;
  98. title?: string;
  99. fixed?: boolean;
  100. align?: 'start' | 'end' | 'center';
  101. width?: number | string;
  102. minWidth?: string;
  103. maxWidth?: string;
  104. nowrap?: boolean;
  105. headerProps?: Record<string, any>;
  106. cellProps?: HeaderCellProps;
  107. sortable?: boolean;
  108. sort?: DataTableCompareFunction;
  109. sortRaw?: DataTableCompareFunction;
  110. filter?: FilterFunction;
  111. mobile?: boolean;
  112. children?: DataTableHeader<T>[];
  113. };
  114. type InternalDataTableHeader = Omit<DataTableHeader, 'key' | 'value' | 'children'> & {
  115. key: string | null;
  116. value: SelectItemKey | null;
  117. sortable: boolean;
  118. fixedOffset?: number;
  119. lastFixed?: boolean;
  120. nowrap?: boolean;
  121. colspan?: number;
  122. rowspan?: number;
  123. children?: InternalDataTableHeader[];
  124. };
  125. interface DataTableItem<T = any> extends InternalItem<T>, GroupableItem<T>, SelectableItem {
  126. key: any;
  127. index: number;
  128. columns: {
  129. [key: string]: any;
  130. };
  131. }
  132. type ItemSlotBase<T> = {
  133. index: number;
  134. item: T;
  135. internalItem: DataTableItem<T>;
  136. isExpanded: ReturnType<typeof provideExpanded>['isExpanded'];
  137. toggleExpand: ReturnType<typeof provideExpanded>['toggleExpand'];
  138. isSelected: ReturnType<typeof provideSelection>['isSelected'];
  139. toggleSelect: ReturnType<typeof provideSelection>['toggleSelect'];
  140. };
  141. type ItemKeySlot<T> = ItemSlotBase<T> & {
  142. value: any;
  143. column: InternalDataTableHeader;
  144. };
  145. type HeaderCellProps = Record<string, any> | ((data: Pick<ItemKeySlot<any>, 'index' | 'item' | 'internalItem' | 'value'>) => Record<string, any>);
  146. type SortItem = {
  147. key: string;
  148. order?: boolean | 'asc' | 'desc';
  149. };
  150. declare function provideSort(options: {
  151. sortBy: Ref<readonly SortItem[]>;
  152. mustSort: Ref<boolean>;
  153. multiSort: Ref<boolean>;
  154. page?: Ref<number>;
  155. }): {
  156. sortBy: Ref<readonly SortItem[]>;
  157. toggleSort: (column: InternalDataTableHeader) => void;
  158. isSorted: (column: InternalDataTableHeader) => boolean;
  159. };
  160. interface GroupableItem<T = any> {
  161. type: 'item';
  162. raw: T;
  163. }
  164. interface Group<T = any> {
  165. type: 'group';
  166. depth: number;
  167. id: string;
  168. key: string;
  169. value: any;
  170. items: readonly (T | Group<T>)[];
  171. }
  172. declare function provideGroupBy(options: {
  173. groupBy: Ref<readonly SortItem[]>;
  174. sortBy: Ref<readonly SortItem[]>;
  175. disableSort?: Ref<boolean>;
  176. }): {
  177. sortByWithGroups: vue.ComputedRef<SortItem[]>;
  178. toggleGroup: (group: Group) => void;
  179. opened: Ref<Set<string> & Omit<Set<string>, keyof Set<any>>>;
  180. groupBy: Ref<readonly SortItem[]>;
  181. extractRows: <T extends GroupableItem>(items: readonly (T | Group<T>)[]) => T[];
  182. isGroupOpen: (group: Group) => boolean;
  183. };
  184. interface DataIteratorItemProps {
  185. items: any[];
  186. itemValue: SelectItemKey;
  187. itemSelectable: SelectItemKey;
  188. returnObject: boolean;
  189. }
  190. interface DataIteratorItem<T = any> extends GroupableItem<T>, SelectableItem {
  191. value: unknown;
  192. }
  193. declare function providePagination(options: {
  194. page: Ref<number>;
  195. itemsPerPage: Ref<number>;
  196. itemsLength: Ref<number>;
  197. }): {
  198. page: Ref<number>;
  199. itemsPerPage: Ref<number>;
  200. startIndex: vue.ComputedRef<number>;
  201. stopIndex: vue.ComputedRef<number>;
  202. pageCount: vue.ComputedRef<number>;
  203. itemsLength: Ref<number>;
  204. nextPage: () => void;
  205. prevPage: () => void;
  206. setPage: (value: number) => void;
  207. setItemsPerPage: (value: number) => void;
  208. };
  209. interface LoaderSlotProps {
  210. color: string | undefined;
  211. isActive: boolean;
  212. }
  213. type VDataIteratorSlotProps<T> = {
  214. page: number;
  215. itemsPerPage: number;
  216. sortBy: readonly SortItem[];
  217. pageCount: number;
  218. toggleSort: ReturnType<typeof provideSort>['toggleSort'];
  219. prevPage: ReturnType<typeof providePagination>['prevPage'];
  220. nextPage: ReturnType<typeof providePagination>['nextPage'];
  221. setPage: ReturnType<typeof providePagination>['setPage'];
  222. setItemsPerPage: ReturnType<typeof providePagination>['setItemsPerPage'];
  223. isSelected: ReturnType<typeof provideSelection>['isSelected'];
  224. select: ReturnType<typeof provideSelection>['select'];
  225. selectAll: ReturnType<typeof provideSelection>['selectAll'];
  226. toggleSelect: ReturnType<typeof provideSelection>['toggleSelect'];
  227. isExpanded: ReturnType<typeof provideExpanded>['isExpanded'];
  228. toggleExpand: ReturnType<typeof provideExpanded>['toggleExpand'];
  229. isGroupOpen: ReturnType<typeof provideGroupBy>['isGroupOpen'];
  230. toggleGroup: ReturnType<typeof provideGroupBy>['toggleGroup'];
  231. items: readonly DataIteratorItem<T>[];
  232. groupedItems: readonly (DataIteratorItem<T> | Group<DataIteratorItem<T>>)[];
  233. };
  234. type VDataIteratorSlots<T> = {
  235. default: VDataIteratorSlotProps<T>;
  236. header: VDataIteratorSlotProps<T>;
  237. footer: VDataIteratorSlotProps<T>;
  238. loader: LoaderSlotProps;
  239. 'no-data': never;
  240. };
  241. declare const VDataIterator: {
  242. new (...args: any[]): vue.CreateComponentPublicInstance<{
  243. page: string | number;
  244. transition: string | boolean | (vue.TransitionProps & {
  245. component?: Component;
  246. }) | {
  247. component: Component;
  248. hideOnLeave: boolean;
  249. };
  250. expanded: readonly string[];
  251. loading: boolean;
  252. style: vue.StyleValue;
  253. tag: string;
  254. sortBy: readonly SortItem[];
  255. modelValue: readonly any[];
  256. valueComparator: typeof deepEqual;
  257. selectStrategy: "all" | "page" | "single";
  258. returnObject: boolean;
  259. filterMode: FilterMode;
  260. noFilter: boolean;
  261. itemValue: SelectItemKey;
  262. multiSort: boolean;
  263. mustSort: boolean;
  264. groupBy: readonly SortItem[];
  265. itemSelectable: SelectItemKey;
  266. showSelect: boolean;
  267. expandOnClick: boolean;
  268. showExpand: boolean;
  269. itemsPerPage: string | number;
  270. } & {
  271. search?: string | undefined;
  272. class?: any;
  273. customFilter?: FilterFunction | undefined;
  274. customKeyFilter?: FilterKeyFunctions | undefined;
  275. filterKeys?: FilterKeys | undefined;
  276. customKeySort?: Record<string, DataTableCompareFunction> | undefined;
  277. } & {
  278. "onUpdate:modelValue"?: ((value: any[]) => any) | undefined;
  279. "onUpdate:sortBy"?: ((value: any) => any) | undefined;
  280. "onUpdate:groupBy"?: ((value: any) => any) | undefined;
  281. "onUpdate:expanded"?: ((value: any) => any) | undefined;
  282. "onUpdate:page"?: ((value: number) => any) | undefined;
  283. "onUpdate:itemsPerPage"?: ((value: number) => any) | undefined;
  284. "onUpdate:options"?: ((value: any) => any) | undefined;
  285. "onUpdate:currentItems"?: ((value: any) => any) | undefined;
  286. }, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<{
  287. 'update:modelValue': (value: any[]) => true;
  288. 'update:groupBy': (value: any) => true;
  289. 'update:page': (value: number) => true;
  290. 'update:itemsPerPage': (value: number) => true;
  291. 'update:sortBy': (value: any) => true;
  292. 'update:options': (value: any) => true;
  293. 'update:expanded': (value: any) => true;
  294. 'update:currentItems': (value: any) => true;
  295. }, "$children" | "v-slots" | "v-slot:default" | "items" | "v-slot:loader" | "v-slot:header" | "v-slot:no-data" | "v-slot:footer">, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & {
  296. page: string | number;
  297. transition: string | boolean | (vue.TransitionProps & {
  298. component?: Component;
  299. }) | {
  300. component: Component;
  301. hideOnLeave: boolean;
  302. };
  303. expanded: readonly string[];
  304. loading: boolean;
  305. style: vue.StyleValue;
  306. tag: string;
  307. sortBy: readonly SortItem[];
  308. modelValue: readonly any[];
  309. valueComparator: typeof deepEqual;
  310. selectStrategy: "all" | "page" | "single";
  311. returnObject: boolean;
  312. filterMode: FilterMode;
  313. noFilter: boolean;
  314. itemValue: SelectItemKey;
  315. multiSort: boolean;
  316. mustSort: boolean;
  317. groupBy: readonly SortItem[];
  318. itemSelectable: SelectItemKey;
  319. showSelect: boolean;
  320. expandOnClick: boolean;
  321. showExpand: boolean;
  322. itemsPerPage: string | number;
  323. } & {
  324. search?: string | undefined;
  325. class?: any;
  326. customFilter?: FilterFunction | undefined;
  327. customKeyFilter?: FilterKeyFunctions | undefined;
  328. filterKeys?: FilterKeys | undefined;
  329. customKeySort?: Record<string, DataTableCompareFunction> | undefined;
  330. } & {
  331. "onUpdate:modelValue"?: ((value: any[]) => any) | undefined;
  332. "onUpdate:sortBy"?: ((value: any) => any) | undefined;
  333. "onUpdate:groupBy"?: ((value: any) => any) | undefined;
  334. "onUpdate:expanded"?: ((value: any) => any) | undefined;
  335. "onUpdate:page"?: ((value: number) => any) | undefined;
  336. "onUpdate:itemsPerPage"?: ((value: number) => any) | undefined;
  337. "onUpdate:options"?: ((value: any) => any) | undefined;
  338. "onUpdate:currentItems"?: ((value: any) => any) | undefined;
  339. }, {
  340. page: string | number;
  341. transition: string | boolean | (vue.TransitionProps & {
  342. component?: Component;
  343. }) | {
  344. component: Component;
  345. hideOnLeave: boolean;
  346. };
  347. expanded: readonly string[];
  348. loading: boolean;
  349. style: vue.StyleValue;
  350. tag: string;
  351. sortBy: readonly SortItem[];
  352. modelValue: readonly any[];
  353. valueComparator: typeof deepEqual;
  354. selectStrategy: "all" | "page" | "single";
  355. returnObject: boolean;
  356. filterMode: FilterMode;
  357. noFilter: boolean;
  358. itemValue: SelectItemKey;
  359. multiSort: boolean;
  360. mustSort: boolean;
  361. groupBy: readonly SortItem[];
  362. itemSelectable: SelectItemKey;
  363. showSelect: boolean;
  364. expandOnClick: boolean;
  365. showExpand: boolean;
  366. itemsPerPage: string | number;
  367. }, true, {}, vue.SlotsType<Partial<{
  368. default: (arg: VDataIteratorSlotProps<unknown>) => vue.VNode[];
  369. header: (arg: VDataIteratorSlotProps<unknown>) => vue.VNode[];
  370. footer: (arg: VDataIteratorSlotProps<unknown>) => vue.VNode[];
  371. loader: (arg: LoaderSlotProps) => vue.VNode[];
  372. 'no-data': () => vue.VNode[];
  373. }>>, {
  374. P: {};
  375. B: {};
  376. D: {};
  377. C: {};
  378. M: {};
  379. Defaults: {};
  380. }, {
  381. page: string | number;
  382. transition: string | boolean | (vue.TransitionProps & {
  383. component?: Component;
  384. }) | {
  385. component: Component;
  386. hideOnLeave: boolean;
  387. };
  388. expanded: readonly string[];
  389. loading: boolean;
  390. style: vue.StyleValue;
  391. tag: string;
  392. sortBy: readonly SortItem[];
  393. modelValue: readonly any[];
  394. valueComparator: typeof deepEqual;
  395. selectStrategy: "all" | "page" | "single";
  396. returnObject: boolean;
  397. filterMode: FilterMode;
  398. noFilter: boolean;
  399. itemValue: SelectItemKey;
  400. multiSort: boolean;
  401. mustSort: boolean;
  402. groupBy: readonly SortItem[];
  403. itemSelectable: SelectItemKey;
  404. showSelect: boolean;
  405. expandOnClick: boolean;
  406. showExpand: boolean;
  407. itemsPerPage: string | number;
  408. } & {
  409. search?: string | undefined;
  410. class?: any;
  411. customFilter?: FilterFunction | undefined;
  412. customKeyFilter?: FilterKeyFunctions | undefined;
  413. filterKeys?: FilterKeys | undefined;
  414. customKeySort?: Record<string, DataTableCompareFunction> | undefined;
  415. } & {
  416. "onUpdate:modelValue"?: ((value: any[]) => any) | undefined;
  417. "onUpdate:sortBy"?: ((value: any) => any) | undefined;
  418. "onUpdate:groupBy"?: ((value: any) => any) | undefined;
  419. "onUpdate:expanded"?: ((value: any) => any) | undefined;
  420. "onUpdate:page"?: ((value: number) => any) | undefined;
  421. "onUpdate:itemsPerPage"?: ((value: number) => any) | undefined;
  422. "onUpdate:options"?: ((value: any) => any) | undefined;
  423. "onUpdate:currentItems"?: ((value: any) => any) | undefined;
  424. }, {}, {}, {}, {}, {
  425. page: string | number;
  426. transition: string | boolean | (vue.TransitionProps & {
  427. component?: Component;
  428. }) | {
  429. component: Component;
  430. hideOnLeave: boolean;
  431. };
  432. expanded: readonly string[];
  433. loading: boolean;
  434. style: vue.StyleValue;
  435. tag: string;
  436. sortBy: readonly SortItem[];
  437. modelValue: readonly any[];
  438. valueComparator: typeof deepEqual;
  439. selectStrategy: "all" | "page" | "single";
  440. returnObject: boolean;
  441. filterMode: FilterMode;
  442. noFilter: boolean;
  443. itemValue: SelectItemKey;
  444. multiSort: boolean;
  445. mustSort: boolean;
  446. groupBy: readonly SortItem[];
  447. itemSelectable: SelectItemKey;
  448. showSelect: boolean;
  449. expandOnClick: boolean;
  450. showExpand: boolean;
  451. itemsPerPage: string | number;
  452. }>;
  453. __isFragment?: never;
  454. __isTeleport?: never;
  455. __isSuspense?: never;
  456. } & vue.ComponentOptionsBase<{
  457. page: string | number;
  458. transition: string | boolean | (vue.TransitionProps & {
  459. component?: Component;
  460. }) | {
  461. component: Component;
  462. hideOnLeave: boolean;
  463. };
  464. expanded: readonly string[];
  465. loading: boolean;
  466. style: vue.StyleValue;
  467. tag: string;
  468. sortBy: readonly SortItem[];
  469. modelValue: readonly any[];
  470. valueComparator: typeof deepEqual;
  471. selectStrategy: "all" | "page" | "single";
  472. returnObject: boolean;
  473. filterMode: FilterMode;
  474. noFilter: boolean;
  475. itemValue: SelectItemKey;
  476. multiSort: boolean;
  477. mustSort: boolean;
  478. groupBy: readonly SortItem[];
  479. itemSelectable: SelectItemKey;
  480. showSelect: boolean;
  481. expandOnClick: boolean;
  482. showExpand: boolean;
  483. itemsPerPage: string | number;
  484. } & {
  485. search?: string | undefined;
  486. class?: any;
  487. customFilter?: FilterFunction | undefined;
  488. customKeyFilter?: FilterKeyFunctions | undefined;
  489. filterKeys?: FilterKeys | undefined;
  490. customKeySort?: Record<string, DataTableCompareFunction> | undefined;
  491. } & {
  492. "onUpdate:modelValue"?: ((value: any[]) => any) | undefined;
  493. "onUpdate:sortBy"?: ((value: any) => any) | undefined;
  494. "onUpdate:groupBy"?: ((value: any) => any) | undefined;
  495. "onUpdate:expanded"?: ((value: any) => any) | undefined;
  496. "onUpdate:page"?: ((value: number) => any) | undefined;
  497. "onUpdate:itemsPerPage"?: ((value: number) => any) | undefined;
  498. "onUpdate:options"?: ((value: any) => any) | undefined;
  499. "onUpdate:currentItems"?: ((value: any) => any) | undefined;
  500. }, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<{
  501. 'update:modelValue': (value: any[]) => true;
  502. 'update:groupBy': (value: any) => true;
  503. 'update:page': (value: number) => true;
  504. 'update:itemsPerPage': (value: number) => true;
  505. 'update:sortBy': (value: any) => true;
  506. 'update:options': (value: any) => true;
  507. 'update:expanded': (value: any) => true;
  508. 'update:currentItems': (value: any) => true;
  509. }, "$children" | "v-slots" | "v-slot:default" | "items" | "v-slot:loader" | "v-slot:header" | "v-slot:no-data" | "v-slot:footer">, string, {
  510. page: string | number;
  511. transition: string | boolean | (vue.TransitionProps & {
  512. component?: Component;
  513. }) | {
  514. component: Component;
  515. hideOnLeave: boolean;
  516. };
  517. expanded: readonly string[];
  518. loading: boolean;
  519. style: vue.StyleValue;
  520. tag: string;
  521. sortBy: readonly SortItem[];
  522. modelValue: readonly any[];
  523. valueComparator: typeof deepEqual;
  524. selectStrategy: "all" | "page" | "single";
  525. returnObject: boolean;
  526. filterMode: FilterMode;
  527. noFilter: boolean;
  528. itemValue: SelectItemKey;
  529. multiSort: boolean;
  530. mustSort: boolean;
  531. groupBy: readonly SortItem[];
  532. itemSelectable: SelectItemKey;
  533. showSelect: boolean;
  534. expandOnClick: boolean;
  535. showExpand: boolean;
  536. itemsPerPage: string | number;
  537. }, {}, string, vue.SlotsType<Partial<{
  538. default: (arg: VDataIteratorSlotProps<unknown>) => vue.VNode[];
  539. header: (arg: VDataIteratorSlotProps<unknown>) => vue.VNode[];
  540. footer: (arg: VDataIteratorSlotProps<unknown>) => vue.VNode[];
  541. loader: (arg: LoaderSlotProps) => vue.VNode[];
  542. 'no-data': () => vue.VNode[];
  543. }>>> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & (new <T>(props: {
  544. items?: readonly T[];
  545. }, slots: VDataIteratorSlots<T>) => GenericProps<typeof props, typeof slots>) & FilterPropsOptions<{
  546. transition: Omit<{
  547. type: vue.PropType<string | boolean | (vue.TransitionProps & {
  548. component?: Component;
  549. })>;
  550. default: string;
  551. validator: (val: unknown) => boolean;
  552. }, "type" | "default"> & {
  553. type: vue.PropType<string | boolean | (vue.TransitionProps & {
  554. component?: Component;
  555. }) | {
  556. component: Component;
  557. hideOnLeave: boolean;
  558. }>;
  559. default: NonNullable<string | boolean | (vue.TransitionProps & {
  560. component?: Component;
  561. })> | {
  562. component: Component;
  563. hideOnLeave: boolean;
  564. };
  565. };
  566. tag: {
  567. type: StringConstructor;
  568. default: string;
  569. };
  570. customFilter: vue.PropType<FilterFunction>;
  571. customKeyFilter: vue.PropType<FilterKeyFunctions>;
  572. filterKeys: vue.PropType<FilterKeys>;
  573. filterMode: {
  574. type: vue.PropType<FilterMode>;
  575. default: string;
  576. };
  577. noFilter: BooleanConstructor;
  578. groupBy: {
  579. type: vue.PropType<readonly SortItem[]>;
  580. default: () => never[];
  581. };
  582. expandOnClick: BooleanConstructor;
  583. showExpand: BooleanConstructor;
  584. expanded: {
  585. type: vue.PropType<readonly string[]>;
  586. default: () => never[];
  587. };
  588. page: {
  589. type: (StringConstructor | NumberConstructor)[];
  590. default: number;
  591. };
  592. itemsPerPage: Omit<{
  593. type: (StringConstructor | NumberConstructor)[];
  594. default: number;
  595. }, "type" | "default"> & {
  596. type: vue.PropType<string | number>;
  597. default: NonNullable<string | number>;
  598. };
  599. sortBy: {
  600. type: vue.PropType<readonly SortItem[]>;
  601. default: () => never[];
  602. };
  603. customKeySort: vue.PropType<Record<string, DataTableCompareFunction>>;
  604. multiSort: BooleanConstructor;
  605. mustSort: BooleanConstructor;
  606. showSelect: BooleanConstructor;
  607. selectStrategy: {
  608. type: vue.PropType<"single" | "page" | "all">;
  609. default: string;
  610. };
  611. modelValue: {
  612. type: vue.PropType<readonly any[]>;
  613. default: () => never[];
  614. };
  615. valueComparator: {
  616. type: vue.PropType<typeof deepEqual>;
  617. default: typeof deepEqual;
  618. };
  619. items: {
  620. type: vue.PropType<DataIteratorItemProps["items"]>;
  621. default: () => never[];
  622. };
  623. itemValue: {
  624. type: vue.PropType<SelectItemKey>;
  625. default: string;
  626. };
  627. itemSelectable: {
  628. type: vue.PropType<SelectItemKey>;
  629. default: null;
  630. };
  631. returnObject: BooleanConstructor;
  632. class: vue.PropType<ClassValue>;
  633. style: {
  634. type: vue.PropType<vue.StyleValue>;
  635. default: null;
  636. };
  637. search: StringConstructor;
  638. loading: BooleanConstructor;
  639. }, vue.ExtractPropTypes<{
  640. transition: Omit<{
  641. type: vue.PropType<string | boolean | (vue.TransitionProps & {
  642. component?: Component;
  643. })>;
  644. default: string;
  645. validator: (val: unknown) => boolean;
  646. }, "type" | "default"> & {
  647. type: vue.PropType<string | boolean | (vue.TransitionProps & {
  648. component?: Component;
  649. }) | {
  650. component: Component;
  651. hideOnLeave: boolean;
  652. }>;
  653. default: NonNullable<string | boolean | (vue.TransitionProps & {
  654. component?: Component;
  655. })> | {
  656. component: Component;
  657. hideOnLeave: boolean;
  658. };
  659. };
  660. tag: {
  661. type: StringConstructor;
  662. default: string;
  663. };
  664. customFilter: vue.PropType<FilterFunction>;
  665. customKeyFilter: vue.PropType<FilterKeyFunctions>;
  666. filterKeys: vue.PropType<FilterKeys>;
  667. filterMode: {
  668. type: vue.PropType<FilterMode>;
  669. default: string;
  670. };
  671. noFilter: BooleanConstructor;
  672. groupBy: {
  673. type: vue.PropType<readonly SortItem[]>;
  674. default: () => never[];
  675. };
  676. expandOnClick: BooleanConstructor;
  677. showExpand: BooleanConstructor;
  678. expanded: {
  679. type: vue.PropType<readonly string[]>;
  680. default: () => never[];
  681. };
  682. page: {
  683. type: (StringConstructor | NumberConstructor)[];
  684. default: number;
  685. };
  686. itemsPerPage: Omit<{
  687. type: (StringConstructor | NumberConstructor)[];
  688. default: number;
  689. }, "type" | "default"> & {
  690. type: vue.PropType<string | number>;
  691. default: NonNullable<string | number>;
  692. };
  693. sortBy: {
  694. type: vue.PropType<readonly SortItem[]>;
  695. default: () => never[];
  696. };
  697. customKeySort: vue.PropType<Record<string, DataTableCompareFunction>>;
  698. multiSort: BooleanConstructor;
  699. mustSort: BooleanConstructor;
  700. showSelect: BooleanConstructor;
  701. selectStrategy: {
  702. type: vue.PropType<"single" | "page" | "all">;
  703. default: string;
  704. };
  705. modelValue: {
  706. type: vue.PropType<readonly any[]>;
  707. default: () => never[];
  708. };
  709. valueComparator: {
  710. type: vue.PropType<typeof deepEqual>;
  711. default: typeof deepEqual;
  712. };
  713. items: {
  714. type: vue.PropType<DataIteratorItemProps["items"]>;
  715. default: () => never[];
  716. };
  717. itemValue: {
  718. type: vue.PropType<SelectItemKey>;
  719. default: string;
  720. };
  721. itemSelectable: {
  722. type: vue.PropType<SelectItemKey>;
  723. default: null;
  724. };
  725. returnObject: BooleanConstructor;
  726. class: vue.PropType<ClassValue>;
  727. style: {
  728. type: vue.PropType<vue.StyleValue>;
  729. default: null;
  730. };
  731. search: StringConstructor;
  732. loading: BooleanConstructor;
  733. }>>;
  734. type VDataIterator = InstanceType<typeof VDataIterator>;
  735. export { VDataIterator };