vuetify 3.1.8 → 3.1.10

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 (107) hide show
  1. package/dist/json/attributes.json +7 -3
  2. package/dist/json/importMap.json +74 -74
  3. package/dist/json/tags.json +1 -0
  4. package/dist/json/web-types.json +51 -17
  5. package/dist/vuetify-labs.css +427 -407
  6. package/dist/vuetify-labs.d.ts +14 -7
  7. package/dist/vuetify-labs.esm.js +439 -237
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +439 -237
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +1055 -1038
  12. package/dist/vuetify.d.ts +28 -23
  13. package/dist/vuetify.esm.js +285 -180
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +285 -180
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +301 -298
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAlert/VAlert.mjs +29 -15
  21. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  22. package/lib/components/VAlert/index.d.ts +2 -0
  23. package/lib/components/VAutocomplete/VAutocomplete.mjs +11 -5
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  25. package/lib/components/VBanner/VBanner.mjs +19 -12
  26. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  27. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +11 -7
  28. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  29. package/lib/components/VBtn/VBtn.mjs +25 -19
  30. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  31. package/lib/components/VCard/VCard.mjs +10 -6
  32. package/lib/components/VCard/VCard.mjs.map +1 -1
  33. package/lib/components/VCard/VCardItem.mjs +27 -23
  34. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  35. package/lib/components/VChip/VChip.css +110 -90
  36. package/lib/components/VChip/VChip.mjs +70 -48
  37. package/lib/components/VChip/VChip.mjs.map +1 -1
  38. package/lib/components/VChip/_mixins.scss +27 -23
  39. package/lib/components/VChip/index.d.ts +2 -2
  40. package/lib/components/VCombobox/VCombobox.mjs +11 -5
  41. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  42. package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs +4 -1
  43. package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs.map +1 -1
  44. package/lib/components/VDefaultsProvider/index.d.ts +3 -0
  45. package/lib/components/VFooter/VFooter.css +2 -0
  46. package/lib/components/VFooter/VFooter.sass +2 -0
  47. package/lib/components/VFooter/_variables.scss +2 -0
  48. package/lib/components/VImg/VImg.mjs +2 -2
  49. package/lib/components/VImg/VImg.mjs.map +1 -1
  50. package/lib/components/VList/VListItem.mjs +23 -19
  51. package/lib/components/VList/VListItem.mjs.map +1 -1
  52. package/lib/components/VSelect/VSelect.mjs +11 -5
  53. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  54. package/lib/components/VSlider/VSliderTrack.mjs +1 -0
  55. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  56. package/lib/components/VSlider/slider.mjs +3 -1
  57. package/lib/components/VSlider/slider.mjs.map +1 -1
  58. package/lib/components/VSnackbar/VSnackbar.css +2 -7
  59. package/lib/components/VSnackbar/VSnackbar.mjs +2 -1
  60. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  61. package/lib/components/VSnackbar/VSnackbar.sass +3 -8
  62. package/lib/components/VTimeline/VTimelineDivider.mjs +18 -10
  63. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  64. package/lib/components/VToolbar/VToolbar.mjs +9 -5
  65. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  66. package/lib/components/index.d.ts +7 -2
  67. package/lib/composables/defaults.mjs +2 -0
  68. package/lib/composables/defaults.mjs.map +1 -1
  69. package/lib/entry-bundler.mjs +1 -1
  70. package/lib/entry-bundler.mjs.map +1 -1
  71. package/lib/framework.mjs +1 -1
  72. package/lib/framework.mjs.map +1 -1
  73. package/lib/index.d.ts +21 -21
  74. package/lib/labs/VDataTable/VDataTable.css +3 -0
  75. package/lib/labs/VDataTable/VDataTable.mjs +41 -17
  76. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  77. package/lib/labs/VDataTable/VDataTable.sass +3 -0
  78. package/lib/labs/VDataTable/VDataTableFooter.mjs +3 -2
  79. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
  80. package/lib/labs/VDataTable/VDataTableRow.mjs +6 -2
  81. package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -1
  82. package/lib/labs/VDataTable/VDataTableRows.mjs +1 -1
  83. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  84. package/lib/labs/VDataTable/VDataTableServer.mjs +39 -17
  85. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  86. package/lib/labs/VDataTable/VDataTableVirtual.mjs +23 -12
  87. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  88. package/lib/labs/VDataTable/composables/expand.mjs +1 -1
  89. package/lib/labs/VDataTable/composables/expand.mjs.map +1 -1
  90. package/lib/labs/VDataTable/composables/group.mjs +12 -1
  91. package/lib/labs/VDataTable/composables/group.mjs.map +1 -1
  92. package/lib/labs/VDataTable/composables/options.mjs +0 -12
  93. package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
  94. package/lib/labs/VDataTable/composables/paginate.mjs +25 -4
  95. package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -1
  96. package/lib/labs/VDataTable/composables/select.mjs +1 -1
  97. package/lib/labs/VDataTable/composables/select.mjs.map +1 -1
  98. package/lib/labs/VDataTable/composables/sort.mjs +19 -3
  99. package/lib/labs/VDataTable/composables/sort.mjs.map +1 -1
  100. package/lib/labs/VDataTable/index.d.ts +7 -5
  101. package/lib/labs/components.d.ts +7 -5
  102. package/lib/locale/adapters/vue-i18n.d.ts +1 -1
  103. package/lib/locale/adapters/vue-i18n.mjs +1 -1
  104. package/lib/locale/adapters/vue-i18n.mjs.map +1 -1
  105. package/lib/util/defineComponent.mjs +3 -2
  106. package/lib/util/defineComponent.mjs.map +1 -1
  107. package/package.json +5 -11
@@ -1 +1 @@
1
- {"version":3,"file":"VDataTableServer.mjs","names":["VTable","VDataTableFooter","VDataTableHeaders","VDataTableRows","provideDefaults","useProxiedModel","createExpanded","makeDataTableExpandProps","createGroupBy","makeDataTableGroupProps","useGroupedItems","createHeaders","makeDataTableHeaderProps","makeDataTableItemProps","useDataTableItems","useOptions","createPagination","makeDataTablePaginateProps","createSelection","makeDataTableSelectProps","createSort","makeDataTableSortProps","provide","toRef","genericComponent","useRender","makeVDataTableProps","VDataTableServer","name","props","color","String","loading","Boolean","loadingText","type","default","itemsLength","Number","emits","value","page","sortBy","options","event","setup","emit","slots","groupBy","columns","showSelect","showExpand","items","toggleSort","opened","itemsPerPage","flatItems","hideNoData","noDataText","fixedHeader","fixedFooter","height","top","headers","thead","body","tbody","tfoot","bottom","prepend"],"sources":["../../../src/labs/VDataTable/VDataTableServer.tsx"],"sourcesContent":["// Components\nimport { VTable } from '@/components/VTable'\nimport { VDataTableFooter } from './VDataTableFooter'\nimport { VDataTableHeaders } from './VDataTableHeaders'\nimport { VDataTableRows } from './VDataTableRows'\n\n// Composables\nimport { provideDefaults } from '@/composables/defaults'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { createExpanded, makeDataTableExpandProps } from './composables/expand'\nimport { createGroupBy, makeDataTableGroupProps, useGroupedItems } from './composables/group'\nimport { createHeaders, makeDataTableHeaderProps } from './composables/headers'\nimport { makeDataTableItemProps, useDataTableItems } from './composables/items'\nimport { useOptions } from './composables/options'\nimport { createPagination, makeDataTablePaginateProps } from './composables/paginate'\nimport { createSelection, makeDataTableSelectProps } from './composables/select'\nimport { createSort, makeDataTableSortProps } from './composables/sort'\n\n// Utilities\nimport { provide, toRef } from 'vue'\nimport { genericComponent, useRender } from '@/util'\nimport { makeVDataTableProps } from './VDataTable'\n\n// Types\nimport type { DataTableItem } from './types'\nimport type { VDataTableSlots } from './VDataTable'\n\nexport const VDataTableServer = genericComponent<VDataTableSlots>()({\n name: 'VDataTableServer',\n\n props: {\n color: String,\n loading: [Boolean, String],\n loadingText: {\n type: String,\n default: '$vuetify.dataIterator.loadingText',\n },\n itemsLength: [Number, String],\n\n ...makeVDataTableProps(),\n ...makeDataTableExpandProps(),\n ...makeDataTableHeaderProps(),\n ...makeDataTableItemProps(),\n ...makeDataTableSelectProps(),\n ...makeDataTableSortProps(),\n ...makeDataTablePaginateProps(),\n ...makeDataTableGroupProps(),\n },\n\n emits: {\n 'update:modelValue': (value: any[]) => true,\n 'update:page': (page: number) => true,\n 'update:itemsPerPage': (page: number) => true,\n 'update:sortBy': (sortBy: any) => true,\n 'update:options': (options: any) => true,\n 'update:expanded': (options: any) => true,\n 'update:groupBy': (value: any) => true,\n 'click:row': (event: Event, value: { item: DataTableItem }) => true,\n },\n\n setup (props, { emit, slots }) {\n const groupBy = useProxiedModel(props, 'groupBy')\n\n createExpanded(props)\n\n const { columns } = createHeaders(props, {\n groupBy,\n showSelect: toRef(props, 'showSelect'),\n showExpand: toRef(props, 'showExpand'),\n })\n\n const { items } = useDataTableItems(props, columns)\n\n const { sortBy, toggleSort } = createSort(props)\n\n const { opened } = createGroupBy(props, groupBy, sortBy)\n\n const { page, itemsPerPage } = createPagination(props, items)\n\n const { flatItems } = useGroupedItems(items, groupBy, opened)\n\n createSelection(props, items)\n\n useOptions({\n page,\n itemsPerPage,\n sortBy,\n groupBy,\n })\n\n provide('v-data-table', {\n toggleSort,\n sortBy,\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 useRender(() => (\n <VTable\n class={[\n 'v-data-table',\n {\n 'v-data-table--loading': props.loading,\n },\n ]}\n fixedHeader={ props.fixedHeader }\n fixedFooter={ props.fixedFooter }\n height={ props.height }\n >\n {{\n top: slots.top,\n default: slots.default ?? (() => (\n <>\n <thead class=\"v-data-table__thead\" role=\"rowgroup\">\n { slots.headers ? slots.headers() : (\n <VDataTableHeaders\n sticky={ props.fixedHeader }\n loading={ props.loading }\n color={ props.color }\n v-slots={ slots }\n />\n )}\n </thead>\n { slots.thead?.() }\n <tbody class=\"v-data-table__tbody\" role=\"rowgroup\">\n { slots.body ? slots.body() : (\n <VDataTableRows\n items={ flatItems.value }\n onClick:row={ (event, value) => emit('click:row', event, value) }\n v-slots={ slots }\n />\n )}\n </tbody>\n { slots.tbody?.() }\n { slots.tfoot?.() }\n </>\n )),\n bottom: slots.bottom ?? (() => (\n <VDataTableFooter\n v-slots={{\n prepend: slots['footer.prepend'],\n }}\n />\n )),\n }}\n </VTable>\n ))\n },\n})\n\nexport type VDataTableServer = InstanceType<typeof VDataTableServer>\n"],"mappings":"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"}
1
+ {"version":3,"file":"VDataTableServer.mjs","names":["VTable","VDataTableFooter","VDataTableHeaders","VDataTableRows","provideDefaults","makeDataTableExpandProps","provideExpanded","createGroupBy","makeDataTableGroupProps","provideGroupBy","useGroupedItems","createHeaders","makeDataTableHeaderProps","makeDataTableItemProps","useDataTableItems","useOptions","createPagination","makeDataTablePaginateProps","providePagination","makeDataTableSelectProps","provideSelection","createSort","makeDataTableSortProps","provideSort","computed","provide","toRef","genericComponent","useRender","makeVDataTableProps","VDataTableServer","name","props","color","String","loading","Boolean","loadingText","type","default","itemsLength","Number","required","emits","value","page","sortBy","options","event","setup","emit","slots","groupBy","multiSort","mustSort","itemsPerPage","parseInt","columns","showSelect","showExpand","items","toggleSort","opened","flatItems","hideNoData","noDataText","fixedHeader","fixedFooter","height","top","headers","thead","body","tbody","tfoot","bottom","prepend"],"sources":["../../../src/labs/VDataTable/VDataTableServer.tsx"],"sourcesContent":["// Components\nimport { VTable } from '@/components/VTable'\nimport { VDataTableFooter } from './VDataTableFooter'\nimport { VDataTableHeaders } from './VDataTableHeaders'\nimport { VDataTableRows } from './VDataTableRows'\n\n// Composables\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDataTableExpandProps, provideExpanded } from './composables/expand'\nimport { createGroupBy, makeDataTableGroupProps, provideGroupBy, useGroupedItems } from './composables/group'\nimport { createHeaders, makeDataTableHeaderProps } from './composables/headers'\nimport { makeDataTableItemProps, useDataTableItems } from './composables/items'\nimport { useOptions } from './composables/options'\nimport { createPagination, makeDataTablePaginateProps, providePagination } from './composables/paginate'\nimport { makeDataTableSelectProps, provideSelection } from './composables/select'\nimport { createSort, makeDataTableSortProps, provideSort } from './composables/sort'\n\n// Utilities\nimport { computed, provide, toRef } from 'vue'\nimport { genericComponent, useRender } from '@/util'\nimport { makeVDataTableProps } from './VDataTable'\n\n// Types\nimport type { DataTableItem } from './types'\nimport type { VDataTableSlots } from './VDataTable'\n\nexport const VDataTableServer = genericComponent<VDataTableSlots>()({\n name: 'VDataTableServer',\n\n props: {\n color: String,\n loading: [Boolean, String],\n loadingText: {\n type: String,\n default: '$vuetify.dataIterator.loadingText',\n },\n itemsLength: {\n type: [Number, String],\n required: true,\n },\n\n ...makeVDataTableProps(),\n ...makeDataTableExpandProps(),\n ...makeDataTableHeaderProps(),\n ...makeDataTableItemProps(),\n ...makeDataTableSelectProps(),\n ...makeDataTableSortProps(),\n ...makeDataTablePaginateProps(),\n ...makeDataTableGroupProps(),\n },\n\n emits: {\n 'update:modelValue': (value: any[]) => true,\n 'update:page': (page: number) => true,\n 'update:itemsPerPage': (page: number) => true,\n 'update:sortBy': (sortBy: any) => true,\n 'update:options': (options: any) => true,\n 'update:expanded': (options: any) => true,\n 'update:groupBy': (value: any) => true,\n 'click:row': (event: Event, value: { item: DataTableItem }) => true,\n },\n\n setup (props, { emit, slots }) {\n const { groupBy } = createGroupBy(props)\n const { sortBy, multiSort, mustSort } = createSort(props)\n const { page, itemsPerPage } = createPagination(props)\n const itemsLength = computed(() => parseInt(props.itemsLength, 10))\n\n provideExpanded(props)\n\n const { columns } = createHeaders(props, {\n groupBy,\n showSelect: toRef(props, 'showSelect'),\n showExpand: toRef(props, 'showExpand'),\n })\n\n const { items } = useDataTableItems(props, columns)\n\n const { toggleSort } = provideSort({ sortBy, multiSort, mustSort, page })\n\n const { opened } = provideGroupBy({ groupBy, sortBy })\n\n providePagination({ page, itemsPerPage, itemsLength })\n\n const { flatItems } = useGroupedItems(items, groupBy, opened)\n\n provideSelection(props, items)\n\n useOptions({\n page,\n itemsPerPage,\n sortBy,\n groupBy,\n })\n\n provide('v-data-table', {\n toggleSort,\n sortBy,\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 useRender(() => (\n <VTable\n class={[\n 'v-data-table',\n {\n 'v-data-table--loading': props.loading,\n },\n ]}\n fixedHeader={ props.fixedHeader }\n fixedFooter={ props.fixedFooter }\n height={ props.height }\n >\n {{\n top: slots.top,\n default: slots.default ?? (() => (\n <>\n <thead class=\"v-data-table__thead\" role=\"rowgroup\">\n { slots.headers ? slots.headers() : (\n <VDataTableHeaders\n sticky={ props.fixedHeader }\n loading={ props.loading }\n color={ props.color }\n v-slots={ slots }\n />\n )}\n </thead>\n { slots.thead?.() }\n <tbody class=\"v-data-table__tbody\" role=\"rowgroup\">\n { slots.body ? slots.body() : (\n <VDataTableRows\n items={ flatItems.value }\n onClick:row={ (event, value) => emit('click:row', event, value) }\n v-slots={ slots }\n />\n )}\n </tbody>\n { slots.tbody?.() }\n { slots.tfoot?.() }\n </>\n )),\n bottom: slots.bottom ?? (() => (\n <VDataTableFooter\n v-slots={{\n prepend: slots['footer.prepend'],\n }}\n />\n )),\n }}\n </VTable>\n ))\n },\n})\n\nexport type VDataTableServer = InstanceType<typeof VDataTableServer>\n"],"mappings":"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"}
@@ -3,13 +3,12 @@ import { createVNode as _createVNode, resolveDirective as _resolveDirective } fr
3
3
  import { VTable } from "../../components/VTable/index.mjs";
4
4
  import { VDataTableHeaders } from "./VDataTableHeaders.mjs";
5
5
  import { VDataTableRows } from "./VDataTableRows.mjs"; // Composables
6
- import { useProxiedModel } from "../../composables/proxiedModel.mjs";
7
6
  import { createHeaders, makeDataTableHeaderProps } from "./composables/headers.mjs";
8
7
  import { makeDataTableItemProps, useDataTableItems } from "./composables/items.mjs";
9
- import { createExpanded, makeDataTableExpandProps } from "./composables/expand.mjs";
10
- import { createSort, makeDataTableSortProps, useSortedItems } from "./composables/sort.mjs";
11
- import { createGroupBy, makeDataTableGroupProps, useGroupedItems } from "./composables/group.mjs";
12
- import { createSelection, makeDataTableSelectProps } from "./composables/select.mjs";
8
+ import { makeDataTableExpandProps, provideExpanded } from "./composables/expand.mjs";
9
+ import { createSort, makeDataTableSortProps, provideSort, useSortedItems } from "./composables/sort.mjs";
10
+ import { createGroupBy, makeDataTableGroupProps, provideGroupBy, useGroupedItems } from "./composables/group.mjs";
11
+ import { makeDataTableSelectProps, provideSelection } from "./composables/select.mjs";
13
12
  import { makeDataTableVirtualProps, useVirtual } from "./composables/virtual.mjs";
14
13
  import { useOptions } from "./composables/options.mjs";
15
14
  import { makeFilterProps, useFilter } from "../../composables/filter.mjs";
@@ -45,7 +44,14 @@ export const VDataTableVirtual = genericComponent()({
45
44
  emit,
46
45
  slots
47
46
  } = _ref;
48
- const groupBy = useProxiedModel(props, 'groupBy');
47
+ const {
48
+ groupBy
49
+ } = createGroupBy(props);
50
+ const {
51
+ sortBy,
52
+ multiSort,
53
+ mustSort
54
+ } = createSort(props);
49
55
  const {
50
56
  columns
51
57
  } = createHeaders(props, {
@@ -63,14 +69,19 @@ export const VDataTableVirtual = genericComponent()({
63
69
  } = useFilter(props, items, search, {
64
70
  filterKeys
65
71
  });
66
- const {
67
- sortBy
68
- } = createSort(props);
72
+ provideSort({
73
+ sortBy,
74
+ multiSort,
75
+ mustSort
76
+ });
69
77
  const {
70
78
  sortByWithGroups,
71
79
  opened,
72
80
  extractRows
73
- } = createGroupBy(props, groupBy, sortBy);
81
+ } = provideGroupBy({
82
+ groupBy,
83
+ sortBy
84
+ });
74
85
  const {
75
86
  sortedItems
76
87
  } = useSortedItems(filteredItems, sortByWithGroups, columns);
@@ -78,8 +89,8 @@ export const VDataTableVirtual = genericComponent()({
78
89
  flatItems
79
90
  } = useGroupedItems(sortedItems, groupBy, opened);
80
91
  const allRows = computed(() => extractRows(flatItems.value));
81
- createSelection(props, allRows);
82
- createExpanded(props);
92
+ provideSelection(props, allRows);
93
+ provideExpanded(props);
83
94
  const {
84
95
  containerRef,
85
96
  paddingTop,
@@ -1 +1 @@
1
- {"version":3,"file":"VDataTableVirtual.mjs","names":["VTable","VDataTableHeaders","VDataTableRows","useProxiedModel","createHeaders","makeDataTableHeaderProps","makeDataTableItemProps","useDataTableItems","createExpanded","makeDataTableExpandProps","createSort","makeDataTableSortProps","useSortedItems","createGroupBy","makeDataTableGroupProps","useGroupedItems","createSelection","makeDataTableSelectProps","makeDataTableVirtualProps","useVirtual","useOptions","makeFilterProps","useFilter","provideDefaults","computed","ref","toRef","convertToUnit","genericComponent","useRender","makeVDataTableProps","VDataTableVirtual","name","props","search","String","emits","value","event","setup","emit","slots","groupBy","columns","showSelect","showExpand","items","filterKeys","map","c","key","filteredItems","sortBy","sortByWithGroups","opened","extractRows","sortedItems","flatItems","allRows","containerRef","paddingTop","paddingBottom","startIndex","stopIndex","itemHeight","handleScroll","visibleItems","slice","page","itemsPerPage","hideNoData","noDataText","height","fixedHeader","top","wrapper","multiSort","border","length","bottom"],"sources":["../../../src/labs/VDataTable/VDataTableVirtual.tsx"],"sourcesContent":["// Components\nimport { VTable } from '@/components/VTable'\nimport { VDataTableHeaders } from './VDataTableHeaders'\nimport { VDataTableRows } from './VDataTableRows'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { createHeaders, makeDataTableHeaderProps } from './composables/headers'\nimport { makeDataTableItemProps, useDataTableItems } from './composables/items'\nimport { createExpanded, makeDataTableExpandProps } from './composables/expand'\nimport { createSort, makeDataTableSortProps, useSortedItems } from './composables/sort'\nimport { createGroupBy, makeDataTableGroupProps, useGroupedItems } from './composables/group'\nimport { createSelection, makeDataTableSelectProps } from './composables/select'\nimport { makeDataTableVirtualProps, useVirtual } from './composables/virtual'\nimport { useOptions } from './composables/options'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { provideDefaults } from '@/composables/defaults'\n\n// Utlities\nimport { computed, ref, toRef } from 'vue'\nimport { convertToUnit, genericComponent, useRender } from '@/util'\nimport { makeVDataTableProps } from './VDataTable'\n\n// Types\nimport type { DataTableItem } from './types'\nimport type { VDataTableRowsSlots } from './VDataTableRows'\n\nexport type VDataTableVirtualSlots = VDataTableRowsSlots & {\n top: []\n headers: []\n bottom: []\n}\n\nexport const VDataTableVirtual = genericComponent<VDataTableVirtualSlots>()({\n name: 'VDataTableVirtual',\n\n props: {\n search: String,\n\n ...makeVDataTableProps(),\n ...makeVDataTableProps(),\n ...makeDataTableGroupProps(),\n ...makeDataTableExpandProps(),\n ...makeDataTableHeaderProps(),\n ...makeDataTableItemProps(),\n ...makeDataTableSelectProps(),\n ...makeDataTableSortProps(),\n ...makeDataTableVirtualProps(),\n ...makeFilterProps(),\n },\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 'click:row': (event: Event, value: { item: DataTableItem }) => true,\n },\n\n setup (props, { emit, slots }) {\n const groupBy = useProxiedModel(props, 'groupBy')\n const { columns } = createHeaders(props, {\n groupBy,\n showSelect: toRef(props, 'showSelect'),\n showExpand: toRef(props, 'showExpand'),\n })\n const { items } = useDataTableItems(props, columns)\n\n const filterKeys = computed(() => columns.value.map(c => 'columns.' + c.key))\n const search = toRef(props, 'search')\n const { filteredItems } = useFilter<DataTableItem>(props, items, search, { filterKeys })\n\n const { sortBy } = createSort(props)\n const { sortByWithGroups, opened, extractRows } = createGroupBy(props, groupBy, sortBy)\n\n const { sortedItems } = useSortedItems(filteredItems, sortByWithGroups, columns)\n const { flatItems } = useGroupedItems(sortedItems, groupBy, opened)\n\n const allRows = computed(() => extractRows(flatItems.value))\n\n createSelection(props, allRows)\n createExpanded(props)\n\n const {\n containerRef,\n paddingTop,\n paddingBottom,\n startIndex,\n stopIndex,\n itemHeight,\n handleScroll,\n } = useVirtual(props, flatItems)\n\n const visibleItems = computed(() => {\n return flatItems.value.slice(startIndex.value, stopIndex.value)\n })\n\n useOptions({\n sortBy,\n page: ref(1),\n itemsPerPage: ref(-1),\n groupBy,\n search,\n })\n\n provideDefaults({\n VDataTableRows: {\n hideNoData: toRef(props, 'hideNoData'),\n noDataText: toRef(props, 'noDataText'),\n },\n })\n\n useRender(() => (\n <VTable\n class=\"v-data-table\"\n style={{\n '--v-table-row-height': convertToUnit(itemHeight.value),\n }}\n height={ props.height }\n fixedHeader={ props.fixedHeader }\n >\n {{\n top: slots.top,\n wrapper: () => (\n <div\n ref={ containerRef }\n onScroll={ handleScroll }\n class=\"v-table__wrapper\"\n style={{\n height: convertToUnit(props.height),\n }}\n >\n <table>\n <thead>\n <VDataTableHeaders\n sticky={ props.fixedHeader }\n multiSort={ props.multiSort }\n v-slots={ slots }\n />\n </thead>\n <tbody>\n <tr style={{ height: convertToUnit(paddingTop.value), border: 0 }}>\n <td colspan={ columns.value.length } style={{ height: convertToUnit(paddingTop.value), border: 0 }}></td>\n </tr>\n\n <VDataTableRows\n items={ visibleItems.value }\n onClick:row={ (event, value) => emit('click:row', event, value) }\n v-slots={ slots }\n />\n\n <tr style={{ height: convertToUnit(paddingBottom.value), border: 0 }}>\n <td colspan={ columns.value.length } style={{ height: convertToUnit(paddingBottom.value), border: 0 }}></td>\n </tr>\n </tbody>\n </table>\n </div>\n ),\n bottom: slots.bottom,\n }}\n </VTable>\n ))\n },\n})\n\nexport type VDataTableVirtual = InstanceType<typeof VDataTableVirtual>\n"],"mappings":"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"}
1
+ {"version":3,"file":"VDataTableVirtual.mjs","names":["VTable","VDataTableHeaders","VDataTableRows","createHeaders","makeDataTableHeaderProps","makeDataTableItemProps","useDataTableItems","makeDataTableExpandProps","provideExpanded","createSort","makeDataTableSortProps","provideSort","useSortedItems","createGroupBy","makeDataTableGroupProps","provideGroupBy","useGroupedItems","makeDataTableSelectProps","provideSelection","makeDataTableVirtualProps","useVirtual","useOptions","makeFilterProps","useFilter","provideDefaults","computed","ref","toRef","convertToUnit","genericComponent","useRender","makeVDataTableProps","VDataTableVirtual","name","props","search","String","emits","value","event","setup","emit","slots","groupBy","sortBy","multiSort","mustSort","columns","showSelect","showExpand","items","filterKeys","map","c","key","filteredItems","sortByWithGroups","opened","extractRows","sortedItems","flatItems","allRows","containerRef","paddingTop","paddingBottom","startIndex","stopIndex","itemHeight","handleScroll","visibleItems","slice","page","itemsPerPage","hideNoData","noDataText","height","fixedHeader","top","wrapper","border","length","bottom"],"sources":["../../../src/labs/VDataTable/VDataTableVirtual.tsx"],"sourcesContent":["// Components\nimport { VTable } from '@/components/VTable'\nimport { VDataTableHeaders } from './VDataTableHeaders'\nimport { VDataTableRows } from './VDataTableRows'\n\n// Composables\nimport { createHeaders, makeDataTableHeaderProps } from './composables/headers'\nimport { makeDataTableItemProps, useDataTableItems } from './composables/items'\nimport { makeDataTableExpandProps, provideExpanded } from './composables/expand'\nimport { createSort, makeDataTableSortProps, provideSort, useSortedItems } from './composables/sort'\nimport { createGroupBy, makeDataTableGroupProps, provideGroupBy, useGroupedItems } from './composables/group'\nimport { makeDataTableSelectProps, provideSelection } from './composables/select'\nimport { makeDataTableVirtualProps, useVirtual } from './composables/virtual'\nimport { useOptions } from './composables/options'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { provideDefaults } from '@/composables/defaults'\n\n// Utlities\nimport { computed, ref, toRef } from 'vue'\nimport { convertToUnit, genericComponent, useRender } from '@/util'\nimport { makeVDataTableProps } from './VDataTable'\n\n// Types\nimport type { DataTableItem } from './types'\nimport type { VDataTableRowsSlots } from './VDataTableRows'\n\nexport type VDataTableVirtualSlots = VDataTableRowsSlots & {\n top: []\n headers: []\n bottom: []\n}\n\nexport const VDataTableVirtual = genericComponent<VDataTableVirtualSlots>()({\n name: 'VDataTableVirtual',\n\n props: {\n search: String,\n\n ...makeVDataTableProps(),\n ...makeVDataTableProps(),\n ...makeDataTableGroupProps(),\n ...makeDataTableExpandProps(),\n ...makeDataTableHeaderProps(),\n ...makeDataTableItemProps(),\n ...makeDataTableSelectProps(),\n ...makeDataTableSortProps(),\n ...makeDataTableVirtualProps(),\n ...makeFilterProps(),\n },\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 'click:row': (event: Event, value: { item: DataTableItem }) => true,\n },\n\n setup (props, { emit, slots }) {\n const { groupBy } = createGroupBy(props)\n const { sortBy, multiSort, mustSort } = createSort(props)\n\n const { columns } = createHeaders(props, {\n groupBy,\n showSelect: toRef(props, 'showSelect'),\n showExpand: toRef(props, 'showExpand'),\n })\n const { items } = useDataTableItems(props, columns)\n\n const filterKeys = computed(() => columns.value.map(c => 'columns.' + c.key))\n const search = toRef(props, 'search')\n const { filteredItems } = useFilter<DataTableItem>(props, items, search, { filterKeys })\n\n provideSort({ sortBy, multiSort, mustSort })\n const { sortByWithGroups, opened, extractRows } = provideGroupBy({ groupBy, sortBy })\n\n const { sortedItems } = useSortedItems(filteredItems, sortByWithGroups, columns)\n const { flatItems } = useGroupedItems(sortedItems, groupBy, opened)\n\n const allRows = computed(() => extractRows(flatItems.value))\n\n provideSelection(props, allRows)\n provideExpanded(props)\n\n const {\n containerRef,\n paddingTop,\n paddingBottom,\n startIndex,\n stopIndex,\n itemHeight,\n handleScroll,\n } = useVirtual(props, flatItems)\n\n const visibleItems = computed(() => {\n return flatItems.value.slice(startIndex.value, stopIndex.value)\n })\n\n useOptions({\n sortBy,\n page: ref(1),\n itemsPerPage: ref(-1),\n groupBy,\n search,\n })\n\n provideDefaults({\n VDataTableRows: {\n hideNoData: toRef(props, 'hideNoData'),\n noDataText: toRef(props, 'noDataText'),\n },\n })\n\n useRender(() => (\n <VTable\n class=\"v-data-table\"\n style={{\n '--v-table-row-height': convertToUnit(itemHeight.value),\n }}\n height={ props.height }\n fixedHeader={ props.fixedHeader }\n >\n {{\n top: slots.top,\n wrapper: () => (\n <div\n ref={ containerRef }\n onScroll={ handleScroll }\n class=\"v-table__wrapper\"\n style={{\n height: convertToUnit(props.height),\n }}\n >\n <table>\n <thead>\n <VDataTableHeaders\n sticky={ props.fixedHeader }\n multiSort={ props.multiSort }\n v-slots={ slots }\n />\n </thead>\n <tbody>\n <tr style={{ height: convertToUnit(paddingTop.value), border: 0 }}>\n <td colspan={ columns.value.length } style={{ height: convertToUnit(paddingTop.value), border: 0 }}></td>\n </tr>\n\n <VDataTableRows\n items={ visibleItems.value }\n onClick:row={ (event, value) => emit('click:row', event, value) }\n v-slots={ slots }\n />\n\n <tr style={{ height: convertToUnit(paddingBottom.value), border: 0 }}>\n <td colspan={ columns.value.length } style={{ height: convertToUnit(paddingBottom.value), border: 0 }}></td>\n </tr>\n </tbody>\n </table>\n </div>\n ),\n bottom: slots.bottom,\n }}\n </VTable>\n ))\n },\n})\n\nexport type VDataTableVirtual = InstanceType<typeof VDataTableVirtual>\n"],"mappings":"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"}
@@ -11,7 +11,7 @@ export const makeDataTableExpandProps = propsFactory({
11
11
  }
12
12
  }, 'v-data-table-expand');
13
13
  export const VDataTableExpandedKey = Symbol.for('vuetify:datatable:expanded');
14
- export function createExpanded(props) {
14
+ export function provideExpanded(props) {
15
15
  const expandOnClick = toRef(props, 'expandOnClick');
16
16
  const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {
17
17
  return new Set(v);
@@ -1 +1 @@
1
- {"version":3,"file":"expand.mjs","names":["inject","provide","toRef","propsFactory","useProxiedModel","makeDataTableExpandProps","expandOnClick","Boolean","showExpand","expanded","type","Array","default","VDataTableExpandedKey","Symbol","for","createExpanded","props","v","Set","values","expand","item","value","newExpanded","delete","add","isExpanded","has","toggleExpand","data","useExpanded","Error"],"sources":["../../../../src/labs/VDataTable/composables/expand.ts"],"sourcesContent":["// Utilities\nimport { inject, provide, toRef } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { DataTableItem } from '../types'\n\nexport const makeDataTableExpandProps = propsFactory({\n expandOnClick: Boolean,\n showExpand: Boolean,\n expanded: {\n type: Array as PropType<string[]>,\n default: () => ([]),\n },\n}, 'v-data-table-expand')\n\nexport const VDataTableExpandedKey: InjectionKey<{\n expand: (item: DataTableItem, value: boolean) => void\n expanded: Ref<Set<string>>\n expandOnClick: Ref<boolean | undefined>\n isExpanded: (item: DataTableItem) => boolean\n toggleExpand: (item: DataTableItem) => void\n}> = Symbol.for('vuetify:datatable:expanded')\n\ntype ExpandProps = {\n expandOnClick: boolean\n expanded: string[]\n 'onUpdate:expanded': ((value: any[]) => void) | undefined\n}\n\nexport function createExpanded (props: ExpandProps) {\n const expandOnClick = toRef(props, 'expandOnClick')\n const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {\n return new Set(v)\n }, v => {\n return [...v.values()]\n })\n\n function expand (item: DataTableItem, value: boolean) {\n const newExpanded = new Set(expanded.value)\n\n if (!value) {\n newExpanded.delete(item.value)\n } else {\n newExpanded.add(item.value)\n }\n\n expanded.value = newExpanded\n }\n\n function isExpanded (item: DataTableItem) {\n return expanded.value.has(item.value)\n }\n\n function toggleExpand (item: DataTableItem) {\n expand(item, !isExpanded(item))\n }\n\n const data = { expand, expanded, expandOnClick, isExpanded, toggleExpand }\n\n provide(VDataTableExpandedKey, data)\n\n return data\n}\n\nexport function useExpanded () {\n const data = inject(VDataTableExpandedKey)\n\n if (!data) throw new Error('foo')\n\n return data\n}\n"],"mappings":"AAAA;AACA,SAASA,MAAM,EAAEC,OAAO,EAAEC,KAAK,QAAQ,KAAK;AAAA,SACnCC,YAAY,mCAErB;AAAA,SACSC,eAAe,iDAExB;AAIA,OAAO,MAAMC,wBAAwB,GAAGF,YAAY,CAAC;EACnDG,aAAa,EAAEC,OAAO;EACtBC,UAAU,EAAED,OAAO;EACnBE,QAAQ,EAAE;IACRC,IAAI,EAAEC,KAA2B;IACjCC,OAAO,EAAE,MAAO;EAClB;AACF,CAAC,EAAE,qBAAqB,CAAC;AAEzB,OAAO,MAAMC,qBAMX,GAAGC,MAAM,CAACC,GAAG,CAAC,4BAA4B,CAAC;AAQ7C,OAAO,SAASC,cAAc,CAAEC,KAAkB,EAAE;EAClD,MAAMX,aAAa,GAAGJ,KAAK,CAACe,KAAK,EAAE,eAAe,CAAC;EACnD,MAAMR,QAAQ,GAAGL,eAAe,CAACa,KAAK,EAAE,UAAU,EAAEA,KAAK,CAACR,QAAQ,EAAES,CAAC,IAAI;IACvE,OAAO,IAAIC,GAAG,CAACD,CAAC,CAAC;EACnB,CAAC,EAAEA,CAAC,IAAI;IACN,OAAO,CAAC,GAAGA,CAAC,CAACE,MAAM,EAAE,CAAC;EACxB,CAAC,CAAC;EAEF,SAASC,MAAM,CAAEC,IAAmB,EAAEC,KAAc,EAAE;IACpD,MAAMC,WAAW,GAAG,IAAIL,GAAG,CAACV,QAAQ,CAACc,KAAK,CAAC;IAE3C,IAAI,CAACA,KAAK,EAAE;MACVC,WAAW,CAACC,MAAM,CAACH,IAAI,CAACC,KAAK,CAAC;IAChC,CAAC,MAAM;MACLC,WAAW,CAACE,GAAG,CAACJ,IAAI,CAACC,KAAK,CAAC;IAC7B;IAEAd,QAAQ,CAACc,KAAK,GAAGC,WAAW;EAC9B;EAEA,SAASG,UAAU,CAAEL,IAAmB,EAAE;IACxC,OAAOb,QAAQ,CAACc,KAAK,CAACK,GAAG,CAACN,IAAI,CAACC,KAAK,CAAC;EACvC;EAEA,SAASM,YAAY,CAAEP,IAAmB,EAAE;IAC1CD,MAAM,CAACC,IAAI,EAAE,CAACK,UAAU,CAACL,IAAI,CAAC,CAAC;EACjC;EAEA,MAAMQ,IAAI,GAAG;IAAET,MAAM;IAAEZ,QAAQ;IAAEH,aAAa;IAAEqB,UAAU;IAAEE;EAAa,CAAC;EAE1E5B,OAAO,CAACY,qBAAqB,EAAEiB,IAAI,CAAC;EAEpC,OAAOA,IAAI;AACb;AAEA,OAAO,SAASC,WAAW,GAAI;EAC7B,MAAMD,IAAI,GAAG9B,MAAM,CAACa,qBAAqB,CAAC;EAE1C,IAAI,CAACiB,IAAI,EAAE,MAAM,IAAIE,KAAK,CAAC,KAAK,CAAC;EAEjC,OAAOF,IAAI;AACb"}
1
+ {"version":3,"file":"expand.mjs","names":["inject","provide","toRef","propsFactory","useProxiedModel","makeDataTableExpandProps","expandOnClick","Boolean","showExpand","expanded","type","Array","default","VDataTableExpandedKey","Symbol","for","provideExpanded","props","v","Set","values","expand","item","value","newExpanded","delete","add","isExpanded","has","toggleExpand","data","useExpanded","Error"],"sources":["../../../../src/labs/VDataTable/composables/expand.ts"],"sourcesContent":["// Utilities\nimport { inject, provide, toRef } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { DataTableItem } from '../types'\n\nexport const makeDataTableExpandProps = propsFactory({\n expandOnClick: Boolean,\n showExpand: Boolean,\n expanded: {\n type: Array as PropType<string[]>,\n default: () => ([]),\n },\n}, 'v-data-table-expand')\n\nexport const VDataTableExpandedKey: InjectionKey<{\n expand: (item: DataTableItem, value: boolean) => void\n expanded: Ref<Set<string>>\n expandOnClick: Ref<boolean | undefined>\n isExpanded: (item: DataTableItem) => boolean\n toggleExpand: (item: DataTableItem) => void\n}> = Symbol.for('vuetify:datatable:expanded')\n\ntype ExpandProps = {\n expandOnClick: boolean\n expanded: string[]\n 'onUpdate:expanded': ((value: any[]) => void) | undefined\n}\n\nexport function provideExpanded (props: ExpandProps) {\n const expandOnClick = toRef(props, 'expandOnClick')\n const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {\n return new Set(v)\n }, v => {\n return [...v.values()]\n })\n\n function expand (item: DataTableItem, value: boolean) {\n const newExpanded = new Set(expanded.value)\n\n if (!value) {\n newExpanded.delete(item.value)\n } else {\n newExpanded.add(item.value)\n }\n\n expanded.value = newExpanded\n }\n\n function isExpanded (item: DataTableItem) {\n return expanded.value.has(item.value)\n }\n\n function toggleExpand (item: DataTableItem) {\n expand(item, !isExpanded(item))\n }\n\n const data = { expand, expanded, expandOnClick, isExpanded, toggleExpand }\n\n provide(VDataTableExpandedKey, data)\n\n return data\n}\n\nexport function useExpanded () {\n const data = inject(VDataTableExpandedKey)\n\n if (!data) throw new Error('foo')\n\n return data\n}\n"],"mappings":"AAAA;AACA,SAASA,MAAM,EAAEC,OAAO,EAAEC,KAAK,QAAQ,KAAK;AAAA,SACnCC,YAAY,mCAErB;AAAA,SACSC,eAAe,iDAExB;AAIA,OAAO,MAAMC,wBAAwB,GAAGF,YAAY,CAAC;EACnDG,aAAa,EAAEC,OAAO;EACtBC,UAAU,EAAED,OAAO;EACnBE,QAAQ,EAAE;IACRC,IAAI,EAAEC,KAA2B;IACjCC,OAAO,EAAE,MAAO;EAClB;AACF,CAAC,EAAE,qBAAqB,CAAC;AAEzB,OAAO,MAAMC,qBAMX,GAAGC,MAAM,CAACC,GAAG,CAAC,4BAA4B,CAAC;AAQ7C,OAAO,SAASC,eAAe,CAAEC,KAAkB,EAAE;EACnD,MAAMX,aAAa,GAAGJ,KAAK,CAACe,KAAK,EAAE,eAAe,CAAC;EACnD,MAAMR,QAAQ,GAAGL,eAAe,CAACa,KAAK,EAAE,UAAU,EAAEA,KAAK,CAACR,QAAQ,EAAES,CAAC,IAAI;IACvE,OAAO,IAAIC,GAAG,CAACD,CAAC,CAAC;EACnB,CAAC,EAAEA,CAAC,IAAI;IACN,OAAO,CAAC,GAAGA,CAAC,CAACE,MAAM,EAAE,CAAC;EACxB,CAAC,CAAC;EAEF,SAASC,MAAM,CAAEC,IAAmB,EAAEC,KAAc,EAAE;IACpD,MAAMC,WAAW,GAAG,IAAIL,GAAG,CAACV,QAAQ,CAACc,KAAK,CAAC;IAE3C,IAAI,CAACA,KAAK,EAAE;MACVC,WAAW,CAACC,MAAM,CAACH,IAAI,CAACC,KAAK,CAAC;IAChC,CAAC,MAAM;MACLC,WAAW,CAACE,GAAG,CAACJ,IAAI,CAACC,KAAK,CAAC;IAC7B;IAEAd,QAAQ,CAACc,KAAK,GAAGC,WAAW;EAC9B;EAEA,SAASG,UAAU,CAAEL,IAAmB,EAAE;IACxC,OAAOb,QAAQ,CAACc,KAAK,CAACK,GAAG,CAACN,IAAI,CAACC,KAAK,CAAC;EACvC;EAEA,SAASM,YAAY,CAAEP,IAAmB,EAAE;IAC1CD,MAAM,CAACC,IAAI,EAAE,CAACK,UAAU,CAACL,IAAI,CAAC,CAAC;EACjC;EAEA,MAAMQ,IAAI,GAAG;IAAET,MAAM;IAAEZ,QAAQ;IAAEH,aAAa;IAAEqB,UAAU;IAAEE;EAAa,CAAC;EAE1E5B,OAAO,CAACY,qBAAqB,EAAEiB,IAAI,CAAC;EAEpC,OAAOA,IAAI;AACb;AAEA,OAAO,SAASC,WAAW,GAAI;EAC7B,MAAMD,IAAI,GAAG9B,MAAM,CAACa,qBAAqB,CAAC;EAE1C,IAAI,CAACiB,IAAI,EAAE,MAAM,IAAIE,KAAK,CAAC,KAAK,CAAC;EAEjC,OAAOF,IAAI;AACb"}
@@ -1,6 +1,7 @@
1
1
  // Utilities
2
2
  import { computed, inject, provide, ref } from 'vue';
3
3
  import { getObjectValueByPath, propsFactory } from "../../../util/index.mjs"; // Types
4
+ import { useProxiedModel } from "../../../composables/proxiedModel.mjs";
4
5
  export const makeDataTableGroupProps = propsFactory({
5
6
  groupBy: {
6
7
  type: Array,
@@ -8,7 +9,17 @@ export const makeDataTableGroupProps = propsFactory({
8
9
  }
9
10
  }, 'data-table-group');
10
11
  const VDataTableGroupSymbol = Symbol.for('vuetify:data-table-group');
11
- export function createGroupBy(props, groupBy, sortBy) {
12
+ export function createGroupBy(props) {
13
+ const groupBy = useProxiedModel(props, 'groupBy');
14
+ return {
15
+ groupBy
16
+ };
17
+ }
18
+ export function provideGroupBy(options) {
19
+ const {
20
+ groupBy,
21
+ sortBy
22
+ } = options;
12
23
  const opened = ref(new Set());
13
24
  const sortByWithGroups = computed(() => {
14
25
  return groupBy.value.map(val => ({
@@ -1 +1 @@
1
- {"version":3,"file":"group.mjs","names":["computed","inject","provide","ref","getObjectValueByPath","propsFactory","makeDataTableGroupProps","groupBy","type","Array","default","VDataTableGroupSymbol","Symbol","for","createGroupBy","props","sortBy","opened","Set","sortByWithGroups","value","map","val","order","concat","isGroupOpen","group","has","id","toggleGroup","newOpened","add","delete","extractRows","items","dive","arr","item","push","key","depth","data","useGroupBy","Error","groupItemsByProperty","length","groups","Map","raw","set","get","groupItems","prefix","groupedItems","rest","slice","forEach","flattenItems","flatItems","useGroupedItems"],"sources":["../../../../src/labs/VDataTable/composables/group.ts"],"sourcesContent":["// Utilities\nimport { computed, inject, provide, ref } from 'vue'\nimport { getObjectValueByPath, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { DataTableItem, GroupHeaderItem } from '../types'\nimport type { SortItem } from './sort'\n\nexport const makeDataTableGroupProps = propsFactory({\n groupBy: {\n type: Array as PropType<SortItem[]>,\n default: () => ([]),\n },\n}, 'data-table-group')\n\nconst VDataTableGroupSymbol: InjectionKey<{\n opened: Ref<Set<string>>\n toggleGroup: (group: GroupHeaderItem) => void\n isGroupOpen: (group: GroupHeaderItem) => boolean\n sortByWithGroups: Ref<SortItem[]>\n groupBy: Ref<readonly SortItem[]>\n extractRows: (items: (DataTableItem | GroupHeaderItem)[]) => DataTableItem[]\n}> = Symbol.for('vuetify:data-table-group')\n\ntype GroupProps = {\n}\n\nexport function createGroupBy (props: GroupProps, groupBy: Ref<readonly SortItem[]>, sortBy: Ref<readonly SortItem[]>) {\n const opened = ref(new Set<string>())\n\n const sortByWithGroups = computed(() => {\n return groupBy.value.map<SortItem>(val => ({\n ...val,\n order: val.order ?? false,\n })).concat(sortBy.value)\n })\n\n function isGroupOpen (group: GroupHeaderItem) {\n return opened.value.has(group.id)\n }\n\n function toggleGroup (group: GroupHeaderItem) {\n const newOpened = new Set(opened.value)\n if (!isGroupOpen(group)) newOpened.add(group.id)\n else newOpened.delete(group.id)\n\n opened.value = newOpened\n }\n\n function extractRows (items: (DataTableItem | GroupHeaderItem)[]) {\n function dive (group: GroupHeaderItem): DataTableItem[] {\n const arr = []\n\n for (const item of group.items) {\n if (item.type === 'item') arr.push(item)\n else {\n arr.push(...dive(item))\n }\n }\n\n return arr\n }\n return dive({ type: 'group-header', items, id: 'dummy', key: 'dummy', value: 'dummy', depth: 0 })\n }\n\n // onBeforeMount(() => {\n // for (const key of groupedItems.value.keys()) {\n // opened.value.add(key)\n // }\n // })\n\n const data = { sortByWithGroups, toggleGroup, opened, groupBy, extractRows, isGroupOpen }\n\n provide(VDataTableGroupSymbol, data)\n\n return data\n}\n\nexport function useGroupBy () {\n const data = inject(VDataTableGroupSymbol)\n\n if (!data) throw new Error('Missing group!')\n\n return data\n}\n\nfunction groupItemsByProperty (items: DataTableItem[], groupBy: string) {\n if (!items.length) return []\n\n const groups = new Map<any, DataTableItem[]>()\n for (const item of items) {\n const value = getObjectValueByPath(item.raw, groupBy)\n\n if (!groups.has(value)) {\n groups.set(value, [])\n }\n groups.get(value)!.push(item)\n }\n\n return groups\n}\n\nfunction groupItems (items: DataTableItem[], groupBy: string[], depth = 0, prefix = 'root') {\n if (!groupBy.length) return []\n\n const groupedItems = groupItemsByProperty(items, groupBy[0])\n const groups: GroupHeaderItem[] = []\n\n const rest = groupBy.slice(1)\n groupedItems.forEach((items, value) => {\n const key = groupBy[0]\n const id = `${prefix}_${key}_${value}`\n groups.push({\n depth,\n id,\n key,\n value,\n items: rest.length ? groupItems(items, rest, depth + 1, id) : items,\n type: 'group-header',\n })\n })\n\n return groups\n}\n\nfunction flattenItems (items: (DataTableItem | GroupHeaderItem)[], opened: Set<string>) {\n const flatItems: (DataTableItem | GroupHeaderItem)[] = []\n\n for (const item of items) {\n // TODO: make this better\n if (item.type === 'group-header') {\n if (item.value != null) {\n flatItems.push(item)\n }\n\n if (opened.has(item.id) || item.value == null) {\n flatItems.push(...flattenItems(item.items, opened))\n }\n } else {\n flatItems.push(item)\n }\n }\n\n return flatItems\n}\n\nexport function useGroupedItems (items: Ref<DataTableItem[]>, groupBy: Ref<readonly SortItem[]>, opened: Ref<Set<string>>) {\n const flatItems = computed(() => {\n if (!groupBy.value.length) return items.value\n\n const groupedItems = groupItems(items.value, groupBy.value.map(item => item.key))\n\n return flattenItems(groupedItems, opened.value)\n })\n\n return { flatItems }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"group.mjs","names":["computed","inject","provide","ref","getObjectValueByPath","propsFactory","useProxiedModel","makeDataTableGroupProps","groupBy","type","Array","default","VDataTableGroupSymbol","Symbol","for","createGroupBy","props","provideGroupBy","options","sortBy","opened","Set","sortByWithGroups","value","map","val","order","concat","isGroupOpen","group","has","id","toggleGroup","newOpened","add","delete","extractRows","items","dive","arr","item","push","key","depth","data","useGroupBy","Error","groupItemsByProperty","length","groups","Map","raw","set","get","groupItems","prefix","groupedItems","rest","slice","forEach","flattenItems","flatItems","useGroupedItems"],"sources":["../../../../src/labs/VDataTable/composables/group.ts"],"sourcesContent":["// Utilities\nimport { computed, inject, provide, ref } from 'vue'\nimport { getObjectValueByPath, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { DataTableItem, GroupHeaderItem } from '../types'\nimport type { SortItem } from './sort'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\nexport const makeDataTableGroupProps = propsFactory({\n groupBy: {\n type: Array as PropType<SortItem[]>,\n default: () => ([]),\n },\n}, 'data-table-group')\n\nconst VDataTableGroupSymbol: InjectionKey<{\n opened: Ref<Set<string>>\n toggleGroup: (group: GroupHeaderItem) => void\n isGroupOpen: (group: GroupHeaderItem) => boolean\n sortByWithGroups: Ref<SortItem[]>\n groupBy: Ref<readonly SortItem[]>\n extractRows: (items: (DataTableItem | GroupHeaderItem)[]) => DataTableItem[]\n}> = Symbol.for('vuetify:data-table-group')\n\ntype GroupProps = {\n groupBy: SortItem[]\n 'onUpdate:groupBy': ((value: SortItem[]) => void) | undefined\n}\n\nexport function createGroupBy (props: GroupProps) {\n const groupBy = useProxiedModel(props, 'groupBy')\n\n return { groupBy }\n}\n\nexport function provideGroupBy (options: { groupBy: Ref<readonly SortItem[]>, sortBy: Ref<readonly SortItem[]> }) {\n const { groupBy, sortBy } = options\n const opened = ref(new Set<string>())\n\n const sortByWithGroups = computed(() => {\n return groupBy.value.map<SortItem>(val => ({\n ...val,\n order: val.order ?? false,\n })).concat(sortBy.value)\n })\n\n function isGroupOpen (group: GroupHeaderItem) {\n return opened.value.has(group.id)\n }\n\n function toggleGroup (group: GroupHeaderItem) {\n const newOpened = new Set(opened.value)\n if (!isGroupOpen(group)) newOpened.add(group.id)\n else newOpened.delete(group.id)\n\n opened.value = newOpened\n }\n\n function extractRows (items: (DataTableItem | GroupHeaderItem)[]) {\n function dive (group: GroupHeaderItem): DataTableItem[] {\n const arr = []\n\n for (const item of group.items) {\n if (item.type === 'item') arr.push(item)\n else {\n arr.push(...dive(item))\n }\n }\n\n return arr\n }\n return dive({ type: 'group-header', items, id: 'dummy', key: 'dummy', value: 'dummy', depth: 0 })\n }\n\n // onBeforeMount(() => {\n // for (const key of groupedItems.value.keys()) {\n // opened.value.add(key)\n // }\n // })\n\n const data = { sortByWithGroups, toggleGroup, opened, groupBy, extractRows, isGroupOpen }\n\n provide(VDataTableGroupSymbol, data)\n\n return data\n}\n\nexport function useGroupBy () {\n const data = inject(VDataTableGroupSymbol)\n\n if (!data) throw new Error('Missing group!')\n\n return data\n}\n\nfunction groupItemsByProperty (items: DataTableItem[], groupBy: string) {\n if (!items.length) return []\n\n const groups = new Map<any, DataTableItem[]>()\n for (const item of items) {\n const value = getObjectValueByPath(item.raw, groupBy)\n\n if (!groups.has(value)) {\n groups.set(value, [])\n }\n groups.get(value)!.push(item)\n }\n\n return groups\n}\n\nfunction groupItems (items: DataTableItem[], groupBy: string[], depth = 0, prefix = 'root') {\n if (!groupBy.length) return []\n\n const groupedItems = groupItemsByProperty(items, groupBy[0])\n const groups: GroupHeaderItem[] = []\n\n const rest = groupBy.slice(1)\n groupedItems.forEach((items, value) => {\n const key = groupBy[0]\n const id = `${prefix}_${key}_${value}`\n groups.push({\n depth,\n id,\n key,\n value,\n items: rest.length ? groupItems(items, rest, depth + 1, id) : items,\n type: 'group-header',\n })\n })\n\n return groups\n}\n\nfunction flattenItems (items: (DataTableItem | GroupHeaderItem)[], opened: Set<string>) {\n const flatItems: (DataTableItem | GroupHeaderItem)[] = []\n\n for (const item of items) {\n // TODO: make this better\n if (item.type === 'group-header') {\n if (item.value != null) {\n flatItems.push(item)\n }\n\n if (opened.has(item.id) || item.value == null) {\n flatItems.push(...flattenItems(item.items, opened))\n }\n } else {\n flatItems.push(item)\n }\n }\n\n return flatItems\n}\n\nexport function useGroupedItems (items: Ref<DataTableItem[]>, groupBy: Ref<readonly SortItem[]>, opened: Ref<Set<string>>) {\n const flatItems = computed(() => {\n if (!groupBy.value.length) return items.value\n\n const groupedItems = groupItems(items.value, groupBy.value.map(item => item.key))\n\n return flattenItems(groupedItems, opened.value)\n })\n\n return { flatItems }\n}\n"],"mappings":"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"}
@@ -17,22 +17,10 @@ export function useOptions(_ref) {
17
17
  groupBy: groupBy.value
18
18
  }));
19
19
 
20
- // Reset page when sorting changes
21
- watch(sortBy, () => {
22
- page.value = 1;
23
- }, {
24
- deep: true
25
- });
26
-
27
20
  // Reset page when searching
28
21
  watch(() => search?.value, () => {
29
22
  page.value = 1;
30
23
  });
31
-
32
- // Reset page when items-per-page changes
33
- watch(itemsPerPage, () => {
34
- page.value = 1;
35
- });
36
24
  let oldOptions = null;
37
25
  watch(options, () => {
38
26
  if (deepEqual(oldOptions, options.value)) return;
@@ -1 +1 @@
1
- {"version":3,"file":"options.mjs","names":["computed","watch","deepEqual","getCurrentInstance","useOptions","page","itemsPerPage","sortBy","groupBy","search","vm","options","value","deep","oldOptions","emit","immediate"],"sources":["../../../../src/labs/VDataTable/composables/options.ts"],"sourcesContent":["// Utilities\nimport { computed, watch } from 'vue'\nimport { deepEqual, getCurrentInstance } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\nimport type { SortItem } from './sort'\n\nexport function useOptions ({\n page,\n itemsPerPage,\n sortBy,\n groupBy,\n search,\n}: {\n page: Ref<number>\n itemsPerPage: Ref<number>\n sortBy: Ref<readonly SortItem[]>\n groupBy: Ref<readonly SortItem[]>\n search?: Ref<string | undefined>\n}) {\n const vm = getCurrentInstance('VDataTable')\n\n const options = computed(() => ({\n page: page.value,\n itemsPerPage: itemsPerPage.value,\n sortBy: sortBy.value,\n groupBy: groupBy.value,\n }))\n\n // Reset page when sorting changes\n watch(sortBy, () => {\n page.value = 1\n }, { deep: true })\n\n // Reset page when searching\n watch(() => search?.value, () => {\n page.value = 1\n })\n\n // Reset page when items-per-page changes\n watch(itemsPerPage, () => {\n page.value = 1\n })\n\n let oldOptions: unknown = null\n watch(options, () => {\n if (deepEqual(oldOptions, options.value)) return\n vm.emit('update:options', options.value)\n oldOptions = options.value\n }, { deep: true, immediate: true })\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAC5BC,SAAS,EAAEC,kBAAkB,mCAEtC;AAIA,OAAO,SAASC,UAAU,OAYvB;EAAA,IAZyB;IAC1BC,IAAI;IACJC,YAAY;IACZC,MAAM;IACNC,OAAO;IACPC;EAOF,CAAC;EACC,MAAMC,EAAE,GAAGP,kBAAkB,CAAC,YAAY,CAAC;EAE3C,MAAMQ,OAAO,GAAGX,QAAQ,CAAC,OAAO;IAC9BK,IAAI,EAAEA,IAAI,CAACO,KAAK;IAChBN,YAAY,EAAEA,YAAY,CAACM,KAAK;IAChCL,MAAM,EAAEA,MAAM,CAACK,KAAK;IACpBJ,OAAO,EAAEA,OAAO,CAACI;EACnB,CAAC,CAAC,CAAC;;EAEH;EACAX,KAAK,CAACM,MAAM,EAAE,MAAM;IAClBF,IAAI,CAACO,KAAK,GAAG,CAAC;EAChB,CAAC,EAAE;IAAEC,IAAI,EAAE;EAAK,CAAC,CAAC;;EAElB;EACAZ,KAAK,CAAC,MAAMQ,MAAM,EAAEG,KAAK,EAAE,MAAM;IAC/BP,IAAI,CAACO,KAAK,GAAG,CAAC;EAChB,CAAC,CAAC;;EAEF;EACAX,KAAK,CAACK,YAAY,EAAE,MAAM;IACxBD,IAAI,CAACO,KAAK,GAAG,CAAC;EAChB,CAAC,CAAC;EAEF,IAAIE,UAAmB,GAAG,IAAI;EAC9Bb,KAAK,CAACU,OAAO,EAAE,MAAM;IACnB,IAAIT,SAAS,CAACY,UAAU,EAAEH,OAAO,CAACC,KAAK,CAAC,EAAE;IAC1CF,EAAE,CAACK,IAAI,CAAC,gBAAgB,EAAEJ,OAAO,CAACC,KAAK,CAAC;IACxCE,UAAU,GAAGH,OAAO,CAACC,KAAK;EAC5B,CAAC,EAAE;IAAEC,IAAI,EAAE,IAAI;IAAEG,SAAS,EAAE;EAAK,CAAC,CAAC;AACrC"}
1
+ {"version":3,"file":"options.mjs","names":["computed","watch","deepEqual","getCurrentInstance","useOptions","page","itemsPerPage","sortBy","groupBy","search","vm","options","value","oldOptions","emit","deep","immediate"],"sources":["../../../../src/labs/VDataTable/composables/options.ts"],"sourcesContent":["// Utilities\nimport { computed, watch } from 'vue'\nimport { deepEqual, getCurrentInstance } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\nimport type { SortItem } from './sort'\n\nexport function useOptions ({\n page,\n itemsPerPage,\n sortBy,\n groupBy,\n search,\n}: {\n page: Ref<number>\n itemsPerPage: Ref<number>\n sortBy: Ref<readonly SortItem[]>\n groupBy: Ref<readonly SortItem[]>\n search?: Ref<string | undefined>\n}) {\n const vm = getCurrentInstance('VDataTable')\n\n const options = computed(() => ({\n page: page.value,\n itemsPerPage: itemsPerPage.value,\n sortBy: sortBy.value,\n groupBy: groupBy.value,\n }))\n\n // Reset page when searching\n watch(() => search?.value, () => {\n page.value = 1\n })\n\n let oldOptions: unknown = null\n watch(options, () => {\n if (deepEqual(oldOptions, options.value)) return\n vm.emit('update:options', options.value)\n oldOptions = options.value\n }, { deep: true, immediate: true })\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAC5BC,SAAS,EAAEC,kBAAkB,mCAEtC;AAIA,OAAO,SAASC,UAAU,OAYvB;EAAA,IAZyB;IAC1BC,IAAI;IACJC,YAAY;IACZC,MAAM;IACNC,OAAO;IACPC;EAOF,CAAC;EACC,MAAMC,EAAE,GAAGP,kBAAkB,CAAC,YAAY,CAAC;EAE3C,MAAMQ,OAAO,GAAGX,QAAQ,CAAC,OAAO;IAC9BK,IAAI,EAAEA,IAAI,CAACO,KAAK;IAChBN,YAAY,EAAEA,YAAY,CAACM,KAAK;IAChCL,MAAM,EAAEA,MAAM,CAACK,KAAK;IACpBJ,OAAO,EAAEA,OAAO,CAACI;EACnB,CAAC,CAAC,CAAC;;EAEH;EACAX,KAAK,CAAC,MAAMQ,MAAM,EAAEG,KAAK,EAAE,MAAM;IAC/BP,IAAI,CAACO,KAAK,GAAG,CAAC;EAChB,CAAC,CAAC;EAEF,IAAIC,UAAmB,GAAG,IAAI;EAC9BZ,KAAK,CAACU,OAAO,EAAE,MAAM;IACnB,IAAIT,SAAS,CAACW,UAAU,EAAEF,OAAO,CAACC,KAAK,CAAC,EAAE;IAC1CF,EAAE,CAACI,IAAI,CAAC,gBAAgB,EAAEH,OAAO,CAACC,KAAK,CAAC;IACxCC,UAAU,GAAGF,OAAO,CAACC,KAAK;EAC5B,CAAC,EAAE;IAAEG,IAAI,EAAE,IAAI;IAAEC,SAAS,EAAE;EAAK,CAAC,CAAC;AACrC"}
@@ -13,10 +13,20 @@ export const makeDataTablePaginateProps = propsFactory({
13
13
  }
14
14
  }, 'v-data-table-paginate');
15
15
  const VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');
16
- export function createPagination(props, items) {
16
+ export function createPagination(props) {
17
17
  const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1));
18
18
  const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10));
19
- const itemsLength = computed(() => +(props.itemsLength ?? items.value.length));
19
+ return {
20
+ page,
21
+ itemsPerPage
22
+ };
23
+ }
24
+ export function providePagination(options) {
25
+ const {
26
+ page,
27
+ itemsPerPage,
28
+ itemsLength
29
+ } = options;
20
30
  const startIndex = computed(() => {
21
31
  if (itemsPerPage.value === -1) return 0;
22
32
  return itemsPerPage.value * (page.value - 1);
@@ -29,13 +39,18 @@ export function createPagination(props, items) {
29
39
  if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
30
40
  return Math.ceil(itemsLength.value / itemsPerPage.value);
31
41
  });
42
+ function setItemsPerPage(value) {
43
+ itemsPerPage.value = value;
44
+ page.value = 1;
45
+ }
32
46
  const data = {
33
47
  page,
34
48
  itemsPerPage,
49
+ itemsLength,
35
50
  startIndex,
36
51
  stopIndex,
37
52
  pageCount,
38
- itemsLength
53
+ setItemsPerPage
39
54
  };
40
55
  provide(VDataTablePaginationSymbol, data);
41
56
  return data;
@@ -45,7 +60,13 @@ export function usePagination() {
45
60
  if (!data) throw new Error('Missing pagination!');
46
61
  return data;
47
62
  }
48
- export function usePaginatedItems(items, startIndex, stopIndex, itemsPerPage) {
63
+ export function usePaginatedItems(options) {
64
+ const {
65
+ items,
66
+ startIndex,
67
+ stopIndex,
68
+ itemsPerPage
69
+ } = options;
49
70
  const paginatedItems = computed(() => {
50
71
  if (itemsPerPage.value <= 0) return items.value;
51
72
  return items.value.slice(startIndex.value, stopIndex.value);
@@ -1 +1 @@
1
- {"version":3,"file":"paginate.mjs","names":["useProxiedModel","computed","inject","provide","propsFactory","makeDataTablePaginateProps","page","type","Number","String","default","itemsPerPage","VDataTablePaginationSymbol","Symbol","for","createPagination","props","items","undefined","value","itemsLength","length","startIndex","stopIndex","Math","min","pageCount","ceil","data","usePagination","Error","usePaginatedItems","paginatedItems","slice"],"sources":["../../../../src/labs/VDataTable/composables/paginate.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\n\nexport const makeDataTablePaginateProps = propsFactory({\n page: {\n type: [Number, String],\n default: 1,\n },\n itemsPerPage: {\n type: [Number, String],\n default: 10,\n },\n}, 'v-data-table-paginate')\n\nconst VDataTablePaginationSymbol: InjectionKey<{\n page: Ref<number>\n itemsPerPage: Ref<number>\n startIndex: Ref<number>\n stopIndex: Ref<number>\n pageCount: Ref<number>\n itemsLength: Ref<number>\n}> = Symbol.for('vuetify:data-table-pagination')\n\ntype PaginationProps = {\n page: number | string\n 'onUpdate:page': ((val: any) => void) | undefined\n itemsPerPage: number | string\n 'onUpdate:itemsPerPage': ((val: any) => void) | undefined\n itemsLength?: number | string\n}\n\nexport function createPagination (props: PaginationProps, items: Ref<any[]>) {\n const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1))\n const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10))\n const itemsLength = computed(() => +(props.itemsLength ?? items.value.length))\n\n const startIndex = computed(() => {\n if (itemsPerPage.value === -1) return 0\n\n return itemsPerPage.value * (page.value - 1)\n })\n const stopIndex = computed(() => {\n if (itemsPerPage.value === -1) return itemsLength.value\n\n return Math.min(itemsLength.value, startIndex.value + itemsPerPage.value)\n })\n\n const pageCount = computed(() => {\n if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1\n\n return Math.ceil(itemsLength.value / itemsPerPage.value)\n })\n\n const data = { page, itemsPerPage, startIndex, stopIndex, pageCount, itemsLength }\n\n provide(VDataTablePaginationSymbol, data)\n\n return data\n}\n\nexport function usePagination () {\n const data = inject(VDataTablePaginationSymbol)\n\n if (!data) throw new Error('Missing pagination!')\n\n return data\n}\n\nexport function usePaginatedItems (\n items: Ref<any[]>,\n startIndex: Ref<number>,\n stopIndex: Ref<number>,\n itemsPerPage: Ref<number>\n) {\n const paginatedItems = computed(() => {\n if (itemsPerPage.value <= 0) return items.value\n\n return items.value.slice(startIndex.value, stopIndex.value)\n })\n\n return { paginatedItems }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"paginate.mjs","names":["useProxiedModel","computed","inject","provide","propsFactory","makeDataTablePaginateProps","page","type","Number","String","default","itemsPerPage","VDataTablePaginationSymbol","Symbol","for","createPagination","props","undefined","value","providePagination","options","itemsLength","startIndex","stopIndex","Math","min","pageCount","ceil","setItemsPerPage","data","usePagination","Error","usePaginatedItems","items","paginatedItems","slice"],"sources":["../../../../src/labs/VDataTable/composables/paginate.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\n\nexport const makeDataTablePaginateProps = propsFactory({\n page: {\n type: [Number, String],\n default: 1,\n },\n itemsPerPage: {\n type: [Number, String],\n default: 10,\n },\n}, 'v-data-table-paginate')\n\nconst VDataTablePaginationSymbol: InjectionKey<{\n page: Ref<number>\n itemsPerPage: Ref<number>\n setItemsPerPage: (value: number) => void\n startIndex: Ref<number>\n stopIndex: Ref<number>\n pageCount: Ref<number>\n itemsLength: Ref<number>\n}> = Symbol.for('vuetify:data-table-pagination')\n\ntype PaginationProps = {\n page: number | string\n 'onUpdate:page': ((val: any) => void) | undefined\n itemsPerPage: number | string\n 'onUpdate:itemsPerPage': ((val: any) => void) | undefined\n itemsLength?: number | string\n}\n\nexport function createPagination (props: PaginationProps) {\n const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1))\n const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10))\n\n return { page, itemsPerPage }\n}\n\nexport function providePagination (options: {\n page: Ref<number>\n itemsPerPage: Ref<number>\n itemsLength: Ref<number>\n}) {\n const { page, itemsPerPage, itemsLength } = options\n\n const startIndex = computed(() => {\n if (itemsPerPage.value === -1) return 0\n\n return itemsPerPage.value * (page.value - 1)\n })\n const stopIndex = computed(() => {\n if (itemsPerPage.value === -1) return itemsLength.value\n\n return Math.min(itemsLength.value, startIndex.value + itemsPerPage.value)\n })\n\n const pageCount = computed(() => {\n if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1\n\n return Math.ceil(itemsLength.value / itemsPerPage.value)\n })\n\n function setItemsPerPage (value: number) {\n itemsPerPage.value = value\n page.value = 1\n }\n\n const data = { page, itemsPerPage, itemsLength, startIndex, stopIndex, pageCount, setItemsPerPage }\n\n provide(VDataTablePaginationSymbol, data)\n\n return data\n}\n\nexport function usePagination () {\n const data = inject(VDataTablePaginationSymbol)\n\n if (!data) throw new Error('Missing pagination!')\n\n return data\n}\n\nexport function usePaginatedItems (options: {\n items: Ref<any[]>\n startIndex: Ref<number>\n stopIndex: Ref<number>\n itemsPerPage: Ref<number>\n}) {\n const { items, startIndex, stopIndex, itemsPerPage } = options\n const paginatedItems = computed(() => {\n if (itemsPerPage.value <= 0) return items.value\n\n return items.value.slice(startIndex.value, stopIndex.value)\n })\n\n return { paginatedItems }\n}\n"],"mappings":"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"}
@@ -10,7 +10,7 @@ export const makeDataTableSelectProps = propsFactory({
10
10
  }
11
11
  }, 'v-data-table-select');
12
12
  export const VDataTableSelectionSymbol = Symbol.for('vuetify:data-table-selection');
13
- export function createSelection(props, allItems) {
13
+ export function provideSelection(props, allItems) {
14
14
  const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {
15
15
  return new Set(v);
16
16
  }, v => {
@@ -1 +1 @@
1
- {"version":3,"file":"select.mjs","names":["useProxiedModel","computed","inject","provide","propsFactory","makeDataTableSelectProps","showSelect","Boolean","modelValue","type","Array","default","VDataTableSelectionSymbol","Symbol","for","createSelection","props","allItems","selected","v","Set","values","isSelected","items","every","item","value","has","isSomeSelected","some","select","newSelected","add","delete","toggleSelect","selectAll","someSelected","size","allSelected","data","useSelection","Error"],"sources":["../../../../src/labs/VDataTable/composables/select.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { ItemProps } from '@/composables/items'\nimport type { DataTableItem } from '../types'\n\nexport const makeDataTableSelectProps = propsFactory({\n showSelect: Boolean,\n modelValue: {\n type: Array as PropType<any[]>,\n default: () => ([]),\n },\n}, 'v-data-table-select')\n\nexport const VDataTableSelectionSymbol: InjectionKey<{\n toggleSelect: (item: DataTableItem) => void\n select: (items: DataTableItem[], value: boolean) => void\n selectAll: (value: boolean) => void\n isSelected: (items: DataTableItem[]) => boolean\n isSomeSelected: (items: DataTableItem[]) => boolean\n someSelected: Ref<boolean>\n allSelected: Ref<boolean>\n}> = Symbol.for('vuetify:data-table-selection')\n\ntype SelectionProps = Pick<ItemProps, 'itemValue'> & { modelValue: any[], 'onUpdate:modelValue': ((value: any[]) => void) | undefined }\n\nexport function createSelection (props: SelectionProps, allItems: Ref<DataTableItem[]>) {\n const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {\n return new Set(v)\n }, v => {\n return [...v.values()]\n })\n\n function isSelected (items: DataTableItem[]) {\n return items.every(item => selected.value.has(item.value))\n }\n\n function isSomeSelected (items: DataTableItem[]) {\n return items.some(item => selected.value.has(item.value))\n }\n\n function select (items: DataTableItem[], value: boolean) {\n const newSelected = new Set(selected.value)\n\n for (const item of items) {\n if (value) newSelected.add(item.value)\n else newSelected.delete(item.value)\n }\n\n selected.value = newSelected\n }\n\n function toggleSelect (item: DataTableItem) {\n select([item], !isSelected([item]))\n }\n\n function selectAll (value: boolean) {\n select(allItems.value, value)\n }\n\n const someSelected = computed(() => selected.value.size > 0)\n const allSelected = computed(() => isSelected(allItems.value))\n\n const data = { toggleSelect, select, selectAll, isSelected, isSomeSelected, someSelected, allSelected }\n\n provide(VDataTableSelectionSymbol, data)\n\n return data\n}\n\nexport function useSelection () {\n const data = inject(VDataTableSelectionSymbol)\n\n if (!data) throw new Error('Missing selection!')\n\n return data\n}\n"],"mappings":"AAAA;AAAA,SACSA,eAAe,iDAExB;AACA,SAASC,QAAQ,EAAEC,MAAM,EAAEC,OAAO,QAAQ,KAAK;AAAA,SACtCC,YAAY,mCAErB;AAKA,OAAO,MAAMC,wBAAwB,GAAGD,YAAY,CAAC;EACnDE,UAAU,EAAEC,OAAO;EACnBC,UAAU,EAAE;IACVC,IAAI,EAAEC,KAAwB;IAC9BC,OAAO,EAAE,MAAO;EAClB;AACF,CAAC,EAAE,qBAAqB,CAAC;AAEzB,OAAO,MAAMC,yBAQX,GAAGC,MAAM,CAACC,GAAG,CAAC,8BAA8B,CAAC;AAI/C,OAAO,SAASC,eAAe,CAAEC,KAAqB,EAAEC,QAA8B,EAAE;EACtF,MAAMC,QAAQ,GAAGlB,eAAe,CAACgB,KAAK,EAAE,YAAY,EAAEA,KAAK,CAACR,UAAU,EAAEW,CAAC,IAAI;IAC3E,OAAO,IAAIC,GAAG,CAACD,CAAC,CAAC;EACnB,CAAC,EAAEA,CAAC,IAAI;IACN,OAAO,CAAC,GAAGA,CAAC,CAACE,MAAM,EAAE,CAAC;EACxB,CAAC,CAAC;EAEF,SAASC,UAAU,CAAEC,KAAsB,EAAE;IAC3C,OAAOA,KAAK,CAACC,KAAK,CAACC,IAAI,IAAIP,QAAQ,CAACQ,KAAK,CAACC,GAAG,CAACF,IAAI,CAACC,KAAK,CAAC,CAAC;EAC5D;EAEA,SAASE,cAAc,CAAEL,KAAsB,EAAE;IAC/C,OAAOA,KAAK,CAACM,IAAI,CAACJ,IAAI,IAAIP,QAAQ,CAACQ,KAAK,CAACC,GAAG,CAACF,IAAI,CAACC,KAAK,CAAC,CAAC;EAC3D;EAEA,SAASI,MAAM,CAAEP,KAAsB,EAAEG,KAAc,EAAE;IACvD,MAAMK,WAAW,GAAG,IAAIX,GAAG,CAACF,QAAQ,CAACQ,KAAK,CAAC;IAE3C,KAAK,MAAMD,IAAI,IAAIF,KAAK,EAAE;MACxB,IAAIG,KAAK,EAAEK,WAAW,CAACC,GAAG,CAACP,IAAI,CAACC,KAAK,CAAC,MACjCK,WAAW,CAACE,MAAM,CAACR,IAAI,CAACC,KAAK,CAAC;IACrC;IAEAR,QAAQ,CAACQ,KAAK,GAAGK,WAAW;EAC9B;EAEA,SAASG,YAAY,CAAET,IAAmB,EAAE;IAC1CK,MAAM,CAAC,CAACL,IAAI,CAAC,EAAE,CAACH,UAAU,CAAC,CAACG,IAAI,CAAC,CAAC,CAAC;EACrC;EAEA,SAASU,SAAS,CAAET,KAAc,EAAE;IAClCI,MAAM,CAACb,QAAQ,CAACS,KAAK,EAAEA,KAAK,CAAC;EAC/B;EAEA,MAAMU,YAAY,GAAGnC,QAAQ,CAAC,MAAMiB,QAAQ,CAACQ,KAAK,CAACW,IAAI,GAAG,CAAC,CAAC;EAC5D,MAAMC,WAAW,GAAGrC,QAAQ,CAAC,MAAMqB,UAAU,CAACL,QAAQ,CAACS,KAAK,CAAC,CAAC;EAE9D,MAAMa,IAAI,GAAG;IAAEL,YAAY;IAAEJ,MAAM;IAAEK,SAAS;IAAEb,UAAU;IAAEM,cAAc;IAAEQ,YAAY;IAAEE;EAAY,CAAC;EAEvGnC,OAAO,CAACS,yBAAyB,EAAE2B,IAAI,CAAC;EAExC,OAAOA,IAAI;AACb;AAEA,OAAO,SAASC,YAAY,GAAI;EAC9B,MAAMD,IAAI,GAAGrC,MAAM,CAACU,yBAAyB,CAAC;EAE9C,IAAI,CAAC2B,IAAI,EAAE,MAAM,IAAIE,KAAK,CAAC,oBAAoB,CAAC;EAEhD,OAAOF,IAAI;AACb"}
1
+ {"version":3,"file":"select.mjs","names":["useProxiedModel","computed","inject","provide","propsFactory","makeDataTableSelectProps","showSelect","Boolean","modelValue","type","Array","default","VDataTableSelectionSymbol","Symbol","for","provideSelection","props","allItems","selected","v","Set","values","isSelected","items","every","item","value","has","isSomeSelected","some","select","newSelected","add","delete","toggleSelect","selectAll","someSelected","size","allSelected","data","useSelection","Error"],"sources":["../../../../src/labs/VDataTable/composables/select.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { ItemProps } from '@/composables/items'\nimport type { DataTableItem } from '../types'\n\nexport const makeDataTableSelectProps = propsFactory({\n showSelect: Boolean,\n modelValue: {\n type: Array as PropType<any[]>,\n default: () => ([]),\n },\n}, 'v-data-table-select')\n\nexport const VDataTableSelectionSymbol: InjectionKey<{\n toggleSelect: (item: DataTableItem) => void\n select: (items: DataTableItem[], value: boolean) => void\n selectAll: (value: boolean) => void\n isSelected: (items: DataTableItem[]) => boolean\n isSomeSelected: (items: DataTableItem[]) => boolean\n someSelected: Ref<boolean>\n allSelected: Ref<boolean>\n}> = Symbol.for('vuetify:data-table-selection')\n\ntype SelectionProps = Pick<ItemProps, 'itemValue'> & { modelValue: any[], 'onUpdate:modelValue': ((value: any[]) => void) | undefined }\n\nexport function provideSelection (props: SelectionProps, allItems: Ref<DataTableItem[]>) {\n const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {\n return new Set(v)\n }, v => {\n return [...v.values()]\n })\n\n function isSelected (items: DataTableItem[]) {\n return items.every(item => selected.value.has(item.value))\n }\n\n function isSomeSelected (items: DataTableItem[]) {\n return items.some(item => selected.value.has(item.value))\n }\n\n function select (items: DataTableItem[], value: boolean) {\n const newSelected = new Set(selected.value)\n\n for (const item of items) {\n if (value) newSelected.add(item.value)\n else newSelected.delete(item.value)\n }\n\n selected.value = newSelected\n }\n\n function toggleSelect (item: DataTableItem) {\n select([item], !isSelected([item]))\n }\n\n function selectAll (value: boolean) {\n select(allItems.value, value)\n }\n\n const someSelected = computed(() => selected.value.size > 0)\n const allSelected = computed(() => isSelected(allItems.value))\n\n const data = { toggleSelect, select, selectAll, isSelected, isSomeSelected, someSelected, allSelected }\n\n provide(VDataTableSelectionSymbol, data)\n\n return data\n}\n\nexport function useSelection () {\n const data = inject(VDataTableSelectionSymbol)\n\n if (!data) throw new Error('Missing selection!')\n\n return data\n}\n"],"mappings":"AAAA;AAAA,SACSA,eAAe,iDAExB;AACA,SAASC,QAAQ,EAAEC,MAAM,EAAEC,OAAO,QAAQ,KAAK;AAAA,SACtCC,YAAY,mCAErB;AAKA,OAAO,MAAMC,wBAAwB,GAAGD,YAAY,CAAC;EACnDE,UAAU,EAAEC,OAAO;EACnBC,UAAU,EAAE;IACVC,IAAI,EAAEC,KAAwB;IAC9BC,OAAO,EAAE,MAAO;EAClB;AACF,CAAC,EAAE,qBAAqB,CAAC;AAEzB,OAAO,MAAMC,yBAQX,GAAGC,MAAM,CAACC,GAAG,CAAC,8BAA8B,CAAC;AAI/C,OAAO,SAASC,gBAAgB,CAAEC,KAAqB,EAAEC,QAA8B,EAAE;EACvF,MAAMC,QAAQ,GAAGlB,eAAe,CAACgB,KAAK,EAAE,YAAY,EAAEA,KAAK,CAACR,UAAU,EAAEW,CAAC,IAAI;IAC3E,OAAO,IAAIC,GAAG,CAACD,CAAC,CAAC;EACnB,CAAC,EAAEA,CAAC,IAAI;IACN,OAAO,CAAC,GAAGA,CAAC,CAACE,MAAM,EAAE,CAAC;EACxB,CAAC,CAAC;EAEF,SAASC,UAAU,CAAEC,KAAsB,EAAE;IAC3C,OAAOA,KAAK,CAACC,KAAK,CAACC,IAAI,IAAIP,QAAQ,CAACQ,KAAK,CAACC,GAAG,CAACF,IAAI,CAACC,KAAK,CAAC,CAAC;EAC5D;EAEA,SAASE,cAAc,CAAEL,KAAsB,EAAE;IAC/C,OAAOA,KAAK,CAACM,IAAI,CAACJ,IAAI,IAAIP,QAAQ,CAACQ,KAAK,CAACC,GAAG,CAACF,IAAI,CAACC,KAAK,CAAC,CAAC;EAC3D;EAEA,SAASI,MAAM,CAAEP,KAAsB,EAAEG,KAAc,EAAE;IACvD,MAAMK,WAAW,GAAG,IAAIX,GAAG,CAACF,QAAQ,CAACQ,KAAK,CAAC;IAE3C,KAAK,MAAMD,IAAI,IAAIF,KAAK,EAAE;MACxB,IAAIG,KAAK,EAAEK,WAAW,CAACC,GAAG,CAACP,IAAI,CAACC,KAAK,CAAC,MACjCK,WAAW,CAACE,MAAM,CAACR,IAAI,CAACC,KAAK,CAAC;IACrC;IAEAR,QAAQ,CAACQ,KAAK,GAAGK,WAAW;EAC9B;EAEA,SAASG,YAAY,CAAET,IAAmB,EAAE;IAC1CK,MAAM,CAAC,CAACL,IAAI,CAAC,EAAE,CAACH,UAAU,CAAC,CAACG,IAAI,CAAC,CAAC,CAAC;EACrC;EAEA,SAASU,SAAS,CAAET,KAAc,EAAE;IAClCI,MAAM,CAACb,QAAQ,CAACS,KAAK,EAAEA,KAAK,CAAC;EAC/B;EAEA,MAAMU,YAAY,GAAGnC,QAAQ,CAAC,MAAMiB,QAAQ,CAACQ,KAAK,CAACW,IAAI,GAAG,CAAC,CAAC;EAC5D,MAAMC,WAAW,GAAGrC,QAAQ,CAAC,MAAMqB,UAAU,CAACL,QAAQ,CAACS,KAAK,CAAC,CAAC;EAE9D,MAAMa,IAAI,GAAG;IAAEL,YAAY;IAAEJ,MAAM;IAAEK,SAAS;IAAEb,UAAU;IAAEM,cAAc;IAAEQ,YAAY;IAAEE;EAAY,CAAC;EAEvGnC,OAAO,CAACS,yBAAyB,EAAE2B,IAAI,CAAC;EAExC,OAAOA,IAAI;AACb;AAEA,OAAO,SAASC,YAAY,GAAI;EAC9B,MAAMD,IAAI,GAAGrC,MAAM,CAACU,yBAAyB,CAAC;EAE9C,IAAI,CAAC2B,IAAI,EAAE,MAAM,IAAIE,KAAK,CAAC,oBAAoB,CAAC;EAEhD,OAAOF,IAAI;AACb"}
@@ -1,6 +1,6 @@
1
1
  // Composables
2
2
  import { useProxiedModel } from "../../../composables/proxiedModel.mjs"; // Utilities
3
- import { computed, inject, provide } from 'vue';
3
+ import { computed, inject, provide, toRef } from 'vue';
4
4
  import { getObjectValueByPath, propsFactory } from "../../../util/index.mjs"; // Types
5
5
  export const makeDataTableSortProps = propsFactory({
6
6
  sortBy: {
@@ -13,13 +13,28 @@ export const makeDataTableSortProps = propsFactory({
13
13
  const VDataTableSortSymbol = Symbol.for('vuetify:data-table-sort');
14
14
  export function createSort(props) {
15
15
  const sortBy = useProxiedModel(props, 'sortBy');
16
+ const mustSort = toRef(props, 'mustSort');
17
+ const multiSort = toRef(props, 'multiSort');
18
+ return {
19
+ sortBy,
20
+ mustSort,
21
+ multiSort
22
+ };
23
+ }
24
+ export function provideSort(options) {
25
+ const {
26
+ sortBy,
27
+ mustSort,
28
+ multiSort,
29
+ page
30
+ } = options;
16
31
  const toggleSort = key => {
17
32
  let newSortBy = sortBy.value.map(x => ({
18
33
  ...x
19
34
  })) ?? [];
20
35
  const item = newSortBy.find(x => x.key === key);
21
36
  if (!item) {
22
- if (props.multiSort) newSortBy = [...newSortBy, {
37
+ if (multiSort.value) newSortBy = [...newSortBy, {
23
38
  key,
24
39
  order: 'asc'
25
40
  }];else newSortBy = [{
@@ -27,7 +42,7 @@ export function createSort(props) {
27
42
  order: 'asc'
28
43
  }];
29
44
  } else if (item.order === 'desc') {
30
- if (props.mustSort) {
45
+ if (mustSort.value) {
31
46
  item.order = 'asc';
32
47
  } else {
33
48
  newSortBy = newSortBy.filter(x => x.key !== key);
@@ -36,6 +51,7 @@ export function createSort(props) {
36
51
  item.order = 'desc';
37
52
  }
38
53
  sortBy.value = newSortBy;
54
+ if (page) page.value = 1;
39
55
  };
40
56
  const data = {
41
57
  sortBy,
@@ -1 +1 @@
1
- {"version":3,"file":"sort.mjs","names":["useProxiedModel","computed","inject","provide","getObjectValueByPath","propsFactory","makeDataTableSortProps","sortBy","type","Array","default","multiSort","Boolean","mustSort","VDataTableSortSymbol","Symbol","for","createSort","props","toggleSort","key","newSortBy","value","map","x","item","find","order","filter","data","useSort","Error","useSortedItems","items","columns","customSorters","reduce","obj","sort","sortedItems","length","sortItems","sortByItems","locale","stringCollator","Intl","Collator","sensitivity","usage","a","b","i","sortKey","sortOrder","sortA","raw","sortB","customResult","Date","getTime","s","toString","toLocaleLowerCase","isNaN","Number","compare"],"sources":["../../../../src/labs/VDataTable/composables/sort.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide } from 'vue'\nimport { getObjectValueByPath, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { InternalItem } from '@/composables/items'\nimport type { DataTableCompareFunction, DataTableItem, InternalDataTableHeader } from '../types'\n\nexport const makeDataTableSortProps = propsFactory({\n sortBy: {\n type: Array as PropType<SortItem[]>,\n default: () => ([]),\n },\n multiSort: Boolean,\n mustSort: Boolean,\n}, 'v-data-table-sort')\n\nconst VDataTableSortSymbol: InjectionKey<{\n sortBy: Ref<readonly SortItem[]>\n toggleSort: (key: string) => void\n}> = Symbol.for('vuetify:data-table-sort')\n\nexport type SortItem = { key: string, order?: boolean | 'asc' | 'desc' }\n\nexport function createSort (props: {\n sortBy: SortItem[]\n 'onUpdate:sortBy': ((value: any) => void) | undefined\n mustSort: boolean\n multiSort: boolean\n}) {\n const sortBy = useProxiedModel(props, 'sortBy')\n\n const toggleSort = (key: string) => {\n let newSortBy = sortBy.value.map(x => ({ ...x })) ?? []\n const item = newSortBy.find(x => x.key === key)\n\n if (!item) {\n if (props.multiSort) newSortBy = [...newSortBy, { key, order: 'asc' }]\n else newSortBy = [{ key, order: 'asc' }]\n } else if (item.order === 'desc') {\n if (props.mustSort) {\n item.order = 'asc'\n } else {\n newSortBy = newSortBy.filter(x => x.key !== key)\n }\n } else {\n item.order = 'desc'\n }\n\n sortBy.value = newSortBy\n }\n\n const data = { sortBy, toggleSort }\n\n provide(VDataTableSortSymbol, data)\n\n return data\n}\n\nexport function useSort () {\n const data = inject(VDataTableSortSymbol)\n\n if (!data) throw new Error('Missing sort!')\n\n return data\n}\n\nexport function useSortedItems (items: Ref<DataTableItem[]>, sortBy: Ref<readonly SortItem[]>, columns: Ref<InternalDataTableHeader[]>) {\n // TODO: Put this in separate prop customKeySort to match filter composable?\n const customSorters = computed(() => {\n return columns.value.reduce<Record<string, DataTableCompareFunction>>((obj, item) => {\n if (item.sort) obj[item.key] = item.sort\n\n return obj\n }, {})\n })\n\n const sortedItems = computed(() => {\n if (!sortBy.value.length) return items.value\n\n return sortItems(items.value, sortBy.value, 'en', customSorters.value)\n })\n\n return { sortedItems }\n}\n\nexport function sortItems<T extends InternalItem> (\n items: T[],\n sortByItems: readonly SortItem[],\n locale: string,\n customSorters?: Record<string, DataTableCompareFunction>\n): T[] {\n const stringCollator = new Intl.Collator(locale, { sensitivity: 'accent', usage: 'sort' })\n\n return [...items].sort((a, b) => {\n for (let i = 0; i < sortByItems.length; i++) {\n const sortKey = sortByItems[i].key\n const sortOrder = sortByItems[i].order\n\n if (sortOrder === false) continue\n\n let sortA = getObjectValueByPath(a.raw, sortKey)\n let sortB = getObjectValueByPath(b.raw, sortKey)\n\n if (sortOrder === 'desc') {\n [sortA, sortB] = [sortB, sortA]\n }\n\n if (customSorters?.[sortKey]) {\n const customResult = customSorters[sortKey](sortA, sortB)\n\n if (!customResult) continue\n\n return customResult\n }\n\n // Check if both cannot be evaluated\n if (sortA == null || sortB == null) {\n continue\n }\n\n // Dates should be compared numerically\n if (sortA instanceof Date && sortB instanceof Date) {\n return sortA.getTime() - sortB.getTime()\n }\n\n [sortA, sortB] = [sortA, sortB].map(s => (s || '').toString().toLocaleLowerCase())\n\n if (sortA !== sortB) {\n if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB)\n return stringCollator.compare(sortA, sortB)\n }\n }\n\n return 0\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"sort.mjs","names":["useProxiedModel","computed","inject","provide","toRef","getObjectValueByPath","propsFactory","makeDataTableSortProps","sortBy","type","Array","default","multiSort","Boolean","mustSort","VDataTableSortSymbol","Symbol","for","createSort","props","provideSort","options","page","toggleSort","key","newSortBy","value","map","x","item","find","order","filter","data","useSort","Error","useSortedItems","items","columns","customSorters","reduce","obj","sort","sortedItems","length","sortItems","sortByItems","locale","stringCollator","Intl","Collator","sensitivity","usage","a","b","i","sortKey","sortOrder","sortA","raw","sortB","customResult","Date","getTime","s","toString","toLocaleLowerCase","isNaN","Number","compare"],"sources":["../../../../src/labs/VDataTable/composables/sort.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide, toRef } from 'vue'\nimport { getObjectValueByPath, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { InternalItem } from '@/composables/items'\nimport type { DataTableCompareFunction, DataTableItem, InternalDataTableHeader } from '../types'\n\nexport const makeDataTableSortProps = propsFactory({\n sortBy: {\n type: Array as PropType<SortItem[]>,\n default: () => ([]),\n },\n multiSort: Boolean,\n mustSort: Boolean,\n}, 'v-data-table-sort')\n\nconst VDataTableSortSymbol: InjectionKey<{\n sortBy: Ref<readonly SortItem[]>\n toggleSort: (key: string) => void\n}> = Symbol.for('vuetify:data-table-sort')\n\nexport type SortItem = { key: string, order?: boolean | 'asc' | 'desc' }\n\ntype SortProps = {\n sortBy: SortItem[]\n 'onUpdate:sortBy': ((value: any) => void) | undefined\n mustSort: boolean\n multiSort: boolean\n}\n\nexport function createSort (props: SortProps) {\n const sortBy = useProxiedModel(props, 'sortBy')\n const mustSort = toRef(props, 'mustSort')\n const multiSort = toRef(props, 'multiSort')\n\n return { sortBy, mustSort, multiSort }\n}\n\nexport function provideSort (options: {\n sortBy: Ref<readonly SortItem[]>\n mustSort: Ref<boolean>\n multiSort: Ref<boolean>\n page?: Ref<number>\n}) {\n const { sortBy, mustSort, multiSort, page } = options\n\n const toggleSort = (key: string) => {\n let newSortBy = sortBy.value.map(x => ({ ...x })) ?? []\n const item = newSortBy.find(x => x.key === key)\n\n if (!item) {\n if (multiSort.value) newSortBy = [...newSortBy, { key, order: 'asc' }]\n else newSortBy = [{ key, order: 'asc' }]\n } else if (item.order === 'desc') {\n if (mustSort.value) {\n item.order = 'asc'\n } else {\n newSortBy = newSortBy.filter(x => x.key !== key)\n }\n } else {\n item.order = 'desc'\n }\n\n sortBy.value = newSortBy\n if (page) page.value = 1\n }\n\n const data = { sortBy, toggleSort }\n\n provide(VDataTableSortSymbol, data)\n\n return data\n}\n\nexport function useSort () {\n const data = inject(VDataTableSortSymbol)\n\n if (!data) throw new Error('Missing sort!')\n\n return data\n}\n\nexport function useSortedItems (items: Ref<DataTableItem[]>, sortBy: Ref<readonly SortItem[]>, columns: Ref<InternalDataTableHeader[]>) {\n // TODO: Put this in separate prop customKeySort to match filter composable?\n const customSorters = computed(() => {\n return columns.value.reduce<Record<string, DataTableCompareFunction>>((obj, item) => {\n if (item.sort) obj[item.key] = item.sort\n\n return obj\n }, {})\n })\n\n const sortedItems = computed(() => {\n if (!sortBy.value.length) return items.value\n\n return sortItems(items.value, sortBy.value, 'en', customSorters.value)\n })\n\n return { sortedItems }\n}\n\nexport function sortItems<T extends InternalItem> (\n items: T[],\n sortByItems: readonly SortItem[],\n locale: string,\n customSorters?: Record<string, DataTableCompareFunction>\n): T[] {\n const stringCollator = new Intl.Collator(locale, { sensitivity: 'accent', usage: 'sort' })\n\n return [...items].sort((a, b) => {\n for (let i = 0; i < sortByItems.length; i++) {\n const sortKey = sortByItems[i].key\n const sortOrder = sortByItems[i].order\n\n if (sortOrder === false) continue\n\n let sortA = getObjectValueByPath(a.raw, sortKey)\n let sortB = getObjectValueByPath(b.raw, sortKey)\n\n if (sortOrder === 'desc') {\n [sortA, sortB] = [sortB, sortA]\n }\n\n if (customSorters?.[sortKey]) {\n const customResult = customSorters[sortKey](sortA, sortB)\n\n if (!customResult) continue\n\n return customResult\n }\n\n // Check if both cannot be evaluated\n if (sortA == null || sortB == null) {\n continue\n }\n\n // Dates should be compared numerically\n if (sortA instanceof Date && sortB instanceof Date) {\n return sortA.getTime() - sortB.getTime()\n }\n\n [sortA, sortB] = [sortA, sortB].map(s => (s || '').toString().toLocaleLowerCase())\n\n if (sortA !== sortB) {\n if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB)\n return stringCollator.compare(sortA, sortB)\n }\n }\n\n return 0\n })\n}\n"],"mappings":"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"}