@vuetify/nightly 3.10.4-dev.2025-10-01 → 3.10.4-dev.2025-10-06

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.md +10 -3
  2. package/dist/json/attributes.json +1626 -1610
  3. package/dist/json/importMap-labs.json +24 -24
  4. package/dist/json/importMap.json +208 -208
  5. package/dist/json/tags.json +4 -0
  6. package/dist/json/web-types.json +3135 -3091
  7. package/dist/vuetify-labs.cjs +93 -30
  8. package/dist/vuetify-labs.css +4262 -4262
  9. package/dist/vuetify-labs.d.ts +209 -105
  10. package/dist/vuetify-labs.esm.js +93 -30
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +93 -30
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +93 -30
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +3923 -3923
  17. package/dist/vuetify.d.ts +209 -105
  18. package/dist/vuetify.esm.js +93 -30
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +93 -30
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +40 -37
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VDataIterator/VDataIterator.d.ts +52 -11
  26. package/lib/components/VDataIterator/VDataIterator.js +2 -0
  27. package/lib/components/VDataIterator/VDataIterator.js.map +1 -1
  28. package/lib/components/VDataTable/VDataTable.d.ts +78 -18
  29. package/lib/components/VDataTable/VDataTable.js +9 -5
  30. package/lib/components/VDataTable/VDataTable.js.map +1 -1
  31. package/lib/components/VDataTable/VDataTableHeaders.js +2 -2
  32. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  33. package/lib/components/VDataTable/VDataTableServer.d.ts +54 -13
  34. package/lib/components/VDataTable/VDataTableServer.js +8 -4
  35. package/lib/components/VDataTable/VDataTableServer.js.map +1 -1
  36. package/lib/components/VDataTable/VDataTableVirtual.d.ts +54 -13
  37. package/lib/components/VDataTable/VDataTableVirtual.js +7 -3
  38. package/lib/components/VDataTable/VDataTableVirtual.js.map +1 -1
  39. package/lib/components/VDataTable/composables/sort.d.ts +36 -8
  40. package/lib/components/VDataTable/composables/sort.js +55 -14
  41. package/lib/components/VDataTable/composables/sort.js.map +1 -1
  42. package/lib/components/VTreeview/VTreeview.d.ts +6 -0
  43. package/lib/components/VTreeview/VTreeviewChildren.d.ts +9 -0
  44. package/lib/components/VTreeview/VTreeviewChildren.js +6 -1
  45. package/lib/components/VTreeview/VTreeviewChildren.js.map +1 -1
  46. package/lib/entry-bundler.js +1 -1
  47. package/lib/framework.d.ts +71 -71
  48. package/lib/framework.js +1 -1
  49. package/lib/util/indentLines.d.ts +1 -0
  50. package/lib/util/indentLines.js +7 -4
  51. package/lib/util/indentLines.js.map +1 -1
  52. package/package.json +1 -1
@@ -32,8 +32,10 @@ export declare const makeVDataTableVirtualProps: <Defaults extends {
32
32
  expandOnClick?: unknown;
33
33
  showExpand?: unknown;
34
34
  expanded?: unknown;
35
+ initialSortOrder?: unknown;
35
36
  sortBy?: unknown;
36
37
  customKeySort?: unknown;
38
+ multiSort?: unknown;
37
39
  mustSort?: unknown;
38
40
  groupBy?: unknown;
39
41
  items?: unknown;
@@ -55,7 +57,6 @@ export declare const makeVDataTableVirtualProps: <Defaults extends {
55
57
  headers?: unknown;
56
58
  color?: unknown;
57
59
  disableSort?: unknown;
58
- multiSort?: unknown;
59
60
  sortAscIcon?: unknown;
60
61
  sortDescIcon?: unknown;
61
62
  headerProps?: unknown;
@@ -152,6 +153,18 @@ export declare const makeVDataTableVirtualProps: <Defaults extends {
152
153
  type: import("vue").PropType<unknown extends Defaults["expanded"] ? readonly string[] : readonly string[] | Defaults["expanded"]>;
153
154
  default: unknown extends Defaults["expanded"] ? readonly string[] : readonly string[] | Defaults["expanded"];
154
155
  };
156
+ initialSortOrder: unknown extends Defaults["initialSortOrder"] ? {
157
+ type: import("vue").PropType<"asc" | "desc">;
158
+ default: string;
159
+ validator: (v: any) => boolean;
160
+ } : Omit<{
161
+ type: import("vue").PropType<"asc" | "desc">;
162
+ default: string;
163
+ validator: (v: any) => boolean;
164
+ }, "default" | "type"> & {
165
+ type: import("vue").PropType<unknown extends Defaults["initialSortOrder"] ? "asc" | "desc" : "asc" | "desc" | Defaults["initialSortOrder"]>;
166
+ default: unknown extends Defaults["initialSortOrder"] ? "asc" | "desc" : Defaults["initialSortOrder"] | NonNullable<"asc" | "desc">;
167
+ };
155
168
  sortBy: unknown extends Defaults["sortBy"] ? {
156
169
  type: import("vue").PropType<readonly import("../../types.js").DataTableSortItem[]>;
157
170
  default: () => never[];
@@ -166,6 +179,16 @@ export declare const makeVDataTableVirtualProps: <Defaults extends {
166
179
  type: import("vue").PropType<unknown extends Defaults["customKeySort"] ? Record<string, import("../../types.js").DataTableCompareFunction> : Record<string, import("../../types.js").DataTableCompareFunction> | Defaults["customKeySort"]>;
167
180
  default: unknown extends Defaults["customKeySort"] ? Record<string, import("../../types.js").DataTableCompareFunction> : Record<string, import("../../types.js").DataTableCompareFunction> | Defaults["customKeySort"];
168
181
  };
182
+ multiSort: unknown extends Defaults["multiSort"] ? {
183
+ type: import("vue").PropType<boolean | import("./composables/sort.js").MultiSortProps>;
184
+ default: boolean;
185
+ } : Omit<{
186
+ type: import("vue").PropType<boolean | import("./composables/sort.js").MultiSortProps>;
187
+ default: boolean;
188
+ }, "default" | "type"> & {
189
+ type: import("vue").PropType<unknown extends Defaults["multiSort"] ? boolean | import("./composables/sort.js").MultiSortProps : boolean | import("./composables/sort.js").MultiSortProps | Defaults["multiSort"]>;
190
+ default: unknown extends Defaults["multiSort"] ? boolean | import("./composables/sort.js").MultiSortProps : Defaults["multiSort"] | NonNullable<boolean | import("./composables/sort.js").MultiSortProps>;
191
+ };
169
192
  mustSort: unknown extends Defaults["mustSort"] ? BooleanConstructor : {
170
193
  type: import("vue").PropType<unknown extends Defaults["mustSort"] ? boolean : boolean | Defaults["mustSort"]>;
171
194
  default: unknown extends Defaults["mustSort"] ? boolean : boolean | Defaults["mustSort"];
@@ -538,10 +561,6 @@ export declare const makeVDataTableVirtualProps: <Defaults extends {
538
561
  type: import("vue").PropType<unknown extends Defaults["disableSort"] ? boolean : boolean | Defaults["disableSort"]>;
539
562
  default: unknown extends Defaults["disableSort"] ? boolean : boolean | Defaults["disableSort"];
540
563
  };
541
- multiSort: unknown extends Defaults["multiSort"] ? BooleanConstructor : {
542
- type: import("vue").PropType<unknown extends Defaults["multiSort"] ? boolean : boolean | Defaults["multiSort"]>;
543
- default: unknown extends Defaults["multiSort"] ? boolean : boolean | Defaults["multiSort"];
544
- };
545
564
  sortAscIcon: unknown extends Defaults["sortAscIcon"] ? {
546
565
  type: import("vue").PropType<import("../../composables/icons.js").IconValue>;
547
566
  default: string;
@@ -689,7 +708,9 @@ export declare const VDataTableVirtual: {
689
708
  expandOnClick: boolean;
690
709
  showExpand: boolean;
691
710
  expanded: readonly string[];
711
+ initialSortOrder: "asc" | "desc";
692
712
  sortBy: readonly import("../../types.js").DataTableSortItem[];
713
+ multiSort: boolean | import("./composables/sort.js").MultiSortProps;
693
714
  mustSort: boolean;
694
715
  groupBy: readonly import("../../types.js").DataTableSortItem[];
695
716
  returnObject: boolean;
@@ -701,7 +722,6 @@ export declare const VDataTableVirtual: {
701
722
  itemHeight: string | number;
702
723
  itemKey: string | boolean | readonly (string | number)[] | ((item: Record<string, any>, fallback?: any) => any) | null;
703
724
  disableSort: boolean;
704
- multiSort: boolean;
705
725
  sortAscIcon: import("../../composables/icons.js").IconValue;
706
726
  sortDescIcon: import("../../composables/icons.js").IconValue;
707
727
  sticky: boolean;
@@ -754,7 +774,9 @@ export declare const VDataTableVirtual: {
754
774
  expandOnClick: boolean;
755
775
  showExpand: boolean;
756
776
  expanded: readonly string[];
777
+ initialSortOrder: "asc" | "desc";
757
778
  sortBy: readonly import("../../types.js").DataTableSortItem[];
779
+ multiSort: boolean | import("./composables/sort.js").MultiSortProps;
758
780
  mustSort: boolean;
759
781
  groupBy: readonly import("../../types.js").DataTableSortItem[];
760
782
  returnObject: boolean;
@@ -766,7 +788,6 @@ export declare const VDataTableVirtual: {
766
788
  itemHeight: string | number;
767
789
  itemKey: SelectItemKey;
768
790
  disableSort: boolean;
769
- multiSort: boolean;
770
791
  sortAscIcon: import("../../composables/icons.js").IconValue;
771
792
  sortDescIcon: import("../../composables/icons.js").IconValue;
772
793
  sticky: boolean;
@@ -891,7 +912,9 @@ export declare const VDataTableVirtual: {
891
912
  expandOnClick: boolean;
892
913
  showExpand: boolean;
893
914
  expanded: readonly string[];
915
+ initialSortOrder: "asc" | "desc";
894
916
  sortBy: readonly import("../../types.js").DataTableSortItem[];
917
+ multiSort: boolean | import("./composables/sort.js").MultiSortProps;
895
918
  mustSort: boolean;
896
919
  groupBy: readonly import("../../types.js").DataTableSortItem[];
897
920
  returnObject: boolean;
@@ -903,7 +926,6 @@ export declare const VDataTableVirtual: {
903
926
  itemHeight: string | number;
904
927
  itemKey: string | boolean | readonly (string | number)[] | ((item: Record<string, any>, fallback?: any) => any) | null;
905
928
  disableSort: boolean;
906
- multiSort: boolean;
907
929
  sortAscIcon: import("../../composables/icons.js").IconValue;
908
930
  sortDescIcon: import("../../composables/icons.js").IconValue;
909
931
  sticky: boolean;
@@ -950,7 +972,9 @@ export declare const VDataTableVirtual: {
950
972
  expandOnClick: boolean;
951
973
  showExpand: boolean;
952
974
  expanded: readonly string[];
975
+ initialSortOrder: "asc" | "desc";
953
976
  sortBy: readonly import("../../types.js").DataTableSortItem[];
977
+ multiSort: boolean | import("./composables/sort.js").MultiSortProps;
954
978
  mustSort: boolean;
955
979
  groupBy: readonly import("../../types.js").DataTableSortItem[];
956
980
  returnObject: boolean;
@@ -962,7 +986,6 @@ export declare const VDataTableVirtual: {
962
986
  itemHeight: string | number;
963
987
  itemKey: SelectItemKey;
964
988
  disableSort: boolean;
965
- multiSort: boolean;
966
989
  sortAscIcon: import("../../composables/icons.js").IconValue;
967
990
  sortDescIcon: import("../../composables/icons.js").IconValue;
968
991
  sticky: boolean;
@@ -991,7 +1014,9 @@ export declare const VDataTableVirtual: {
991
1014
  expandOnClick: boolean;
992
1015
  showExpand: boolean;
993
1016
  expanded: readonly string[];
1017
+ initialSortOrder: "asc" | "desc";
994
1018
  sortBy: readonly import("../../types.js").DataTableSortItem[];
1019
+ multiSort: boolean | import("./composables/sort.js").MultiSortProps;
995
1020
  mustSort: boolean;
996
1021
  groupBy: readonly import("../../types.js").DataTableSortItem[];
997
1022
  returnObject: boolean;
@@ -1003,7 +1028,6 @@ export declare const VDataTableVirtual: {
1003
1028
  itemHeight: string | number;
1004
1029
  itemKey: string | boolean | readonly (string | number)[] | ((item: Record<string, any>, fallback?: any) => any) | null;
1005
1030
  disableSort: boolean;
1006
- multiSort: boolean;
1007
1031
  sortAscIcon: import("../../composables/icons.js").IconValue;
1008
1032
  sortDescIcon: import("../../composables/icons.js").IconValue;
1009
1033
  sticky: boolean;
@@ -1056,7 +1080,9 @@ export declare const VDataTableVirtual: {
1056
1080
  expandOnClick: boolean;
1057
1081
  showExpand: boolean;
1058
1082
  expanded: readonly string[];
1083
+ initialSortOrder: "asc" | "desc";
1059
1084
  sortBy: readonly import("../../types.js").DataTableSortItem[];
1085
+ multiSort: boolean | import("./composables/sort.js").MultiSortProps;
1060
1086
  mustSort: boolean;
1061
1087
  groupBy: readonly import("../../types.js").DataTableSortItem[];
1062
1088
  returnObject: boolean;
@@ -1068,7 +1094,6 @@ export declare const VDataTableVirtual: {
1068
1094
  itemHeight: string | number;
1069
1095
  itemKey: SelectItemKey;
1070
1096
  disableSort: boolean;
1071
- multiSort: boolean;
1072
1097
  sortAscIcon: import("../../composables/icons.js").IconValue;
1073
1098
  sortDescIcon: import("../../composables/icons.js").IconValue;
1074
1099
  sticky: boolean;
@@ -1266,11 +1291,20 @@ export declare const VDataTableVirtual: {
1266
1291
  type: import("vue").PropType<readonly string[]>;
1267
1292
  default: () => never[];
1268
1293
  };
1294
+ initialSortOrder: {
1295
+ type: import("vue").PropType<"asc" | "desc">;
1296
+ default: string;
1297
+ validator: (v: any) => boolean;
1298
+ };
1269
1299
  sortBy: {
1270
1300
  type: import("vue").PropType<readonly import("../../types.js").DataTableSortItem[]>;
1271
1301
  default: () => never[];
1272
1302
  };
1273
1303
  customKeySort: import("vue").PropType<Record<string, import("../../types.js").DataTableCompareFunction>>;
1304
+ multiSort: {
1305
+ type: import("vue").PropType<boolean | import("./composables/sort.js").MultiSortProps>;
1306
+ default: boolean;
1307
+ };
1274
1308
  mustSort: BooleanConstructor;
1275
1309
  groupBy: {
1276
1310
  type: import("vue").PropType<readonly import("../../types.js").DataTableSortItem[]>;
@@ -1370,7 +1404,6 @@ export declare const VDataTableVirtual: {
1370
1404
  }[]>;
1371
1405
  color: StringConstructor;
1372
1406
  disableSort: BooleanConstructor;
1373
- multiSort: BooleanConstructor;
1374
1407
  sortAscIcon: {
1375
1408
  type: import("vue").PropType<import("../../composables/icons.js").IconValue>;
1376
1409
  default: string;
@@ -1446,11 +1479,20 @@ export declare const VDataTableVirtual: {
1446
1479
  type: import("vue").PropType<readonly string[]>;
1447
1480
  default: () => never[];
1448
1481
  };
1482
+ initialSortOrder: {
1483
+ type: import("vue").PropType<"asc" | "desc">;
1484
+ default: string;
1485
+ validator: (v: any) => boolean;
1486
+ };
1449
1487
  sortBy: {
1450
1488
  type: import("vue").PropType<readonly import("../../types.js").DataTableSortItem[]>;
1451
1489
  default: () => never[];
1452
1490
  };
1453
1491
  customKeySort: import("vue").PropType<Record<string, import("../../types.js").DataTableCompareFunction>>;
1492
+ multiSort: {
1493
+ type: import("vue").PropType<boolean | import("./composables/sort.js").MultiSortProps>;
1494
+ default: boolean;
1495
+ };
1454
1496
  mustSort: BooleanConstructor;
1455
1497
  groupBy: {
1456
1498
  type: import("vue").PropType<readonly import("../../types.js").DataTableSortItem[]>;
@@ -1550,7 +1592,6 @@ export declare const VDataTableVirtual: {
1550
1592
  }[]>;
1551
1593
  color: StringConstructor;
1552
1594
  disableSort: BooleanConstructor;
1553
- multiSort: BooleanConstructor;
1554
1595
  sortAscIcon: {
1555
1596
  type: import("vue").PropType<import("../../composables/icons.js").IconValue>;
1556
1597
  default: string;
@@ -1,4 +1,4 @@
1
- import { createVNode as _createVNode, createElementVNode as _createElementVNode, mergeProps as _mergeProps } from "vue";
1
+ import { mergeProps as _mergeProps, createVNode as _createVNode, createElementVNode as _createElementVNode } from "vue";
2
2
  // Components
3
3
  import { makeDataTableProps } from "./VDataTable.js";
4
4
  import { VDataTableHeaders } from "./VDataTableHeaders.js";
@@ -43,6 +43,7 @@ export const VDataTableVirtual = genericComponent()({
43
43
  groupBy
44
44
  } = createGroupBy(props);
45
45
  const {
46
+ initialSortOrder,
46
47
  sortBy,
47
48
  multiSort,
48
49
  mustSort
@@ -74,6 +75,7 @@ export const VDataTableVirtual = genericComponent()({
74
75
  const {
75
76
  toggleSort
76
77
  } = provideSort({
78
+ initialSortOrder,
77
79
  sortBy,
78
80
  multiSort,
79
81
  mustSort
@@ -166,7 +168,7 @@ export const VDataTableVirtual = genericComponent()({
166
168
  headers: headers.value
167
169
  }));
168
170
  useRender(() => {
169
- const dataTableHeadersProps = VDataTableHeaders.filterProps(props);
171
+ const dataTableHeadersProps = VDataTableHeaders.filterProps(omit(props, ['multiSort']));
170
172
  const dataTableRowsProps = VDataTableRows.filterProps(props);
171
173
  const tableProps = VTable.filterProps(props);
172
174
  return _createVNode(VTable, _mergeProps({
@@ -188,7 +190,9 @@ export const VDataTableVirtual = genericComponent()({
188
190
  }
189
191
  }, [_createElementVNode("table", null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && _createElementVNode("thead", {
190
192
  "key": "thead"
191
- }, [_createVNode(VDataTableHeaders, dataTableHeadersProps, slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && _createElementVNode("tbody", {
193
+ }, [_createVNode(VDataTableHeaders, _mergeProps(dataTableHeadersProps, {
194
+ "multiSort": !!props.multiSort
195
+ }), slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && _createElementVNode("tbody", {
192
196
  "key": "tbody"
193
197
  }, [_createElementVNode("tr", {
194
198
  "ref": markerRef,
@@ -1 +1 @@
1
- {"version":3,"file":"VDataTableVirtual.js","names":["makeDataTableProps","VDataTableHeaders","VDataTableRow","VDataTableRows","VTable","VVirtualScrollItem","provideExpanded","createGroupBy","makeDataTableGroupProps","provideGroupBy","useGroupedItems","createHeaders","useDataTableItems","useOptions","provideSelection","createSort","provideSort","useSortedItems","provideDefaults","makeFilterProps","useFilter","makeVirtualProps","useVirtual","computed","shallowRef","toRef","toRefs","convertToUnit","genericComponent","omit","propsFactory","useRender","makeVDataTableVirtualProps","VDataTableVirtual","name","props","emits","value","setup","_ref","attrs","slots","groupBy","sortBy","multiSort","mustSort","disableSort","columns","headers","filterFunctions","sortFunctions","sortRawFunctions","showSelect","showExpand","items","search","filteredItems","transform","item","customKeyFilter","toggleSort","sortByWithGroups","opened","extractRows","isGroupOpen","toggleGroup","sortedItems","raw","flatItems","allItems","isSelected","select","selectAll","toggleSelect","someSelected","allSelected","currentPage","isExpanded","toggleExpand","containerRef","markerRef","paddingTop","paddingBottom","computedItems","handleItemResize","handleScroll","handleScrollend","calculateVisibleItems","scrollToIndex","displayItems","map","page","itemsPerPage","hideNoData","noDataText","loading","loadingText","slotProps","internalItems","groupedItems","dataTableHeadersProps","filterProps","dataTableRowsProps","tableProps","_createVNode","_mergeProps","class","style","fixedHeader","sticky","top","wrapper","_createElementVNode","height","colgroup","hideDefaultHeader","thead","hideDefaultBody","border","length","itemSlotProps","internalItem","index","default","_ref2","itemRef","tbody","tfoot","bottom"],"sources":["../../../src/components/VDataTable/VDataTableVirtual.tsx"],"sourcesContent":["// Components\nimport { makeDataTableProps } from './VDataTable'\nimport { VDataTableHeaders } from './VDataTableHeaders'\nimport { VDataTableRow } from './VDataTableRow'\nimport { VDataTableRows } from './VDataTableRows'\nimport { VTable } from '@/components/VTable'\nimport { VVirtualScrollItem } from '@/components/VVirtualScroll/VVirtualScrollItem'\n\n// Composables\nimport { provideExpanded } from './composables/expand'\nimport { createGroupBy, makeDataTableGroupProps, provideGroupBy, useGroupedItems } from './composables/group'\nimport { createHeaders } from './composables/headers'\nimport { useDataTableItems } from './composables/items'\nimport { useOptions } from './composables/options'\nimport { provideSelection } from './composables/select'\nimport { createSort, provideSort, useSortedItems } from './composables/sort'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { makeVirtualProps, useVirtual } from '@/composables/virtual'\n\n// Utilities\nimport { computed, shallowRef, toRef, toRefs } from 'vue'\nimport { convertToUnit, genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { DeepReadonly } from 'vue'\nimport type { VDataTableSlotProps } from './VDataTable'\nimport type { VDataTableHeadersSlots } from './VDataTableHeaders'\nimport type { VDataTableRowsSlots } from './VDataTableRows'\nimport type { CellProps, DataTableHeader, RowProps } from '@/components/VDataTable/types'\nimport type { GenericProps, SelectItemKey, TemplateRef } from '@/util'\n\ntype VDataTableVirtualSlotProps<T> = Omit<\n VDataTableSlotProps<T>,\n | 'setItemsPerPage'\n | 'page'\n | 'pageCount'\n | 'itemsPerPage'\n>\n\nexport type VDataTableVirtualSlots<T> = VDataTableRowsSlots<T> & VDataTableHeadersSlots & {\n colgroup: VDataTableVirtualSlotProps<T>\n top: VDataTableVirtualSlotProps<T>\n headers: VDataTableHeadersSlots['headers']\n tbody: VDataTableVirtualSlotProps<T>\n thead: VDataTableVirtualSlotProps<T>\n tfoot: VDataTableVirtualSlotProps<T>\n bottom: VDataTableVirtualSlotProps<T>\n 'body.prepend': VDataTableVirtualSlotProps<T>\n 'body.append': VDataTableVirtualSlotProps<T>\n item: {\n itemRef: TemplateRef\n }\n}\n\nexport const makeVDataTableVirtualProps = propsFactory({\n ...omit(makeDataTableProps(), ['hideDefaultFooter']),\n ...makeDataTableGroupProps(),\n ...makeVirtualProps(),\n ...makeFilterProps(),\n}, 'VDataTableVirtual')\n\ntype ItemType<T> = T extends readonly (infer U)[] ? U : never\n\nexport const VDataTableVirtual = genericComponent<new <T extends readonly any[], V>(\n props: {\n items?: T\n itemValue?: SelectItemKey<ItemType<T>>\n rowProps?: RowProps<ItemType<T>>\n cellProps?: CellProps<ItemType<T>>\n itemSelectable?: SelectItemKey<ItemType<T>>\n headers?: DeepReadonly<DataTableHeader<ItemType<T>>[]>\n modelValue?: V\n 'onUpdate:modelValue'?: (value: V) => void\n },\n slots: VDataTableVirtualSlots<ItemType<T>>,\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VDataTableVirtual',\n\n props: makeVDataTableVirtualProps(),\n\n emits: {\n 'update:modelValue': (value: any[]) => true,\n 'update:sortBy': (value: any) => true,\n 'update:options': (value: any) => true,\n 'update:groupBy': (value: any) => true,\n 'update:expanded': (value: any) => true,\n },\n\n setup (props, { attrs, slots }) {\n const { groupBy } = createGroupBy(props)\n const { sortBy, multiSort, mustSort } = createSort(props)\n const { disableSort } = toRefs(props)\n\n const {\n columns,\n headers,\n filterFunctions,\n sortFunctions,\n sortRawFunctions,\n } = createHeaders(props, {\n groupBy,\n showSelect: toRef(() => props.showSelect),\n showExpand: toRef(() => props.showExpand),\n })\n const { items } = useDataTableItems(props, columns)\n\n const search = toRef(() => props.search)\n const { filteredItems } = useFilter(props, items, search, {\n transform: item => item.columns,\n customKeyFilter: filterFunctions,\n })\n\n const { toggleSort } = provideSort({ sortBy, multiSort, mustSort })\n const { sortByWithGroups, opened, extractRows, isGroupOpen, toggleGroup } = provideGroupBy({ groupBy, sortBy, disableSort })\n\n const { sortedItems } = useSortedItems(props, filteredItems, sortByWithGroups, {\n transform: item => ({ ...item.raw, ...item.columns }),\n sortFunctions,\n sortRawFunctions,\n })\n const { flatItems } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary'])\n\n const allItems = computed(() => extractRows(flatItems.value))\n\n const { isSelected, select, selectAll, toggleSelect, someSelected, allSelected } = provideSelection(props, {\n allItems,\n currentPage: allItems,\n })\n const { isExpanded, toggleExpand } = provideExpanded(props)\n\n const {\n containerRef,\n markerRef,\n paddingTop,\n paddingBottom,\n computedItems,\n handleItemResize,\n handleScroll,\n handleScrollend,\n calculateVisibleItems,\n scrollToIndex,\n } = useVirtual(props, flatItems)\n const displayItems = computed(() => computedItems.value.map(item => item.raw))\n\n useOptions({\n sortBy,\n page: shallowRef(1),\n itemsPerPage: shallowRef(-1),\n groupBy,\n search,\n })\n\n provideDefaults({\n VDataTableRows: {\n hideNoData: toRef(() => props.hideNoData),\n noDataText: toRef(() => props.noDataText),\n loading: toRef(() => props.loading),\n loadingText: toRef(() => props.loadingText),\n },\n })\n\n const slotProps = computed<VDataTableVirtualSlotProps<any>>(() => ({\n sortBy: sortBy.value,\n toggleSort,\n someSelected: someSelected.value,\n allSelected: allSelected.value,\n isSelected,\n select,\n selectAll,\n toggleSelect,\n isExpanded,\n toggleExpand,\n isGroupOpen,\n toggleGroup,\n items: allItems.value.map(item => item.raw),\n internalItems: allItems.value,\n groupedItems: flatItems.value,\n columns: columns.value,\n headers: headers.value,\n }))\n\n useRender(() => {\n const dataTableHeadersProps = VDataTableHeaders.filterProps(props)\n const dataTableRowsProps = VDataTableRows.filterProps(props)\n const tableProps = VTable.filterProps(props)\n\n return (\n <VTable\n class={[\n 'v-data-table',\n {\n 'v-data-table--loading': props.loading,\n },\n props.class,\n ]}\n style={ props.style }\n { ...tableProps }\n fixedHeader={ props.fixedHeader || props.sticky }\n >\n {{\n top: () => slots.top?.(slotProps.value),\n wrapper: () => (\n <div\n ref={ containerRef }\n onScrollPassive={ handleScroll }\n onScrollend={ handleScrollend }\n class=\"v-table__wrapper\"\n style={{\n height: convertToUnit(props.height),\n }}\n >\n <table>\n { slots.colgroup?.(slotProps.value) }\n { !props.hideDefaultHeader && (\n <thead key=\"thead\">\n <VDataTableHeaders\n { ...dataTableHeadersProps }\n v-slots={ slots }\n />\n </thead>\n )}\n { slots.thead?.(slotProps.value) }\n { !props.hideDefaultBody && (\n <tbody key=\"tbody\">\n <tr ref={ markerRef } style={{ height: convertToUnit(paddingTop.value), border: 0 }}>\n <td colspan={ columns.value.length } style={{ height: 0, border: 0 }}></td>\n </tr>\n\n { slots['body.prepend']?.(slotProps.value) }\n\n <VDataTableRows\n { ...attrs }\n { ...dataTableRowsProps }\n items={ displayItems.value }\n >\n {{\n ...slots,\n item: itemSlotProps => (\n <VVirtualScrollItem\n key={ itemSlotProps.internalItem.index }\n renderless\n onUpdate:height={ height => handleItemResize(itemSlotProps.internalItem.index, height) }\n >\n { ({ itemRef }) => (\n slots.item?.({ ...itemSlotProps, itemRef }) ?? (\n <VDataTableRow\n { ...itemSlotProps.props }\n ref={ itemRef }\n key={ itemSlotProps.internalItem.index }\n index={ itemSlotProps.internalItem.index }\n v-slots={ slots }\n />\n )\n )}\n </VVirtualScrollItem>\n ),\n }}\n </VDataTableRows>\n\n { slots['body.append']?.(slotProps.value) }\n\n <tr style={{ height: convertToUnit(paddingBottom.value), border: 0 }}>\n <td colspan={ columns.value.length } style={{ height: 0, border: 0 }}></td>\n </tr>\n </tbody>\n )}\n { slots.tbody?.(slotProps.value) }\n { slots.tfoot?.(slotProps.value) }\n </table>\n </div>\n ),\n bottom: () => slots.bottom?.(slotProps.value),\n }}\n </VTable>\n )\n })\n\n return {\n calculateVisibleItems,\n scrollToIndex,\n }\n },\n})\n\nexport type VDataTableVirtual = InstanceType<typeof VDataTableVirtual>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VDataTableVirtual.js","names":["makeDataTableProps","VDataTableHeaders","VDataTableRow","VDataTableRows","VTable","VVirtualScrollItem","provideExpanded","createGroupBy","makeDataTableGroupProps","provideGroupBy","useGroupedItems","createHeaders","useDataTableItems","useOptions","provideSelection","createSort","provideSort","useSortedItems","provideDefaults","makeFilterProps","useFilter","makeVirtualProps","useVirtual","computed","shallowRef","toRef","toRefs","convertToUnit","genericComponent","omit","propsFactory","useRender","makeVDataTableVirtualProps","VDataTableVirtual","name","props","emits","value","setup","_ref","attrs","slots","groupBy","initialSortOrder","sortBy","multiSort","mustSort","disableSort","columns","headers","filterFunctions","sortFunctions","sortRawFunctions","showSelect","showExpand","items","search","filteredItems","transform","item","customKeyFilter","toggleSort","sortByWithGroups","opened","extractRows","isGroupOpen","toggleGroup","sortedItems","raw","flatItems","allItems","isSelected","select","selectAll","toggleSelect","someSelected","allSelected","currentPage","isExpanded","toggleExpand","containerRef","markerRef","paddingTop","paddingBottom","computedItems","handleItemResize","handleScroll","handleScrollend","calculateVisibleItems","scrollToIndex","displayItems","map","page","itemsPerPage","hideNoData","noDataText","loading","loadingText","slotProps","internalItems","groupedItems","dataTableHeadersProps","filterProps","dataTableRowsProps","tableProps","_createVNode","_mergeProps","class","style","fixedHeader","sticky","top","wrapper","_createElementVNode","height","colgroup","hideDefaultHeader","thead","hideDefaultBody","border","length","itemSlotProps","internalItem","index","default","_ref2","itemRef","tbody","tfoot","bottom"],"sources":["../../../src/components/VDataTable/VDataTableVirtual.tsx"],"sourcesContent":["// Components\nimport { makeDataTableProps } from './VDataTable'\nimport { VDataTableHeaders } from './VDataTableHeaders'\nimport { VDataTableRow } from './VDataTableRow'\nimport { VDataTableRows } from './VDataTableRows'\nimport { VTable } from '@/components/VTable'\nimport { VVirtualScrollItem } from '@/components/VVirtualScroll/VVirtualScrollItem'\n\n// Composables\nimport { provideExpanded } from './composables/expand'\nimport { createGroupBy, makeDataTableGroupProps, provideGroupBy, useGroupedItems } from './composables/group'\nimport { createHeaders } from './composables/headers'\nimport { useDataTableItems } from './composables/items'\nimport { useOptions } from './composables/options'\nimport { provideSelection } from './composables/select'\nimport { createSort, provideSort, useSortedItems } from './composables/sort'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { makeVirtualProps, useVirtual } from '@/composables/virtual'\n\n// Utilities\nimport { computed, shallowRef, toRef, toRefs } from 'vue'\nimport { convertToUnit, genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { DeepReadonly } from 'vue'\nimport type { VDataTableSlotProps } from './VDataTable'\nimport type { VDataTableHeadersSlots } from './VDataTableHeaders'\nimport type { VDataTableRowsSlots } from './VDataTableRows'\nimport type { CellProps, DataTableHeader, RowProps } from '@/components/VDataTable/types'\nimport type { GenericProps, SelectItemKey, TemplateRef } from '@/util'\n\ntype VDataTableVirtualSlotProps<T> = Omit<\n VDataTableSlotProps<T>,\n | 'setItemsPerPage'\n | 'page'\n | 'pageCount'\n | 'itemsPerPage'\n>\n\nexport type VDataTableVirtualSlots<T> = VDataTableRowsSlots<T> & VDataTableHeadersSlots & {\n colgroup: VDataTableVirtualSlotProps<T>\n top: VDataTableVirtualSlotProps<T>\n headers: VDataTableHeadersSlots['headers']\n tbody: VDataTableVirtualSlotProps<T>\n thead: VDataTableVirtualSlotProps<T>\n tfoot: VDataTableVirtualSlotProps<T>\n bottom: VDataTableVirtualSlotProps<T>\n 'body.prepend': VDataTableVirtualSlotProps<T>\n 'body.append': VDataTableVirtualSlotProps<T>\n item: {\n itemRef: TemplateRef\n }\n}\n\nexport const makeVDataTableVirtualProps = propsFactory({\n ...omit(makeDataTableProps(), ['hideDefaultFooter']),\n ...makeDataTableGroupProps(),\n ...makeVirtualProps(),\n ...makeFilterProps(),\n}, 'VDataTableVirtual')\n\ntype ItemType<T> = T extends readonly (infer U)[] ? U : never\n\nexport const VDataTableVirtual = genericComponent<new <T extends readonly any[], V>(\n props: {\n items?: T\n itemValue?: SelectItemKey<ItemType<T>>\n rowProps?: RowProps<ItemType<T>>\n cellProps?: CellProps<ItemType<T>>\n itemSelectable?: SelectItemKey<ItemType<T>>\n headers?: DeepReadonly<DataTableHeader<ItemType<T>>[]>\n modelValue?: V\n 'onUpdate:modelValue'?: (value: V) => void\n },\n slots: VDataTableVirtualSlots<ItemType<T>>,\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VDataTableVirtual',\n\n props: makeVDataTableVirtualProps(),\n\n emits: {\n 'update:modelValue': (value: any[]) => true,\n 'update:sortBy': (value: any) => true,\n 'update:options': (value: any) => true,\n 'update:groupBy': (value: any) => true,\n 'update:expanded': (value: any) => true,\n },\n\n setup (props, { attrs, slots }) {\n const { groupBy } = createGroupBy(props)\n const { initialSortOrder, sortBy, multiSort, mustSort } = createSort(props)\n const { disableSort } = toRefs(props)\n\n const {\n columns,\n headers,\n filterFunctions,\n sortFunctions,\n sortRawFunctions,\n } = createHeaders(props, {\n groupBy,\n showSelect: toRef(() => props.showSelect),\n showExpand: toRef(() => props.showExpand),\n })\n const { items } = useDataTableItems(props, columns)\n\n const search = toRef(() => props.search)\n const { filteredItems } = useFilter(props, items, search, {\n transform: item => item.columns,\n customKeyFilter: filterFunctions,\n })\n\n const { toggleSort } = provideSort({ initialSortOrder, sortBy, multiSort, mustSort })\n const { sortByWithGroups, opened, extractRows, isGroupOpen, toggleGroup } = provideGroupBy({ groupBy, sortBy, disableSort })\n\n const { sortedItems } = useSortedItems(props, filteredItems, sortByWithGroups, {\n transform: item => ({ ...item.raw, ...item.columns }),\n sortFunctions,\n sortRawFunctions,\n })\n const { flatItems } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary'])\n\n const allItems = computed(() => extractRows(flatItems.value))\n\n const { isSelected, select, selectAll, toggleSelect, someSelected, allSelected } = provideSelection(props, {\n allItems,\n currentPage: allItems,\n })\n const { isExpanded, toggleExpand } = provideExpanded(props)\n\n const {\n containerRef,\n markerRef,\n paddingTop,\n paddingBottom,\n computedItems,\n handleItemResize,\n handleScroll,\n handleScrollend,\n calculateVisibleItems,\n scrollToIndex,\n } = useVirtual(props, flatItems)\n const displayItems = computed(() => computedItems.value.map(item => item.raw))\n\n useOptions({\n sortBy,\n page: shallowRef(1),\n itemsPerPage: shallowRef(-1),\n groupBy,\n search,\n })\n\n provideDefaults({\n VDataTableRows: {\n hideNoData: toRef(() => props.hideNoData),\n noDataText: toRef(() => props.noDataText),\n loading: toRef(() => props.loading),\n loadingText: toRef(() => props.loadingText),\n },\n })\n\n const slotProps = computed<VDataTableVirtualSlotProps<any>>(() => ({\n sortBy: sortBy.value,\n toggleSort,\n someSelected: someSelected.value,\n allSelected: allSelected.value,\n isSelected,\n select,\n selectAll,\n toggleSelect,\n isExpanded,\n toggleExpand,\n isGroupOpen,\n toggleGroup,\n items: allItems.value.map(item => item.raw),\n internalItems: allItems.value,\n groupedItems: flatItems.value,\n columns: columns.value,\n headers: headers.value,\n }))\n\n useRender(() => {\n const dataTableHeadersProps = VDataTableHeaders.filterProps(omit(props, ['multiSort']))\n const dataTableRowsProps = VDataTableRows.filterProps(props)\n const tableProps = VTable.filterProps(props)\n\n return (\n <VTable\n class={[\n 'v-data-table',\n {\n 'v-data-table--loading': props.loading,\n },\n props.class,\n ]}\n style={ props.style }\n { ...tableProps }\n fixedHeader={ props.fixedHeader || props.sticky }\n >\n {{\n top: () => slots.top?.(slotProps.value),\n wrapper: () => (\n <div\n ref={ containerRef }\n onScrollPassive={ handleScroll }\n onScrollend={ handleScrollend }\n class=\"v-table__wrapper\"\n style={{\n height: convertToUnit(props.height),\n }}\n >\n <table>\n { slots.colgroup?.(slotProps.value) }\n { !props.hideDefaultHeader && (\n <thead key=\"thead\">\n <VDataTableHeaders\n { ...dataTableHeadersProps }\n multiSort={ !!props.multiSort }\n v-slots={ slots }\n />\n </thead>\n )}\n { slots.thead?.(slotProps.value) }\n { !props.hideDefaultBody && (\n <tbody key=\"tbody\">\n <tr ref={ markerRef } style={{ height: convertToUnit(paddingTop.value), border: 0 }}>\n <td colspan={ columns.value.length } style={{ height: 0, border: 0 }}></td>\n </tr>\n\n { slots['body.prepend']?.(slotProps.value) }\n\n <VDataTableRows\n { ...attrs }\n { ...dataTableRowsProps }\n items={ displayItems.value }\n >\n {{\n ...slots,\n item: itemSlotProps => (\n <VVirtualScrollItem\n key={ itemSlotProps.internalItem.index }\n renderless\n onUpdate:height={ height => handleItemResize(itemSlotProps.internalItem.index, height) }\n >\n { ({ itemRef }) => (\n slots.item?.({ ...itemSlotProps, itemRef }) ?? (\n <VDataTableRow\n { ...itemSlotProps.props }\n ref={ itemRef }\n key={ itemSlotProps.internalItem.index }\n index={ itemSlotProps.internalItem.index }\n v-slots={ slots }\n />\n )\n )}\n </VVirtualScrollItem>\n ),\n }}\n </VDataTableRows>\n\n { slots['body.append']?.(slotProps.value) }\n\n <tr style={{ height: convertToUnit(paddingBottom.value), border: 0 }}>\n <td colspan={ columns.value.length } style={{ height: 0, border: 0 }}></td>\n </tr>\n </tbody>\n )}\n { slots.tbody?.(slotProps.value) }\n { slots.tfoot?.(slotProps.value) }\n </table>\n </div>\n ),\n bottom: () => slots.bottom?.(slotProps.value),\n }}\n </VTable>\n )\n })\n\n return {\n calculateVisibleItems,\n scrollToIndex,\n }\n },\n})\n\nexport type VDataTableVirtual = InstanceType<typeof VDataTableVirtual>\n"],"mappings":"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","ignoreList":[]}
@@ -3,11 +3,24 @@ import type { PropType, Ref } from 'vue';
3
3
  import type { DataTableCompareFunction, InternalDataTableHeader } from '../types.js';
4
4
  import type { InternalItem } from '../../../composables/filter.js';
5
5
  export declare const makeDataTableSortProps: <Defaults extends {
6
+ initialSortOrder?: unknown;
6
7
  sortBy?: unknown;
7
8
  customKeySort?: unknown;
8
9
  multiSort?: unknown;
9
10
  mustSort?: unknown;
10
11
  } = {}>(defaults?: Defaults | undefined) => {
12
+ initialSortOrder: unknown extends Defaults["initialSortOrder"] ? {
13
+ type: PropType<"asc" | "desc">;
14
+ default: string;
15
+ validator: (v: any) => boolean;
16
+ } : Omit<{
17
+ type: PropType<"asc" | "desc">;
18
+ default: string;
19
+ validator: (v: any) => boolean;
20
+ }, "default" | "type"> & {
21
+ type: PropType<unknown extends Defaults["initialSortOrder"] ? "asc" | "desc" : "asc" | "desc" | Defaults["initialSortOrder"]>;
22
+ default: unknown extends Defaults["initialSortOrder"] ? "asc" | "desc" : Defaults["initialSortOrder"] | NonNullable<"asc" | "desc">;
23
+ };
11
24
  sortBy: unknown extends Defaults["sortBy"] ? {
12
25
  type: PropType<readonly SortItem[]>;
13
26
  default: () => never[];
@@ -22,9 +35,15 @@ export declare const makeDataTableSortProps: <Defaults extends {
22
35
  type: PropType<unknown extends Defaults["customKeySort"] ? Record<string, DataTableCompareFunction> : Record<string, DataTableCompareFunction> | Defaults["customKeySort"]>;
23
36
  default: unknown extends Defaults["customKeySort"] ? Record<string, DataTableCompareFunction> : Record<string, DataTableCompareFunction> | Defaults["customKeySort"];
24
37
  };
25
- multiSort: unknown extends Defaults["multiSort"] ? BooleanConstructor : {
26
- type: PropType<unknown extends Defaults["multiSort"] ? boolean : boolean | Defaults["multiSort"]>;
27
- default: unknown extends Defaults["multiSort"] ? boolean : boolean | Defaults["multiSort"];
38
+ multiSort: unknown extends Defaults["multiSort"] ? {
39
+ type: PropType<boolean | MultiSortProps>;
40
+ default: boolean;
41
+ } : Omit<{
42
+ type: PropType<boolean | MultiSortProps>;
43
+ default: boolean;
44
+ }, "default" | "type"> & {
45
+ type: PropType<unknown extends Defaults["multiSort"] ? boolean | MultiSortProps : boolean | MultiSortProps | Defaults["multiSort"]>;
46
+ default: unknown extends Defaults["multiSort"] ? boolean | MultiSortProps : Defaults["multiSort"] | NonNullable<boolean | MultiSortProps>;
28
47
  };
29
48
  mustSort: unknown extends Defaults["mustSort"] ? BooleanConstructor : {
30
49
  type: PropType<unknown extends Defaults["mustSort"] ? boolean : boolean | Defaults["mustSort"]>;
@@ -35,32 +54,41 @@ export type SortItem = {
35
54
  key: string;
36
55
  order?: boolean | 'asc' | 'desc';
37
56
  };
57
+ export type MultiSortProps = {
58
+ key?: 'ctrl';
59
+ mode?: MultiSortMode;
60
+ modifier?: 'alt' | 'shift';
61
+ };
62
+ export type MultiSortMode = 'append' | 'prepend';
38
63
  type SortProps = {
64
+ initialSortOrder: 'asc' | 'desc';
39
65
  sortBy: readonly SortItem[];
40
66
  'onUpdate:sortBy': ((value: any) => void) | undefined;
67
+ multiSort: boolean | MultiSortProps;
41
68
  mustSort: boolean;
42
- multiSort: boolean;
43
69
  };
44
70
  export declare function createSort(props: SortProps): {
71
+ initialSortOrder: Readonly<Ref<"asc" | "desc", "asc" | "desc">>;
45
72
  sortBy: Ref<readonly SortItem[], readonly SortItem[]> & {
46
73
  readonly externalValue: readonly SortItem[];
47
74
  };
75
+ multiSort: Readonly<Ref<boolean | MultiSortProps, boolean | MultiSortProps>>;
48
76
  mustSort: Readonly<Ref<boolean, boolean>>;
49
- multiSort: Readonly<Ref<boolean, boolean>>;
50
77
  };
51
78
  export declare function provideSort(options: {
79
+ initialSortOrder: Ref<'asc' | 'desc'>;
52
80
  sortBy: Ref<readonly SortItem[]>;
81
+ multiSort: Ref<boolean | MultiSortProps>;
53
82
  mustSort: Ref<boolean>;
54
- multiSort: Ref<boolean>;
55
83
  page?: Ref<number>;
56
84
  }): {
57
85
  sortBy: Ref<readonly SortItem[], readonly SortItem[]>;
58
- toggleSort: (column: InternalDataTableHeader) => void;
86
+ toggleSort: (column: InternalDataTableHeader, event?: KeyboardEvent | PointerEvent | undefined) => void;
59
87
  isSorted: (column: InternalDataTableHeader) => boolean;
60
88
  };
61
89
  export declare function useSort(): {
62
90
  sortBy: Ref<readonly SortItem[], readonly SortItem[]>;
63
- toggleSort: (column: InternalDataTableHeader) => void;
91
+ toggleSort: (column: InternalDataTableHeader, event?: KeyboardEvent | PointerEvent | undefined) => void;
64
92
  isSorted: (column: InternalDataTableHeader) => boolean;
65
93
  };
66
94
  // TODO: abstract into project composable
@@ -2,60 +2,101 @@
2
2
  import { useLocale } from "../../../composables/locale.js";
3
3
  import { useProxiedModel } from "../../../composables/proxiedModel.js"; // Utilities
4
4
  import { computed, inject, provide, toRef } from 'vue';
5
- import { getObjectValueByPath, isEmpty, propsFactory } from "../../../util/index.js"; // Types
5
+ import { getObjectValueByPath, isEmpty, isObject, propsFactory } from "../../../util/index.js"; // Types
6
6
  export const makeDataTableSortProps = propsFactory({
7
+ initialSortOrder: {
8
+ type: String,
9
+ default: 'asc',
10
+ validator: v => !v || ['asc', 'desc'].includes(v)
11
+ },
7
12
  sortBy: {
8
13
  type: Array,
9
14
  default: () => []
10
15
  },
11
16
  customKeySort: Object,
12
- multiSort: Boolean,
17
+ multiSort: {
18
+ type: [Boolean, Object],
19
+ default: false
20
+ },
13
21
  mustSort: Boolean
14
22
  }, 'DataTable-sort');
15
23
  const VDataTableSortSymbol = Symbol.for('vuetify:data-table-sort');
16
24
  export function createSort(props) {
25
+ const initialSortOrder = toRef(() => props.initialSortOrder);
17
26
  const sortBy = useProxiedModel(props, 'sortBy');
18
27
  const mustSort = toRef(() => props.mustSort);
19
28
  const multiSort = toRef(() => props.multiSort);
20
29
  return {
30
+ initialSortOrder,
21
31
  sortBy,
22
- mustSort,
23
- multiSort
32
+ multiSort,
33
+ mustSort
34
+ };
35
+ }
36
+ function resolveMultiSort(multiSort, event) {
37
+ if (!isObject(multiSort)) {
38
+ return {
39
+ active: !!multiSort
40
+ };
41
+ }
42
+ const {
43
+ key,
44
+ mode,
45
+ modifier
46
+ } = multiSort;
47
+ const reverseMode = modifier === 'alt' && event?.altKey || modifier === 'shift' && event?.shiftKey;
48
+ return {
49
+ active: !key || event?.ctrlKey || event?.metaKey || false,
50
+ mode: reverseMode ? mode === 'append' ? 'prepend' : 'append' : mode
24
51
  };
25
52
  }
26
53
  export function provideSort(options) {
27
54
  const {
55
+ initialSortOrder,
28
56
  sortBy,
29
57
  mustSort,
30
58
  multiSort,
31
59
  page
32
60
  } = options;
33
- const toggleSort = column => {
61
+ const toggleSort = (column, event) => {
34
62
  if (column.key == null) return;
35
63
  let newSortBy = sortBy.value.map(x => ({
36
64
  ...x
37
65
  })) ?? [];
38
66
  const item = newSortBy.find(x => x.key === column.key);
67
+ const initialOrder = initialSortOrder.value;
68
+ const secondaryOrder = initialSortOrder.value === 'desc' ? 'asc' : 'desc';
39
69
  if (!item) {
40
- if (multiSort.value) {
41
- newSortBy.push({
42
- key: column.key,
43
- order: 'asc'
44
- });
70
+ const {
71
+ active,
72
+ mode
73
+ } = resolveMultiSort(multiSort.value, event);
74
+ if (active) {
75
+ if (mode === 'prepend') {
76
+ newSortBy.unshift({
77
+ key: column.key,
78
+ order: initialOrder
79
+ });
80
+ } else {
81
+ newSortBy.push({
82
+ key: column.key,
83
+ order: initialOrder
84
+ });
85
+ }
45
86
  } else {
46
87
  newSortBy = [{
47
88
  key: column.key,
48
- order: 'asc'
89
+ order: initialOrder
49
90
  }];
50
91
  }
51
- } else if (item.order === 'desc') {
92
+ } else if (item.order === secondaryOrder) {
52
93
  if (mustSort.value && newSortBy.length === 1) {
53
- item.order = 'asc';
94
+ item.order = initialSortOrder.value;
54
95
  } else {
55
96
  newSortBy = newSortBy.filter(x => x.key !== column.key);
56
97
  }
57
98
  } else {
58
- item.order = 'desc';
99
+ item.order = secondaryOrder;
59
100
  }
60
101
  sortBy.value = newSortBy;
61
102
  if (page) page.value = 1;