@vuetify/nightly 3.6.0-alpha.2-dev.2024-04-29 → 3.6.1-dev.2024-05-01

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 (140) hide show
  1. package/CHANGELOG.md +2 -100
  2. package/dist/_component-variables-labs.sass +0 -2
  3. package/dist/_component-variables.sass +2 -0
  4. package/dist/json/attributes.json +61 -9
  5. package/dist/json/importMap-labs.json +30 -46
  6. package/dist/json/importMap.json +116 -96
  7. package/dist/json/tags.json +19 -1
  8. package/dist/json/web-types.json +906 -494
  9. package/dist/vuetify-labs.css +2122 -2065
  10. package/dist/vuetify-labs.d.ts +5250 -5026
  11. package/dist/vuetify-labs.esm.js +3962 -3756
  12. package/dist/vuetify-labs.esm.js.map +1 -1
  13. package/dist/vuetify-labs.js +3962 -3756
  14. package/dist/vuetify-labs.min.css +2 -2
  15. package/dist/vuetify.css +930 -722
  16. package/dist/vuetify.d.ts +3309 -968
  17. package/dist/vuetify.esm.js +1832 -908
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +1832 -908
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +624 -564
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/{labs → components}/VConfirmEdit/VConfirmEdit.mjs +1 -1
  25. package/lib/components/VConfirmEdit/VConfirmEdit.mjs.map +1 -0
  26. package/lib/components/VConfirmEdit/__test__/VConfirmEdit.spec.cy.mjs.map +1 -0
  27. package/lib/components/VConfirmEdit/index.mjs.map +1 -0
  28. package/lib/components/VDataIterator/index.d.mts +2 -0
  29. package/lib/components/VDataTable/VDataTable.css +35 -0
  30. package/lib/components/VDataTable/VDataTable.sass +34 -1
  31. package/lib/components/VDataTable/VDataTableFooter.css +5 -9
  32. package/lib/components/VDataTable/VDataTableFooter.sass +21 -21
  33. package/lib/components/VDataTable/VDataTableHeaders.mjs +66 -7
  34. package/lib/components/VDataTable/VDataTableHeaders.mjs.map +1 -1
  35. package/lib/components/VDataTable/VDataTableRow.mjs +45 -10
  36. package/lib/components/VDataTable/VDataTableRow.mjs.map +1 -1
  37. package/lib/components/VDataTable/VDataTableRows.mjs +8 -2
  38. package/lib/components/VDataTable/VDataTableRows.mjs.map +1 -1
  39. package/lib/components/VDataTable/_variables.scss +9 -4
  40. package/lib/components/VDataTable/index.d.mts +263 -217
  41. package/lib/components/VDataTable/types.mjs.map +1 -1
  42. package/lib/components/VDatePicker/VDatePicker.mjs +4 -4
  43. package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
  44. package/lib/{labs → components}/VEmptyState/VEmptyState.mjs +4 -4
  45. package/lib/components/VEmptyState/VEmptyState.mjs.map +1 -0
  46. package/lib/components/VEmptyState/index.mjs.map +1 -0
  47. package/lib/{labs → components}/VFab/VFab.mjs +1 -1
  48. package/lib/components/VFab/VFab.mjs.map +1 -0
  49. package/lib/components/VFab/index.mjs.map +1 -0
  50. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +1 -1
  51. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +1 -1
  52. package/lib/components/VSnackbar/VSnackbar.mjs +12 -5
  53. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  54. package/lib/components/VSparkline/VBarline.mjs.map +1 -0
  55. package/lib/components/VSparkline/VSparkline.mjs +44 -320
  56. package/lib/components/VSparkline/VSparkline.mjs.map +1 -1
  57. package/lib/components/VSparkline/VTrendline.mjs.map +1 -0
  58. package/lib/components/VSparkline/index.mjs +1 -3
  59. package/lib/components/VSparkline/index.mjs.map +1 -1
  60. package/lib/components/VSparkline/util/line.mjs.map +1 -0
  61. package/lib/components/VSparkline/util/path.mjs.map +1 -0
  62. package/lib/components/VSpeedDial/VSpeedDial.mjs +68 -85
  63. package/lib/components/VSpeedDial/VSpeedDial.mjs.map +1 -1
  64. package/lib/components/VSpeedDial/VSpeedDial.sass +20 -72
  65. package/lib/components/VSpeedDial/index.mjs +1 -3
  66. package/lib/components/VSpeedDial/index.mjs.map +1 -1
  67. package/lib/components/index.d.mts +3289 -954
  68. package/lib/components/index.mjs +6 -2
  69. package/lib/components/index.mjs.map +1 -1
  70. package/lib/composables/directiveComponent.mjs +1 -1
  71. package/lib/composables/directiveComponent.mjs.map +1 -1
  72. package/lib/entry-bundler.mjs +1 -1
  73. package/lib/entry-bundler.mjs.map +1 -1
  74. package/lib/framework.mjs +1 -1
  75. package/lib/framework.mjs.map +1 -1
  76. package/lib/index.d.mts +44 -43
  77. package/lib/labs/VDateInput/VDateInput.mjs +2 -2
  78. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -1
  79. package/lib/labs/VDateInput/index.d.mts +14 -14
  80. package/lib/labs/VPullToRefresh/VPullToRefresh.css +27 -0
  81. package/lib/labs/VPullToRefresh/VPullToRefresh.mjs +117 -0
  82. package/lib/labs/VPullToRefresh/VPullToRefresh.mjs.map +1 -0
  83. package/lib/labs/VPullToRefresh/VPullToRefresh.sass +23 -0
  84. package/lib/labs/VPullToRefresh/index.d.mts +189 -0
  85. package/lib/labs/VPullToRefresh/index.mjs +2 -0
  86. package/lib/labs/VPullToRefresh/index.mjs.map +1 -0
  87. package/lib/labs/components.d.mts +1505 -3641
  88. package/lib/labs/components.mjs +1 -5
  89. package/lib/labs/components.mjs.map +1 -1
  90. package/lib/locale/ko.mjs +8 -8
  91. package/lib/locale/ko.mjs.map +1 -1
  92. package/package.json +1 -1
  93. package/lib/components/VSparkline/helpers/core.mjs +0 -49
  94. package/lib/components/VSparkline/helpers/core.mjs.map +0 -1
  95. package/lib/components/VSparkline/helpers/math.mjs +0 -34
  96. package/lib/components/VSparkline/helpers/math.mjs.map +0 -1
  97. package/lib/components/VSparkline/helpers/path.mjs +0 -27
  98. package/lib/components/VSparkline/helpers/path.mjs.map +0 -1
  99. package/lib/components/VSpeedDial/_variables.scss +0 -5
  100. package/lib/labs/VConfirmEdit/VConfirmEdit.mjs.map +0 -1
  101. package/lib/labs/VConfirmEdit/__test__/VConfirmEdit.spec.cy.mjs.map +0 -1
  102. package/lib/labs/VConfirmEdit/index.mjs.map +0 -1
  103. package/lib/labs/VEmptyState/VEmptyState.mjs.map +0 -1
  104. package/lib/labs/VEmptyState/index.mjs.map +0 -1
  105. package/lib/labs/VFab/VFab.mjs.map +0 -1
  106. package/lib/labs/VFab/index.mjs.map +0 -1
  107. package/lib/labs/VSparkline/VBarline.mjs.map +0 -1
  108. package/lib/labs/VSparkline/VSparkline.mjs +0 -49
  109. package/lib/labs/VSparkline/VSparkline.mjs.map +0 -1
  110. package/lib/labs/VSparkline/VTrendline.mjs.map +0 -1
  111. package/lib/labs/VSparkline/index.mjs +0 -2
  112. package/lib/labs/VSparkline/index.mjs.map +0 -1
  113. package/lib/labs/VSparkline/util/line.mjs.map +0 -1
  114. package/lib/labs/VSparkline/util/path.mjs.map +0 -1
  115. package/lib/labs/VSpeedDial/VSpeedDial.mjs +0 -77
  116. package/lib/labs/VSpeedDial/VSpeedDial.mjs.map +0 -1
  117. package/lib/labs/VSpeedDial/VSpeedDial.sass +0 -27
  118. package/lib/labs/VSpeedDial/index.mjs +0 -2
  119. package/lib/labs/VSpeedDial/index.mjs.map +0 -1
  120. /package/lib/{labs → components}/VConfirmEdit/__test__/VConfirmEdit.spec.cy.mjs +0 -0
  121. /package/lib/{labs → components}/VConfirmEdit/index.d.mts +0 -0
  122. /package/lib/{labs → components}/VConfirmEdit/index.mjs +0 -0
  123. /package/lib/{labs → components}/VEmptyState/VEmptyState.css +0 -0
  124. /package/lib/{labs → components}/VEmptyState/VEmptyState.sass +0 -0
  125. /package/lib/{labs → components}/VEmptyState/_variables.scss +0 -0
  126. /package/lib/{labs → components}/VEmptyState/index.d.mts +0 -0
  127. /package/lib/{labs → components}/VEmptyState/index.mjs +0 -0
  128. /package/lib/{labs → components}/VFab/VFab.css +0 -0
  129. /package/lib/{labs → components}/VFab/VFab.sass +0 -0
  130. /package/lib/{labs → components}/VFab/_mixins.scss +0 -0
  131. /package/lib/{labs → components}/VFab/_variables.scss +0 -0
  132. /package/lib/{labs → components}/VFab/index.d.mts +0 -0
  133. /package/lib/{labs → components}/VFab/index.mjs +0 -0
  134. /package/lib/{labs → components}/VSparkline/VBarline.mjs +0 -0
  135. /package/lib/{labs → components}/VSparkline/VTrendline.mjs +0 -0
  136. /package/lib/{labs → components}/VSparkline/index.d.mts +0 -0
  137. /package/lib/{labs → components}/VSparkline/util/line.mjs +0 -0
  138. /package/lib/{labs → components}/VSparkline/util/path.mjs +0 -0
  139. /package/lib/{labs → components}/VSpeedDial/VSpeedDial.css +0 -0
  140. /package/lib/{labs → components}/VSpeedDial/index.d.mts +0 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.6.0-alpha.2-dev.2024-04-29
2
+ * Vuetify v3.6.1-dev.2024-05-01
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -17272,764 +17272,255 @@ const VCombobox = genericComponent()({
17272
17272
  }
17273
17273
  });
17274
17274
 
17275
- // Composables
17275
+ // Utilities
17276
17276
 
17277
17277
  // Types
17278
17278
 
17279
- const makeDataTableExpandProps = propsFactory({
17280
- expandOnClick: Boolean,
17281
- showExpand: Boolean,
17282
- expanded: {
17283
- type: Array,
17284
- default: () => []
17279
+ const firstDay = {
17280
+ '001': 1,
17281
+ AD: 1,
17282
+ AE: 6,
17283
+ AF: 6,
17284
+ AG: 0,
17285
+ AI: 1,
17286
+ AL: 1,
17287
+ AM: 1,
17288
+ AN: 1,
17289
+ AR: 1,
17290
+ AS: 0,
17291
+ AT: 1,
17292
+ AU: 1,
17293
+ AX: 1,
17294
+ AZ: 1,
17295
+ BA: 1,
17296
+ BD: 0,
17297
+ BE: 1,
17298
+ BG: 1,
17299
+ BH: 6,
17300
+ BM: 1,
17301
+ BN: 1,
17302
+ BR: 0,
17303
+ BS: 0,
17304
+ BT: 0,
17305
+ BW: 0,
17306
+ BY: 1,
17307
+ BZ: 0,
17308
+ CA: 0,
17309
+ CH: 1,
17310
+ CL: 1,
17311
+ CM: 1,
17312
+ CN: 1,
17313
+ CO: 0,
17314
+ CR: 1,
17315
+ CY: 1,
17316
+ CZ: 1,
17317
+ DE: 1,
17318
+ DJ: 6,
17319
+ DK: 1,
17320
+ DM: 0,
17321
+ DO: 0,
17322
+ DZ: 6,
17323
+ EC: 1,
17324
+ EE: 1,
17325
+ EG: 6,
17326
+ ES: 1,
17327
+ ET: 0,
17328
+ FI: 1,
17329
+ FJ: 1,
17330
+ FO: 1,
17331
+ FR: 1,
17332
+ GB: 1,
17333
+ 'GB-alt-variant': 0,
17334
+ GE: 1,
17335
+ GF: 1,
17336
+ GP: 1,
17337
+ GR: 1,
17338
+ GT: 0,
17339
+ GU: 0,
17340
+ HK: 0,
17341
+ HN: 0,
17342
+ HR: 1,
17343
+ HU: 1,
17344
+ ID: 0,
17345
+ IE: 1,
17346
+ IL: 0,
17347
+ IN: 0,
17348
+ IQ: 6,
17349
+ IR: 6,
17350
+ IS: 1,
17351
+ IT: 1,
17352
+ JM: 0,
17353
+ JO: 6,
17354
+ JP: 0,
17355
+ KE: 0,
17356
+ KG: 1,
17357
+ KH: 0,
17358
+ KR: 0,
17359
+ KW: 6,
17360
+ KZ: 1,
17361
+ LA: 0,
17362
+ LB: 1,
17363
+ LI: 1,
17364
+ LK: 1,
17365
+ LT: 1,
17366
+ LU: 1,
17367
+ LV: 1,
17368
+ LY: 6,
17369
+ MC: 1,
17370
+ MD: 1,
17371
+ ME: 1,
17372
+ MH: 0,
17373
+ MK: 1,
17374
+ MM: 0,
17375
+ MN: 1,
17376
+ MO: 0,
17377
+ MQ: 1,
17378
+ MT: 0,
17379
+ MV: 5,
17380
+ MX: 0,
17381
+ MY: 1,
17382
+ MZ: 0,
17383
+ NI: 0,
17384
+ NL: 1,
17385
+ NO: 1,
17386
+ NP: 0,
17387
+ NZ: 1,
17388
+ OM: 6,
17389
+ PA: 0,
17390
+ PE: 0,
17391
+ PH: 0,
17392
+ PK: 0,
17393
+ PL: 1,
17394
+ PR: 0,
17395
+ PT: 0,
17396
+ PY: 0,
17397
+ QA: 6,
17398
+ RE: 1,
17399
+ RO: 1,
17400
+ RS: 1,
17401
+ RU: 1,
17402
+ SA: 0,
17403
+ SD: 6,
17404
+ SE: 1,
17405
+ SG: 0,
17406
+ SI: 1,
17407
+ SK: 1,
17408
+ SM: 1,
17409
+ SV: 0,
17410
+ SY: 6,
17411
+ TH: 0,
17412
+ TJ: 1,
17413
+ TM: 1,
17414
+ TR: 1,
17415
+ TT: 0,
17416
+ TW: 0,
17417
+ UA: 1,
17418
+ UM: 0,
17419
+ US: 0,
17420
+ UY: 1,
17421
+ UZ: 1,
17422
+ VA: 1,
17423
+ VE: 0,
17424
+ VI: 0,
17425
+ VN: 1,
17426
+ WS: 0,
17427
+ XK: 1,
17428
+ YE: 0,
17429
+ ZA: 0,
17430
+ ZW: 0
17431
+ };
17432
+ function getWeekArray(date, locale) {
17433
+ const weeks = [];
17434
+ let currentWeek = [];
17435
+ const firstDayOfMonth = startOfMonth(date);
17436
+ const lastDayOfMonth = endOfMonth(date);
17437
+ const firstDayWeekIndex = (firstDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()] + 7) % 7;
17438
+ const lastDayWeekIndex = (lastDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()] + 7) % 7;
17439
+ for (let i = 0; i < firstDayWeekIndex; i++) {
17440
+ const adjacentDay = new Date(firstDayOfMonth);
17441
+ adjacentDay.setDate(adjacentDay.getDate() - (firstDayWeekIndex - i));
17442
+ currentWeek.push(adjacentDay);
17285
17443
  }
17286
- }, 'DataTable-expand');
17287
- const VDataTableExpandedKey = Symbol.for('vuetify:datatable:expanded');
17288
- function provideExpanded(props) {
17289
- const expandOnClick = toRef(props, 'expandOnClick');
17290
- const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {
17291
- return new Set(v);
17292
- }, v => {
17293
- return [...v.values()];
17294
- });
17295
- function expand(item, value) {
17296
- const newExpanded = new Set(expanded.value);
17297
- if (!value) {
17298
- newExpanded.delete(item.value);
17299
- } else {
17300
- newExpanded.add(item.value);
17444
+ for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
17445
+ const day = new Date(date.getFullYear(), date.getMonth(), i);
17446
+
17447
+ // Add the day to the current week
17448
+ currentWeek.push(day);
17449
+
17450
+ // If the current week has 7 days, add it to the weeks array and start a new week
17451
+ if (currentWeek.length === 7) {
17452
+ weeks.push(currentWeek);
17453
+ currentWeek = [];
17301
17454
  }
17302
- expanded.value = newExpanded;
17303
17455
  }
17304
- function isExpanded(item) {
17305
- return expanded.value.has(item.value);
17456
+ for (let i = 1; i < 7 - lastDayWeekIndex; i++) {
17457
+ const adjacentDay = new Date(lastDayOfMonth);
17458
+ adjacentDay.setDate(adjacentDay.getDate() + i);
17459
+ currentWeek.push(adjacentDay);
17306
17460
  }
17307
- function toggleExpand(item) {
17308
- expand(item, !isExpanded(item));
17461
+ if (currentWeek.length > 0) {
17462
+ weeks.push(currentWeek);
17309
17463
  }
17310
- const data = {
17311
- expand,
17312
- expanded,
17313
- expandOnClick,
17314
- isExpanded,
17315
- toggleExpand
17316
- };
17317
- provide(VDataTableExpandedKey, data);
17318
- return data;
17464
+ return weeks;
17319
17465
  }
17320
- function useExpanded() {
17321
- const data = inject$1(VDataTableExpandedKey);
17322
- if (!data) throw new Error('foo');
17323
- return data;
17466
+ function startOfWeek(date, locale) {
17467
+ const d = new Date(date);
17468
+ while (d.getDay() !== (firstDay[locale.slice(-2).toUpperCase()] ?? 0)) {
17469
+ d.setDate(d.getDate() - 1);
17470
+ }
17471
+ return d;
17324
17472
  }
17325
-
17326
- // Composables
17327
-
17328
- // Types
17329
-
17330
- const makeDataTableGroupProps = propsFactory({
17331
- groupBy: {
17332
- type: Array,
17333
- default: () => []
17473
+ function endOfWeek(date, locale) {
17474
+ const d = new Date(date);
17475
+ const lastDay = ((firstDay[locale.slice(-2).toUpperCase()] ?? 0) + 6) % 7;
17476
+ while (d.getDay() !== lastDay) {
17477
+ d.setDate(d.getDate() + 1);
17334
17478
  }
17335
- }, 'DataTable-group');
17336
- const VDataTableGroupSymbol = Symbol.for('vuetify:data-table-group');
17337
- function createGroupBy(props) {
17338
- const groupBy = useProxiedModel(props, 'groupBy');
17339
- return {
17340
- groupBy
17341
- };
17479
+ return d;
17342
17480
  }
17343
- function provideGroupBy(options) {
17344
- const {
17345
- groupBy,
17346
- sortBy
17347
- } = options;
17348
- const opened = ref(new Set());
17349
- const sortByWithGroups = computed(() => {
17350
- return groupBy.value.map(val => ({
17351
- ...val,
17352
- order: val.order ?? false
17353
- })).concat(sortBy.value);
17354
- });
17355
- function isGroupOpen(group) {
17356
- return opened.value.has(group.id);
17357
- }
17358
- function toggleGroup(group) {
17359
- const newOpened = new Set(opened.value);
17360
- if (!isGroupOpen(group)) newOpened.add(group.id);else newOpened.delete(group.id);
17361
- opened.value = newOpened;
17362
- }
17363
- function extractRows(items) {
17364
- function dive(group) {
17365
- const arr = [];
17366
- for (const item of group.items) {
17367
- if ('type' in item && item.type === 'group') {
17368
- arr.push(...dive(item));
17369
- } else {
17370
- arr.push(item);
17371
- }
17372
- }
17373
- return arr;
17374
- }
17375
- return dive({
17376
- type: 'group',
17377
- items,
17378
- id: 'dummy',
17379
- key: 'dummy',
17380
- value: 'dummy',
17381
- depth: 0
17382
- });
17383
- }
17384
-
17385
- // onBeforeMount(() => {
17386
- // for (const key of groupedItems.value.keys()) {
17387
- // opened.value.add(key)
17388
- // }
17389
- // })
17390
-
17391
- const data = {
17392
- sortByWithGroups,
17393
- toggleGroup,
17394
- opened,
17395
- groupBy,
17396
- extractRows,
17397
- isGroupOpen
17398
- };
17399
- provide(VDataTableGroupSymbol, data);
17400
- return data;
17401
- }
17402
- function useGroupBy() {
17403
- const data = inject$1(VDataTableGroupSymbol);
17404
- if (!data) throw new Error('Missing group!');
17405
- return data;
17481
+ function startOfMonth(date) {
17482
+ return new Date(date.getFullYear(), date.getMonth(), 1);
17406
17483
  }
17407
- function groupItemsByProperty(items, groupBy) {
17408
- if (!items.length) return [];
17409
- const groups = new Map();
17410
- for (const item of items) {
17411
- const value = getObjectValueByPath(item.raw, groupBy);
17412
- if (!groups.has(value)) {
17413
- groups.set(value, []);
17414
- }
17415
- groups.get(value).push(item);
17416
- }
17417
- return groups;
17484
+ function endOfMonth(date) {
17485
+ return new Date(date.getFullYear(), date.getMonth() + 1, 0);
17418
17486
  }
17419
- function groupItems(items, groupBy) {
17420
- let depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
17421
- let prefix = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'root';
17422
- if (!groupBy.length) return [];
17423
- const groupedItems = groupItemsByProperty(items, groupBy[0]);
17424
- const groups = [];
17425
- const rest = groupBy.slice(1);
17426
- groupedItems.forEach((items, value) => {
17427
- const key = groupBy[0];
17428
- const id = `${prefix}_${key}_${value}`;
17429
- groups.push({
17430
- depth,
17431
- id,
17432
- key,
17433
- value,
17434
- items: rest.length ? groupItems(items, rest, depth + 1, id) : items,
17435
- type: 'group'
17436
- });
17437
- });
17438
- return groups;
17487
+ function parseLocalDate(value) {
17488
+ const parts = value.split('-').map(Number);
17489
+
17490
+ // new Date() uses local time zone when passing individual date component values
17491
+ return new Date(parts[0], parts[1] - 1, parts[2]);
17439
17492
  }
17440
- function flattenItems(items, opened) {
17441
- const flatItems = [];
17442
- for (const item of items) {
17443
- // TODO: make this better
17444
- if ('type' in item && item.type === 'group') {
17445
- if (item.value != null) {
17446
- flatItems.push(item);
17447
- }
17448
- if (opened.has(item.id) || item.value == null) {
17449
- flatItems.push(...flattenItems(item.items, opened));
17450
- }
17493
+ const _YYYMMDD = /^([12]\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\d|3[01]))$/;
17494
+ function date(value) {
17495
+ if (value == null) return new Date();
17496
+ if (value instanceof Date) return value;
17497
+ if (typeof value === 'string') {
17498
+ let parsed;
17499
+ if (_YYYMMDD.test(value)) {
17500
+ return parseLocalDate(value);
17451
17501
  } else {
17452
- flatItems.push(item);
17502
+ parsed = Date.parse(value);
17453
17503
  }
17504
+ if (!isNaN(parsed)) return new Date(parsed);
17454
17505
  }
17455
- return flatItems;
17456
- }
17457
- function useGroupedItems(items, groupBy, opened) {
17458
- const flatItems = computed(() => {
17459
- if (!groupBy.value.length) return items.value;
17460
- const groupedItems = groupItems(items.value, groupBy.value.map(item => item.key));
17461
- return flattenItems(groupedItems, opened.value);
17462
- });
17463
- return {
17464
- flatItems
17465
- };
17506
+ return null;
17466
17507
  }
17467
-
17468
- // Utilities
17469
-
17470
- // Types
17471
-
17472
- function useOptions(_ref) {
17473
- let {
17474
- page,
17475
- itemsPerPage,
17476
- sortBy,
17477
- groupBy,
17478
- search
17479
- } = _ref;
17480
- const vm = getCurrentInstance('VDataTable');
17481
- const options = computed(() => ({
17482
- page: page.value,
17483
- itemsPerPage: itemsPerPage.value,
17484
- sortBy: sortBy.value,
17485
- groupBy: groupBy.value,
17486
- search: search.value
17487
- }));
17488
- let oldOptions = null;
17489
- watch(options, () => {
17490
- if (deepEqual(oldOptions, options.value)) return;
17491
-
17492
- // Reset page when searching
17493
- if (oldOptions && oldOptions.search !== options.value.search) {
17494
- page.value = 1;
17495
- }
17496
- vm.emit('update:options', options.value);
17497
- oldOptions = options.value;
17498
- }, {
17499
- deep: true,
17500
- immediate: true
17508
+ const sundayJanuarySecond2000 = new Date(2000, 0, 2);
17509
+ function getWeekdays(locale) {
17510
+ const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
17511
+ return createRange(7).map(i => {
17512
+ const weekday = new Date(sundayJanuarySecond2000);
17513
+ weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
17514
+ return new Intl.DateTimeFormat(locale, {
17515
+ weekday: 'narrow'
17516
+ }).format(weekday);
17501
17517
  });
17502
17518
  }
17503
-
17504
- // Composables
17505
-
17506
- // Types
17507
-
17508
- const makeDataTablePaginateProps = propsFactory({
17509
- page: {
17510
- type: [Number, String],
17511
- default: 1
17512
- },
17513
- itemsPerPage: {
17514
- type: [Number, String],
17515
- default: 10
17516
- }
17517
- }, 'DataTable-paginate');
17518
- const VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');
17519
- function createPagination(props) {
17520
- const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1));
17521
- const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10));
17522
- return {
17523
- page,
17524
- itemsPerPage
17525
- };
17526
- }
17527
- function providePagination(options) {
17528
- const {
17529
- page,
17530
- itemsPerPage,
17531
- itemsLength
17532
- } = options;
17533
- const startIndex = computed(() => {
17534
- if (itemsPerPage.value === -1) return 0;
17535
- return itemsPerPage.value * (page.value - 1);
17536
- });
17537
- const stopIndex = computed(() => {
17538
- if (itemsPerPage.value === -1) return itemsLength.value;
17539
- return Math.min(itemsLength.value, startIndex.value + itemsPerPage.value);
17540
- });
17541
- const pageCount = computed(() => {
17542
- if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
17543
- return Math.ceil(itemsLength.value / itemsPerPage.value);
17544
- });
17545
- watchEffect(() => {
17546
- if (page.value > pageCount.value) {
17547
- page.value = pageCount.value;
17548
- }
17549
- });
17550
- function setItemsPerPage(value) {
17551
- itemsPerPage.value = value;
17552
- page.value = 1;
17553
- }
17554
- function nextPage() {
17555
- page.value = clamp(page.value + 1, 1, pageCount.value);
17556
- }
17557
- function prevPage() {
17558
- page.value = clamp(page.value - 1, 1, pageCount.value);
17559
- }
17560
- function setPage(value) {
17561
- page.value = clamp(value, 1, pageCount.value);
17562
- }
17563
- const data = {
17564
- page,
17565
- itemsPerPage,
17566
- startIndex,
17567
- stopIndex,
17568
- pageCount,
17569
- itemsLength,
17570
- nextPage,
17571
- prevPage,
17572
- setPage,
17573
- setItemsPerPage
17574
- };
17575
- provide(VDataTablePaginationSymbol, data);
17576
- return data;
17577
- }
17578
- function usePagination() {
17579
- const data = inject$1(VDataTablePaginationSymbol);
17580
- if (!data) throw new Error('Missing pagination!');
17581
- return data;
17582
- }
17583
- function usePaginatedItems(options) {
17584
- const vm = getCurrentInstance('usePaginatedItems');
17585
- const {
17586
- items,
17587
- startIndex,
17588
- stopIndex,
17589
- itemsPerPage
17590
- } = options;
17591
- const paginatedItems = computed(() => {
17592
- if (itemsPerPage.value <= 0) return items.value;
17593
- return items.value.slice(startIndex.value, stopIndex.value);
17594
- });
17595
- watch(paginatedItems, val => {
17596
- vm.emit('update:currentItems', val);
17597
- });
17598
- return {
17599
- paginatedItems
17600
- };
17601
- }
17602
-
17603
- // Composables
17604
-
17605
- // Types
17606
-
17607
- const singleSelectStrategy = {
17608
- showSelectAll: false,
17609
- allSelected: () => [],
17610
- select: _ref => {
17611
- let {
17612
- items,
17613
- value
17614
- } = _ref;
17615
- return new Set(value ? [toRaw(items[0]?.value)] : []);
17616
- },
17617
- selectAll: _ref2 => {
17618
- let {
17619
- selected
17620
- } = _ref2;
17621
- return selected;
17622
- }
17623
- };
17624
- const pageSelectStrategy = {
17625
- showSelectAll: true,
17626
- allSelected: _ref3 => {
17627
- let {
17628
- currentPage
17629
- } = _ref3;
17630
- return currentPage;
17631
- },
17632
- select: _ref4 => {
17633
- let {
17634
- items,
17635
- value,
17636
- selected
17637
- } = _ref4;
17638
- for (const item of items) {
17639
- if (value) selected.add(toRaw(item.value));else selected.delete(toRaw(item.value));
17640
- }
17641
- return selected;
17642
- },
17643
- selectAll: _ref5 => {
17644
- let {
17645
- value,
17646
- currentPage,
17647
- selected
17648
- } = _ref5;
17649
- return pageSelectStrategy.select({
17650
- items: currentPage,
17651
- value,
17652
- selected
17653
- });
17654
- }
17655
- };
17656
- const allSelectStrategy = {
17657
- showSelectAll: true,
17658
- allSelected: _ref6 => {
17659
- let {
17660
- allItems
17661
- } = _ref6;
17662
- return allItems;
17663
- },
17664
- select: _ref7 => {
17665
- let {
17666
- items,
17667
- value,
17668
- selected
17669
- } = _ref7;
17670
- for (const item of items) {
17671
- if (value) selected.add(toRaw(item.value));else selected.delete(toRaw(item.value));
17672
- }
17673
- return selected;
17674
- },
17675
- selectAll: _ref8 => {
17676
- let {
17677
- value,
17678
- allItems,
17679
- selected
17680
- } = _ref8;
17681
- return allSelectStrategy.select({
17682
- items: allItems,
17683
- value,
17684
- selected
17685
- });
17686
- }
17687
- };
17688
- const makeDataTableSelectProps = propsFactory({
17689
- showSelect: Boolean,
17690
- selectStrategy: {
17691
- type: [String, Object],
17692
- default: 'page'
17693
- },
17694
- modelValue: {
17695
- type: Array,
17696
- default: () => []
17697
- },
17698
- valueComparator: {
17699
- type: Function,
17700
- default: deepEqual
17701
- }
17702
- }, 'DataTable-select');
17703
- const VDataTableSelectionSymbol = Symbol.for('vuetify:data-table-selection');
17704
- function provideSelection(props, _ref9) {
17705
- let {
17706
- allItems,
17707
- currentPage
17708
- } = _ref9;
17709
- const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {
17710
- return new Set(wrapInArray(v).map(v => {
17711
- return allItems.value.find(item => props.valueComparator(v, item.value))?.value ?? v;
17712
- }));
17713
- }, v => {
17714
- return [...v.values()];
17715
- });
17716
- const allSelectable = computed(() => allItems.value.filter(item => item.selectable));
17717
- const currentPageSelectable = computed(() => currentPage.value.filter(item => item.selectable));
17718
- const selectStrategy = computed(() => {
17719
- if (typeof props.selectStrategy === 'object') return props.selectStrategy;
17720
- switch (props.selectStrategy) {
17721
- case 'single':
17722
- return singleSelectStrategy;
17723
- case 'all':
17724
- return allSelectStrategy;
17725
- case 'page':
17726
- default:
17727
- return pageSelectStrategy;
17728
- }
17729
- });
17730
- function isSelected(items) {
17731
- return wrapInArray(items).every(item => selected.value.has(toRaw(item.value)));
17732
- }
17733
- function isSomeSelected(items) {
17734
- return wrapInArray(items).some(item => selected.value.has(toRaw(item.value)));
17735
- }
17736
- function select(items, value) {
17737
- const newSelected = selectStrategy.value.select({
17738
- items,
17739
- value,
17740
- selected: new Set(selected.value)
17741
- });
17742
- selected.value = newSelected;
17743
- }
17744
- function toggleSelect(item) {
17745
- const newItem = toRef(item);
17746
- select([newItem.value], !isSelected([newItem.value]));
17747
- }
17748
- function selectAll(value) {
17749
- const newSelected = selectStrategy.value.selectAll({
17750
- value,
17751
- allItems: allSelectable.value,
17752
- currentPage: currentPageSelectable.value,
17753
- selected: new Set(selected.value)
17754
- });
17755
- selected.value = newSelected;
17756
- }
17757
- const someSelected = computed(() => selected.value.size > 0);
17758
- const allSelected = computed(() => {
17759
- const items = selectStrategy.value.allSelected({
17760
- allItems: allSelectable.value,
17761
- currentPage: currentPageSelectable.value
17762
- });
17763
- return !!items.length && isSelected(items);
17764
- });
17765
- const data = {
17766
- toggleSelect,
17767
- select,
17768
- selectAll,
17769
- isSelected,
17770
- isSomeSelected,
17771
- someSelected,
17772
- allSelected,
17773
- showSelectAll: selectStrategy.value.showSelectAll
17774
- };
17775
- provide(VDataTableSelectionSymbol, data);
17776
- return data;
17777
- }
17778
- function useSelection() {
17779
- const data = inject$1(VDataTableSelectionSymbol);
17780
- if (!data) throw new Error('Missing selection!');
17781
- return data;
17782
- }
17783
-
17784
- // Utilities
17785
-
17786
- // Types
17787
-
17788
- const firstDay = {
17789
- '001': 1,
17790
- AD: 1,
17791
- AE: 6,
17792
- AF: 6,
17793
- AG: 0,
17794
- AI: 1,
17795
- AL: 1,
17796
- AM: 1,
17797
- AN: 1,
17798
- AR: 1,
17799
- AS: 0,
17800
- AT: 1,
17801
- AU: 1,
17802
- AX: 1,
17803
- AZ: 1,
17804
- BA: 1,
17805
- BD: 0,
17806
- BE: 1,
17807
- BG: 1,
17808
- BH: 6,
17809
- BM: 1,
17810
- BN: 1,
17811
- BR: 0,
17812
- BS: 0,
17813
- BT: 0,
17814
- BW: 0,
17815
- BY: 1,
17816
- BZ: 0,
17817
- CA: 0,
17818
- CH: 1,
17819
- CL: 1,
17820
- CM: 1,
17821
- CN: 1,
17822
- CO: 0,
17823
- CR: 1,
17824
- CY: 1,
17825
- CZ: 1,
17826
- DE: 1,
17827
- DJ: 6,
17828
- DK: 1,
17829
- DM: 0,
17830
- DO: 0,
17831
- DZ: 6,
17832
- EC: 1,
17833
- EE: 1,
17834
- EG: 6,
17835
- ES: 1,
17836
- ET: 0,
17837
- FI: 1,
17838
- FJ: 1,
17839
- FO: 1,
17840
- FR: 1,
17841
- GB: 1,
17842
- 'GB-alt-variant': 0,
17843
- GE: 1,
17844
- GF: 1,
17845
- GP: 1,
17846
- GR: 1,
17847
- GT: 0,
17848
- GU: 0,
17849
- HK: 0,
17850
- HN: 0,
17851
- HR: 1,
17852
- HU: 1,
17853
- ID: 0,
17854
- IE: 1,
17855
- IL: 0,
17856
- IN: 0,
17857
- IQ: 6,
17858
- IR: 6,
17859
- IS: 1,
17860
- IT: 1,
17861
- JM: 0,
17862
- JO: 6,
17863
- JP: 0,
17864
- KE: 0,
17865
- KG: 1,
17866
- KH: 0,
17867
- KR: 0,
17868
- KW: 6,
17869
- KZ: 1,
17870
- LA: 0,
17871
- LB: 1,
17872
- LI: 1,
17873
- LK: 1,
17874
- LT: 1,
17875
- LU: 1,
17876
- LV: 1,
17877
- LY: 6,
17878
- MC: 1,
17879
- MD: 1,
17880
- ME: 1,
17881
- MH: 0,
17882
- MK: 1,
17883
- MM: 0,
17884
- MN: 1,
17885
- MO: 0,
17886
- MQ: 1,
17887
- MT: 0,
17888
- MV: 5,
17889
- MX: 0,
17890
- MY: 1,
17891
- MZ: 0,
17892
- NI: 0,
17893
- NL: 1,
17894
- NO: 1,
17895
- NP: 0,
17896
- NZ: 1,
17897
- OM: 6,
17898
- PA: 0,
17899
- PE: 0,
17900
- PH: 0,
17901
- PK: 0,
17902
- PL: 1,
17903
- PR: 0,
17904
- PT: 0,
17905
- PY: 0,
17906
- QA: 6,
17907
- RE: 1,
17908
- RO: 1,
17909
- RS: 1,
17910
- RU: 1,
17911
- SA: 0,
17912
- SD: 6,
17913
- SE: 1,
17914
- SG: 0,
17915
- SI: 1,
17916
- SK: 1,
17917
- SM: 1,
17918
- SV: 0,
17919
- SY: 6,
17920
- TH: 0,
17921
- TJ: 1,
17922
- TM: 1,
17923
- TR: 1,
17924
- TT: 0,
17925
- TW: 0,
17926
- UA: 1,
17927
- UM: 0,
17928
- US: 0,
17929
- UY: 1,
17930
- UZ: 1,
17931
- VA: 1,
17932
- VE: 0,
17933
- VI: 0,
17934
- VN: 1,
17935
- WS: 0,
17936
- XK: 1,
17937
- YE: 0,
17938
- ZA: 0,
17939
- ZW: 0
17940
- };
17941
- function getWeekArray(date, locale) {
17942
- const weeks = [];
17943
- let currentWeek = [];
17944
- const firstDayOfMonth = startOfMonth(date);
17945
- const lastDayOfMonth = endOfMonth(date);
17946
- const firstDayWeekIndex = (firstDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()] + 7) % 7;
17947
- const lastDayWeekIndex = (lastDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()] + 7) % 7;
17948
- for (let i = 0; i < firstDayWeekIndex; i++) {
17949
- const adjacentDay = new Date(firstDayOfMonth);
17950
- adjacentDay.setDate(adjacentDay.getDate() - (firstDayWeekIndex - i));
17951
- currentWeek.push(adjacentDay);
17952
- }
17953
- for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
17954
- const day = new Date(date.getFullYear(), date.getMonth(), i);
17955
-
17956
- // Add the day to the current week
17957
- currentWeek.push(day);
17958
-
17959
- // If the current week has 7 days, add it to the weeks array and start a new week
17960
- if (currentWeek.length === 7) {
17961
- weeks.push(currentWeek);
17962
- currentWeek = [];
17963
- }
17964
- }
17965
- for (let i = 1; i < 7 - lastDayWeekIndex; i++) {
17966
- const adjacentDay = new Date(lastDayOfMonth);
17967
- adjacentDay.setDate(adjacentDay.getDate() + i);
17968
- currentWeek.push(adjacentDay);
17969
- }
17970
- if (currentWeek.length > 0) {
17971
- weeks.push(currentWeek);
17972
- }
17973
- return weeks;
17974
- }
17975
- function startOfWeek(date, locale) {
17976
- const d = new Date(date);
17977
- while (d.getDay() !== (firstDay[locale.slice(-2).toUpperCase()] ?? 0)) {
17978
- d.setDate(d.getDate() - 1);
17979
- }
17980
- return d;
17981
- }
17982
- function endOfWeek(date, locale) {
17983
- const d = new Date(date);
17984
- const lastDay = ((firstDay[locale.slice(-2).toUpperCase()] ?? 0) + 6) % 7;
17985
- while (d.getDay() !== lastDay) {
17986
- d.setDate(d.getDate() + 1);
17987
- }
17988
- return d;
17989
- }
17990
- function startOfMonth(date) {
17991
- return new Date(date.getFullYear(), date.getMonth(), 1);
17992
- }
17993
- function endOfMonth(date) {
17994
- return new Date(date.getFullYear(), date.getMonth() + 1, 0);
17995
- }
17996
- function parseLocalDate(value) {
17997
- const parts = value.split('-').map(Number);
17998
-
17999
- // new Date() uses local time zone when passing individual date component values
18000
- return new Date(parts[0], parts[1] - 1, parts[2]);
18001
- }
18002
- const _YYYMMDD = /^([12]\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\d|3[01]))$/;
18003
- function date(value) {
18004
- if (value == null) return new Date();
18005
- if (value instanceof Date) return value;
18006
- if (typeof value === 'string') {
18007
- let parsed;
18008
- if (_YYYMMDD.test(value)) {
18009
- return parseLocalDate(value);
18010
- } else {
18011
- parsed = Date.parse(value);
18012
- }
18013
- if (!isNaN(parsed)) return new Date(parsed);
18014
- }
18015
- return null;
18016
- }
18017
- const sundayJanuarySecond2000 = new Date(2000, 0, 2);
18018
- function getWeekdays(locale) {
18019
- const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
18020
- return createRange(7).map(i => {
18021
- const weekday = new Date(sundayJanuarySecond2000);
18022
- weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
18023
- return new Intl.DateTimeFormat(locale, {
18024
- weekday: 'narrow'
18025
- }).format(weekday);
18026
- });
18027
- }
18028
- function format(value, formatString, locale, formats) {
18029
- const newDate = date(value) ?? new Date();
18030
- const customFormat = formats?.[formatString];
18031
- if (typeof customFormat === 'function') {
18032
- return customFormat(newDate, formatString, locale);
17519
+ function format(value, formatString, locale, formats) {
17520
+ const newDate = date(value) ?? new Date();
17521
+ const customFormat = formats?.[formatString];
17522
+ if (typeof customFormat === 'function') {
17523
+ return customFormat(newDate, formatString, locale);
18033
17524
  }
18034
17525
  let options = {};
18035
17526
  switch (formatString) {
@@ -18434,178 +17925,759 @@ class VuetifyDateAdapter {
18434
17925
  isEqual(date, comparing) {
18435
17926
  return isEqual(date, comparing);
18436
17927
  }
18437
- isValid(date) {
18438
- return isValid(date);
17928
+ isValid(date) {
17929
+ return isValid(date);
17930
+ }
17931
+ isWithinRange(date, range) {
17932
+ return isWithinRange(date, range);
17933
+ }
17934
+ isAfter(date, comparing) {
17935
+ return isAfter(date, comparing);
17936
+ }
17937
+ isAfterDay(date, comparing) {
17938
+ return isAfterDay(date, comparing);
17939
+ }
17940
+ isBefore(date, comparing) {
17941
+ return !isAfter(date, comparing) && !isEqual(date, comparing);
17942
+ }
17943
+ isSameDay(date, comparing) {
17944
+ return isSameDay(date, comparing);
17945
+ }
17946
+ isSameMonth(date, comparing) {
17947
+ return isSameMonth(date, comparing);
17948
+ }
17949
+ isSameYear(date, comparing) {
17950
+ return isSameYear(date, comparing);
17951
+ }
17952
+ setMinutes(date, count) {
17953
+ return setMinutes(date, count);
17954
+ }
17955
+ setHours(date, count) {
17956
+ return setHours(date, count);
17957
+ }
17958
+ setMonth(date, count) {
17959
+ return setMonth(date, count);
17960
+ }
17961
+ setDate(date, day) {
17962
+ return setDate(date, day);
17963
+ }
17964
+ setYear(date, year) {
17965
+ return setYear(date, year);
17966
+ }
17967
+ getDiff(date, comparing, unit) {
17968
+ return getDiff(date, comparing, unit);
17969
+ }
17970
+ getWeekdays() {
17971
+ return getWeekdays(this.locale);
17972
+ }
17973
+ getYear(date) {
17974
+ return getYear(date);
17975
+ }
17976
+ getMonth(date) {
17977
+ return getMonth(date);
17978
+ }
17979
+ getDate(date) {
17980
+ return getDate(date);
17981
+ }
17982
+ getNextMonth(date) {
17983
+ return getNextMonth(date);
17984
+ }
17985
+ getPreviousMonth(date) {
17986
+ return getPreviousMonth(date);
17987
+ }
17988
+ getHours(date) {
17989
+ return getHours(date);
17990
+ }
17991
+ getMinutes(date) {
17992
+ return getMinutes(date);
17993
+ }
17994
+ startOfDay(date) {
17995
+ return startOfDay(date);
17996
+ }
17997
+ endOfDay(date) {
17998
+ return endOfDay(date);
17999
+ }
18000
+ startOfYear(date) {
18001
+ return startOfYear(date);
18002
+ }
18003
+ endOfYear(date) {
18004
+ return endOfYear(date);
18005
+ }
18006
+ }
18007
+
18008
+ // Composables
18009
+ const DateOptionsSymbol = Symbol.for('vuetify:date-options');
18010
+ const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
18011
+ function createDate(options, locale) {
18012
+ const _options = mergeDeep({
18013
+ adapter: VuetifyDateAdapter,
18014
+ locale: {
18015
+ af: 'af-ZA',
18016
+ // ar: '', # not the same value for all variants
18017
+ bg: 'bg-BG',
18018
+ ca: 'ca-ES',
18019
+ ckb: '',
18020
+ cs: 'cs-CZ',
18021
+ de: 'de-DE',
18022
+ el: 'el-GR',
18023
+ en: 'en-US',
18024
+ // es: '', # not the same value for all variants
18025
+ et: 'et-EE',
18026
+ fa: 'fa-IR',
18027
+ fi: 'fi-FI',
18028
+ // fr: '', #not the same value for all variants
18029
+ hr: 'hr-HR',
18030
+ hu: 'hu-HU',
18031
+ he: 'he-IL',
18032
+ id: 'id-ID',
18033
+ it: 'it-IT',
18034
+ ja: 'ja-JP',
18035
+ ko: 'ko-KR',
18036
+ lv: 'lv-LV',
18037
+ lt: 'lt-LT',
18038
+ nl: 'nl-NL',
18039
+ no: 'no-NO',
18040
+ pl: 'pl-PL',
18041
+ pt: 'pt-PT',
18042
+ ro: 'ro-RO',
18043
+ ru: 'ru-RU',
18044
+ sk: 'sk-SK',
18045
+ sl: 'sl-SI',
18046
+ srCyrl: 'sr-SP',
18047
+ srLatn: 'sr-SP',
18048
+ sv: 'sv-SE',
18049
+ th: 'th-TH',
18050
+ tr: 'tr-TR',
18051
+ az: 'az-AZ',
18052
+ uk: 'uk-UA',
18053
+ vi: 'vi-VN',
18054
+ zhHans: 'zh-CN',
18055
+ zhHant: 'zh-TW'
18056
+ }
18057
+ }, options);
18058
+ return {
18059
+ options: _options,
18060
+ instance: createInstance(_options, locale)
18061
+ };
18062
+ }
18063
+ function createInstance(options, locale) {
18064
+ const instance = reactive(typeof options.adapter === 'function'
18065
+ // eslint-disable-next-line new-cap
18066
+ ? new options.adapter({
18067
+ locale: options.locale[locale.current.value] ?? locale.current.value,
18068
+ formats: options.formats
18069
+ }) : options.adapter);
18070
+ watch(locale.current, value => {
18071
+ instance.locale = options.locale[value] ?? value ?? instance.locale;
18072
+ });
18073
+ return instance;
18074
+ }
18075
+ function useDate() {
18076
+ const options = inject$1(DateOptionsSymbol);
18077
+ if (!options) throw new Error('[Vuetify] Could not find injected date options');
18078
+ const locale = useLocale();
18079
+ return createInstance(options, locale);
18080
+ }
18081
+
18082
+ // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
18083
+ function getWeek(adapter, value) {
18084
+ const date = adapter.toJsDate(value);
18085
+ let year = date.getFullYear();
18086
+ let d1w1 = new Date(year, 0, 1);
18087
+ if (date < d1w1) {
18088
+ year = year - 1;
18089
+ d1w1 = new Date(year, 0, 1);
18090
+ } else {
18091
+ const tv = new Date(year + 1, 0, 1);
18092
+ if (date >= tv) {
18093
+ year = year + 1;
18094
+ d1w1 = tv;
18095
+ }
18096
+ }
18097
+ const diffTime = Math.abs(date.getTime() - d1w1.getTime());
18098
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
18099
+ return Math.floor(diffDays / 7) + 1;
18100
+ }
18101
+
18102
+ // Types
18103
+
18104
+ const makeVConfirmEditProps = propsFactory({
18105
+ modelValue: null,
18106
+ color: String,
18107
+ cancelText: {
18108
+ type: String,
18109
+ default: '$vuetify.confirmEdit.cancel'
18110
+ },
18111
+ okText: {
18112
+ type: String,
18113
+ default: '$vuetify.confirmEdit.ok'
18439
18114
  }
18440
- isWithinRange(date, range) {
18441
- return isWithinRange(date, range);
18115
+ }, 'VConfirmEdit');
18116
+ const VConfirmEdit = genericComponent()({
18117
+ name: 'VConfirmEdit',
18118
+ props: makeVConfirmEditProps(),
18119
+ emits: {
18120
+ cancel: () => true,
18121
+ save: value => true,
18122
+ 'update:modelValue': value => true
18123
+ },
18124
+ setup(props, _ref) {
18125
+ let {
18126
+ emit,
18127
+ slots
18128
+ } = _ref;
18129
+ const model = useProxiedModel(props, 'modelValue');
18130
+ const internalModel = ref();
18131
+ watchEffect(() => {
18132
+ internalModel.value = structuredClone(toRaw(model.value));
18133
+ });
18134
+ const {
18135
+ t
18136
+ } = useLocale();
18137
+ const isPristine = computed(() => {
18138
+ return deepEqual(model.value, internalModel.value);
18139
+ });
18140
+ function save() {
18141
+ model.value = internalModel.value;
18142
+ emit('save', internalModel.value);
18143
+ }
18144
+ function cancel() {
18145
+ internalModel.value = structuredClone(toRaw(model.value));
18146
+ emit('cancel');
18147
+ }
18148
+ let actionsUsed = false;
18149
+ useRender(() => {
18150
+ const actions = createVNode(Fragment, null, [createVNode(VBtn, {
18151
+ "disabled": isPristine.value,
18152
+ "variant": "text",
18153
+ "color": props.color,
18154
+ "onClick": cancel,
18155
+ "text": t(props.cancelText)
18156
+ }, null), createVNode(VBtn, {
18157
+ "disabled": isPristine.value,
18158
+ "variant": "text",
18159
+ "color": props.color,
18160
+ "onClick": save,
18161
+ "text": t(props.okText)
18162
+ }, null)]);
18163
+ return createVNode(Fragment, null, [slots.default?.({
18164
+ model: internalModel,
18165
+ get actions() {
18166
+ actionsUsed = true;
18167
+ return actions;
18168
+ }
18169
+ }), !actionsUsed && actions]);
18170
+ });
18442
18171
  }
18443
- isAfter(date, comparing) {
18444
- return isAfter(date, comparing);
18172
+ });
18173
+
18174
+ // Composables
18175
+
18176
+ // Types
18177
+
18178
+ const makeDataTableExpandProps = propsFactory({
18179
+ expandOnClick: Boolean,
18180
+ showExpand: Boolean,
18181
+ expanded: {
18182
+ type: Array,
18183
+ default: () => []
18445
18184
  }
18446
- isAfterDay(date, comparing) {
18447
- return isAfterDay(date, comparing);
18185
+ }, 'DataTable-expand');
18186
+ const VDataTableExpandedKey = Symbol.for('vuetify:datatable:expanded');
18187
+ function provideExpanded(props) {
18188
+ const expandOnClick = toRef(props, 'expandOnClick');
18189
+ const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {
18190
+ return new Set(v);
18191
+ }, v => {
18192
+ return [...v.values()];
18193
+ });
18194
+ function expand(item, value) {
18195
+ const newExpanded = new Set(expanded.value);
18196
+ if (!value) {
18197
+ newExpanded.delete(item.value);
18198
+ } else {
18199
+ newExpanded.add(item.value);
18200
+ }
18201
+ expanded.value = newExpanded;
18448
18202
  }
18449
- isBefore(date, comparing) {
18450
- return !isAfter(date, comparing) && !isEqual(date, comparing);
18203
+ function isExpanded(item) {
18204
+ return expanded.value.has(item.value);
18451
18205
  }
18452
- isSameDay(date, comparing) {
18453
- return isSameDay(date, comparing);
18206
+ function toggleExpand(item) {
18207
+ expand(item, !isExpanded(item));
18454
18208
  }
18455
- isSameMonth(date, comparing) {
18456
- return isSameMonth(date, comparing);
18209
+ const data = {
18210
+ expand,
18211
+ expanded,
18212
+ expandOnClick,
18213
+ isExpanded,
18214
+ toggleExpand
18215
+ };
18216
+ provide(VDataTableExpandedKey, data);
18217
+ return data;
18218
+ }
18219
+ function useExpanded() {
18220
+ const data = inject$1(VDataTableExpandedKey);
18221
+ if (!data) throw new Error('foo');
18222
+ return data;
18223
+ }
18224
+
18225
+ // Composables
18226
+
18227
+ // Types
18228
+
18229
+ const makeDataTableGroupProps = propsFactory({
18230
+ groupBy: {
18231
+ type: Array,
18232
+ default: () => []
18457
18233
  }
18458
- isSameYear(date, comparing) {
18459
- return isSameYear(date, comparing);
18234
+ }, 'DataTable-group');
18235
+ const VDataTableGroupSymbol = Symbol.for('vuetify:data-table-group');
18236
+ function createGroupBy(props) {
18237
+ const groupBy = useProxiedModel(props, 'groupBy');
18238
+ return {
18239
+ groupBy
18240
+ };
18241
+ }
18242
+ function provideGroupBy(options) {
18243
+ const {
18244
+ groupBy,
18245
+ sortBy
18246
+ } = options;
18247
+ const opened = ref(new Set());
18248
+ const sortByWithGroups = computed(() => {
18249
+ return groupBy.value.map(val => ({
18250
+ ...val,
18251
+ order: val.order ?? false
18252
+ })).concat(sortBy.value);
18253
+ });
18254
+ function isGroupOpen(group) {
18255
+ return opened.value.has(group.id);
18460
18256
  }
18461
- setMinutes(date, count) {
18462
- return setMinutes(date, count);
18257
+ function toggleGroup(group) {
18258
+ const newOpened = new Set(opened.value);
18259
+ if (!isGroupOpen(group)) newOpened.add(group.id);else newOpened.delete(group.id);
18260
+ opened.value = newOpened;
18463
18261
  }
18464
- setHours(date, count) {
18465
- return setHours(date, count);
18262
+ function extractRows(items) {
18263
+ function dive(group) {
18264
+ const arr = [];
18265
+ for (const item of group.items) {
18266
+ if ('type' in item && item.type === 'group') {
18267
+ arr.push(...dive(item));
18268
+ } else {
18269
+ arr.push(item);
18270
+ }
18271
+ }
18272
+ return arr;
18273
+ }
18274
+ return dive({
18275
+ type: 'group',
18276
+ items,
18277
+ id: 'dummy',
18278
+ key: 'dummy',
18279
+ value: 'dummy',
18280
+ depth: 0
18281
+ });
18466
18282
  }
18467
- setMonth(date, count) {
18468
- return setMonth(date, count);
18283
+
18284
+ // onBeforeMount(() => {
18285
+ // for (const key of groupedItems.value.keys()) {
18286
+ // opened.value.add(key)
18287
+ // }
18288
+ // })
18289
+
18290
+ const data = {
18291
+ sortByWithGroups,
18292
+ toggleGroup,
18293
+ opened,
18294
+ groupBy,
18295
+ extractRows,
18296
+ isGroupOpen
18297
+ };
18298
+ provide(VDataTableGroupSymbol, data);
18299
+ return data;
18300
+ }
18301
+ function useGroupBy() {
18302
+ const data = inject$1(VDataTableGroupSymbol);
18303
+ if (!data) throw new Error('Missing group!');
18304
+ return data;
18305
+ }
18306
+ function groupItemsByProperty(items, groupBy) {
18307
+ if (!items.length) return [];
18308
+ const groups = new Map();
18309
+ for (const item of items) {
18310
+ const value = getObjectValueByPath(item.raw, groupBy);
18311
+ if (!groups.has(value)) {
18312
+ groups.set(value, []);
18313
+ }
18314
+ groups.get(value).push(item);
18469
18315
  }
18470
- setDate(date, day) {
18471
- return setDate(date, day);
18316
+ return groups;
18317
+ }
18318
+ function groupItems(items, groupBy) {
18319
+ let depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
18320
+ let prefix = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'root';
18321
+ if (!groupBy.length) return [];
18322
+ const groupedItems = groupItemsByProperty(items, groupBy[0]);
18323
+ const groups = [];
18324
+ const rest = groupBy.slice(1);
18325
+ groupedItems.forEach((items, value) => {
18326
+ const key = groupBy[0];
18327
+ const id = `${prefix}_${key}_${value}`;
18328
+ groups.push({
18329
+ depth,
18330
+ id,
18331
+ key,
18332
+ value,
18333
+ items: rest.length ? groupItems(items, rest, depth + 1, id) : items,
18334
+ type: 'group'
18335
+ });
18336
+ });
18337
+ return groups;
18338
+ }
18339
+ function flattenItems(items, opened) {
18340
+ const flatItems = [];
18341
+ for (const item of items) {
18342
+ // TODO: make this better
18343
+ if ('type' in item && item.type === 'group') {
18344
+ if (item.value != null) {
18345
+ flatItems.push(item);
18346
+ }
18347
+ if (opened.has(item.id) || item.value == null) {
18348
+ flatItems.push(...flattenItems(item.items, opened));
18349
+ }
18350
+ } else {
18351
+ flatItems.push(item);
18352
+ }
18472
18353
  }
18473
- setYear(date, year) {
18474
- return setYear(date, year);
18354
+ return flatItems;
18355
+ }
18356
+ function useGroupedItems(items, groupBy, opened) {
18357
+ const flatItems = computed(() => {
18358
+ if (!groupBy.value.length) return items.value;
18359
+ const groupedItems = groupItems(items.value, groupBy.value.map(item => item.key));
18360
+ return flattenItems(groupedItems, opened.value);
18361
+ });
18362
+ return {
18363
+ flatItems
18364
+ };
18365
+ }
18366
+
18367
+ // Utilities
18368
+
18369
+ // Types
18370
+
18371
+ function useOptions(_ref) {
18372
+ let {
18373
+ page,
18374
+ itemsPerPage,
18375
+ sortBy,
18376
+ groupBy,
18377
+ search
18378
+ } = _ref;
18379
+ const vm = getCurrentInstance('VDataTable');
18380
+ const options = computed(() => ({
18381
+ page: page.value,
18382
+ itemsPerPage: itemsPerPage.value,
18383
+ sortBy: sortBy.value,
18384
+ groupBy: groupBy.value,
18385
+ search: search.value
18386
+ }));
18387
+ let oldOptions = null;
18388
+ watch(options, () => {
18389
+ if (deepEqual(oldOptions, options.value)) return;
18390
+
18391
+ // Reset page when searching
18392
+ if (oldOptions && oldOptions.search !== options.value.search) {
18393
+ page.value = 1;
18394
+ }
18395
+ vm.emit('update:options', options.value);
18396
+ oldOptions = options.value;
18397
+ }, {
18398
+ deep: true,
18399
+ immediate: true
18400
+ });
18401
+ }
18402
+
18403
+ // Composables
18404
+
18405
+ // Types
18406
+
18407
+ const makeDataTablePaginateProps = propsFactory({
18408
+ page: {
18409
+ type: [Number, String],
18410
+ default: 1
18411
+ },
18412
+ itemsPerPage: {
18413
+ type: [Number, String],
18414
+ default: 10
18475
18415
  }
18476
- getDiff(date, comparing, unit) {
18477
- return getDiff(date, comparing, unit);
18416
+ }, 'DataTable-paginate');
18417
+ const VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');
18418
+ function createPagination(props) {
18419
+ const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1));
18420
+ const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10));
18421
+ return {
18422
+ page,
18423
+ itemsPerPage
18424
+ };
18425
+ }
18426
+ function providePagination(options) {
18427
+ const {
18428
+ page,
18429
+ itemsPerPage,
18430
+ itemsLength
18431
+ } = options;
18432
+ const startIndex = computed(() => {
18433
+ if (itemsPerPage.value === -1) return 0;
18434
+ return itemsPerPage.value * (page.value - 1);
18435
+ });
18436
+ const stopIndex = computed(() => {
18437
+ if (itemsPerPage.value === -1) return itemsLength.value;
18438
+ return Math.min(itemsLength.value, startIndex.value + itemsPerPage.value);
18439
+ });
18440
+ const pageCount = computed(() => {
18441
+ if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
18442
+ return Math.ceil(itemsLength.value / itemsPerPage.value);
18443
+ });
18444
+ watchEffect(() => {
18445
+ if (page.value > pageCount.value) {
18446
+ page.value = pageCount.value;
18447
+ }
18448
+ });
18449
+ function setItemsPerPage(value) {
18450
+ itemsPerPage.value = value;
18451
+ page.value = 1;
18478
18452
  }
18479
- getWeekdays() {
18480
- return getWeekdays(this.locale);
18453
+ function nextPage() {
18454
+ page.value = clamp(page.value + 1, 1, pageCount.value);
18481
18455
  }
18482
- getYear(date) {
18483
- return getYear(date);
18456
+ function prevPage() {
18457
+ page.value = clamp(page.value - 1, 1, pageCount.value);
18484
18458
  }
18485
- getMonth(date) {
18486
- return getMonth(date);
18459
+ function setPage(value) {
18460
+ page.value = clamp(value, 1, pageCount.value);
18487
18461
  }
18488
- getDate(date) {
18489
- return getDate(date);
18462
+ const data = {
18463
+ page,
18464
+ itemsPerPage,
18465
+ startIndex,
18466
+ stopIndex,
18467
+ pageCount,
18468
+ itemsLength,
18469
+ nextPage,
18470
+ prevPage,
18471
+ setPage,
18472
+ setItemsPerPage
18473
+ };
18474
+ provide(VDataTablePaginationSymbol, data);
18475
+ return data;
18476
+ }
18477
+ function usePagination() {
18478
+ const data = inject$1(VDataTablePaginationSymbol);
18479
+ if (!data) throw new Error('Missing pagination!');
18480
+ return data;
18481
+ }
18482
+ function usePaginatedItems(options) {
18483
+ const vm = getCurrentInstance('usePaginatedItems');
18484
+ const {
18485
+ items,
18486
+ startIndex,
18487
+ stopIndex,
18488
+ itemsPerPage
18489
+ } = options;
18490
+ const paginatedItems = computed(() => {
18491
+ if (itemsPerPage.value <= 0) return items.value;
18492
+ return items.value.slice(startIndex.value, stopIndex.value);
18493
+ });
18494
+ watch(paginatedItems, val => {
18495
+ vm.emit('update:currentItems', val);
18496
+ });
18497
+ return {
18498
+ paginatedItems
18499
+ };
18500
+ }
18501
+
18502
+ // Composables
18503
+
18504
+ // Types
18505
+
18506
+ const singleSelectStrategy = {
18507
+ showSelectAll: false,
18508
+ allSelected: () => [],
18509
+ select: _ref => {
18510
+ let {
18511
+ items,
18512
+ value
18513
+ } = _ref;
18514
+ return new Set(value ? [toRaw(items[0]?.value)] : []);
18515
+ },
18516
+ selectAll: _ref2 => {
18517
+ let {
18518
+ selected
18519
+ } = _ref2;
18520
+ return selected;
18490
18521
  }
18491
- getNextMonth(date) {
18492
- return getNextMonth(date);
18522
+ };
18523
+ const pageSelectStrategy = {
18524
+ showSelectAll: true,
18525
+ allSelected: _ref3 => {
18526
+ let {
18527
+ currentPage
18528
+ } = _ref3;
18529
+ return currentPage;
18530
+ },
18531
+ select: _ref4 => {
18532
+ let {
18533
+ items,
18534
+ value,
18535
+ selected
18536
+ } = _ref4;
18537
+ for (const item of items) {
18538
+ if (value) selected.add(toRaw(item.value));else selected.delete(toRaw(item.value));
18539
+ }
18540
+ return selected;
18541
+ },
18542
+ selectAll: _ref5 => {
18543
+ let {
18544
+ value,
18545
+ currentPage,
18546
+ selected
18547
+ } = _ref5;
18548
+ return pageSelectStrategy.select({
18549
+ items: currentPage,
18550
+ value,
18551
+ selected
18552
+ });
18493
18553
  }
18494
- getPreviousMonth(date) {
18495
- return getPreviousMonth(date);
18554
+ };
18555
+ const allSelectStrategy = {
18556
+ showSelectAll: true,
18557
+ allSelected: _ref6 => {
18558
+ let {
18559
+ allItems
18560
+ } = _ref6;
18561
+ return allItems;
18562
+ },
18563
+ select: _ref7 => {
18564
+ let {
18565
+ items,
18566
+ value,
18567
+ selected
18568
+ } = _ref7;
18569
+ for (const item of items) {
18570
+ if (value) selected.add(toRaw(item.value));else selected.delete(toRaw(item.value));
18571
+ }
18572
+ return selected;
18573
+ },
18574
+ selectAll: _ref8 => {
18575
+ let {
18576
+ value,
18577
+ allItems,
18578
+ selected
18579
+ } = _ref8;
18580
+ return allSelectStrategy.select({
18581
+ items: allItems,
18582
+ value,
18583
+ selected
18584
+ });
18496
18585
  }
18497
- getHours(date) {
18498
- return getHours(date);
18586
+ };
18587
+ const makeDataTableSelectProps = propsFactory({
18588
+ showSelect: Boolean,
18589
+ selectStrategy: {
18590
+ type: [String, Object],
18591
+ default: 'page'
18592
+ },
18593
+ modelValue: {
18594
+ type: Array,
18595
+ default: () => []
18596
+ },
18597
+ valueComparator: {
18598
+ type: Function,
18599
+ default: deepEqual
18499
18600
  }
18500
- getMinutes(date) {
18501
- return getMinutes(date);
18601
+ }, 'DataTable-select');
18602
+ const VDataTableSelectionSymbol = Symbol.for('vuetify:data-table-selection');
18603
+ function provideSelection(props, _ref9) {
18604
+ let {
18605
+ allItems,
18606
+ currentPage
18607
+ } = _ref9;
18608
+ const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {
18609
+ return new Set(wrapInArray(v).map(v => {
18610
+ return allItems.value.find(item => props.valueComparator(v, item.value))?.value ?? v;
18611
+ }));
18612
+ }, v => {
18613
+ return [...v.values()];
18614
+ });
18615
+ const allSelectable = computed(() => allItems.value.filter(item => item.selectable));
18616
+ const currentPageSelectable = computed(() => currentPage.value.filter(item => item.selectable));
18617
+ const selectStrategy = computed(() => {
18618
+ if (typeof props.selectStrategy === 'object') return props.selectStrategy;
18619
+ switch (props.selectStrategy) {
18620
+ case 'single':
18621
+ return singleSelectStrategy;
18622
+ case 'all':
18623
+ return allSelectStrategy;
18624
+ case 'page':
18625
+ default:
18626
+ return pageSelectStrategy;
18627
+ }
18628
+ });
18629
+ function isSelected(items) {
18630
+ return wrapInArray(items).every(item => selected.value.has(toRaw(item.value)));
18502
18631
  }
18503
- startOfDay(date) {
18504
- return startOfDay(date);
18632
+ function isSomeSelected(items) {
18633
+ return wrapInArray(items).some(item => selected.value.has(toRaw(item.value)));
18505
18634
  }
18506
- endOfDay(date) {
18507
- return endOfDay(date);
18635
+ function select(items, value) {
18636
+ const newSelected = selectStrategy.value.select({
18637
+ items,
18638
+ value,
18639
+ selected: new Set(selected.value)
18640
+ });
18641
+ selected.value = newSelected;
18508
18642
  }
18509
- startOfYear(date) {
18510
- return startOfYear(date);
18643
+ function toggleSelect(item) {
18644
+ const newItem = toRef(item);
18645
+ select([newItem.value], !isSelected([newItem.value]));
18511
18646
  }
18512
- endOfYear(date) {
18513
- return endOfYear(date);
18647
+ function selectAll(value) {
18648
+ const newSelected = selectStrategy.value.selectAll({
18649
+ value,
18650
+ allItems: allSelectable.value,
18651
+ currentPage: currentPageSelectable.value,
18652
+ selected: new Set(selected.value)
18653
+ });
18654
+ selected.value = newSelected;
18514
18655
  }
18515
- }
18516
-
18517
- // Composables
18518
- const DateOptionsSymbol = Symbol.for('vuetify:date-options');
18519
- const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
18520
- function createDate(options, locale) {
18521
- const _options = mergeDeep({
18522
- adapter: VuetifyDateAdapter,
18523
- locale: {
18524
- af: 'af-ZA',
18525
- // ar: '', # not the same value for all variants
18526
- bg: 'bg-BG',
18527
- ca: 'ca-ES',
18528
- ckb: '',
18529
- cs: 'cs-CZ',
18530
- de: 'de-DE',
18531
- el: 'el-GR',
18532
- en: 'en-US',
18533
- // es: '', # not the same value for all variants
18534
- et: 'et-EE',
18535
- fa: 'fa-IR',
18536
- fi: 'fi-FI',
18537
- // fr: '', #not the same value for all variants
18538
- hr: 'hr-HR',
18539
- hu: 'hu-HU',
18540
- he: 'he-IL',
18541
- id: 'id-ID',
18542
- it: 'it-IT',
18543
- ja: 'ja-JP',
18544
- ko: 'ko-KR',
18545
- lv: 'lv-LV',
18546
- lt: 'lt-LT',
18547
- nl: 'nl-NL',
18548
- no: 'no-NO',
18549
- pl: 'pl-PL',
18550
- pt: 'pt-PT',
18551
- ro: 'ro-RO',
18552
- ru: 'ru-RU',
18553
- sk: 'sk-SK',
18554
- sl: 'sl-SI',
18555
- srCyrl: 'sr-SP',
18556
- srLatn: 'sr-SP',
18557
- sv: 'sv-SE',
18558
- th: 'th-TH',
18559
- tr: 'tr-TR',
18560
- az: 'az-AZ',
18561
- uk: 'uk-UA',
18562
- vi: 'vi-VN',
18563
- zhHans: 'zh-CN',
18564
- zhHant: 'zh-TW'
18565
- }
18566
- }, options);
18567
- return {
18568
- options: _options,
18569
- instance: createInstance(_options, locale)
18570
- };
18571
- }
18572
- function createInstance(options, locale) {
18573
- const instance = reactive(typeof options.adapter === 'function'
18574
- // eslint-disable-next-line new-cap
18575
- ? new options.adapter({
18576
- locale: options.locale[locale.current.value] ?? locale.current.value,
18577
- formats: options.formats
18578
- }) : options.adapter);
18579
- watch(locale.current, value => {
18580
- instance.locale = options.locale[value] ?? value ?? instance.locale;
18656
+ const someSelected = computed(() => selected.value.size > 0);
18657
+ const allSelected = computed(() => {
18658
+ const items = selectStrategy.value.allSelected({
18659
+ allItems: allSelectable.value,
18660
+ currentPage: currentPageSelectable.value
18661
+ });
18662
+ return !!items.length && isSelected(items);
18581
18663
  });
18582
- return instance;
18583
- }
18584
- function useDate() {
18585
- const options = inject$1(DateOptionsSymbol);
18586
- if (!options) throw new Error('[Vuetify] Could not find injected date options');
18587
- const locale = useLocale();
18588
- return createInstance(options, locale);
18664
+ const data = {
18665
+ toggleSelect,
18666
+ select,
18667
+ selectAll,
18668
+ isSelected,
18669
+ isSomeSelected,
18670
+ someSelected,
18671
+ allSelected,
18672
+ showSelectAll: selectStrategy.value.showSelectAll
18673
+ };
18674
+ provide(VDataTableSelectionSymbol, data);
18675
+ return data;
18589
18676
  }
18590
-
18591
- // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
18592
- function getWeek(adapter, value) {
18593
- const date = adapter.toJsDate(value);
18594
- let year = date.getFullYear();
18595
- let d1w1 = new Date(year, 0, 1);
18596
- if (date < d1w1) {
18597
- year = year - 1;
18598
- d1w1 = new Date(year, 0, 1);
18599
- } else {
18600
- const tv = new Date(year + 1, 0, 1);
18601
- if (date >= tv) {
18602
- year = year + 1;
18603
- d1w1 = tv;
18604
- }
18605
- }
18606
- const diffTime = Math.abs(date.getTime() - d1w1.getTime());
18607
- const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
18608
- return Math.floor(diffDays / 7) + 1;
18677
+ function useSelection() {
18678
+ const data = inject$1(VDataTableSelectionSymbol);
18679
+ if (!data) throw new Error('Missing selection!');
18680
+ return data;
18609
18681
  }
18610
18682
 
18611
18683
  // Composables
@@ -19758,6 +19830,7 @@ const makeVDataTableHeadersProps = propsFactory({
19758
19830
  headerProps: {
19759
19831
  type: Object
19760
19832
  },
19833
+ ...makeDisplayProps(),
19761
19834
  ...makeLoaderProps()
19762
19835
  }, 'VDataTableHeaders');
19763
19836
  const VDataTableHeaders = genericComponent()({
@@ -19767,6 +19840,9 @@ const VDataTableHeaders = genericComponent()({
19767
19840
  let {
19768
19841
  slots
19769
19842
  } = _ref;
19843
+ const {
19844
+ t
19845
+ } = useLocale();
19770
19846
  const {
19771
19847
  toggleSort,
19772
19848
  sortBy,
@@ -19802,6 +19878,10 @@ const VDataTableHeaders = genericComponent()({
19802
19878
  backgroundColorClasses,
19803
19879
  backgroundColorStyles
19804
19880
  } = useBackgroundColor(props, 'color');
19881
+ const {
19882
+ displayClasses,
19883
+ mobile
19884
+ } = useDisplay(props);
19805
19885
  const slotProps = computed(() => ({
19806
19886
  headers: headers.value,
19807
19887
  columns: columns.value,
@@ -19813,6 +19893,9 @@ const VDataTableHeaders = genericComponent()({
19813
19893
  selectAll,
19814
19894
  getSortIcon
19815
19895
  }));
19896
+ const headerCellClasses = computed(() => ['v-data-table__th', {
19897
+ 'v-data-table__th--sticky': props.sticky
19898
+ }, displayClasses.value, loaderClasses.value]);
19816
19899
  const VDataTableHeaderCell = _ref2 => {
19817
19900
  let {
19818
19901
  column,
@@ -19824,12 +19907,11 @@ const VDataTableHeaders = genericComponent()({
19824
19907
  return createVNode(VDataTableColumn, mergeProps({
19825
19908
  "tag": "th",
19826
19909
  "align": column.align,
19827
- "class": ['v-data-table__th', {
19910
+ "class": [{
19828
19911
  'v-data-table__th--sortable': column.sortable,
19829
19912
  'v-data-table__th--sorted': isSorted(column),
19830
- 'v-data-table__th--fixed': column.fixed,
19831
- 'v-data-table__th--sticky': props.sticky
19832
- }, loaderClasses.value],
19913
+ 'v-data-table__th--fixed': column.fixed
19914
+ }, ...headerCellClasses.value],
19833
19915
  "style": {
19834
19916
  width: convertToUnit(column.width),
19835
19917
  minWidth: convertToUnit(column.minWidth),
@@ -19878,8 +19960,53 @@ const VDataTableHeaders = genericComponent()({
19878
19960
  }
19879
19961
  });
19880
19962
  };
19963
+ const VDataTableMobileHeaderCell = () => {
19964
+ const headerProps = mergeProps(props.headerProps ?? {} ?? {});
19965
+ const displayItems = computed(() => {
19966
+ return columns.value.filter(column => column?.sortable);
19967
+ });
19968
+ const appendIcon = computed(() => {
19969
+ return allSelected.value ? '$checkboxOn' : someSelected.value ? '$checkboxIndeterminate' : '$checkboxOff';
19970
+ });
19971
+ return createVNode(VDataTableColumn, mergeProps({
19972
+ "tag": "th",
19973
+ "class": [...headerCellClasses.value],
19974
+ "colspan": headers.value.length + 1
19975
+ }, headerProps), {
19976
+ default: () => [createVNode("div", {
19977
+ "class": "v-data-table-header__content"
19978
+ }, [createVNode(VSelect, {
19979
+ "chips": true,
19980
+ "class": "v-data-table__td-sort-select",
19981
+ "clearable": true,
19982
+ "density": "default",
19983
+ "items": displayItems.value,
19984
+ "label": t('$vuetify.dataTable.sortBy'),
19985
+ "multiple": props.multiSort,
19986
+ "variant": "underlined",
19987
+ "onClick:clear": () => sortBy.value = [],
19988
+ "appendIcon": appendIcon.value,
19989
+ "onClick:append": () => selectAll(!allSelected.value)
19990
+ }, {
19991
+ ...slots,
19992
+ chip: props => createVNode(VChip, {
19993
+ "onClick": props.item.raw?.sortable ? () => toggleSort(props.item.raw) : undefined,
19994
+ "onMousedown": e => {
19995
+ e.preventDefault();
19996
+ e.stopPropagation();
19997
+ }
19998
+ }, {
19999
+ default: () => [props.item.title, createVNode(VIcon, {
20000
+ "class": ['v-data-table__td-sort-icon', isSorted(props.item.raw) && 'v-data-table__td-sort-icon-active'],
20001
+ "icon": getSortIcon(props.item.raw),
20002
+ "size": "small"
20003
+ }, null)]
20004
+ })
20005
+ })])]
20006
+ });
20007
+ };
19881
20008
  useRender(() => {
19882
- return createVNode(Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => createVNode("tr", null, [row.map((column, x) => createVNode(VDataTableHeaderCell, {
20009
+ return mobile.value ? createVNode("tr", null, [createVNode(VDataTableMobileHeaderCell, null, null)]) : createVNode(Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => createVNode("tr", null, [row.map((column, x) => createVNode(VDataTableHeaderCell, {
19883
20010
  "column": column,
19884
20011
  "x": x,
19885
20012
  "y": y
@@ -19987,7 +20114,8 @@ const makeVDataTableRowProps = propsFactory({
19987
20114
  cellProps: [Object, Function],
19988
20115
  onClick: EventProp(),
19989
20116
  onContextmenu: EventProp(),
19990
- onDblclick: EventProp()
20117
+ onDblclick: EventProp(),
20118
+ ...makeDisplayProps()
19991
20119
  }, 'VDataTableRow');
19992
20120
  const VDataTableRow = genericComponent()({
19993
20121
  name: 'VDataTableRow',
@@ -19996,27 +20124,40 @@ const VDataTableRow = genericComponent()({
19996
20124
  let {
19997
20125
  slots
19998
20126
  } = _ref;
20127
+ const {
20128
+ displayClasses,
20129
+ mobile
20130
+ } = useDisplay(props, 'v-data-table__tr');
19999
20131
  const {
20000
20132
  isSelected,
20001
- toggleSelect
20133
+ toggleSelect,
20134
+ someSelected,
20135
+ allSelected,
20136
+ selectAll
20002
20137
  } = useSelection();
20003
20138
  const {
20004
20139
  isExpanded,
20005
20140
  toggleExpand
20006
20141
  } = useExpanded();
20142
+ const {
20143
+ toggleSort,
20144
+ sortBy,
20145
+ isSorted
20146
+ } = useSort();
20007
20147
  const {
20008
20148
  columns
20009
20149
  } = useHeaders();
20010
20150
  useRender(() => createVNode("tr", {
20011
20151
  "class": ['v-data-table__tr', {
20012
20152
  'v-data-table__tr--clickable': !!(props.onClick || props.onContextmenu || props.onDblclick)
20013
- }],
20153
+ }, displayClasses.value],
20014
20154
  "onClick": props.onClick,
20015
20155
  "onContextmenu": props.onContextmenu,
20016
20156
  "onDblclick": props.onDblclick
20017
20157
  }, [props.item && columns.value.map((column, i) => {
20018
20158
  const item = props.item;
20019
20159
  const slotName = `item.${column.key}`;
20160
+ const headerSlotName = `header.${column.key}`;
20020
20161
  const slotProps = {
20021
20162
  index: props.index,
20022
20163
  item: item.raw,
@@ -20028,6 +20169,16 @@ const VDataTableRow = genericComponent()({
20028
20169
  isExpanded,
20029
20170
  toggleExpand
20030
20171
  };
20172
+ const columnSlotProps = {
20173
+ column,
20174
+ selectAll,
20175
+ isSorted,
20176
+ toggleSort,
20177
+ sortBy: sortBy.value,
20178
+ someSelected: someSelected.value,
20179
+ allSelected: allSelected.value,
20180
+ getSortIcon: () => ''
20181
+ };
20031
20182
  const cellProps = typeof props.cellProps === 'function' ? props.cellProps({
20032
20183
  index: slotProps.index,
20033
20184
  item: slotProps.item,
@@ -20043,16 +20194,20 @@ const VDataTableRow = genericComponent()({
20043
20194
  }) : column.cellProps;
20044
20195
  return createVNode(VDataTableColumn, mergeProps({
20045
20196
  "align": column.align,
20197
+ "class": {
20198
+ 'v-data-table__td--expanded-row': column.key === 'data-table-expand',
20199
+ 'v-data-table__td--select-row': column.key === 'data-table-select'
20200
+ },
20046
20201
  "fixed": column.fixed,
20047
20202
  "fixedOffset": column.fixedOffset,
20048
20203
  "lastFixed": column.lastFixed,
20204
+ "maxWidth": !mobile.value ? column.maxWidth : undefined,
20049
20205
  "noPadding": column.key === 'data-table-select' || column.key === 'data-table-expand',
20050
- "width": column.width,
20051
- "maxWidth": column.maxWidth,
20052
- "nowrap": column.nowrap
20206
+ "nowrap": column.nowrap,
20207
+ "width": !mobile.value ? column.width : undefined
20053
20208
  }, cellProps, columnCellProps), {
20054
20209
  default: () => {
20055
- if (slots[slotName]) return slots[slotName](slotProps);
20210
+ if (slots[slotName] && !mobile.value) return slots[slotName]?.(slotProps);
20056
20211
  if (column.key === 'data-table-select') {
20057
20212
  return slots['item.data-table-select']?.(slotProps) ?? createVNode(VCheckboxBtn, {
20058
20213
  "disabled": !item.selectable,
@@ -20068,7 +20223,12 @@ const VDataTableRow = genericComponent()({
20068
20223
  "onClick": withModifiers(() => toggleExpand(item), ['stop'])
20069
20224
  }, null);
20070
20225
  }
20071
- return toDisplayString(slotProps.value);
20226
+ const displayValue = toDisplayString(slotProps.value);
20227
+ return !mobile.value ? displayValue : createVNode(Fragment, null, [createVNode("div", {
20228
+ "class": "v-data-table__td-title"
20229
+ }, [slots[headerSlotName]?.(columnSlotProps) ?? column.title]), createVNode("div", {
20230
+ "class": "v-data-table__td-value"
20231
+ }, [slots[slotName]?.(slotProps) ?? displayValue])]);
20072
20232
  }
20073
20233
  });
20074
20234
  })]));
@@ -20093,7 +20253,8 @@ const makeVDataTableRowsProps = propsFactory({
20093
20253
  default: '$vuetify.noDataText'
20094
20254
  },
20095
20255
  rowProps: [Object, Function],
20096
- cellProps: [Object, Function]
20256
+ cellProps: [Object, Function],
20257
+ ...makeDisplayProps()
20097
20258
  }, 'VDataTableRows');
20098
20259
  const VDataTableRows = genericComponent()({
20099
20260
  name: 'VDataTableRows',
@@ -20123,6 +20284,9 @@ const VDataTableRows = genericComponent()({
20123
20284
  const {
20124
20285
  t
20125
20286
  } = useLocale();
20287
+ const {
20288
+ mobile
20289
+ } = useDisplay(props);
20126
20290
  useRender(() => {
20127
20291
  if (props.loading && (!props.items.length || slots.loading)) {
20128
20292
  return createVNode("tr", {
@@ -20177,7 +20341,8 @@ const VDataTableRows = genericComponent()({
20177
20341
  } : undefined,
20178
20342
  index,
20179
20343
  item,
20180
- cellProps: props.cellProps
20344
+ cellProps: props.cellProps,
20345
+ mobile: mobile.value
20181
20346
  }, getPrefixedEventHandlers(attrs, ':row', () => slotProps), typeof props.rowProps === 'function' ? props.rowProps({
20182
20347
  item: slotProps.item,
20183
20348
  index: slotProps.index,
@@ -22004,10 +22169,10 @@ const VDatePicker = genericComponent()({
22004
22169
  emit('update:year', value);
22005
22170
  }
22006
22171
  watch(model, (val, oldVal) => {
22007
- const before = adapter.date(wrapInArray(val)[0]);
22008
- const after = adapter.date(wrapInArray(oldVal)[0]);
22009
- const newMonth = adapter.getMonth(before);
22010
- const newYear = adapter.getYear(before);
22172
+ const before = adapter.date(wrapInArray(oldVal)[oldVal.length - 1]);
22173
+ const after = adapter.date(wrapInArray(val)[val.length - 1]);
22174
+ const newMonth = adapter.getMonth(after);
22175
+ const newYear = adapter.getYear(after);
22011
22176
  if (newMonth !== month.value) {
22012
22177
  month.value = newMonth;
22013
22178
  onUpdateMonth(month.value);
@@ -22098,6 +22263,141 @@ const VDatePicker = genericComponent()({
22098
22263
  }
22099
22264
  });
22100
22265
 
22266
+ // Types
22267
+
22268
+ // Types
22269
+
22270
+ const makeVEmptyStateProps = propsFactory({
22271
+ actionText: String,
22272
+ bgColor: String,
22273
+ color: String,
22274
+ icon: IconValue,
22275
+ image: String,
22276
+ justify: {
22277
+ type: String,
22278
+ default: 'center'
22279
+ },
22280
+ headline: String,
22281
+ title: String,
22282
+ text: String,
22283
+ textWidth: {
22284
+ type: [Number, String],
22285
+ default: 500
22286
+ },
22287
+ href: String,
22288
+ to: String,
22289
+ ...makeComponentProps(),
22290
+ ...makeDimensionProps(),
22291
+ ...makeSizeProps({
22292
+ size: undefined
22293
+ }),
22294
+ ...makeThemeProps()
22295
+ }, 'VEmptyState');
22296
+ const VEmptyState = genericComponent()({
22297
+ name: 'VEmptyState',
22298
+ props: makeVEmptyStateProps(),
22299
+ emits: {
22300
+ 'click:action': e => true
22301
+ },
22302
+ setup(props, _ref) {
22303
+ let {
22304
+ emit,
22305
+ slots
22306
+ } = _ref;
22307
+ const {
22308
+ themeClasses
22309
+ } = provideTheme(props);
22310
+ const {
22311
+ backgroundColorClasses,
22312
+ backgroundColorStyles
22313
+ } = useBackgroundColor(toRef(props, 'bgColor'));
22314
+ const {
22315
+ dimensionStyles
22316
+ } = useDimension(props);
22317
+ const {
22318
+ displayClasses
22319
+ } = useDisplay();
22320
+ function onClickAction(e) {
22321
+ emit('click:action', e);
22322
+ }
22323
+ useRender(() => {
22324
+ const hasActions = !!(slots.actions || props.actionText);
22325
+ const hasHeadline = !!(slots.headline || props.headline);
22326
+ const hasTitle = !!(slots.title || props.title);
22327
+ const hasText = !!(slots.text || props.text);
22328
+ const hasMedia = !!(slots.media || props.image || props.icon);
22329
+ const size = props.size || (props.image ? 200 : 96);
22330
+ return createVNode("div", {
22331
+ "class": ['v-empty-state', {
22332
+ [`v-empty-state--${props.justify}`]: true
22333
+ }, themeClasses.value, backgroundColorClasses.value, displayClasses.value, props.class],
22334
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style]
22335
+ }, [hasMedia && createVNode("div", {
22336
+ "key": "media",
22337
+ "class": "v-empty-state__media"
22338
+ }, [!slots.media ? createVNode(Fragment, null, [props.image ? createVNode(VImg, {
22339
+ "key": "image",
22340
+ "src": props.image,
22341
+ "height": size
22342
+ }, null) : props.icon ? createVNode(VIcon, {
22343
+ "key": "icon",
22344
+ "color": props.color,
22345
+ "size": size,
22346
+ "icon": props.icon
22347
+ }, null) : undefined]) : createVNode(VDefaultsProvider, {
22348
+ "key": "media-defaults",
22349
+ "defaults": {
22350
+ VImg: {
22351
+ src: props.image,
22352
+ height: size
22353
+ },
22354
+ VIcon: {
22355
+ size,
22356
+ icon: props.icon
22357
+ }
22358
+ }
22359
+ }, {
22360
+ default: () => [slots.media()]
22361
+ })]), hasHeadline && createVNode("div", {
22362
+ "key": "headline",
22363
+ "class": "v-empty-state__headline"
22364
+ }, [slots.headline?.() ?? props.headline]), hasTitle && createVNode("div", {
22365
+ "key": "title",
22366
+ "class": "v-empty-state__title"
22367
+ }, [slots.title?.() ?? props.title]), hasText && createVNode("div", {
22368
+ "key": "text",
22369
+ "class": "v-empty-state__text",
22370
+ "style": {
22371
+ maxWidth: convertToUnit(props.textWidth)
22372
+ }
22373
+ }, [slots.text?.() ?? props.text]), slots.default && createVNode("div", {
22374
+ "key": "content",
22375
+ "class": "v-empty-state__content"
22376
+ }, [slots.default()]), hasActions && createVNode("div", {
22377
+ "key": "actions",
22378
+ "class": "v-empty-state__actions"
22379
+ }, [createVNode(VDefaultsProvider, {
22380
+ "defaults": {
22381
+ VBtn: {
22382
+ class: 'v-empty-state__action-btn',
22383
+ color: props.color,
22384
+ text: props.actionText
22385
+ }
22386
+ }
22387
+ }, {
22388
+ default: () => [slots.actions?.({
22389
+ props: {
22390
+ onClick: onClickAction
22391
+ }
22392
+ }) ?? createVNode(VBtn, {
22393
+ "onClick": onClickAction
22394
+ }, null)]
22395
+ })])]);
22396
+ });
22397
+ return {};
22398
+ }
22399
+ });
22400
+
22101
22401
  const makeVExpansionPanelTextProps = propsFactory({
22102
22402
  ...makeComponentProps(),
22103
22403
  ...makeLazyProps()
@@ -22331,6 +22631,107 @@ const VExpansionPanels = genericComponent()({
22331
22631
  }
22332
22632
  });
22333
22633
 
22634
+ const makeVFabProps = propsFactory({
22635
+ app: Boolean,
22636
+ appear: Boolean,
22637
+ extended: Boolean,
22638
+ layout: Boolean,
22639
+ location: {
22640
+ type: String,
22641
+ default: 'bottom end'
22642
+ },
22643
+ offset: Boolean,
22644
+ modelValue: {
22645
+ type: Boolean,
22646
+ default: true
22647
+ },
22648
+ ...omit(makeVBtnProps({
22649
+ active: true
22650
+ }), ['location']),
22651
+ ...makeLayoutItemProps(),
22652
+ ...makeTransitionProps({
22653
+ transition: 'fab-transition'
22654
+ })
22655
+ }, 'VFab');
22656
+ const VFab = genericComponent()({
22657
+ name: 'VFab',
22658
+ props: makeVFabProps(),
22659
+ emits: {
22660
+ 'update:modelValue': value => true
22661
+ },
22662
+ setup(props, _ref) {
22663
+ let {
22664
+ slots
22665
+ } = _ref;
22666
+ const model = useProxiedModel(props, 'modelValue');
22667
+ const height = shallowRef(56);
22668
+ const layoutItemStyles = ref();
22669
+ const {
22670
+ resizeRef
22671
+ } = useResizeObserver(entries => {
22672
+ if (!entries.length) return;
22673
+ height.value = entries[0].target.clientHeight;
22674
+ });
22675
+ const hasPosition = computed(() => props.app || props.absolute);
22676
+ const position = computed(() => {
22677
+ if (!hasPosition.value) return false;
22678
+ return props.location.split(' ').shift();
22679
+ });
22680
+ const orientation = computed(() => {
22681
+ if (!hasPosition.value) return false;
22682
+ return props.location.split(' ')[1] ?? 'end';
22683
+ });
22684
+ useToggleScope(() => props.app, () => {
22685
+ const layout = useLayoutItem({
22686
+ id: props.name,
22687
+ order: computed(() => parseInt(props.order, 10)),
22688
+ position,
22689
+ layoutSize: computed(() => props.layout ? height.value + 24 : 0),
22690
+ elementSize: computed(() => height.value + 24),
22691
+ active: computed(() => props.app && model.value),
22692
+ absolute: toRef(props, 'absolute')
22693
+ });
22694
+ watchEffect(() => {
22695
+ layoutItemStyles.value = layout.layoutItemStyles.value;
22696
+ });
22697
+ });
22698
+ const vFabRef = ref();
22699
+ useRender(() => {
22700
+ const btnProps = VBtn.filterProps(props);
22701
+ return createVNode("div", {
22702
+ "ref": vFabRef,
22703
+ "class": ['v-fab', {
22704
+ 'v-fab--absolute': props.absolute,
22705
+ 'v-fab--app': !!props.app,
22706
+ 'v-fab--extended': props.extended,
22707
+ 'v-fab--offset': props.offset,
22708
+ [`v-fab--${position.value}`]: hasPosition.value,
22709
+ [`v-fab--${orientation.value}`]: hasPosition.value
22710
+ }, props.class],
22711
+ "style": [props.app ? {
22712
+ ...layoutItemStyles.value
22713
+ } : {
22714
+ height: 'inherit',
22715
+ width: undefined
22716
+ }, props.style]
22717
+ }, [createVNode("div", {
22718
+ "class": "v-fab__container"
22719
+ }, [createVNode(MaybeTransition, {
22720
+ "appear": props.appear,
22721
+ "transition": props.transition
22722
+ }, {
22723
+ default: () => [withDirectives(createVNode(VBtn, mergeProps({
22724
+ "ref": resizeRef
22725
+ }, btnProps, {
22726
+ "active": undefined,
22727
+ "location": undefined
22728
+ }), slots), [[vShow, props.active]])]
22729
+ })])]);
22730
+ });
22731
+ return {};
22732
+ }
22733
+ });
22734
+
22334
22735
  // Types
22335
22736
 
22336
22737
  const makeVFileInputProps = propsFactory({
@@ -24854,9 +25255,6 @@ const VSnackbar = genericComponent()({
24854
25255
  slots
24855
25256
  } = _ref;
24856
25257
  const isActive = useProxiedModel(props, 'modelValue');
24857
- const {
24858
- mainStyles
24859
- } = useLayout();
24860
25258
  const {
24861
25259
  positionClasses
24862
25260
  } = usePosition(props);
@@ -24879,6 +25277,14 @@ const VSnackbar = genericComponent()({
24879
25277
  const timerRef = ref();
24880
25278
  const isHovering = shallowRef(false);
24881
25279
  const startY = shallowRef(0);
25280
+ const mainStyles = ref();
25281
+ const hasLayout = inject$1(VuetifyLayoutKey, undefined);
25282
+ useToggleScope(() => !!hasLayout, () => {
25283
+ const layout = useLayout();
25284
+ watchEffect(() => {
25285
+ mainStyles.value = layout.mainStyles.value;
25286
+ });
25287
+ });
24882
25288
  watch(isActive, startTimeout);
24883
25289
  watch(() => props.timeout, startTimeout);
24884
25290
  onMounted(() => {
@@ -24948,7 +25354,7 @@ const VSnackbar = genericComponent()({
24948
25354
  "scrim": false,
24949
25355
  "scrollStrategy": "none",
24950
25356
  "_disableGlobalStack": true,
24951
- "onTouchstart": onTouchstart,
25357
+ "onTouchstartPassive": onTouchstart,
24952
25358
  "onTouchend": onTouchend
24953
25359
  }, scopeId), {
24954
25360
  default: () => [genOverlays(false, 'v-snackbar'), props.timer && !isHovering.value && createVNode("div", {
@@ -24986,6 +25392,519 @@ const VSnackbar = genericComponent()({
24986
25392
  }
24987
25393
  });
24988
25394
 
25395
+ // Utilities
25396
+
25397
+ // Types
25398
+
25399
+ const makeLineProps = propsFactory({
25400
+ autoDraw: Boolean,
25401
+ autoDrawDuration: [Number, String],
25402
+ autoDrawEasing: {
25403
+ type: String,
25404
+ default: 'ease'
25405
+ },
25406
+ color: String,
25407
+ gradient: {
25408
+ type: Array,
25409
+ default: () => []
25410
+ },
25411
+ gradientDirection: {
25412
+ type: String,
25413
+ validator: val => ['top', 'bottom', 'left', 'right'].includes(val),
25414
+ default: 'top'
25415
+ },
25416
+ height: {
25417
+ type: [String, Number],
25418
+ default: 75
25419
+ },
25420
+ labels: {
25421
+ type: Array,
25422
+ default: () => []
25423
+ },
25424
+ labelSize: {
25425
+ type: [Number, String],
25426
+ default: 7
25427
+ },
25428
+ lineWidth: {
25429
+ type: [String, Number],
25430
+ default: 4
25431
+ },
25432
+ id: String,
25433
+ itemValue: {
25434
+ type: String,
25435
+ default: 'value'
25436
+ },
25437
+ modelValue: {
25438
+ type: Array,
25439
+ default: () => []
25440
+ },
25441
+ min: [String, Number],
25442
+ max: [String, Number],
25443
+ padding: {
25444
+ type: [String, Number],
25445
+ default: 8
25446
+ },
25447
+ showLabels: Boolean,
25448
+ smooth: Boolean,
25449
+ width: {
25450
+ type: [Number, String],
25451
+ default: 300
25452
+ }
25453
+ }, 'Line');
25454
+
25455
+ // Types
25456
+
25457
+ const makeVBarlineProps = propsFactory({
25458
+ autoLineWidth: Boolean,
25459
+ ...makeLineProps()
25460
+ }, 'VBarline');
25461
+ const VBarline = genericComponent()({
25462
+ name: 'VBarline',
25463
+ props: makeVBarlineProps(),
25464
+ setup(props, _ref) {
25465
+ let {
25466
+ slots
25467
+ } = _ref;
25468
+ const uid = getUid();
25469
+ const id = computed(() => props.id || `barline-${uid}`);
25470
+ const autoDrawDuration = computed(() => Number(props.autoDrawDuration) || 500);
25471
+ const hasLabels = computed(() => {
25472
+ return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
25473
+ });
25474
+ const lineWidth = computed(() => parseFloat(props.lineWidth) || 4);
25475
+ const totalWidth = computed(() => Math.max(props.modelValue.length * lineWidth.value, Number(props.width)));
25476
+ const boundary = computed(() => {
25477
+ return {
25478
+ minX: 0,
25479
+ maxX: totalWidth.value,
25480
+ minY: 0,
25481
+ maxY: parseInt(props.height, 10)
25482
+ };
25483
+ });
25484
+ const items = computed(() => props.modelValue.map(item => getPropertyFromItem(item, props.itemValue, item)));
25485
+ function genBars(values, boundary) {
25486
+ const {
25487
+ minX,
25488
+ maxX,
25489
+ minY,
25490
+ maxY
25491
+ } = boundary;
25492
+ const totalValues = values.length;
25493
+ let maxValue = props.max != null ? Number(props.max) : Math.max(...values);
25494
+ let minValue = props.min != null ? Number(props.min) : Math.min(...values);
25495
+ if (minValue > 0 && props.min == null) minValue = 0;
25496
+ if (maxValue < 0 && props.max == null) maxValue = 0;
25497
+ const gridX = maxX / totalValues;
25498
+ const gridY = (maxY - minY) / (maxValue - minValue || 1);
25499
+ const horizonY = maxY - Math.abs(minValue * gridY);
25500
+ return values.map((value, index) => {
25501
+ const height = Math.abs(gridY * value);
25502
+ return {
25503
+ x: minX + index * gridX,
25504
+ y: horizonY - height + +(value < 0) * height,
25505
+ height,
25506
+ value
25507
+ };
25508
+ });
25509
+ }
25510
+ const parsedLabels = computed(() => {
25511
+ const labels = [];
25512
+ const points = genBars(items.value, boundary.value);
25513
+ const len = points.length;
25514
+ for (let i = 0; labels.length < len; i++) {
25515
+ const item = points[i];
25516
+ let value = props.labels[i];
25517
+ if (!value) {
25518
+ value = typeof item === 'object' ? item.value : item;
25519
+ }
25520
+ labels.push({
25521
+ x: item.x,
25522
+ value: String(value)
25523
+ });
25524
+ }
25525
+ return labels;
25526
+ });
25527
+ const bars = computed(() => genBars(items.value, boundary.value));
25528
+ const offsetX = computed(() => (Math.abs(bars.value[0].x - bars.value[1].x) - lineWidth.value) / 2);
25529
+ useRender(() => {
25530
+ const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
25531
+ return createVNode("svg", {
25532
+ "display": "block"
25533
+ }, [createVNode("defs", null, [createVNode("linearGradient", {
25534
+ "id": id.value,
25535
+ "gradientUnits": "userSpaceOnUse",
25536
+ "x1": props.gradientDirection === 'left' ? '100%' : '0',
25537
+ "y1": props.gradientDirection === 'top' ? '100%' : '0',
25538
+ "x2": props.gradientDirection === 'right' ? '100%' : '0',
25539
+ "y2": props.gradientDirection === 'bottom' ? '100%' : '0'
25540
+ }, [gradientData.map((color, index) => createVNode("stop", {
25541
+ "offset": index / Math.max(gradientData.length - 1, 1),
25542
+ "stop-color": color || 'currentColor'
25543
+ }, null))])]), createVNode("clipPath", {
25544
+ "id": `${id.value}-clip`
25545
+ }, [bars.value.map(item => createVNode("rect", {
25546
+ "x": item.x + offsetX.value,
25547
+ "y": item.y,
25548
+ "width": lineWidth.value,
25549
+ "height": item.height,
25550
+ "rx": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0,
25551
+ "ry": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0
25552
+ }, [props.autoDraw && createVNode(Fragment, null, [createVNode("animate", {
25553
+ "attributeName": "y",
25554
+ "from": item.y + item.height,
25555
+ "to": item.y,
25556
+ "dur": `${autoDrawDuration.value}ms`,
25557
+ "fill": "freeze"
25558
+ }, null), createVNode("animate", {
25559
+ "attributeName": "height",
25560
+ "from": "0",
25561
+ "to": item.height,
25562
+ "dur": `${autoDrawDuration.value}ms`,
25563
+ "fill": "freeze"
25564
+ }, null)])]))]), hasLabels.value && createVNode("g", {
25565
+ "key": "labels",
25566
+ "style": {
25567
+ textAnchor: 'middle',
25568
+ dominantBaseline: 'mathematical',
25569
+ fill: 'currentColor'
25570
+ }
25571
+ }, [parsedLabels.value.map((item, i) => createVNode("text", {
25572
+ "x": item.x + offsetX.value + lineWidth.value / 2,
25573
+ "y": parseInt(props.height, 10) - 2 + (parseInt(props.labelSize, 10) || 7 * 0.75),
25574
+ "font-size": Number(props.labelSize) || 7
25575
+ }, [slots.label?.({
25576
+ index: i,
25577
+ value: item.value
25578
+ }) ?? item.value]))]), createVNode("g", {
25579
+ "clip-path": `url(#${id.value}-clip)`,
25580
+ "fill": `url(#${id.value})`
25581
+ }, [createVNode("rect", {
25582
+ "x": 0,
25583
+ "y": 0,
25584
+ "width": Math.max(props.modelValue.length * lineWidth.value, Number(props.width)),
25585
+ "height": props.height
25586
+ }, null)])]);
25587
+ });
25588
+ }
25589
+ });
25590
+
25591
+ // @ts-nocheck
25592
+ /* eslint-disable */
25593
+
25594
+ // import { checkCollinear, getDistance, moveTo } from './math'
25595
+
25596
+ /**
25597
+ * From https://github.com/unsplash/react-trend/blob/master/src/helpers/DOM.helpers.js#L18
25598
+ */
25599
+ function genPath(points, radius) {
25600
+ let fill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
25601
+ let height = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 75;
25602
+ if (points.length === 0) return '';
25603
+ const start = points.shift();
25604
+ const end = points[points.length - 1];
25605
+ return (fill ? `M${start.x} ${height - start.x + 2} L${start.x} ${start.y}` : `M${start.x} ${start.y}`) + points.map((point, index) => {
25606
+ const next = points[index + 1];
25607
+ const prev = points[index - 1] || start;
25608
+ const isCollinear = next && checkCollinear(next, point, prev);
25609
+ if (!next || isCollinear) {
25610
+ return `L${point.x} ${point.y}`;
25611
+ }
25612
+ const threshold = Math.min(getDistance(prev, point), getDistance(next, point));
25613
+ const isTooCloseForRadius = threshold / 2 < radius;
25614
+ const radiusForPoint = isTooCloseForRadius ? threshold / 2 : radius;
25615
+ const before = moveTo(prev, point, radiusForPoint);
25616
+ const after = moveTo(next, point, radiusForPoint);
25617
+ return `L${before.x} ${before.y}S${point.x} ${point.y} ${after.x} ${after.y}`;
25618
+ }).join('') + (fill ? `L${end.x} ${height - start.x + 2} Z` : '');
25619
+ }
25620
+ function int(value) {
25621
+ return parseInt(value, 10);
25622
+ }
25623
+
25624
+ /**
25625
+ * https://en.wikipedia.org/wiki/Collinearity
25626
+ * x=(x1+x2)/2
25627
+ * y=(y1+y2)/2
25628
+ */
25629
+ function checkCollinear(p0, p1, p2) {
25630
+ return int(p0.x + p2.x) === int(2 * p1.x) && int(p0.y + p2.y) === int(2 * p1.y);
25631
+ }
25632
+ function getDistance(p1, p2) {
25633
+ return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
25634
+ }
25635
+ function moveTo(to, from, radius) {
25636
+ const vector = {
25637
+ x: to.x - from.x,
25638
+ y: to.y - from.y
25639
+ };
25640
+ const length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
25641
+ const unitVector = {
25642
+ x: vector.x / length,
25643
+ y: vector.y / length
25644
+ };
25645
+ return {
25646
+ x: from.x + unitVector.x * radius,
25647
+ y: from.y + unitVector.y * radius
25648
+ };
25649
+ }
25650
+
25651
+ // Types
25652
+
25653
+ const makeVTrendlineProps = propsFactory({
25654
+ fill: Boolean,
25655
+ ...makeLineProps()
25656
+ }, 'VTrendline');
25657
+ const VTrendline = genericComponent()({
25658
+ name: 'VTrendline',
25659
+ props: makeVTrendlineProps(),
25660
+ setup(props, _ref) {
25661
+ let {
25662
+ slots
25663
+ } = _ref;
25664
+ const uid = getUid();
25665
+ const id = computed(() => props.id || `trendline-${uid}`);
25666
+ const autoDrawDuration = computed(() => Number(props.autoDrawDuration) || (props.fill ? 500 : 2000));
25667
+ const lastLength = ref(0);
25668
+ const path = ref(null);
25669
+ function genPoints(values, boundary) {
25670
+ const {
25671
+ minX,
25672
+ maxX,
25673
+ minY,
25674
+ maxY
25675
+ } = boundary;
25676
+ const totalValues = values.length;
25677
+ const maxValue = props.max != null ? Number(props.max) : Math.max(...values);
25678
+ const minValue = props.min != null ? Number(props.min) : Math.min(...values);
25679
+ const gridX = (maxX - minX) / (totalValues - 1);
25680
+ const gridY = (maxY - minY) / (maxValue - minValue || 1);
25681
+ return values.map((value, index) => {
25682
+ return {
25683
+ x: minX + index * gridX,
25684
+ y: maxY - (value - minValue) * gridY,
25685
+ value
25686
+ };
25687
+ });
25688
+ }
25689
+ const hasLabels = computed(() => {
25690
+ return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
25691
+ });
25692
+ const lineWidth = computed(() => {
25693
+ return parseFloat(props.lineWidth) || 4;
25694
+ });
25695
+ const totalWidth = computed(() => Number(props.width));
25696
+ const boundary = computed(() => {
25697
+ const padding = Number(props.padding);
25698
+ return {
25699
+ minX: padding,
25700
+ maxX: totalWidth.value - padding,
25701
+ minY: padding,
25702
+ maxY: parseInt(props.height, 10) - padding
25703
+ };
25704
+ });
25705
+ const items = computed(() => props.modelValue.map(item => getPropertyFromItem(item, props.itemValue, item)));
25706
+ const parsedLabels = computed(() => {
25707
+ const labels = [];
25708
+ const points = genPoints(items.value, boundary.value);
25709
+ const len = points.length;
25710
+ for (let i = 0; labels.length < len; i++) {
25711
+ const item = points[i];
25712
+ let value = props.labels[i];
25713
+ if (!value) {
25714
+ value = typeof item === 'object' ? item.value : item;
25715
+ }
25716
+ labels.push({
25717
+ x: item.x,
25718
+ value: String(value)
25719
+ });
25720
+ }
25721
+ return labels;
25722
+ });
25723
+ watch(() => props.modelValue, async () => {
25724
+ await nextTick();
25725
+ if (!props.autoDraw || !path.value) return;
25726
+ const pathRef = path.value;
25727
+ const length = pathRef.getTotalLength();
25728
+ if (!props.fill) {
25729
+ // Initial setup to "hide" the line by using the stroke dash array
25730
+ pathRef.style.strokeDasharray = `${length}`;
25731
+ pathRef.style.strokeDashoffset = `${length}`;
25732
+
25733
+ // Force reflow to ensure the transition starts from this state
25734
+ pathRef.getBoundingClientRect();
25735
+
25736
+ // Animate the stroke dash offset to "draw" the line
25737
+ pathRef.style.transition = `stroke-dashoffset ${autoDrawDuration.value}ms ${props.autoDrawEasing}`;
25738
+ pathRef.style.strokeDashoffset = '0';
25739
+ } else {
25740
+ // Your existing logic for filled paths remains the same
25741
+ pathRef.style.transformOrigin = 'bottom center';
25742
+ pathRef.style.transition = 'none';
25743
+ pathRef.style.transform = `scaleY(0)`;
25744
+ pathRef.getBoundingClientRect();
25745
+ pathRef.style.transition = `transform ${autoDrawDuration.value}ms ${props.autoDrawEasing}`;
25746
+ pathRef.style.transform = `scaleY(1)`;
25747
+ }
25748
+ lastLength.value = length;
25749
+ }, {
25750
+ immediate: true
25751
+ });
25752
+ function genPath$1(fill) {
25753
+ return genPath(genPoints(items.value, boundary.value), props.smooth ? 8 : Number(props.smooth), fill, parseInt(props.height, 10));
25754
+ }
25755
+ useRender(() => {
25756
+ const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
25757
+ return createVNode("svg", {
25758
+ "display": "block",
25759
+ "stroke-width": parseFloat(props.lineWidth) ?? 4
25760
+ }, [createVNode("defs", null, [createVNode("linearGradient", {
25761
+ "id": id.value,
25762
+ "gradientUnits": "userSpaceOnUse",
25763
+ "x1": props.gradientDirection === 'left' ? '100%' : '0',
25764
+ "y1": props.gradientDirection === 'top' ? '100%' : '0',
25765
+ "x2": props.gradientDirection === 'right' ? '100%' : '0',
25766
+ "y2": props.gradientDirection === 'bottom' ? '100%' : '0'
25767
+ }, [gradientData.map((color, index) => createVNode("stop", {
25768
+ "offset": index / Math.max(gradientData.length - 1, 1),
25769
+ "stop-color": color || 'currentColor'
25770
+ }, null))])]), hasLabels.value && createVNode("g", {
25771
+ "key": "labels",
25772
+ "style": {
25773
+ textAnchor: 'middle',
25774
+ dominantBaseline: 'mathematical',
25775
+ fill: 'currentColor'
25776
+ }
25777
+ }, [parsedLabels.value.map((item, i) => createVNode("text", {
25778
+ "x": item.x + lineWidth.value / 2 + lineWidth.value / 2,
25779
+ "y": parseInt(props.height, 10) - 4 + (parseInt(props.labelSize, 10) || 7 * 0.75),
25780
+ "font-size": Number(props.labelSize) || 7
25781
+ }, [slots.label?.({
25782
+ index: i,
25783
+ value: item.value
25784
+ }) ?? item.value]))]), createVNode("path", {
25785
+ "ref": path,
25786
+ "d": genPath$1(props.fill),
25787
+ "fill": props.fill ? `url(#${id.value})` : 'none',
25788
+ "stroke": props.fill ? 'none' : `url(#${id.value})`
25789
+ }, null), props.fill && createVNode("path", {
25790
+ "d": genPath$1(false),
25791
+ "fill": "none",
25792
+ "stroke": props.color ?? props.gradient?.[0]
25793
+ }, null)]);
25794
+ });
25795
+ }
25796
+ });
25797
+
25798
+ // Types
25799
+
25800
+ // Types
25801
+
25802
+ const makeVSparklineProps = propsFactory({
25803
+ type: {
25804
+ type: String,
25805
+ default: 'trend'
25806
+ },
25807
+ ...makeVBarlineProps(),
25808
+ ...makeVTrendlineProps()
25809
+ }, 'VSparkline');
25810
+ const VSparkline = genericComponent()({
25811
+ name: 'VSparkline',
25812
+ props: makeVSparklineProps(),
25813
+ setup(props, _ref) {
25814
+ let {
25815
+ slots
25816
+ } = _ref;
25817
+ const {
25818
+ textColorClasses,
25819
+ textColorStyles
25820
+ } = useTextColor(toRef(props, 'color'));
25821
+ const hasLabels = computed(() => {
25822
+ return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
25823
+ });
25824
+ const totalHeight = computed(() => {
25825
+ let height = parseInt(props.height, 10);
25826
+ if (hasLabels.value) height += parseInt(props.labelSize, 10) * 1.5;
25827
+ return height;
25828
+ });
25829
+ useRender(() => {
25830
+ const Tag = props.type === 'trend' ? VTrendline : VBarline;
25831
+ const lineProps = props.type === 'trend' ? VTrendline.filterProps(props) : VBarline.filterProps(props);
25832
+ return createVNode(Tag, mergeProps({
25833
+ "key": props.type,
25834
+ "class": textColorClasses.value,
25835
+ "style": textColorStyles.value,
25836
+ "viewBox": `0 0 ${props.width} ${parseInt(totalHeight.value, 10)}`
25837
+ }, lineProps), slots);
25838
+ });
25839
+ }
25840
+ });
25841
+
25842
+ // Types
25843
+
25844
+ const makeVSpeedDialProps = propsFactory({
25845
+ ...makeComponentProps(),
25846
+ ...makeVMenuProps({
25847
+ offset: 8,
25848
+ minWidth: 0,
25849
+ openDelay: 0,
25850
+ closeDelay: 100,
25851
+ location: 'top center',
25852
+ transition: 'scale-transition'
25853
+ })
25854
+ }, 'VSpeedDial');
25855
+ const VSpeedDial = genericComponent()({
25856
+ name: 'VSpeedDial',
25857
+ props: makeVSpeedDialProps(),
25858
+ emits: {
25859
+ 'update:modelValue': value => true
25860
+ },
25861
+ setup(props, _ref) {
25862
+ let {
25863
+ slots
25864
+ } = _ref;
25865
+ const model = useProxiedModel(props, 'modelValue');
25866
+ const menuRef = ref();
25867
+ const location = computed(() => {
25868
+ const [y, x = 'center'] = props.location.split(' ');
25869
+ return `${y} ${x}`;
25870
+ });
25871
+ const locationClasses = computed(() => ({
25872
+ [`v-speed-dial__content--${location.value.replace(' ', '-')}`]: true
25873
+ }));
25874
+ useRender(() => {
25875
+ const menuProps = VMenu.filterProps(props);
25876
+ return createVNode(VMenu, mergeProps(menuProps, {
25877
+ "modelValue": model.value,
25878
+ "onUpdate:modelValue": $event => model.value = $event,
25879
+ "class": props.class,
25880
+ "style": props.style,
25881
+ "contentClass": ['v-speed-dial__content', locationClasses.value],
25882
+ "location": location.value,
25883
+ "ref": menuRef,
25884
+ "transition": "fade-transition"
25885
+ }), {
25886
+ ...slots,
25887
+ default: slotProps => createVNode(VDefaultsProvider, {
25888
+ "defaults": {
25889
+ VBtn: {
25890
+ size: 'small'
25891
+ }
25892
+ }
25893
+ }, {
25894
+ default: () => [createVNode(MaybeTransition, {
25895
+ "appear": true,
25896
+ "group": true,
25897
+ "transition": props.transition
25898
+ }, {
25899
+ default: () => [slots.default?.(slotProps)]
25900
+ })]
25901
+ })
25902
+ });
25903
+ });
25904
+ return {};
25905
+ }
25906
+ });
25907
+
24989
25908
  // Types
24990
25909
 
24991
25910
  const makeVStepperActionsProps = propsFactory({
@@ -26564,6 +27483,7 @@ var components = /*#__PURE__*/Object.freeze({
26564
27483
  VColorPicker: VColorPicker,
26565
27484
  VCombobox: VCombobox,
26566
27485
  VComponentIcon: VComponentIcon,
27486
+ VConfirmEdit: VConfirmEdit,
26567
27487
  VContainer: VContainer,
26568
27488
  VCounter: VCounter,
26569
27489
  VDataIterator: VDataIterator,
@@ -26586,12 +27506,14 @@ var components = /*#__PURE__*/Object.freeze({
26586
27506
  VDialogTopTransition: VDialogTopTransition,
26587
27507
  VDialogTransition: VDialogTransition,
26588
27508
  VDivider: VDivider,
27509
+ VEmptyState: VEmptyState,
26589
27510
  VExpandTransition: VExpandTransition,
26590
27511
  VExpandXTransition: VExpandXTransition,
26591
27512
  VExpansionPanel: VExpansionPanel,
26592
27513
  VExpansionPanelText: VExpansionPanelText,
26593
27514
  VExpansionPanelTitle: VExpansionPanelTitle,
26594
27515
  VExpansionPanels: VExpansionPanels,
27516
+ VFab: VFab,
26595
27517
  VFabTransition: VFabTransition,
26596
27518
  VFadeTransition: VFadeTransition,
26597
27519
  VField: VField,
@@ -26658,6 +27580,8 @@ var components = /*#__PURE__*/Object.freeze({
26658
27580
  VSlider: VSlider,
26659
27581
  VSnackbar: VSnackbar,
26660
27582
  VSpacer: VSpacer,
27583
+ VSparkline: VSparkline,
27584
+ VSpeedDial: VSpeedDial,
26661
27585
  VStepper: VStepper,
26662
27586
  VStepperActions: VStepperActions,
26663
27587
  VStepperHeader: VStepperHeader,
@@ -26825,7 +27749,7 @@ function useDirectiveComponent(component, props) {
26825
27749
  function mountComponent(component, props) {
26826
27750
  return function (el, binding, vnode) {
26827
27751
  const _props = typeof props === 'function' ? props(binding) : props;
26828
- const text = binding.value?.text ?? binding.value;
27752
+ const text = binding.value?.text ?? binding.value ?? _props?.text;
26829
27753
  const value = isObject(binding.value) ? binding.value : {};
26830
27754
 
26831
27755
  // Get the children from the props or directive value, or the element's children
@@ -26993,7 +27917,7 @@ function createVuetify$1() {
26993
27917
  goTo
26994
27918
  };
26995
27919
  }
26996
- const version$1 = "3.6.0-alpha.2-dev.2024-04-29";
27920
+ const version$1 = "3.6.1-dev.2024-05-01";
26997
27921
  createVuetify$1.version = version$1;
26998
27922
 
26999
27923
  // Vue's inject() can only be used in setup
@@ -27018,7 +27942,7 @@ const createVuetify = function () {
27018
27942
  ...options
27019
27943
  });
27020
27944
  };
27021
- const version = "3.6.0-alpha.2-dev.2024-04-29";
27945
+ const version = "3.6.1-dev.2024-05-01";
27022
27946
  createVuetify.version = version;
27023
27947
 
27024
27948
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };