vuetify 3.5.4 → 3.5.5

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 (151) hide show
  1. package/dist/json/attributes.json +2771 -2523
  2. package/dist/json/importMap-labs.json +4 -0
  3. package/dist/json/importMap.json +94 -94
  4. package/dist/json/tags.json +236 -169
  5. package/dist/json/web-types.json +3218 -2563
  6. package/dist/vuetify-labs.css +1819 -1796
  7. package/dist/vuetify-labs.d.ts +1234 -152
  8. package/dist/vuetify-labs.esm.js +555 -72
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +555 -72
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +887 -864
  13. package/dist/vuetify.d.ts +886 -179
  14. package/dist/vuetify.esm.js +121 -71
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +121 -71
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +647 -645
  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 +4 -4
  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/index.d.mts +33 -6
  39. package/lib/components/VDataIterator/index.d.mts +3 -3
  40. package/lib/components/VDataTable/VDataTable.mjs.map +1 -1
  41. package/lib/components/VDataTable/VDataTableHeaders.mjs.map +1 -1
  42. package/lib/components/VDataTable/index.d.mts +355 -117
  43. package/lib/components/VDataTable/types.mjs.map +1 -1
  44. package/lib/components/VDatePicker/VDatePicker.css +2 -21
  45. package/lib/components/VDatePicker/VDatePicker.mjs +14 -10
  46. package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
  47. package/lib/components/VDatePicker/VDatePicker.sass +3 -18
  48. package/lib/components/VDatePicker/VDatePickerHeader.css +2 -0
  49. package/lib/components/VDatePicker/VDatePickerHeader.sass +3 -0
  50. package/lib/components/VDatePicker/VDatePickerMonth.css +11 -5
  51. package/lib/components/VDatePicker/VDatePickerMonth.mjs +2 -1
  52. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  53. package/lib/components/VDatePicker/VDatePickerMonth.sass +13 -5
  54. package/lib/components/VDatePicker/VDatePickerMonths.css +2 -3
  55. package/lib/components/VDatePicker/VDatePickerMonths.mjs +6 -3
  56. package/lib/components/VDatePicker/VDatePickerMonths.mjs.map +1 -1
  57. package/lib/components/VDatePicker/VDatePickerMonths.sass +4 -3
  58. package/lib/components/VDatePicker/VDatePickerYears.css +2 -2
  59. package/lib/components/VDatePicker/VDatePickerYears.mjs +8 -1
  60. package/lib/components/VDatePicker/VDatePickerYears.mjs.map +1 -1
  61. package/lib/components/VDatePicker/VDatePickerYears.sass +4 -2
  62. package/lib/components/VDatePicker/_variables.scss +14 -34
  63. package/lib/components/VDatePicker/index.d.mts +13 -4
  64. package/lib/components/VExpansionPanel/VExpansionPanel.css +14 -0
  65. package/lib/components/VExpansionPanel/VExpansionPanel.sass +14 -0
  66. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +9 -2
  67. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  68. package/lib/components/VExpansionPanel/index.d.mts +27 -0
  69. package/lib/components/VField/VField.css +20 -1
  70. package/lib/components/VField/VField.sass +19 -1
  71. package/lib/components/VField/index.d.mts +9 -0
  72. package/lib/components/VFileInput/VFileInput.mjs +1 -1
  73. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  74. package/lib/components/VFileInput/index.d.mts +9 -0
  75. package/lib/components/VFooter/index.d.mts +9 -0
  76. package/lib/components/VImg/index.d.mts +9 -0
  77. package/lib/components/VList/VListItem.css +2 -1
  78. package/lib/components/VList/VListItem.sass +1 -0
  79. package/lib/components/VList/_variables.scss +2 -1
  80. package/lib/components/VList/index.d.mts +18 -0
  81. package/lib/components/VMenu/VMenu.mjs +5 -5
  82. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  83. package/lib/components/VMenu/shared.mjs.map +1 -1
  84. package/lib/components/VNavigationDrawer/index.d.mts +9 -0
  85. package/lib/components/VPagination/index.d.mts +9 -0
  86. package/lib/components/VProgressLinear/index.d.mts +9 -0
  87. package/lib/components/VRangeSlider/index.d.mts +9 -0
  88. package/lib/components/VSelect/VSelect.mjs +4 -3
  89. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  90. package/lib/components/VSelect/index.d.mts +33 -6
  91. package/lib/components/VSheet/index.d.mts +9 -0
  92. package/lib/components/VSlider/index.d.mts +9 -0
  93. package/lib/components/VSnackbar/index.d.mts +9 -0
  94. package/lib/components/VStepper/index.d.mts +9 -0
  95. package/lib/components/VSystemBar/index.d.mts +9 -0
  96. package/lib/components/VTabs/index.d.mts +33 -6
  97. package/lib/components/VTextField/index.d.mts +33 -6
  98. package/lib/components/VTextarea/index.d.mts +9 -0
  99. package/lib/components/VTimeline/index.d.mts +9 -0
  100. package/lib/components/VToolbar/index.d.mts +9 -0
  101. package/lib/components/VTooltip/VTooltip.css +1 -0
  102. package/lib/components/VTooltip/VTooltip.sass +1 -0
  103. package/lib/components/VTooltip/_variables.scss +1 -0
  104. package/lib/components/index.d.mts +857 -151
  105. package/lib/composables/form.mjs +2 -1
  106. package/lib/composables/form.mjs.map +1 -1
  107. package/lib/composables/goto.mjs +16 -18
  108. package/lib/composables/goto.mjs.map +1 -1
  109. package/lib/composables/group.mjs +2 -0
  110. package/lib/composables/group.mjs.map +1 -1
  111. package/lib/composables/icons.mjs +17 -13
  112. package/lib/composables/icons.mjs.map +1 -1
  113. package/lib/composables/rounded.mjs +5 -1
  114. package/lib/composables/rounded.mjs.map +1 -1
  115. package/lib/composables/virtual.mjs +11 -3
  116. package/lib/composables/virtual.mjs.map +1 -1
  117. package/lib/entry-bundler.mjs +1 -1
  118. package/lib/framework.mjs +1 -1
  119. package/lib/iconsets/fa-svg.mjs +2 -1
  120. package/lib/iconsets/fa-svg.mjs.map +1 -1
  121. package/lib/index.d.mts +29 -28
  122. package/lib/labs/VCalendar/VCalendar.mjs +1 -1
  123. package/lib/labs/VCalendar/VCalendar.mjs.map +1 -1
  124. package/lib/labs/VPicker/VPicker.css +2 -2
  125. package/lib/labs/VPicker/VPicker.sass +2 -2
  126. package/lib/labs/VPicker/_variables.scss +2 -4
  127. package/lib/labs/VPicker/index.d.mts +9 -0
  128. package/lib/labs/VSparkline/VBarline.mjs +138 -0
  129. package/lib/labs/VSparkline/VBarline.mjs.map +1 -0
  130. package/lib/labs/VSparkline/VSparkline.mjs +49 -0
  131. package/lib/labs/VSparkline/VSparkline.mjs.map +1 -0
  132. package/lib/labs/VSparkline/VTrendline.mjs +143 -0
  133. package/lib/labs/VSparkline/VTrendline.mjs.map +1 -0
  134. package/lib/labs/VSparkline/index.d.mts +374 -0
  135. package/lib/labs/VSparkline/index.mjs +2 -0
  136. package/lib/labs/VSparkline/index.mjs.map +1 -0
  137. package/lib/labs/VSparkline/util/line.mjs +52 -0
  138. package/lib/labs/VSparkline/util/line.mjs.map +1 -0
  139. package/lib/labs/VSparkline/util/path.mjs +60 -0
  140. package/lib/labs/VSparkline/util/path.mjs.map +1 -0
  141. package/lib/labs/components.d.mts +376 -1
  142. package/lib/labs/components.mjs +1 -0
  143. package/lib/labs/components.mjs.map +1 -1
  144. package/lib/locale/nl.mjs +1 -1
  145. package/lib/locale/nl.mjs.map +1 -1
  146. package/lib/util/helpers.mjs +10 -0
  147. package/lib/util/helpers.mjs.map +1 -1
  148. package/package.json +2 -2
  149. package/lib/components/VDatePicker/VDatePickerTitle.mjs +0 -81
  150. package/lib/components/VDatePicker/VDatePickerTitle.mjs.map +0 -1
  151. package/lib/components/VDatePicker/VDatePickerTitle.sass +0 -33
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.5.4
2
+ * Vuetify v3.5.5
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -545,6 +545,16 @@ function defer(timeout, cb) {
545
545
  const timeoutId = window.setTimeout(cb, timeout);
546
546
  return () => window.clearTimeout(timeoutId);
547
547
  }
548
+ function isClickInsideElement(event, targetDiv) {
549
+ const mouseX = event.clientX;
550
+ const mouseY = event.clientY;
551
+ const divRect = targetDiv.getBoundingClientRect();
552
+ const divLeft = divRect.left;
553
+ const divTop = divRect.top;
554
+ const divRight = divRect.right;
555
+ const divBottom = divRect.bottom;
556
+ return mouseX >= divLeft && mouseX <= divRight && mouseY >= divTop && mouseY <= divBottom;
557
+ }
548
558
 
549
559
  // Utilities
550
560
  const block = ['top', 'bottom'];
@@ -2156,7 +2166,7 @@ function provideLocale(props) {
2156
2166
  provide(LocaleSymbol, data);
2157
2167
  return data;
2158
2168
  }
2159
- function genDefaults$2() {
2169
+ function genDefaults$3() {
2160
2170
  return {
2161
2171
  af: false,
2162
2172
  ar: true,
@@ -2203,7 +2213,7 @@ function genDefaults$2() {
2203
2213
  };
2204
2214
  }
2205
2215
  function createRtl(i18n, options) {
2206
- const rtl = ref(options?.rtl ?? genDefaults$2());
2216
+ const rtl = ref(options?.rtl ?? genDefaults$3());
2207
2217
  const isRtl = computed(() => rtl.value[i18n.current.value] ?? false);
2208
2218
  return {
2209
2219
  isRtl,
@@ -2236,7 +2246,7 @@ const ThemeSymbol = Symbol.for('vuetify:theme');
2236
2246
  const makeThemeProps = propsFactory({
2237
2247
  theme: String
2238
2248
  }, 'theme');
2239
- function genDefaults$1() {
2249
+ function genDefaults$2() {
2240
2250
  return {
2241
2251
  defaultTheme: 'light',
2242
2252
  variations: {
@@ -2323,8 +2333,8 @@ function genDefaults$1() {
2323
2333
  };
2324
2334
  }
2325
2335
  function parseThemeOptions() {
2326
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : genDefaults$1();
2327
- const defaults = genDefaults$1();
2336
+ let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : genDefaults$2();
2337
+ const defaults = genDefaults$2();
2328
2338
  if (!options) return {
2329
2339
  ...defaults,
2330
2340
  isDisabled: true
@@ -3107,12 +3117,14 @@ const makeRoundedProps = propsFactory({
3107
3117
  rounded: {
3108
3118
  type: [Boolean, Number, String],
3109
3119
  default: undefined
3110
- }
3120
+ },
3121
+ tile: Boolean
3111
3122
  }, 'rounded');
3112
3123
  function useRounded(props) {
3113
3124
  let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
3114
3125
  const roundedClasses = computed(() => {
3115
3126
  const rounded = isRef(props) ? props.value : props.rounded;
3127
+ const tile = isRef(props) ? props.value : props.tile;
3116
3128
  const classes = [];
3117
3129
  if (rounded === true || rounded === '') {
3118
3130
  classes.push(`${name}--rounded`);
@@ -3120,6 +3132,8 @@ function useRounded(props) {
3120
3132
  for (const value of String(rounded).split(' ')) {
3121
3133
  classes.push(`rounded-${value}`);
3122
3134
  }
3135
+ } else if (tile) {
3136
+ classes.push('rounded-0');
3123
3137
  }
3124
3138
  return classes;
3125
3139
  });
@@ -4110,6 +4124,8 @@ function useGroupItem(props, injectKey) {
4110
4124
  vm.emit('group:selected', {
4111
4125
  value
4112
4126
  });
4127
+ }, {
4128
+ flush: 'sync'
4113
4129
  });
4114
4130
  return {
4115
4131
  id,
@@ -4445,23 +4461,27 @@ const VClassIcon = defineComponent({
4445
4461
  };
4446
4462
  }
4447
4463
  });
4448
- const defaultSets = {
4449
- svg: {
4450
- component: VSvgIcon
4451
- },
4452
- class: {
4453
- component: VClassIcon
4454
- }
4455
- };
4464
+ function genDefaults$1() {
4465
+ return {
4466
+ svg: {
4467
+ component: VSvgIcon
4468
+ },
4469
+ class: {
4470
+ component: VClassIcon
4471
+ }
4472
+ };
4473
+ }
4456
4474
 
4457
4475
  // Composables
4458
4476
  function createIcons(options) {
4477
+ const sets = genDefaults$1();
4478
+ const defaultSet = options?.defaultSet ?? 'mdi';
4479
+ if (defaultSet === 'mdi' && !sets.mdi) {
4480
+ sets.mdi = mdi;
4481
+ }
4459
4482
  return mergeDeep({
4460
- defaultSet: 'mdi',
4461
- sets: {
4462
- ...defaultSets,
4463
- mdi
4464
- },
4483
+ defaultSet,
4484
+ sets,
4465
4485
  aliases: {
4466
4486
  ...aliases,
4467
4487
  /* eslint-disable max-len */
@@ -6465,7 +6485,8 @@ function createForm(props) {
6465
6485
  errors.value = results;
6466
6486
  model.value = invalid > 0 ? false : valid === items.value.length ? true : null;
6467
6487
  }, {
6468
- deep: true
6488
+ deep: true,
6489
+ flush: 'post'
6469
6490
  });
6470
6491
  provide(FormKey, {
6471
6492
  register: _ref => {
@@ -10569,9 +10590,9 @@ const VMenu = genericComponent()({
10569
10590
  unregister() {
10570
10591
  --openChildren.value;
10571
10592
  },
10572
- closeParents() {
10593
+ closeParents(e) {
10573
10594
  setTimeout(() => {
10574
- if (!openChildren.value) {
10595
+ if (!openChildren.value && (e == null || e && !isClickInsideElement(e, overlay.value.contentEl))) {
10575
10596
  isActive.value = false;
10576
10597
  parent?.closeParents();
10577
10598
  }
@@ -10604,8 +10625,8 @@ const VMenu = genericComponent()({
10604
10625
  document.removeEventListener('focusin', onFocusIn);
10605
10626
  }
10606
10627
  });
10607
- function onClickOutside() {
10608
- parent?.closeParents();
10628
+ function onClickOutside(e) {
10629
+ parent?.closeParents(e);
10609
10630
  }
10610
10631
  function onKeydown(e) {
10611
10632
  if (props.disabled) return;
@@ -11339,9 +11360,6 @@ function useVirtual(props, items) {
11339
11360
  });
11340
11361
  });
11341
11362
  });
11342
- watch(viewportHeight, (val, oldVal) => {
11343
- oldVal && calculateVisibleItems();
11344
- });
11345
11363
  onScopeDispose(() => {
11346
11364
  updateOffsets.clear();
11347
11365
  });
@@ -11364,6 +11382,17 @@ function useVirtual(props, items) {
11364
11382
  let lastScrollTop = 0;
11365
11383
  let scrollVelocity = 0;
11366
11384
  let lastScrollTime = 0;
11385
+ watch(viewportHeight, (val, oldVal) => {
11386
+ if (oldVal) {
11387
+ calculateVisibleItems();
11388
+ if (val < oldVal) {
11389
+ requestAnimationFrame(() => {
11390
+ scrollVelocity = 0;
11391
+ calculateVisibleItems();
11392
+ });
11393
+ }
11394
+ }
11395
+ });
11367
11396
  function handleScroll() {
11368
11397
  if (!containerRef.value || !markerRef.value) return;
11369
11398
  const scrollTop = containerRef.value.scrollTop;
@@ -11816,9 +11845,10 @@ const VSelect = genericComponent()({
11816
11845
  }
11817
11846
  }
11818
11847
  function select(item) {
11848
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
11849
+ const add = index === -1;
11819
11850
  if (props.multiple) {
11820
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
11821
- if (index === -1) {
11851
+ if (add) {
11822
11852
  model.value = [...model.value, item];
11823
11853
  } else {
11824
11854
  const value = [...model.value];
@@ -11826,7 +11856,7 @@ const VSelect = genericComponent()({
11826
11856
  model.value = value;
11827
11857
  }
11828
11858
  } else {
11829
- model.value = [item];
11859
+ model.value = add ? [item] : [];
11830
11860
  menu.value = false;
11831
11861
  }
11832
11862
  }
@@ -12363,11 +12393,11 @@ const VAutocomplete = genericComponent()({
12363
12393
  }
12364
12394
  const isSelecting = shallowRef(false);
12365
12395
  function select(item) {
12366
- let add = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12367
12396
  if (item.props.disabled) return;
12397
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12398
+ const add = index === -1;
12368
12399
  if (props.multiple) {
12369
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12370
- if (index === -1) {
12400
+ if (add) {
12371
12401
  model.value = [...model.value, item];
12372
12402
  } else {
12373
12403
  const value = [...model.value];
@@ -12536,7 +12566,7 @@ const VAutocomplete = genericComponent()({
12536
12566
  function onChipClose(e) {
12537
12567
  e.stopPropagation();
12538
12568
  e.preventDefault();
12539
- select(item, false);
12569
+ select(item);
12540
12570
  }
12541
12571
  const slotProps = {
12542
12572
  'onClick:close': onChipClose,
@@ -17617,7 +17647,8 @@ function createGoTo(options, locale) {
17617
17647
  };
17618
17648
  }
17619
17649
  async function scrollTo(_target, _options, horizontal, goTo) {
17620
- const options = mergeDeep(goTo?.options, _options);
17650
+ const property = horizontal ? 'scrollLeft' : 'scrollTop';
17651
+ const options = mergeDeep(goTo?.options ?? genDefaults(), _options);
17621
17652
  const rtl = goTo?.rtl.value;
17622
17653
  const target = (typeof _target === 'number' ? _target : getTarget(_target)) ?? 0;
17623
17654
  const container = options.container === 'parent' && target instanceof HTMLElement ? target.parentElement : getContainer(options.container);
@@ -17635,25 +17666,22 @@ async function scrollTo(_target, _options, horizontal, goTo) {
17635
17666
  }
17636
17667
  }
17637
17668
  targetLocation += options.offset;
17638
- const startLocation = (horizontal ? container.scrollLeft : container.scrollTop) ?? 0;
17669
+ const startLocation = container[property] ?? 0;
17639
17670
  if (targetLocation === startLocation) return Promise.resolve(targetLocation);
17640
17671
  const startTime = performance.now();
17641
17672
  return new Promise(resolve => requestAnimationFrame(function step(currentTime) {
17642
17673
  const timeElapsed = currentTime - startTime;
17643
- const progress = Math.abs(options.duration ? Math.min(timeElapsed / options.duration, 1) : 1);
17644
- const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(progress));
17645
- container[horizontal ? 'scrollLeft' : 'scrollTop'] = location;
17646
- if (progress === 1) return resolve(targetLocation);
17647
- let clientSize;
17648
- let reachEnd;
17649
- if (!horizontal) {
17650
- clientSize = container === document.body ? document.documentElement.clientHeight : container.clientHeight;
17651
- reachEnd = clientSize + container.scrollTop >= container.scrollHeight;
17652
- if (targetLocation > container.scrollTop && reachEnd) return resolve(targetLocation);
17653
- } else {
17654
- clientSize = container === document.body ? document.documentElement.clientWidth : container.clientWidth;
17655
- reachEnd = clientSize + container.scrollLeft >= container.scrollWidth;
17656
- if (targetLocation > container.scrollLeft && reachEnd) return resolve(targetLocation);
17674
+ const progress = timeElapsed / options.duration;
17675
+ const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(Math.max(progress, 1)));
17676
+ container[property] = location;
17677
+
17678
+ // Allow for some jitter if target time has elapsed
17679
+ if (progress >= 1 && Math.abs(location - container[property]) < 10) {
17680
+ return resolve(targetLocation);
17681
+ } else if (progress > 2) {
17682
+ // The target might not be reachable
17683
+ consoleWarn('Scroll target is not reachable');
17684
+ return resolve(container[property]);
17657
17685
  }
17658
17686
  requestAnimationFrame(step);
17659
17687
  }));
@@ -20590,12 +20618,13 @@ const VDatePickerMonth = genericComponent()({
20590
20618
  }, [(props.showAdjacentMonths || !item.isAdjacent) && createVNode(VDefaultsProvider, {
20591
20619
  "defaults": {
20592
20620
  VBtn: {
20621
+ class: 'v-date-picker-month__day-btn',
20593
20622
  color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
20594
20623
  disabled: item.isDisabled,
20595
20624
  icon: true,
20596
20625
  ripple: false,
20597
20626
  text: item.localized,
20598
- variant: item.isDisabled ? 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
20627
+ variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
20599
20628
  onClick: () => onClick(item.date)
20600
20629
  }
20601
20630
  }
@@ -20621,6 +20650,7 @@ const VDatePickerMonths = genericComponent()({
20621
20650
  },
20622
20651
  setup(props, _ref) {
20623
20652
  let {
20653
+ emit,
20624
20654
  slots
20625
20655
  } = _ref;
20626
20656
  const adapter = useDate();
@@ -20656,6 +20686,10 @@ const VDatePickerMonths = genericComponent()({
20656
20686
  onClick: () => onClick(i)
20657
20687
  };
20658
20688
  function onClick(i) {
20689
+ if (model.value === i) {
20690
+ emit('update:modelValue', model.value);
20691
+ return;
20692
+ }
20659
20693
  model.value = i;
20660
20694
  }
20661
20695
  return slots.month?.({
@@ -20664,9 +20698,7 @@ const VDatePickerMonths = genericComponent()({
20664
20698
  props: btnProps
20665
20699
  }) ?? createVNode(VBtn, mergeProps({
20666
20700
  "key": "month"
20667
- }, btnProps, {
20668
- "onClick": () => onClick(i)
20669
- }), null);
20701
+ }, btnProps), null);
20670
20702
  })])]));
20671
20703
  return {};
20672
20704
  }
@@ -20691,6 +20723,7 @@ const VDatePickerYears = genericComponent()({
20691
20723
  },
20692
20724
  setup(props, _ref) {
20693
20725
  let {
20726
+ emit,
20694
20727
  slots
20695
20728
  } = _ref;
20696
20729
  const adapter = useDate();
@@ -20741,7 +20774,13 @@ const VDatePickerYears = genericComponent()({
20741
20774
  rounded: true,
20742
20775
  text: year.text,
20743
20776
  variant: model.value === year.value ? 'flat' : 'text',
20744
- onClick: () => model.value = year.value
20777
+ onClick: () => {
20778
+ if (model.value === year.value) {
20779
+ emit('update:modelValue', model.value);
20780
+ return;
20781
+ }
20782
+ model.value = year.value;
20783
+ }
20745
20784
  };
20746
20785
  return slots.year?.({
20747
20786
  year,
@@ -20934,7 +20973,9 @@ const VDatePicker = genericComponent()({
20934
20973
  } else {
20935
20974
  year.value++;
20936
20975
  month.value = 0;
20976
+ onUpdateYear(year.value);
20937
20977
  }
20978
+ onUpdateMonth(month.value);
20938
20979
  }
20939
20980
  function onClickPrev() {
20940
20981
  if (month.value > 0) {
@@ -20942,7 +20983,9 @@ const VDatePicker = genericComponent()({
20942
20983
  } else {
20943
20984
  year.value--;
20944
20985
  month.value = 11;
20986
+ onUpdateYear(year.value);
20945
20987
  }
20988
+ onUpdateMonth(month.value);
20946
20989
  }
20947
20990
  function onClickDate() {
20948
20991
  viewMode.value = 'month';
@@ -20953,14 +20996,14 @@ const VDatePicker = genericComponent()({
20953
20996
  function onClickYear() {
20954
20997
  viewMode.value = viewMode.value === 'year' ? 'month' : 'year';
20955
20998
  }
20956
- watch(month, () => {
20999
+ function onUpdateMonth(value) {
20957
21000
  if (viewMode.value === 'months') onClickMonth();
20958
- emit('update:month', month.value);
20959
- });
20960
- watch(year, () => {
21001
+ emit('update:month', value);
21002
+ }
21003
+ function onUpdateYear(value) {
20961
21004
  if (viewMode.value === 'year') onClickYear();
20962
- emit('update:year', year.value);
20963
- });
21005
+ emit('update:year', value);
21006
+ }
20964
21007
  watch(model, (val, oldVal) => {
20965
21008
  const before = adapter.date(wrapInArray(val)[0]);
20966
21009
  const after = adapter.date(wrapInArray(oldVal)[0]);
@@ -21016,14 +21059,14 @@ const VDatePicker = genericComponent()({
21016
21059
  "key": "date-picker-months"
21017
21060
  }, datePickerMonthsProps, {
21018
21061
  "modelValue": month.value,
21019
- "onUpdate:modelValue": $event => month.value = $event,
21062
+ "onUpdate:modelValue": [$event => month.value = $event, onUpdateMonth],
21020
21063
  "min": minDate.value,
21021
21064
  "max": maxDate.value
21022
21065
  }), null) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
21023
21066
  "key": "date-picker-years"
21024
21067
  }, datePickerYearsProps, {
21025
21068
  "modelValue": year.value,
21026
- "onUpdate:modelValue": $event => year.value = $event,
21069
+ "onUpdate:modelValue": [$event => year.value = $event, onUpdateYear],
21027
21070
  "min": minDate.value,
21028
21071
  "max": maxDate.value
21029
21072
  }), null) : createVNode(VDatePickerMonth, mergeProps({
@@ -21032,9 +21075,9 @@ const VDatePicker = genericComponent()({
21032
21075
  "modelValue": model.value,
21033
21076
  "onUpdate:modelValue": $event => model.value = $event,
21034
21077
  "month": month.value,
21035
- "onUpdate:month": $event => month.value = $event,
21078
+ "onUpdate:month": [$event => month.value = $event, onUpdateMonth],
21036
21079
  "year": year.value,
21037
- "onUpdate:year": $event => year.value = $event,
21080
+ "onUpdate:year": [$event => year.value = $event, onUpdateYear],
21038
21081
  "min": minDate.value,
21039
21082
  "max": maxDate.value
21040
21083
  }), null)]
@@ -21052,7 +21095,9 @@ const VExpansionPanelSymbol = Symbol.for('vuetify:v-expansion-panel');
21052
21095
  const allowedVariants = ['default', 'accordion', 'inset', 'popout'];
21053
21096
  const makeVExpansionPanelsProps = propsFactory({
21054
21097
  color: String,
21098
+ flat: Boolean,
21055
21099
  static: Boolean,
21100
+ tile: Boolean,
21056
21101
  variant: {
21057
21102
  type: String,
21058
21103
  default: 'default',
@@ -21082,12 +21127,17 @@ const VExpansionPanels = genericComponent()({
21082
21127
  provideDefaults({
21083
21128
  VExpansionPanel: {
21084
21129
  color: toRef(props, 'color'),
21085
- readonly: toRef(props, 'readonly'),
21130
+ readonly: toRef(props, 'readonly')
21131
+ },
21132
+ VExpansionPanelTitle: {
21086
21133
  static: toRef(props, 'static')
21087
21134
  }
21088
21135
  });
21089
21136
  useRender(() => createVNode(props.tag, {
21090
- "class": ['v-expansion-panels', themeClasses.value, variantClass.value, props.class],
21137
+ "class": ['v-expansion-panels', {
21138
+ 'v-expansion-panels--flat': props.flat,
21139
+ 'v-expansion-panels--tile': props.tile
21140
+ }, themeClasses.value, variantClass.value, props.class],
21091
21141
  "style": props.style
21092
21142
  }, slots));
21093
21143
  return {};
@@ -21371,7 +21421,7 @@ const VFileInput = genericComponent()({
21371
21421
  if (!isFocused.value) focus();
21372
21422
  }
21373
21423
  function onClickPrepend(e) {
21374
- onControlClick(e);
21424
+ inputRef.value?.click();
21375
21425
  }
21376
21426
  function onControlMousedown(e) {
21377
21427
  emit('mousedown:control', e);
@@ -25813,7 +25863,7 @@ const VCalendar = genericComponent()({
25813
25863
  }, [!props.hideWeekNumber ? createVNode("div", {
25814
25864
  "key": "weekNumber0",
25815
25865
  "class": "v-calendar-weekly__head-weeknumber"
25816
- }, null) : '', props.weekdays.sort((a, b) => a - b).map(weekday => createVNode("div", {
25866
+ }, null) : '', props.weekdays.map(weekday => createVNode("div", {
25817
25867
  "class": `v-calendar-weekly__head-weekday${!props.hideWeekNumber ? '-with-weeknumber' : ''}`
25818
25868
  }, [dayNames[weekday]]))]), props.viewMode === 'month' && createVNode("div", {
25819
25869
  "key": "VCalendarMonth",
@@ -25842,6 +25892,438 @@ const VCalendar = genericComponent()({
25842
25892
  }
25843
25893
  });
25844
25894
 
25895
+ // Utilities
25896
+
25897
+ // Types
25898
+
25899
+ const makeLineProps = propsFactory({
25900
+ autoDraw: Boolean,
25901
+ autoDrawDuration: [Number, String],
25902
+ autoDrawEasing: {
25903
+ type: String,
25904
+ default: 'ease'
25905
+ },
25906
+ color: String,
25907
+ gradient: {
25908
+ type: Array,
25909
+ default: () => []
25910
+ },
25911
+ gradientDirection: {
25912
+ type: String,
25913
+ validator: val => ['top', 'bottom', 'left', 'right'].includes(val),
25914
+ default: 'top'
25915
+ },
25916
+ height: {
25917
+ type: [String, Number],
25918
+ default: 75
25919
+ },
25920
+ labels: {
25921
+ type: Array,
25922
+ default: () => []
25923
+ },
25924
+ labelSize: {
25925
+ type: [Number, String],
25926
+ default: 7
25927
+ },
25928
+ lineWidth: {
25929
+ type: [String, Number],
25930
+ default: 4
25931
+ },
25932
+ id: String,
25933
+ modelValue: {
25934
+ type: Array,
25935
+ default: () => []
25936
+ },
25937
+ padding: {
25938
+ type: [String, Number],
25939
+ default: 8
25940
+ },
25941
+ showLabels: Boolean,
25942
+ smooth: Boolean,
25943
+ width: {
25944
+ type: [Number, String],
25945
+ default: 300
25946
+ }
25947
+ }, 'Line');
25948
+
25949
+ // Types
25950
+
25951
+ const makeVBarlineProps = propsFactory({
25952
+ autoLineWidth: Boolean,
25953
+ ...makeLineProps()
25954
+ }, 'VBarline');
25955
+ const VBarline = genericComponent()({
25956
+ name: 'VBarline',
25957
+ props: makeVBarlineProps(),
25958
+ setup(props, _ref) {
25959
+ let {
25960
+ slots
25961
+ } = _ref;
25962
+ const uid = getUid();
25963
+ const id = computed(() => props.id || `barline-${uid}`);
25964
+ const autoDrawDuration = computed(() => Number(props.autoDrawDuration) || 500);
25965
+ const hasLabels = computed(() => {
25966
+ return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
25967
+ });
25968
+ const lineWidth = computed(() => parseFloat(props.lineWidth) || 4);
25969
+ const totalWidth = computed(() => Math.max(props.modelValue.length * lineWidth.value, Number(props.width)));
25970
+ const boundary = computed(() => {
25971
+ return {
25972
+ minX: 0,
25973
+ maxX: totalWidth.value,
25974
+ minY: 0,
25975
+ maxY: parseInt(props.height, 10)
25976
+ };
25977
+ });
25978
+ function genBars(values, boundary) {
25979
+ const {
25980
+ minX,
25981
+ maxX,
25982
+ minY,
25983
+ maxY
25984
+ } = boundary;
25985
+ const totalValues = values.length;
25986
+ let maxValue = Math.max(...values);
25987
+ let minValue = Math.min(...values);
25988
+ if (minValue > 0) minValue = 0;
25989
+ if (maxValue < 0) maxValue = 0;
25990
+ const gridX = maxX / totalValues;
25991
+ const gridY = (maxY - minY) / (maxValue - minValue || 1);
25992
+ const horizonY = maxY - Math.abs(minValue * gridY);
25993
+ return values.map((value, index) => {
25994
+ const height = Math.abs(gridY * value);
25995
+ return {
25996
+ x: minX + index * gridX,
25997
+ y: horizonY - height + +(value < 0) * height,
25998
+ height,
25999
+ value
26000
+ };
26001
+ });
26002
+ }
26003
+ const parsedLabels = computed(() => {
26004
+ const labels = [];
26005
+ const points = genBars(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value);
26006
+ const len = points.length;
26007
+ for (let i = 0; labels.length < len; i++) {
26008
+ const item = points[i];
26009
+ let value = props.labels[i];
26010
+ if (!value) {
26011
+ value = typeof item === 'object' ? item.value : item;
26012
+ }
26013
+ labels.push({
26014
+ x: item.x,
26015
+ value: String(value)
26016
+ });
26017
+ }
26018
+ return labels;
26019
+ });
26020
+ const bars = computed(() => genBars(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value));
26021
+ const offsetX = computed(() => (Math.abs(bars.value[0].x - bars.value[1].x) - lineWidth.value) / 2);
26022
+ useRender(() => {
26023
+ const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
26024
+ return createVNode("svg", {
26025
+ "display": "block"
26026
+ }, [createVNode("defs", null, [createVNode("linearGradient", {
26027
+ "id": id.value,
26028
+ "gradientUnits": "userSpaceOnUse",
26029
+ "x1": props.gradientDirection === 'left' ? '100%' : '0',
26030
+ "y1": props.gradientDirection === 'top' ? '100%' : '0',
26031
+ "x2": props.gradientDirection === 'right' ? '100%' : '0',
26032
+ "y2": props.gradientDirection === 'bottom' ? '100%' : '0'
26033
+ }, [gradientData.map((color, index) => createVNode("stop", {
26034
+ "offset": index / Math.max(gradientData.length - 1, 1),
26035
+ "stop-color": color || 'currentColor'
26036
+ }, null))])]), createVNode("clipPath", {
26037
+ "id": `${id.value}-clip`
26038
+ }, [bars.value.map(item => createVNode("rect", {
26039
+ "x": item.x + offsetX.value,
26040
+ "y": item.y,
26041
+ "width": lineWidth.value,
26042
+ "height": item.height,
26043
+ "rx": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0,
26044
+ "ry": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0
26045
+ }, [props.autoDraw && createVNode(Fragment, null, [createVNode("animate", {
26046
+ "attributeName": "y",
26047
+ "from": item.y + item.height,
26048
+ "to": item.y,
26049
+ "dur": `${autoDrawDuration.value}ms`,
26050
+ "fill": "freeze"
26051
+ }, null), createVNode("animate", {
26052
+ "attributeName": "height",
26053
+ "from": "0",
26054
+ "to": item.height,
26055
+ "dur": `${autoDrawDuration.value}ms`,
26056
+ "fill": "freeze"
26057
+ }, null)])]))]), hasLabels.value && createVNode("g", {
26058
+ "key": "labels",
26059
+ "style": {
26060
+ textAnchor: 'middle',
26061
+ dominantBaseline: 'mathematical',
26062
+ fill: 'currentColor'
26063
+ }
26064
+ }, [parsedLabels.value.map((item, i) => createVNode("text", {
26065
+ "x": item.x + offsetX.value + lineWidth.value / 2,
26066
+ "y": parseInt(props.height, 10) - 2 + (parseInt(props.labelSize, 10) || 7 * 0.75),
26067
+ "font-size": Number(props.labelSize) || 7
26068
+ }, [slots.label?.({
26069
+ index: i,
26070
+ value: item.value
26071
+ }) ?? item.value]))]), createVNode("g", {
26072
+ "clip-path": `url(#${id.value}-clip)`,
26073
+ "fill": `url(#${id.value})`
26074
+ }, [createVNode("rect", {
26075
+ "x": 0,
26076
+ "y": 0,
26077
+ "width": Math.max(props.modelValue.length * lineWidth.value, Number(props.width)),
26078
+ "height": props.height
26079
+ }, null)])]);
26080
+ });
26081
+ }
26082
+ });
26083
+
26084
+ // @ts-nocheck
26085
+ /* eslint-disable */
26086
+
26087
+ // import { checkCollinear, getDistance, moveTo } from './math'
26088
+
26089
+ /**
26090
+ * From https://github.com/unsplash/react-trend/blob/master/src/helpers/DOM.helpers.js#L18
26091
+ */
26092
+ function genPath(points, radius) {
26093
+ let fill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
26094
+ let height = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 75;
26095
+ if (points.length === 0) return '';
26096
+ const start = points.shift();
26097
+ const end = points[points.length - 1];
26098
+ return (fill ? `M${start.x} ${height - start.x + 2} L${start.x} ${start.y}` : `M${start.x} ${start.y}`) + points.map((point, index) => {
26099
+ const next = points[index + 1];
26100
+ const prev = points[index - 1] || start;
26101
+ const isCollinear = next && checkCollinear(next, point, prev);
26102
+ if (!next || isCollinear) {
26103
+ return `L${point.x} ${point.y}`;
26104
+ }
26105
+ const threshold = Math.min(getDistance(prev, point), getDistance(next, point));
26106
+ const isTooCloseForRadius = threshold / 2 < radius;
26107
+ const radiusForPoint = isTooCloseForRadius ? threshold / 2 : radius;
26108
+ const before = moveTo(prev, point, radiusForPoint);
26109
+ const after = moveTo(next, point, radiusForPoint);
26110
+ return `L${before.x} ${before.y}S${point.x} ${point.y} ${after.x} ${after.y}`;
26111
+ }).join('') + (fill ? `L${end.x} ${height - start.x + 2} Z` : '');
26112
+ }
26113
+ function int(value) {
26114
+ return parseInt(value, 10);
26115
+ }
26116
+
26117
+ /**
26118
+ * https://en.wikipedia.org/wiki/Collinearity
26119
+ * x=(x1+x2)/2
26120
+ * y=(y1+y2)/2
26121
+ */
26122
+ function checkCollinear(p0, p1, p2) {
26123
+ return int(p0.x + p2.x) === int(2 * p1.x) && int(p0.y + p2.y) === int(2 * p1.y);
26124
+ }
26125
+ function getDistance(p1, p2) {
26126
+ return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
26127
+ }
26128
+ function moveTo(to, from, radius) {
26129
+ const vector = {
26130
+ x: to.x - from.x,
26131
+ y: to.y - from.y
26132
+ };
26133
+ const length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
26134
+ const unitVector = {
26135
+ x: vector.x / length,
26136
+ y: vector.y / length
26137
+ };
26138
+ return {
26139
+ x: from.x + unitVector.x * radius,
26140
+ y: from.y + unitVector.y * radius
26141
+ };
26142
+ }
26143
+
26144
+ // Types
26145
+
26146
+ const makeVTrendlineProps = propsFactory({
26147
+ fill: Boolean,
26148
+ ...makeLineProps()
26149
+ }, 'VTrendline');
26150
+ const VTrendline = genericComponent()({
26151
+ name: 'VTrendline',
26152
+ props: makeVTrendlineProps(),
26153
+ setup(props, _ref) {
26154
+ let {
26155
+ slots
26156
+ } = _ref;
26157
+ const uid = getUid();
26158
+ const id = computed(() => props.id || `trendline-${uid}`);
26159
+ const autoDrawDuration = computed(() => Number(props.autoDrawDuration) || (props.fill ? 500 : 2000));
26160
+ const lastLength = ref(0);
26161
+ const path = ref(null);
26162
+ function genPoints(values, boundary) {
26163
+ const {
26164
+ minX,
26165
+ maxX,
26166
+ minY,
26167
+ maxY
26168
+ } = boundary;
26169
+ const totalValues = values.length;
26170
+ const maxValue = Math.max(...values);
26171
+ const minValue = Math.min(...values);
26172
+ const gridX = (maxX - minX) / (totalValues - 1);
26173
+ const gridY = (maxY - minY) / (maxValue - minValue || 1);
26174
+ return values.map((value, index) => {
26175
+ return {
26176
+ x: minX + index * gridX,
26177
+ y: maxY - (value - minValue) * gridY,
26178
+ value
26179
+ };
26180
+ });
26181
+ }
26182
+ const hasLabels = computed(() => {
26183
+ return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
26184
+ });
26185
+ const lineWidth = computed(() => {
26186
+ return parseFloat(props.lineWidth) || 4;
26187
+ });
26188
+ const totalWidth = computed(() => Number(props.width));
26189
+ const boundary = computed(() => {
26190
+ const padding = Number(props.padding);
26191
+ return {
26192
+ minX: padding,
26193
+ maxX: totalWidth.value - padding,
26194
+ minY: padding,
26195
+ maxY: parseInt(props.height, 10) - padding
26196
+ };
26197
+ });
26198
+ const parsedLabels = computed(() => {
26199
+ const labels = [];
26200
+ const points = genPoints(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value);
26201
+ const len = points.length;
26202
+ for (let i = 0; labels.length < len; i++) {
26203
+ const item = points[i];
26204
+ let value = props.labels[i];
26205
+ if (!value) {
26206
+ value = typeof item === 'object' ? item.value : item;
26207
+ }
26208
+ labels.push({
26209
+ x: item.x,
26210
+ value: String(value)
26211
+ });
26212
+ }
26213
+ return labels;
26214
+ });
26215
+ watch(() => props.modelValue, async () => {
26216
+ await nextTick();
26217
+ if (!props.autoDraw || !path.value) return;
26218
+ const pathRef = path.value;
26219
+ const length = pathRef.getTotalLength();
26220
+ if (!props.fill) {
26221
+ // Initial setup to "hide" the line by using the stroke dash array
26222
+ pathRef.style.strokeDasharray = `${length}`;
26223
+ pathRef.style.strokeDashoffset = `${length}`;
26224
+
26225
+ // Force reflow to ensure the transition starts from this state
26226
+ pathRef.getBoundingClientRect();
26227
+
26228
+ // Animate the stroke dash offset to "draw" the line
26229
+ pathRef.style.transition = `stroke-dashoffset ${autoDrawDuration.value}ms ${props.autoDrawEasing}`;
26230
+ pathRef.style.strokeDashoffset = '0';
26231
+ } else {
26232
+ // Your existing logic for filled paths remains the same
26233
+ pathRef.style.transformOrigin = 'bottom center';
26234
+ pathRef.style.transition = 'none';
26235
+ pathRef.style.transform = `scaleY(0)`;
26236
+ pathRef.getBoundingClientRect();
26237
+ pathRef.style.transition = `transform ${autoDrawDuration.value}ms ${props.autoDrawEasing}`;
26238
+ pathRef.style.transform = `scaleY(1)`;
26239
+ }
26240
+ lastLength.value = length;
26241
+ }, {
26242
+ immediate: true
26243
+ });
26244
+ useRender(() => {
26245
+ const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
26246
+ return createVNode("svg", {
26247
+ "display": "block",
26248
+ "stroke-width": parseFloat(props.lineWidth) ?? 4
26249
+ }, [createVNode("defs", null, [createVNode("linearGradient", {
26250
+ "id": id.value,
26251
+ "gradientUnits": "userSpaceOnUse",
26252
+ "x1": props.gradientDirection === 'left' ? '100%' : '0',
26253
+ "y1": props.gradientDirection === 'top' ? '100%' : '0',
26254
+ "x2": props.gradientDirection === 'right' ? '100%' : '0',
26255
+ "y2": props.gradientDirection === 'bottom' ? '100%' : '0'
26256
+ }, [gradientData.map((color, index) => createVNode("stop", {
26257
+ "offset": index / Math.max(gradientData.length - 1, 1),
26258
+ "stop-color": color || 'currentColor'
26259
+ }, null))])]), hasLabels.value && createVNode("g", {
26260
+ "key": "labels",
26261
+ "style": {
26262
+ textAnchor: 'middle',
26263
+ dominantBaseline: 'mathematical',
26264
+ fill: 'currentColor'
26265
+ }
26266
+ }, [parsedLabels.value.map((item, i) => createVNode("text", {
26267
+ "x": item.x + lineWidth.value / 2 + lineWidth.value / 2,
26268
+ "y": parseInt(props.height, 10) - 4 + (parseInt(props.labelSize, 10) || 7 * 0.75),
26269
+ "font-size": Number(props.labelSize) || 7
26270
+ }, [slots.label?.({
26271
+ index: i,
26272
+ value: item.value
26273
+ }) ?? item.value]))]), createVNode("path", {
26274
+ "ref": path,
26275
+ "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)),
26276
+ "fill": props.fill ? `url(#${id.value})` : 'none',
26277
+ "stroke": props.fill ? 'none' : `url(#${id.value})`
26278
+ }, null)]);
26279
+ });
26280
+ }
26281
+ });
26282
+
26283
+ // Types
26284
+
26285
+ // Types
26286
+
26287
+ const makeVSparklineProps = propsFactory({
26288
+ type: {
26289
+ type: String,
26290
+ default: 'trend'
26291
+ },
26292
+ ...makeVBarlineProps(),
26293
+ ...makeVTrendlineProps()
26294
+ }, 'VSparkline');
26295
+ const VSparkline = genericComponent()({
26296
+ name: 'VSparkline',
26297
+ props: makeVSparklineProps(),
26298
+ setup(props, _ref) {
26299
+ let {
26300
+ slots
26301
+ } = _ref;
26302
+ const {
26303
+ textColorClasses,
26304
+ textColorStyles
26305
+ } = useTextColor(toRef(props, 'color'));
26306
+ const hasLabels = computed(() => {
26307
+ return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
26308
+ });
26309
+ const totalHeight = computed(() => {
26310
+ let height = parseInt(props.height, 10);
26311
+ if (hasLabels.value) height += parseInt(props.labelSize, 10) * 1.5;
26312
+ return height;
26313
+ });
26314
+ useRender(() => {
26315
+ const Tag = props.type === 'trend' ? VTrendline : VBarline;
26316
+ const lineProps = props.type === 'trend' ? VTrendline.filterProps(props) : VBarline.filterProps(props);
26317
+ return createVNode(Tag, mergeProps({
26318
+ "key": props.type,
26319
+ "class": textColorClasses.value,
26320
+ "style": textColorStyles.value,
26321
+ "viewBox": `0 0 ${props.width} ${parseInt(totalHeight.value, 10)}`
26322
+ }, lineProps), slots);
26323
+ });
26324
+ }
26325
+ });
26326
+
25845
26327
  var components = /*#__PURE__*/Object.freeze({
25846
26328
  __proto__: null,
25847
26329
  VAlert: VAlert,
@@ -25984,6 +26466,7 @@ var components = /*#__PURE__*/Object.freeze({
25984
26466
  VSlider: VSlider,
25985
26467
  VSnackbar: VSnackbar,
25986
26468
  VSpacer: VSpacer,
26469
+ VSparkline: VSparkline,
25987
26470
  VStepper: VStepper,
25988
26471
  VStepperActions: VStepperActions,
25989
26472
  VStepperHeader: VStepperHeader,
@@ -26231,7 +26714,7 @@ function createVuetify$1() {
26231
26714
  goTo
26232
26715
  };
26233
26716
  }
26234
- const version$1 = "3.5.4";
26717
+ const version$1 = "3.5.5";
26235
26718
  createVuetify$1.version = version$1;
26236
26719
 
26237
26720
  // Vue's inject() can only be used in setup
@@ -26245,7 +26728,7 @@ function inject(key) {
26245
26728
 
26246
26729
  /* eslint-disable local-rules/sort-imports */
26247
26730
 
26248
- const version = "3.5.4";
26731
+ const version = "3.5.5";
26249
26732
 
26250
26733
  /* eslint-disable local-rules/sort-imports */
26251
26734