vuetify 3.5.4 → 3.5.6

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 (159) hide show
  1. package/dist/json/attributes.json +2811 -2523
  2. package/dist/json/importMap-labs.json +12 -8
  3. package/dist/json/importMap.json +120 -116
  4. package/dist/json/tags.json +251 -169
  5. package/dist/json/web-types.json +3509 -2563
  6. package/dist/vuetify-labs.css +1757 -1737
  7. package/dist/vuetify-labs.d.ts +1475 -152
  8. package/dist/vuetify-labs.esm.js +566 -72
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +566 -72
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +864 -844
  13. package/dist/vuetify.d.ts +1140 -191
  14. package/dist/vuetify.esm.js +132 -71
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +132 -71
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +645 -642
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAlert/index.d.mts +9 -0
  22. package/lib/components/VAppBar/index.d.mts +18 -0
  23. package/lib/components/VAutocomplete/VAutocomplete.mjs +5 -2
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  25. package/lib/components/VAutocomplete/index.d.mts +33 -6
  26. package/lib/components/VAvatar/index.d.mts +9 -0
  27. package/lib/components/VBadge/index.d.mts +9 -0
  28. package/lib/components/VBanner/index.d.mts +9 -0
  29. package/lib/components/VBottomNavigation/index.d.mts +9 -0
  30. package/lib/components/VBreadcrumbs/index.d.mts +9 -0
  31. package/lib/components/VBtn/index.d.mts +9 -0
  32. package/lib/components/VBtnGroup/index.d.mts +9 -0
  33. package/lib/components/VBtnToggle/index.d.mts +9 -0
  34. package/lib/components/VCard/index.d.mts +9 -0
  35. package/lib/components/VCarousel/index.d.mts +9 -0
  36. package/lib/components/VChip/index.d.mts +9 -0
  37. package/lib/components/VColorPicker/index.d.mts +9 -0
  38. package/lib/components/VCombobox/VCombobox.mjs +3 -1
  39. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  40. package/lib/components/VCombobox/index.d.mts +33 -6
  41. package/lib/components/VDataIterator/index.d.mts +3 -3
  42. package/lib/components/VDataTable/VDataTable.mjs.map +1 -1
  43. package/lib/components/VDataTable/VDataTableHeaders.mjs.map +1 -1
  44. package/lib/components/VDataTable/index.d.mts +569 -118
  45. package/lib/components/VDataTable/index.mjs +1 -0
  46. package/lib/components/VDataTable/index.mjs.map +1 -1
  47. package/lib/components/VDataTable/types.mjs.map +1 -1
  48. package/lib/components/VDatePicker/VDatePicker.css +2 -21
  49. package/lib/components/VDatePicker/VDatePicker.mjs +14 -10
  50. package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
  51. package/lib/components/VDatePicker/VDatePicker.sass +3 -18
  52. package/lib/components/VDatePicker/VDatePickerHeader.css +2 -0
  53. package/lib/components/VDatePicker/VDatePickerHeader.sass +3 -0
  54. package/lib/components/VDatePicker/VDatePickerMonth.css +11 -5
  55. package/lib/components/VDatePicker/VDatePickerMonth.mjs +2 -1
  56. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  57. package/lib/components/VDatePicker/VDatePickerMonth.sass +13 -5
  58. package/lib/components/VDatePicker/VDatePickerMonths.css +2 -3
  59. package/lib/components/VDatePicker/VDatePickerMonths.mjs +6 -3
  60. package/lib/components/VDatePicker/VDatePickerMonths.mjs.map +1 -1
  61. package/lib/components/VDatePicker/VDatePickerMonths.sass +4 -3
  62. package/lib/components/VDatePicker/VDatePickerYears.css +2 -2
  63. package/lib/components/VDatePicker/VDatePickerYears.mjs +8 -1
  64. package/lib/components/VDatePicker/VDatePickerYears.mjs.map +1 -1
  65. package/lib/components/VDatePicker/VDatePickerYears.sass +4 -2
  66. package/lib/components/VDatePicker/_variables.scss +14 -34
  67. package/lib/components/VDatePicker/index.d.mts +13 -4
  68. package/lib/components/VExpansionPanel/VExpansionPanel.css +18 -7
  69. package/lib/components/VExpansionPanel/VExpansionPanel.sass +18 -3
  70. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +2 -0
  71. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  72. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +11 -2
  73. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  74. package/lib/components/VExpansionPanel/index.d.mts +54 -0
  75. package/lib/components/VField/VField.css +20 -1
  76. package/lib/components/VField/VField.sass +19 -1
  77. package/lib/components/VField/index.d.mts +9 -0
  78. package/lib/components/VFileInput/VFileInput.mjs +1 -1
  79. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  80. package/lib/components/VFileInput/index.d.mts +9 -0
  81. package/lib/components/VFooter/index.d.mts +9 -0
  82. package/lib/components/VImg/index.d.mts +9 -0
  83. package/lib/components/VList/VListItem.css +2 -1
  84. package/lib/components/VList/VListItem.sass +1 -0
  85. package/lib/components/VList/_variables.scss +2 -1
  86. package/lib/components/VList/index.d.mts +18 -0
  87. package/lib/components/VMenu/VMenu.mjs +5 -5
  88. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  89. package/lib/components/VMenu/shared.mjs.map +1 -1
  90. package/lib/components/VNavigationDrawer/index.d.mts +9 -0
  91. package/lib/components/VPagination/index.d.mts +9 -0
  92. package/lib/components/VProgressLinear/index.d.mts +9 -0
  93. package/lib/components/VRangeSlider/index.d.mts +9 -0
  94. package/lib/components/VSelect/VSelect.mjs +5 -3
  95. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  96. package/lib/components/VSelect/index.d.mts +33 -6
  97. package/lib/components/VSheet/index.d.mts +9 -0
  98. package/lib/components/VSlider/index.d.mts +9 -0
  99. package/lib/components/VSnackbar/index.d.mts +9 -0
  100. package/lib/components/VStepper/index.d.mts +9 -0
  101. package/lib/components/VSystemBar/index.d.mts +9 -0
  102. package/lib/components/VTabs/index.d.mts +33 -6
  103. package/lib/components/VTextField/index.d.mts +33 -6
  104. package/lib/components/VTextarea/index.d.mts +9 -0
  105. package/lib/components/VTimeline/index.d.mts +9 -0
  106. package/lib/components/VToolbar/index.d.mts +9 -0
  107. package/lib/components/VTooltip/VTooltip.css +1 -0
  108. package/lib/components/VTooltip/VTooltip.sass +1 -0
  109. package/lib/components/VTooltip/_variables.scss +1 -0
  110. package/lib/components/index.d.mts +1098 -152
  111. package/lib/composables/filter.mjs +1 -1
  112. package/lib/composables/filter.mjs.map +1 -1
  113. package/lib/composables/form.mjs +2 -1
  114. package/lib/composables/form.mjs.map +1 -1
  115. package/lib/composables/goto.mjs +16 -18
  116. package/lib/composables/goto.mjs.map +1 -1
  117. package/lib/composables/group.mjs +2 -0
  118. package/lib/composables/group.mjs.map +1 -1
  119. package/lib/composables/icons.mjs +17 -13
  120. package/lib/composables/icons.mjs.map +1 -1
  121. package/lib/composables/rounded.mjs +5 -1
  122. package/lib/composables/rounded.mjs.map +1 -1
  123. package/lib/composables/virtual.mjs +11 -3
  124. package/lib/composables/virtual.mjs.map +1 -1
  125. package/lib/entry-bundler.mjs +1 -1
  126. package/lib/framework.mjs +1 -1
  127. package/lib/iconsets/fa-svg.mjs +2 -1
  128. package/lib/iconsets/fa-svg.mjs.map +1 -1
  129. package/lib/index.d.mts +41 -39
  130. package/lib/labs/VCalendar/VCalendar.mjs +1 -1
  131. package/lib/labs/VCalendar/VCalendar.mjs.map +1 -1
  132. package/lib/labs/VPicker/VPicker.css +2 -2
  133. package/lib/labs/VPicker/VPicker.sass +2 -2
  134. package/lib/labs/VPicker/_variables.scss +2 -4
  135. package/lib/labs/VPicker/index.d.mts +9 -0
  136. package/lib/labs/VSparkline/VBarline.mjs +138 -0
  137. package/lib/labs/VSparkline/VBarline.mjs.map +1 -0
  138. package/lib/labs/VSparkline/VSparkline.mjs +49 -0
  139. package/lib/labs/VSparkline/VSparkline.mjs.map +1 -0
  140. package/lib/labs/VSparkline/VTrendline.mjs +143 -0
  141. package/lib/labs/VSparkline/VTrendline.mjs.map +1 -0
  142. package/lib/labs/VSparkline/index.d.mts +374 -0
  143. package/lib/labs/VSparkline/index.mjs +2 -0
  144. package/lib/labs/VSparkline/index.mjs.map +1 -0
  145. package/lib/labs/VSparkline/util/line.mjs +52 -0
  146. package/lib/labs/VSparkline/util/line.mjs.map +1 -0
  147. package/lib/labs/VSparkline/util/path.mjs +60 -0
  148. package/lib/labs/VSparkline/util/path.mjs.map +1 -0
  149. package/lib/labs/components.d.mts +376 -1
  150. package/lib/labs/components.mjs +1 -0
  151. package/lib/labs/components.mjs.map +1 -1
  152. package/lib/locale/nl.mjs +1 -1
  153. package/lib/locale/nl.mjs.map +1 -1
  154. package/lib/util/helpers.mjs +10 -0
  155. package/lib/util/helpers.mjs.map +1 -1
  156. package/package.json +2 -2
  157. package/lib/components/VDatePicker/VDatePickerTitle.mjs +0 -81
  158. package/lib/components/VDatePicker/VDatePickerTitle.mjs.map +0 -1
  159. package/lib/components/VDatePicker/VDatePickerTitle.sass +0 -33
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.5.4
2
+ * Vuetify v3.5.6
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -549,6 +549,16 @@
549
549
  const timeoutId = window.setTimeout(cb, timeout);
550
550
  return () => window.clearTimeout(timeoutId);
551
551
  }
552
+ function isClickInsideElement(event, targetDiv) {
553
+ const mouseX = event.clientX;
554
+ const mouseY = event.clientY;
555
+ const divRect = targetDiv.getBoundingClientRect();
556
+ const divLeft = divRect.left;
557
+ const divTop = divRect.top;
558
+ const divRight = divRect.right;
559
+ const divBottom = divRect.bottom;
560
+ return mouseX >= divLeft && mouseX <= divRight && mouseY >= divTop && mouseY <= divBottom;
561
+ }
552
562
 
553
563
  // Utilities
554
564
  const block = ['top', 'bottom'];
@@ -2160,7 +2170,7 @@
2160
2170
  vue.provide(LocaleSymbol, data);
2161
2171
  return data;
2162
2172
  }
2163
- function genDefaults$2() {
2173
+ function genDefaults$3() {
2164
2174
  return {
2165
2175
  af: false,
2166
2176
  ar: true,
@@ -2207,7 +2217,7 @@
2207
2217
  };
2208
2218
  }
2209
2219
  function createRtl(i18n, options) {
2210
- const rtl = vue.ref(options?.rtl ?? genDefaults$2());
2220
+ const rtl = vue.ref(options?.rtl ?? genDefaults$3());
2211
2221
  const isRtl = vue.computed(() => rtl.value[i18n.current.value] ?? false);
2212
2222
  return {
2213
2223
  isRtl,
@@ -2240,7 +2250,7 @@
2240
2250
  const makeThemeProps = propsFactory({
2241
2251
  theme: String
2242
2252
  }, 'theme');
2243
- function genDefaults$1() {
2253
+ function genDefaults$2() {
2244
2254
  return {
2245
2255
  defaultTheme: 'light',
2246
2256
  variations: {
@@ -2327,8 +2337,8 @@
2327
2337
  };
2328
2338
  }
2329
2339
  function parseThemeOptions() {
2330
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : genDefaults$1();
2331
- const defaults = genDefaults$1();
2340
+ let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : genDefaults$2();
2341
+ const defaults = genDefaults$2();
2332
2342
  if (!options) return {
2333
2343
  ...defaults,
2334
2344
  isDisabled: true
@@ -3111,12 +3121,14 @@
3111
3121
  rounded: {
3112
3122
  type: [Boolean, Number, String],
3113
3123
  default: undefined
3114
- }
3124
+ },
3125
+ tile: Boolean
3115
3126
  }, 'rounded');
3116
3127
  function useRounded(props) {
3117
3128
  let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
3118
3129
  const roundedClasses = vue.computed(() => {
3119
3130
  const rounded = vue.isRef(props) ? props.value : props.rounded;
3131
+ const tile = vue.isRef(props) ? props.value : props.tile;
3120
3132
  const classes = [];
3121
3133
  if (rounded === true || rounded === '') {
3122
3134
  classes.push(`${name}--rounded`);
@@ -3124,6 +3136,8 @@
3124
3136
  for (const value of String(rounded).split(' ')) {
3125
3137
  classes.push(`rounded-${value}`);
3126
3138
  }
3139
+ } else if (tile) {
3140
+ classes.push('rounded-0');
3127
3141
  }
3128
3142
  return classes;
3129
3143
  });
@@ -4114,6 +4128,8 @@
4114
4128
  vm.emit('group:selected', {
4115
4129
  value
4116
4130
  });
4131
+ }, {
4132
+ flush: 'sync'
4117
4133
  });
4118
4134
  return {
4119
4135
  id,
@@ -4449,23 +4465,27 @@
4449
4465
  };
4450
4466
  }
4451
4467
  });
4452
- const defaultSets = {
4453
- svg: {
4454
- component: VSvgIcon
4455
- },
4456
- class: {
4457
- component: VClassIcon
4458
- }
4459
- };
4468
+ function genDefaults$1() {
4469
+ return {
4470
+ svg: {
4471
+ component: VSvgIcon
4472
+ },
4473
+ class: {
4474
+ component: VClassIcon
4475
+ }
4476
+ };
4477
+ }
4460
4478
 
4461
4479
  // Composables
4462
4480
  function createIcons(options) {
4481
+ const sets = genDefaults$1();
4482
+ const defaultSet = options?.defaultSet ?? 'mdi';
4483
+ if (defaultSet === 'mdi' && !sets.mdi) {
4484
+ sets.mdi = mdi;
4485
+ }
4463
4486
  return mergeDeep({
4464
- defaultSet: 'mdi',
4465
- sets: {
4466
- ...defaultSets,
4467
- mdi
4468
- },
4487
+ defaultSet,
4488
+ sets,
4469
4489
  aliases: {
4470
4490
  ...aliases,
4471
4491
  /* eslint-disable max-len */
@@ -6469,7 +6489,8 @@
6469
6489
  errors.value = results;
6470
6490
  model.value = invalid > 0 ? false : valid === items.value.length ? true : null;
6471
6491
  }, {
6472
- deep: true
6492
+ deep: true,
6493
+ flush: 'post'
6473
6494
  });
6474
6495
  vue.provide(FormKey, {
6475
6496
  register: _ref => {
@@ -10573,9 +10594,9 @@
10573
10594
  unregister() {
10574
10595
  --openChildren.value;
10575
10596
  },
10576
- closeParents() {
10597
+ closeParents(e) {
10577
10598
  setTimeout(() => {
10578
- if (!openChildren.value) {
10599
+ if (!openChildren.value && (e == null || e && !isClickInsideElement(e, overlay.value.contentEl))) {
10579
10600
  isActive.value = false;
10580
10601
  parent?.closeParents();
10581
10602
  }
@@ -10608,8 +10629,8 @@
10608
10629
  document.removeEventListener('focusin', onFocusIn);
10609
10630
  }
10610
10631
  });
10611
- function onClickOutside() {
10612
- parent?.closeParents();
10632
+ function onClickOutside(e) {
10633
+ parent?.closeParents(e);
10613
10634
  }
10614
10635
  function onKeydown(e) {
10615
10636
  if (props.disabled) return;
@@ -11343,9 +11364,6 @@
11343
11364
  });
11344
11365
  });
11345
11366
  });
11346
- vue.watch(viewportHeight, (val, oldVal) => {
11347
- oldVal && calculateVisibleItems();
11348
- });
11349
11367
  vue.onScopeDispose(() => {
11350
11368
  updateOffsets.clear();
11351
11369
  });
@@ -11368,6 +11386,17 @@
11368
11386
  let lastScrollTop = 0;
11369
11387
  let scrollVelocity = 0;
11370
11388
  let lastScrollTime = 0;
11389
+ vue.watch(viewportHeight, (val, oldVal) => {
11390
+ if (oldVal) {
11391
+ calculateVisibleItems();
11392
+ if (val < oldVal) {
11393
+ requestAnimationFrame(() => {
11394
+ scrollVelocity = 0;
11395
+ calculateVisibleItems();
11396
+ });
11397
+ }
11398
+ }
11399
+ });
11371
11400
  function handleScroll() {
11372
11401
  if (!containerRef.value || !markerRef.value) return;
11373
11402
  const scrollTop = containerRef.value.scrollTop;
@@ -11820,9 +11849,11 @@
11820
11849
  }
11821
11850
  }
11822
11851
  function select(item) {
11852
+ let add = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
11823
11853
  if (props.multiple) {
11824
11854
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
11825
- if (index === -1) {
11855
+ add = index === -1;
11856
+ if (add) {
11826
11857
  model.value = [...model.value, item];
11827
11858
  } else {
11828
11859
  const value = [...model.value];
@@ -11830,7 +11861,7 @@
11830
11861
  model.value = value;
11831
11862
  }
11832
11863
  } else {
11833
- model.value = [item];
11864
+ model.value = add ? [item] : [];
11834
11865
  menu.value = false;
11835
11866
  }
11836
11867
  }
@@ -11982,7 +12013,7 @@
11982
12013
  function onChipClose(e) {
11983
12014
  e.stopPropagation();
11984
12015
  e.preventDefault();
11985
- select(item);
12016
+ select(item, false);
11986
12017
  }
11987
12018
  const slotProps = {
11988
12019
  'onClick:close': onChipClose,
@@ -12092,7 +12123,7 @@
12092
12123
  if (typeof item === 'object') {
12093
12124
  const filterKeys = keys || Object.keys(transformed);
12094
12125
  for (const key of filterKeys) {
12095
- const value = getPropertyFromItem(transformed, key, transformed);
12126
+ const value = getPropertyFromItem(transformed, key);
12096
12127
  const keyFilter = options?.customKeyFilter?.[key];
12097
12128
  match = keyFilter ? keyFilter(value, query, item) : filter(value, query, item);
12098
12129
  if (match !== -1 && match !== false) {
@@ -12371,7 +12402,8 @@
12371
12402
  if (item.props.disabled) return;
12372
12403
  if (props.multiple) {
12373
12404
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12374
- if (index === -1) {
12405
+ add = index === -1;
12406
+ if (add) {
12375
12407
  model.value = [...model.value, item];
12376
12408
  } else {
12377
12409
  const value = [...model.value];
@@ -12513,7 +12545,9 @@
12513
12545
  item,
12514
12546
  index,
12515
12547
  props: itemProps
12516
- }) ?? vue.createVNode(VListItem, itemProps, {
12548
+ }) ?? vue.createVNode(VListItem, vue.mergeProps(itemProps, {
12549
+ "role": "option"
12550
+ }), {
12517
12551
  prepend: _ref4 => {
12518
12552
  let {
12519
12553
  isSelected
@@ -16303,7 +16337,9 @@
16303
16337
  item,
16304
16338
  index,
16305
16339
  props: itemProps
16306
- }) ?? vue.createVNode(VListItem, itemProps, {
16340
+ }) ?? vue.createVNode(VListItem, vue.mergeProps(itemProps, {
16341
+ "role": "option"
16342
+ }), {
16307
16343
  prepend: _ref4 => {
16308
16344
  let {
16309
16345
  isSelected
@@ -17621,7 +17657,8 @@
17621
17657
  };
17622
17658
  }
17623
17659
  async function scrollTo(_target, _options, horizontal, goTo) {
17624
- const options = mergeDeep(goTo?.options, _options);
17660
+ const property = horizontal ? 'scrollLeft' : 'scrollTop';
17661
+ const options = mergeDeep(goTo?.options ?? genDefaults(), _options);
17625
17662
  const rtl = goTo?.rtl.value;
17626
17663
  const target = (typeof _target === 'number' ? _target : getTarget(_target)) ?? 0;
17627
17664
  const container = options.container === 'parent' && target instanceof HTMLElement ? target.parentElement : getContainer(options.container);
@@ -17639,25 +17676,22 @@
17639
17676
  }
17640
17677
  }
17641
17678
  targetLocation += options.offset;
17642
- const startLocation = (horizontal ? container.scrollLeft : container.scrollTop) ?? 0;
17679
+ const startLocation = container[property] ?? 0;
17643
17680
  if (targetLocation === startLocation) return Promise.resolve(targetLocation);
17644
17681
  const startTime = performance.now();
17645
17682
  return new Promise(resolve => requestAnimationFrame(function step(currentTime) {
17646
17683
  const timeElapsed = currentTime - startTime;
17647
- const progress = Math.abs(options.duration ? Math.min(timeElapsed / options.duration, 1) : 1);
17648
- const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(progress));
17649
- container[horizontal ? 'scrollLeft' : 'scrollTop'] = location;
17650
- if (progress === 1) return resolve(targetLocation);
17651
- let clientSize;
17652
- let reachEnd;
17653
- if (!horizontal) {
17654
- clientSize = container === document.body ? document.documentElement.clientHeight : container.clientHeight;
17655
- reachEnd = clientSize + container.scrollTop >= container.scrollHeight;
17656
- if (targetLocation > container.scrollTop && reachEnd) return resolve(targetLocation);
17657
- } else {
17658
- clientSize = container === document.body ? document.documentElement.clientWidth : container.clientWidth;
17659
- reachEnd = clientSize + container.scrollLeft >= container.scrollWidth;
17660
- if (targetLocation > container.scrollLeft && reachEnd) return resolve(targetLocation);
17684
+ const progress = timeElapsed / options.duration;
17685
+ const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(clamp(progress, 0, 1)));
17686
+ container[property] = location;
17687
+
17688
+ // Allow for some jitter if target time has elapsed
17689
+ if (progress >= 1 && Math.abs(location - container[property]) < 10) {
17690
+ return resolve(targetLocation);
17691
+ } else if (progress > 2) {
17692
+ // The target might not be reachable
17693
+ consoleWarn('Scroll target is not reachable');
17694
+ return resolve(container[property]);
17661
17695
  }
17662
17696
  requestAnimationFrame(step);
17663
17697
  }));
@@ -20594,12 +20628,13 @@
20594
20628
  }, [(props.showAdjacentMonths || !item.isAdjacent) && vue.createVNode(VDefaultsProvider, {
20595
20629
  "defaults": {
20596
20630
  VBtn: {
20631
+ class: 'v-date-picker-month__day-btn',
20597
20632
  color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
20598
20633
  disabled: item.isDisabled,
20599
20634
  icon: true,
20600
20635
  ripple: false,
20601
20636
  text: item.localized,
20602
- variant: item.isDisabled ? 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
20637
+ variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
20603
20638
  onClick: () => onClick(item.date)
20604
20639
  }
20605
20640
  }
@@ -20625,6 +20660,7 @@
20625
20660
  },
20626
20661
  setup(props, _ref) {
20627
20662
  let {
20663
+ emit,
20628
20664
  slots
20629
20665
  } = _ref;
20630
20666
  const adapter = useDate();
@@ -20660,6 +20696,10 @@
20660
20696
  onClick: () => onClick(i)
20661
20697
  };
20662
20698
  function onClick(i) {
20699
+ if (model.value === i) {
20700
+ emit('update:modelValue', model.value);
20701
+ return;
20702
+ }
20663
20703
  model.value = i;
20664
20704
  }
20665
20705
  return slots.month?.({
@@ -20668,9 +20708,7 @@
20668
20708
  props: btnProps
20669
20709
  }) ?? vue.createVNode(VBtn, vue.mergeProps({
20670
20710
  "key": "month"
20671
- }, btnProps, {
20672
- "onClick": () => onClick(i)
20673
- }), null);
20711
+ }, btnProps), null);
20674
20712
  })])]));
20675
20713
  return {};
20676
20714
  }
@@ -20695,6 +20733,7 @@
20695
20733
  },
20696
20734
  setup(props, _ref) {
20697
20735
  let {
20736
+ emit,
20698
20737
  slots
20699
20738
  } = _ref;
20700
20739
  const adapter = useDate();
@@ -20745,7 +20784,13 @@
20745
20784
  rounded: true,
20746
20785
  text: year.text,
20747
20786
  variant: model.value === year.value ? 'flat' : 'text',
20748
- onClick: () => model.value = year.value
20787
+ onClick: () => {
20788
+ if (model.value === year.value) {
20789
+ emit('update:modelValue', model.value);
20790
+ return;
20791
+ }
20792
+ model.value = year.value;
20793
+ }
20749
20794
  };
20750
20795
  return slots.year?.({
20751
20796
  year,
@@ -20938,7 +20983,9 @@
20938
20983
  } else {
20939
20984
  year.value++;
20940
20985
  month.value = 0;
20986
+ onUpdateYear(year.value);
20941
20987
  }
20988
+ onUpdateMonth(month.value);
20942
20989
  }
20943
20990
  function onClickPrev() {
20944
20991
  if (month.value > 0) {
@@ -20946,7 +20993,9 @@
20946
20993
  } else {
20947
20994
  year.value--;
20948
20995
  month.value = 11;
20996
+ onUpdateYear(year.value);
20949
20997
  }
20998
+ onUpdateMonth(month.value);
20950
20999
  }
20951
21000
  function onClickDate() {
20952
21001
  viewMode.value = 'month';
@@ -20957,14 +21006,14 @@
20957
21006
  function onClickYear() {
20958
21007
  viewMode.value = viewMode.value === 'year' ? 'month' : 'year';
20959
21008
  }
20960
- vue.watch(month, () => {
21009
+ function onUpdateMonth(value) {
20961
21010
  if (viewMode.value === 'months') onClickMonth();
20962
- emit('update:month', month.value);
20963
- });
20964
- vue.watch(year, () => {
21011
+ emit('update:month', value);
21012
+ }
21013
+ function onUpdateYear(value) {
20965
21014
  if (viewMode.value === 'year') onClickYear();
20966
- emit('update:year', year.value);
20967
- });
21015
+ emit('update:year', value);
21016
+ }
20968
21017
  vue.watch(model, (val, oldVal) => {
20969
21018
  const before = adapter.date(wrapInArray(val)[0]);
20970
21019
  const after = adapter.date(wrapInArray(oldVal)[0]);
@@ -21020,14 +21069,14 @@
21020
21069
  "key": "date-picker-months"
21021
21070
  }, datePickerMonthsProps, {
21022
21071
  "modelValue": month.value,
21023
- "onUpdate:modelValue": $event => month.value = $event,
21072
+ "onUpdate:modelValue": [$event => month.value = $event, onUpdateMonth],
21024
21073
  "min": minDate.value,
21025
21074
  "max": maxDate.value
21026
21075
  }), null) : viewMode.value === 'year' ? vue.createVNode(VDatePickerYears, vue.mergeProps({
21027
21076
  "key": "date-picker-years"
21028
21077
  }, datePickerYearsProps, {
21029
21078
  "modelValue": year.value,
21030
- "onUpdate:modelValue": $event => year.value = $event,
21079
+ "onUpdate:modelValue": [$event => year.value = $event, onUpdateYear],
21031
21080
  "min": minDate.value,
21032
21081
  "max": maxDate.value
21033
21082
  }), null) : vue.createVNode(VDatePickerMonth, vue.mergeProps({
@@ -21036,9 +21085,9 @@
21036
21085
  "modelValue": model.value,
21037
21086
  "onUpdate:modelValue": $event => model.value = $event,
21038
21087
  "month": month.value,
21039
- "onUpdate:month": $event => month.value = $event,
21088
+ "onUpdate:month": [$event => month.value = $event, onUpdateMonth],
21040
21089
  "year": year.value,
21041
- "onUpdate:year": $event => year.value = $event,
21090
+ "onUpdate:year": [$event => year.value = $event, onUpdateYear],
21042
21091
  "min": minDate.value,
21043
21092
  "max": maxDate.value
21044
21093
  }), null)]
@@ -21056,7 +21105,10 @@
21056
21105
  const allowedVariants = ['default', 'accordion', 'inset', 'popout'];
21057
21106
  const makeVExpansionPanelsProps = propsFactory({
21058
21107
  color: String,
21108
+ flat: Boolean,
21109
+ focusable: Boolean,
21059
21110
  static: Boolean,
21111
+ tile: Boolean,
21060
21112
  variant: {
21061
21113
  type: String,
21062
21114
  default: 'default',
@@ -21086,12 +21138,18 @@
21086
21138
  provideDefaults({
21087
21139
  VExpansionPanel: {
21088
21140
  color: vue.toRef(props, 'color'),
21089
- readonly: vue.toRef(props, 'readonly'),
21141
+ readonly: vue.toRef(props, 'readonly')
21142
+ },
21143
+ VExpansionPanelTitle: {
21144
+ focusable: vue.toRef(props, 'focusable'),
21090
21145
  static: vue.toRef(props, 'static')
21091
21146
  }
21092
21147
  });
21093
21148
  useRender(() => vue.createVNode(props.tag, {
21094
- "class": ['v-expansion-panels', themeClasses.value, variantClass.value, props.class],
21149
+ "class": ['v-expansion-panels', {
21150
+ 'v-expansion-panels--flat': props.flat,
21151
+ 'v-expansion-panels--tile': props.tile
21152
+ }, themeClasses.value, variantClass.value, props.class],
21095
21153
  "style": props.style
21096
21154
  }, slots));
21097
21155
  return {};
@@ -21142,6 +21200,7 @@
21142
21200
  default: '$collapse'
21143
21201
  },
21144
21202
  hideActions: Boolean,
21203
+ focusable: Boolean,
21145
21204
  static: Boolean,
21146
21205
  ripple: {
21147
21206
  type: [Boolean, Object],
@@ -21176,6 +21235,7 @@
21176
21235
  useRender(() => vue.withDirectives(vue.createVNode("button", {
21177
21236
  "class": ['v-expansion-panel-title', {
21178
21237
  'v-expansion-panel-title--active': expansionPanel.isSelected.value,
21238
+ 'v-expansion-panel-title--focusable': props.focusable,
21179
21239
  'v-expansion-panel-title--static': props.static
21180
21240
  }, backgroundColorClasses.value, props.class],
21181
21241
  "style": [backgroundColorStyles.value, props.style],
@@ -21375,7 +21435,7 @@
21375
21435
  if (!isFocused.value) focus();
21376
21436
  }
21377
21437
  function onClickPrepend(e) {
21378
- onControlClick(e);
21438
+ inputRef.value?.click();
21379
21439
  }
21380
21440
  function onControlMousedown(e) {
21381
21441
  emit('mousedown:control', e);
@@ -25817,7 +25877,7 @@
25817
25877
  }, [!props.hideWeekNumber ? vue.createVNode("div", {
25818
25878
  "key": "weekNumber0",
25819
25879
  "class": "v-calendar-weekly__head-weeknumber"
25820
- }, null) : '', props.weekdays.sort((a, b) => a - b).map(weekday => vue.createVNode("div", {
25880
+ }, null) : '', props.weekdays.map(weekday => vue.createVNode("div", {
25821
25881
  "class": `v-calendar-weekly__head-weekday${!props.hideWeekNumber ? '-with-weeknumber' : ''}`
25822
25882
  }, [dayNames[weekday]]))]), props.viewMode === 'month' && vue.createVNode("div", {
25823
25883
  "key": "VCalendarMonth",
@@ -25846,6 +25906,438 @@
25846
25906
  }
25847
25907
  });
25848
25908
 
25909
+ // Utilities
25910
+
25911
+ // Types
25912
+
25913
+ const makeLineProps = propsFactory({
25914
+ autoDraw: Boolean,
25915
+ autoDrawDuration: [Number, String],
25916
+ autoDrawEasing: {
25917
+ type: String,
25918
+ default: 'ease'
25919
+ },
25920
+ color: String,
25921
+ gradient: {
25922
+ type: Array,
25923
+ default: () => []
25924
+ },
25925
+ gradientDirection: {
25926
+ type: String,
25927
+ validator: val => ['top', 'bottom', 'left', 'right'].includes(val),
25928
+ default: 'top'
25929
+ },
25930
+ height: {
25931
+ type: [String, Number],
25932
+ default: 75
25933
+ },
25934
+ labels: {
25935
+ type: Array,
25936
+ default: () => []
25937
+ },
25938
+ labelSize: {
25939
+ type: [Number, String],
25940
+ default: 7
25941
+ },
25942
+ lineWidth: {
25943
+ type: [String, Number],
25944
+ default: 4
25945
+ },
25946
+ id: String,
25947
+ modelValue: {
25948
+ type: Array,
25949
+ default: () => []
25950
+ },
25951
+ padding: {
25952
+ type: [String, Number],
25953
+ default: 8
25954
+ },
25955
+ showLabels: Boolean,
25956
+ smooth: Boolean,
25957
+ width: {
25958
+ type: [Number, String],
25959
+ default: 300
25960
+ }
25961
+ }, 'Line');
25962
+
25963
+ // Types
25964
+
25965
+ const makeVBarlineProps = propsFactory({
25966
+ autoLineWidth: Boolean,
25967
+ ...makeLineProps()
25968
+ }, 'VBarline');
25969
+ const VBarline = genericComponent()({
25970
+ name: 'VBarline',
25971
+ props: makeVBarlineProps(),
25972
+ setup(props, _ref) {
25973
+ let {
25974
+ slots
25975
+ } = _ref;
25976
+ const uid = getUid();
25977
+ const id = vue.computed(() => props.id || `barline-${uid}`);
25978
+ const autoDrawDuration = vue.computed(() => Number(props.autoDrawDuration) || 500);
25979
+ const hasLabels = vue.computed(() => {
25980
+ return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
25981
+ });
25982
+ const lineWidth = vue.computed(() => parseFloat(props.lineWidth) || 4);
25983
+ const totalWidth = vue.computed(() => Math.max(props.modelValue.length * lineWidth.value, Number(props.width)));
25984
+ const boundary = vue.computed(() => {
25985
+ return {
25986
+ minX: 0,
25987
+ maxX: totalWidth.value,
25988
+ minY: 0,
25989
+ maxY: parseInt(props.height, 10)
25990
+ };
25991
+ });
25992
+ function genBars(values, boundary) {
25993
+ const {
25994
+ minX,
25995
+ maxX,
25996
+ minY,
25997
+ maxY
25998
+ } = boundary;
25999
+ const totalValues = values.length;
26000
+ let maxValue = Math.max(...values);
26001
+ let minValue = Math.min(...values);
26002
+ if (minValue > 0) minValue = 0;
26003
+ if (maxValue < 0) maxValue = 0;
26004
+ const gridX = maxX / totalValues;
26005
+ const gridY = (maxY - minY) / (maxValue - minValue || 1);
26006
+ const horizonY = maxY - Math.abs(minValue * gridY);
26007
+ return values.map((value, index) => {
26008
+ const height = Math.abs(gridY * value);
26009
+ return {
26010
+ x: minX + index * gridX,
26011
+ y: horizonY - height + +(value < 0) * height,
26012
+ height,
26013
+ value
26014
+ };
26015
+ });
26016
+ }
26017
+ const parsedLabels = vue.computed(() => {
26018
+ const labels = [];
26019
+ const points = genBars(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value);
26020
+ const len = points.length;
26021
+ for (let i = 0; labels.length < len; i++) {
26022
+ const item = points[i];
26023
+ let value = props.labels[i];
26024
+ if (!value) {
26025
+ value = typeof item === 'object' ? item.value : item;
26026
+ }
26027
+ labels.push({
26028
+ x: item.x,
26029
+ value: String(value)
26030
+ });
26031
+ }
26032
+ return labels;
26033
+ });
26034
+ const bars = vue.computed(() => genBars(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value));
26035
+ const offsetX = vue.computed(() => (Math.abs(bars.value[0].x - bars.value[1].x) - lineWidth.value) / 2);
26036
+ useRender(() => {
26037
+ const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
26038
+ return vue.createVNode("svg", {
26039
+ "display": "block"
26040
+ }, [vue.createVNode("defs", null, [vue.createVNode("linearGradient", {
26041
+ "id": id.value,
26042
+ "gradientUnits": "userSpaceOnUse",
26043
+ "x1": props.gradientDirection === 'left' ? '100%' : '0',
26044
+ "y1": props.gradientDirection === 'top' ? '100%' : '0',
26045
+ "x2": props.gradientDirection === 'right' ? '100%' : '0',
26046
+ "y2": props.gradientDirection === 'bottom' ? '100%' : '0'
26047
+ }, [gradientData.map((color, index) => vue.createVNode("stop", {
26048
+ "offset": index / Math.max(gradientData.length - 1, 1),
26049
+ "stop-color": color || 'currentColor'
26050
+ }, null))])]), vue.createVNode("clipPath", {
26051
+ "id": `${id.value}-clip`
26052
+ }, [bars.value.map(item => vue.createVNode("rect", {
26053
+ "x": item.x + offsetX.value,
26054
+ "y": item.y,
26055
+ "width": lineWidth.value,
26056
+ "height": item.height,
26057
+ "rx": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0,
26058
+ "ry": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0
26059
+ }, [props.autoDraw && vue.createVNode(vue.Fragment, null, [vue.createVNode("animate", {
26060
+ "attributeName": "y",
26061
+ "from": item.y + item.height,
26062
+ "to": item.y,
26063
+ "dur": `${autoDrawDuration.value}ms`,
26064
+ "fill": "freeze"
26065
+ }, null), vue.createVNode("animate", {
26066
+ "attributeName": "height",
26067
+ "from": "0",
26068
+ "to": item.height,
26069
+ "dur": `${autoDrawDuration.value}ms`,
26070
+ "fill": "freeze"
26071
+ }, null)])]))]), hasLabels.value && vue.createVNode("g", {
26072
+ "key": "labels",
26073
+ "style": {
26074
+ textAnchor: 'middle',
26075
+ dominantBaseline: 'mathematical',
26076
+ fill: 'currentColor'
26077
+ }
26078
+ }, [parsedLabels.value.map((item, i) => vue.createVNode("text", {
26079
+ "x": item.x + offsetX.value + lineWidth.value / 2,
26080
+ "y": parseInt(props.height, 10) - 2 + (parseInt(props.labelSize, 10) || 7 * 0.75),
26081
+ "font-size": Number(props.labelSize) || 7
26082
+ }, [slots.label?.({
26083
+ index: i,
26084
+ value: item.value
26085
+ }) ?? item.value]))]), vue.createVNode("g", {
26086
+ "clip-path": `url(#${id.value}-clip)`,
26087
+ "fill": `url(#${id.value})`
26088
+ }, [vue.createVNode("rect", {
26089
+ "x": 0,
26090
+ "y": 0,
26091
+ "width": Math.max(props.modelValue.length * lineWidth.value, Number(props.width)),
26092
+ "height": props.height
26093
+ }, null)])]);
26094
+ });
26095
+ }
26096
+ });
26097
+
26098
+ // @ts-nocheck
26099
+ /* eslint-disable */
26100
+
26101
+ // import { checkCollinear, getDistance, moveTo } from './math'
26102
+
26103
+ /**
26104
+ * From https://github.com/unsplash/react-trend/blob/master/src/helpers/DOM.helpers.js#L18
26105
+ */
26106
+ function genPath(points, radius) {
26107
+ let fill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
26108
+ let height = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 75;
26109
+ if (points.length === 0) return '';
26110
+ const start = points.shift();
26111
+ const end = points[points.length - 1];
26112
+ return (fill ? `M${start.x} ${height - start.x + 2} L${start.x} ${start.y}` : `M${start.x} ${start.y}`) + points.map((point, index) => {
26113
+ const next = points[index + 1];
26114
+ const prev = points[index - 1] || start;
26115
+ const isCollinear = next && checkCollinear(next, point, prev);
26116
+ if (!next || isCollinear) {
26117
+ return `L${point.x} ${point.y}`;
26118
+ }
26119
+ const threshold = Math.min(getDistance(prev, point), getDistance(next, point));
26120
+ const isTooCloseForRadius = threshold / 2 < radius;
26121
+ const radiusForPoint = isTooCloseForRadius ? threshold / 2 : radius;
26122
+ const before = moveTo(prev, point, radiusForPoint);
26123
+ const after = moveTo(next, point, radiusForPoint);
26124
+ return `L${before.x} ${before.y}S${point.x} ${point.y} ${after.x} ${after.y}`;
26125
+ }).join('') + (fill ? `L${end.x} ${height - start.x + 2} Z` : '');
26126
+ }
26127
+ function int(value) {
26128
+ return parseInt(value, 10);
26129
+ }
26130
+
26131
+ /**
26132
+ * https://en.wikipedia.org/wiki/Collinearity
26133
+ * x=(x1+x2)/2
26134
+ * y=(y1+y2)/2
26135
+ */
26136
+ function checkCollinear(p0, p1, p2) {
26137
+ return int(p0.x + p2.x) === int(2 * p1.x) && int(p0.y + p2.y) === int(2 * p1.y);
26138
+ }
26139
+ function getDistance(p1, p2) {
26140
+ return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
26141
+ }
26142
+ function moveTo(to, from, radius) {
26143
+ const vector = {
26144
+ x: to.x - from.x,
26145
+ y: to.y - from.y
26146
+ };
26147
+ const length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
26148
+ const unitVector = {
26149
+ x: vector.x / length,
26150
+ y: vector.y / length
26151
+ };
26152
+ return {
26153
+ x: from.x + unitVector.x * radius,
26154
+ y: from.y + unitVector.y * radius
26155
+ };
26156
+ }
26157
+
26158
+ // Types
26159
+
26160
+ const makeVTrendlineProps = propsFactory({
26161
+ fill: Boolean,
26162
+ ...makeLineProps()
26163
+ }, 'VTrendline');
26164
+ const VTrendline = genericComponent()({
26165
+ name: 'VTrendline',
26166
+ props: makeVTrendlineProps(),
26167
+ setup(props, _ref) {
26168
+ let {
26169
+ slots
26170
+ } = _ref;
26171
+ const uid = getUid();
26172
+ const id = vue.computed(() => props.id || `trendline-${uid}`);
26173
+ const autoDrawDuration = vue.computed(() => Number(props.autoDrawDuration) || (props.fill ? 500 : 2000));
26174
+ const lastLength = vue.ref(0);
26175
+ const path = vue.ref(null);
26176
+ function genPoints(values, boundary) {
26177
+ const {
26178
+ minX,
26179
+ maxX,
26180
+ minY,
26181
+ maxY
26182
+ } = boundary;
26183
+ const totalValues = values.length;
26184
+ const maxValue = Math.max(...values);
26185
+ const minValue = Math.min(...values);
26186
+ const gridX = (maxX - minX) / (totalValues - 1);
26187
+ const gridY = (maxY - minY) / (maxValue - minValue || 1);
26188
+ return values.map((value, index) => {
26189
+ return {
26190
+ x: minX + index * gridX,
26191
+ y: maxY - (value - minValue) * gridY,
26192
+ value
26193
+ };
26194
+ });
26195
+ }
26196
+ const hasLabels = vue.computed(() => {
26197
+ return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
26198
+ });
26199
+ const lineWidth = vue.computed(() => {
26200
+ return parseFloat(props.lineWidth) || 4;
26201
+ });
26202
+ const totalWidth = vue.computed(() => Number(props.width));
26203
+ const boundary = vue.computed(() => {
26204
+ const padding = Number(props.padding);
26205
+ return {
26206
+ minX: padding,
26207
+ maxX: totalWidth.value - padding,
26208
+ minY: padding,
26209
+ maxY: parseInt(props.height, 10) - padding
26210
+ };
26211
+ });
26212
+ const parsedLabels = vue.computed(() => {
26213
+ const labels = [];
26214
+ const points = genPoints(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value);
26215
+ const len = points.length;
26216
+ for (let i = 0; labels.length < len; i++) {
26217
+ const item = points[i];
26218
+ let value = props.labels[i];
26219
+ if (!value) {
26220
+ value = typeof item === 'object' ? item.value : item;
26221
+ }
26222
+ labels.push({
26223
+ x: item.x,
26224
+ value: String(value)
26225
+ });
26226
+ }
26227
+ return labels;
26228
+ });
26229
+ vue.watch(() => props.modelValue, async () => {
26230
+ await vue.nextTick();
26231
+ if (!props.autoDraw || !path.value) return;
26232
+ const pathRef = path.value;
26233
+ const length = pathRef.getTotalLength();
26234
+ if (!props.fill) {
26235
+ // Initial setup to "hide" the line by using the stroke dash array
26236
+ pathRef.style.strokeDasharray = `${length}`;
26237
+ pathRef.style.strokeDashoffset = `${length}`;
26238
+
26239
+ // Force reflow to ensure the transition starts from this state
26240
+ pathRef.getBoundingClientRect();
26241
+
26242
+ // Animate the stroke dash offset to "draw" the line
26243
+ pathRef.style.transition = `stroke-dashoffset ${autoDrawDuration.value}ms ${props.autoDrawEasing}`;
26244
+ pathRef.style.strokeDashoffset = '0';
26245
+ } else {
26246
+ // Your existing logic for filled paths remains the same
26247
+ pathRef.style.transformOrigin = 'bottom center';
26248
+ pathRef.style.transition = 'none';
26249
+ pathRef.style.transform = `scaleY(0)`;
26250
+ pathRef.getBoundingClientRect();
26251
+ pathRef.style.transition = `transform ${autoDrawDuration.value}ms ${props.autoDrawEasing}`;
26252
+ pathRef.style.transform = `scaleY(1)`;
26253
+ }
26254
+ lastLength.value = length;
26255
+ }, {
26256
+ immediate: true
26257
+ });
26258
+ useRender(() => {
26259
+ const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
26260
+ return vue.createVNode("svg", {
26261
+ "display": "block",
26262
+ "stroke-width": parseFloat(props.lineWidth) ?? 4
26263
+ }, [vue.createVNode("defs", null, [vue.createVNode("linearGradient", {
26264
+ "id": id.value,
26265
+ "gradientUnits": "userSpaceOnUse",
26266
+ "x1": props.gradientDirection === 'left' ? '100%' : '0',
26267
+ "y1": props.gradientDirection === 'top' ? '100%' : '0',
26268
+ "x2": props.gradientDirection === 'right' ? '100%' : '0',
26269
+ "y2": props.gradientDirection === 'bottom' ? '100%' : '0'
26270
+ }, [gradientData.map((color, index) => vue.createVNode("stop", {
26271
+ "offset": index / Math.max(gradientData.length - 1, 1),
26272
+ "stop-color": color || 'currentColor'
26273
+ }, null))])]), hasLabels.value && vue.createVNode("g", {
26274
+ "key": "labels",
26275
+ "style": {
26276
+ textAnchor: 'middle',
26277
+ dominantBaseline: 'mathematical',
26278
+ fill: 'currentColor'
26279
+ }
26280
+ }, [parsedLabels.value.map((item, i) => vue.createVNode("text", {
26281
+ "x": item.x + lineWidth.value / 2 + lineWidth.value / 2,
26282
+ "y": parseInt(props.height, 10) - 4 + (parseInt(props.labelSize, 10) || 7 * 0.75),
26283
+ "font-size": Number(props.labelSize) || 7
26284
+ }, [slots.label?.({
26285
+ index: i,
26286
+ value: item.value
26287
+ }) ?? item.value]))]), vue.createVNode("path", {
26288
+ "ref": path,
26289
+ "d": genPath(genPoints(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value), props.smooth ? 8 : Number(props.smooth), props.fill, parseInt(props.height, 10)),
26290
+ "fill": props.fill ? `url(#${id.value})` : 'none',
26291
+ "stroke": props.fill ? 'none' : `url(#${id.value})`
26292
+ }, null)]);
26293
+ });
26294
+ }
26295
+ });
26296
+
26297
+ // Types
26298
+
26299
+ // Types
26300
+
26301
+ const makeVSparklineProps = propsFactory({
26302
+ type: {
26303
+ type: String,
26304
+ default: 'trend'
26305
+ },
26306
+ ...makeVBarlineProps(),
26307
+ ...makeVTrendlineProps()
26308
+ }, 'VSparkline');
26309
+ const VSparkline = genericComponent()({
26310
+ name: 'VSparkline',
26311
+ props: makeVSparklineProps(),
26312
+ setup(props, _ref) {
26313
+ let {
26314
+ slots
26315
+ } = _ref;
26316
+ const {
26317
+ textColorClasses,
26318
+ textColorStyles
26319
+ } = useTextColor(vue.toRef(props, 'color'));
26320
+ const hasLabels = vue.computed(() => {
26321
+ return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
26322
+ });
26323
+ const totalHeight = vue.computed(() => {
26324
+ let height = parseInt(props.height, 10);
26325
+ if (hasLabels.value) height += parseInt(props.labelSize, 10) * 1.5;
26326
+ return height;
26327
+ });
26328
+ useRender(() => {
26329
+ const Tag = props.type === 'trend' ? VTrendline : VBarline;
26330
+ const lineProps = props.type === 'trend' ? VTrendline.filterProps(props) : VBarline.filterProps(props);
26331
+ return vue.createVNode(Tag, vue.mergeProps({
26332
+ "key": props.type,
26333
+ "class": textColorClasses.value,
26334
+ "style": textColorStyles.value,
26335
+ "viewBox": `0 0 ${props.width} ${parseInt(totalHeight.value, 10)}`
26336
+ }, lineProps), slots);
26337
+ });
26338
+ }
26339
+ });
26340
+
25849
26341
  var components = /*#__PURE__*/Object.freeze({
25850
26342
  __proto__: null,
25851
26343
  VAlert: VAlert,
@@ -25898,6 +26390,7 @@
25898
26390
  VDataIterator: VDataIterator,
25899
26391
  VDataTable: VDataTable,
25900
26392
  VDataTableFooter: VDataTableFooter,
26393
+ VDataTableHeaders: VDataTableHeaders,
25901
26394
  VDataTableRow: VDataTableRow,
25902
26395
  VDataTableRows: VDataTableRows,
25903
26396
  VDataTableServer: VDataTableServer,
@@ -25988,6 +26481,7 @@
25988
26481
  VSlider: VSlider,
25989
26482
  VSnackbar: VSnackbar,
25990
26483
  VSpacer: VSpacer,
26484
+ VSparkline: VSparkline,
25991
26485
  VStepper: VStepper,
25992
26486
  VStepperActions: VStepperActions,
25993
26487
  VStepperHeader: VStepperHeader,
@@ -26235,7 +26729,7 @@
26235
26729
  goTo
26236
26730
  };
26237
26731
  }
26238
- const version$1 = "3.5.4";
26732
+ const version$1 = "3.5.6";
26239
26733
  createVuetify$1.version = version$1;
26240
26734
 
26241
26735
  // Vue's inject() can only be used in setup
@@ -26249,7 +26743,7 @@
26249
26743
 
26250
26744
  /* eslint-disable local-rules/sort-imports */
26251
26745
 
26252
- const version = "3.5.4";
26746
+ const version = "3.5.6";
26253
26747
 
26254
26748
  /* eslint-disable local-rules/sort-imports */
26255
26749