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
  */
@@ -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,10 @@
11820
11849
  }
11821
11850
  }
11822
11851
  function select(item) {
11852
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
11853
+ const add = index === -1;
11823
11854
  if (props.multiple) {
11824
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
11825
- if (index === -1) {
11855
+ if (add) {
11826
11856
  model.value = [...model.value, item];
11827
11857
  } else {
11828
11858
  const value = [...model.value];
@@ -11830,7 +11860,7 @@
11830
11860
  model.value = value;
11831
11861
  }
11832
11862
  } else {
11833
- model.value = [item];
11863
+ model.value = add ? [item] : [];
11834
11864
  menu.value = false;
11835
11865
  }
11836
11866
  }
@@ -12367,11 +12397,11 @@
12367
12397
  }
12368
12398
  const isSelecting = vue.shallowRef(false);
12369
12399
  function select(item) {
12370
- let add = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12371
12400
  if (item.props.disabled) return;
12401
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12402
+ const add = index === -1;
12372
12403
  if (props.multiple) {
12373
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12374
- if (index === -1) {
12404
+ if (add) {
12375
12405
  model.value = [...model.value, item];
12376
12406
  } else {
12377
12407
  const value = [...model.value];
@@ -12540,7 +12570,7 @@
12540
12570
  function onChipClose(e) {
12541
12571
  e.stopPropagation();
12542
12572
  e.preventDefault();
12543
- select(item, false);
12573
+ select(item);
12544
12574
  }
12545
12575
  const slotProps = {
12546
12576
  'onClick:close': onChipClose,
@@ -17621,7 +17651,8 @@
17621
17651
  };
17622
17652
  }
17623
17653
  async function scrollTo(_target, _options, horizontal, goTo) {
17624
- const options = mergeDeep(goTo?.options, _options);
17654
+ const property = horizontal ? 'scrollLeft' : 'scrollTop';
17655
+ const options = mergeDeep(goTo?.options ?? genDefaults(), _options);
17625
17656
  const rtl = goTo?.rtl.value;
17626
17657
  const target = (typeof _target === 'number' ? _target : getTarget(_target)) ?? 0;
17627
17658
  const container = options.container === 'parent' && target instanceof HTMLElement ? target.parentElement : getContainer(options.container);
@@ -17639,25 +17670,22 @@
17639
17670
  }
17640
17671
  }
17641
17672
  targetLocation += options.offset;
17642
- const startLocation = (horizontal ? container.scrollLeft : container.scrollTop) ?? 0;
17673
+ const startLocation = container[property] ?? 0;
17643
17674
  if (targetLocation === startLocation) return Promise.resolve(targetLocation);
17644
17675
  const startTime = performance.now();
17645
17676
  return new Promise(resolve => requestAnimationFrame(function step(currentTime) {
17646
17677
  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);
17678
+ const progress = timeElapsed / options.duration;
17679
+ const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(Math.max(progress, 1)));
17680
+ container[property] = location;
17681
+
17682
+ // Allow for some jitter if target time has elapsed
17683
+ if (progress >= 1 && Math.abs(location - container[property]) < 10) {
17684
+ return resolve(targetLocation);
17685
+ } else if (progress > 2) {
17686
+ // The target might not be reachable
17687
+ consoleWarn('Scroll target is not reachable');
17688
+ return resolve(container[property]);
17661
17689
  }
17662
17690
  requestAnimationFrame(step);
17663
17691
  }));
@@ -20594,12 +20622,13 @@
20594
20622
  }, [(props.showAdjacentMonths || !item.isAdjacent) && vue.createVNode(VDefaultsProvider, {
20595
20623
  "defaults": {
20596
20624
  VBtn: {
20625
+ class: 'v-date-picker-month__day-btn',
20597
20626
  color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
20598
20627
  disabled: item.isDisabled,
20599
20628
  icon: true,
20600
20629
  ripple: false,
20601
20630
  text: item.localized,
20602
- variant: item.isDisabled ? 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
20631
+ variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
20603
20632
  onClick: () => onClick(item.date)
20604
20633
  }
20605
20634
  }
@@ -20625,6 +20654,7 @@
20625
20654
  },
20626
20655
  setup(props, _ref) {
20627
20656
  let {
20657
+ emit,
20628
20658
  slots
20629
20659
  } = _ref;
20630
20660
  const adapter = useDate();
@@ -20660,6 +20690,10 @@
20660
20690
  onClick: () => onClick(i)
20661
20691
  };
20662
20692
  function onClick(i) {
20693
+ if (model.value === i) {
20694
+ emit('update:modelValue', model.value);
20695
+ return;
20696
+ }
20663
20697
  model.value = i;
20664
20698
  }
20665
20699
  return slots.month?.({
@@ -20668,9 +20702,7 @@
20668
20702
  props: btnProps
20669
20703
  }) ?? vue.createVNode(VBtn, vue.mergeProps({
20670
20704
  "key": "month"
20671
- }, btnProps, {
20672
- "onClick": () => onClick(i)
20673
- }), null);
20705
+ }, btnProps), null);
20674
20706
  })])]));
20675
20707
  return {};
20676
20708
  }
@@ -20695,6 +20727,7 @@
20695
20727
  },
20696
20728
  setup(props, _ref) {
20697
20729
  let {
20730
+ emit,
20698
20731
  slots
20699
20732
  } = _ref;
20700
20733
  const adapter = useDate();
@@ -20745,7 +20778,13 @@
20745
20778
  rounded: true,
20746
20779
  text: year.text,
20747
20780
  variant: model.value === year.value ? 'flat' : 'text',
20748
- onClick: () => model.value = year.value
20781
+ onClick: () => {
20782
+ if (model.value === year.value) {
20783
+ emit('update:modelValue', model.value);
20784
+ return;
20785
+ }
20786
+ model.value = year.value;
20787
+ }
20749
20788
  };
20750
20789
  return slots.year?.({
20751
20790
  year,
@@ -20938,7 +20977,9 @@
20938
20977
  } else {
20939
20978
  year.value++;
20940
20979
  month.value = 0;
20980
+ onUpdateYear(year.value);
20941
20981
  }
20982
+ onUpdateMonth(month.value);
20942
20983
  }
20943
20984
  function onClickPrev() {
20944
20985
  if (month.value > 0) {
@@ -20946,7 +20987,9 @@
20946
20987
  } else {
20947
20988
  year.value--;
20948
20989
  month.value = 11;
20990
+ onUpdateYear(year.value);
20949
20991
  }
20992
+ onUpdateMonth(month.value);
20950
20993
  }
20951
20994
  function onClickDate() {
20952
20995
  viewMode.value = 'month';
@@ -20957,14 +21000,14 @@
20957
21000
  function onClickYear() {
20958
21001
  viewMode.value = viewMode.value === 'year' ? 'month' : 'year';
20959
21002
  }
20960
- vue.watch(month, () => {
21003
+ function onUpdateMonth(value) {
20961
21004
  if (viewMode.value === 'months') onClickMonth();
20962
- emit('update:month', month.value);
20963
- });
20964
- vue.watch(year, () => {
21005
+ emit('update:month', value);
21006
+ }
21007
+ function onUpdateYear(value) {
20965
21008
  if (viewMode.value === 'year') onClickYear();
20966
- emit('update:year', year.value);
20967
- });
21009
+ emit('update:year', value);
21010
+ }
20968
21011
  vue.watch(model, (val, oldVal) => {
20969
21012
  const before = adapter.date(wrapInArray(val)[0]);
20970
21013
  const after = adapter.date(wrapInArray(oldVal)[0]);
@@ -21020,14 +21063,14 @@
21020
21063
  "key": "date-picker-months"
21021
21064
  }, datePickerMonthsProps, {
21022
21065
  "modelValue": month.value,
21023
- "onUpdate:modelValue": $event => month.value = $event,
21066
+ "onUpdate:modelValue": [$event => month.value = $event, onUpdateMonth],
21024
21067
  "min": minDate.value,
21025
21068
  "max": maxDate.value
21026
21069
  }), null) : viewMode.value === 'year' ? vue.createVNode(VDatePickerYears, vue.mergeProps({
21027
21070
  "key": "date-picker-years"
21028
21071
  }, datePickerYearsProps, {
21029
21072
  "modelValue": year.value,
21030
- "onUpdate:modelValue": $event => year.value = $event,
21073
+ "onUpdate:modelValue": [$event => year.value = $event, onUpdateYear],
21031
21074
  "min": minDate.value,
21032
21075
  "max": maxDate.value
21033
21076
  }), null) : vue.createVNode(VDatePickerMonth, vue.mergeProps({
@@ -21036,9 +21079,9 @@
21036
21079
  "modelValue": model.value,
21037
21080
  "onUpdate:modelValue": $event => model.value = $event,
21038
21081
  "month": month.value,
21039
- "onUpdate:month": $event => month.value = $event,
21082
+ "onUpdate:month": [$event => month.value = $event, onUpdateMonth],
21040
21083
  "year": year.value,
21041
- "onUpdate:year": $event => year.value = $event,
21084
+ "onUpdate:year": [$event => year.value = $event, onUpdateYear],
21042
21085
  "min": minDate.value,
21043
21086
  "max": maxDate.value
21044
21087
  }), null)]
@@ -21056,7 +21099,9 @@
21056
21099
  const allowedVariants = ['default', 'accordion', 'inset', 'popout'];
21057
21100
  const makeVExpansionPanelsProps = propsFactory({
21058
21101
  color: String,
21102
+ flat: Boolean,
21059
21103
  static: Boolean,
21104
+ tile: Boolean,
21060
21105
  variant: {
21061
21106
  type: String,
21062
21107
  default: 'default',
@@ -21086,12 +21131,17 @@
21086
21131
  provideDefaults({
21087
21132
  VExpansionPanel: {
21088
21133
  color: vue.toRef(props, 'color'),
21089
- readonly: vue.toRef(props, 'readonly'),
21134
+ readonly: vue.toRef(props, 'readonly')
21135
+ },
21136
+ VExpansionPanelTitle: {
21090
21137
  static: vue.toRef(props, 'static')
21091
21138
  }
21092
21139
  });
21093
21140
  useRender(() => vue.createVNode(props.tag, {
21094
- "class": ['v-expansion-panels', themeClasses.value, variantClass.value, props.class],
21141
+ "class": ['v-expansion-panels', {
21142
+ 'v-expansion-panels--flat': props.flat,
21143
+ 'v-expansion-panels--tile': props.tile
21144
+ }, themeClasses.value, variantClass.value, props.class],
21095
21145
  "style": props.style
21096
21146
  }, slots));
21097
21147
  return {};
@@ -21375,7 +21425,7 @@
21375
21425
  if (!isFocused.value) focus();
21376
21426
  }
21377
21427
  function onClickPrepend(e) {
21378
- onControlClick(e);
21428
+ inputRef.value?.click();
21379
21429
  }
21380
21430
  function onControlMousedown(e) {
21381
21431
  emit('mousedown:control', e);
@@ -25817,7 +25867,7 @@
25817
25867
  }, [!props.hideWeekNumber ? vue.createVNode("div", {
25818
25868
  "key": "weekNumber0",
25819
25869
  "class": "v-calendar-weekly__head-weeknumber"
25820
- }, null) : '', props.weekdays.sort((a, b) => a - b).map(weekday => vue.createVNode("div", {
25870
+ }, null) : '', props.weekdays.map(weekday => vue.createVNode("div", {
25821
25871
  "class": `v-calendar-weekly__head-weekday${!props.hideWeekNumber ? '-with-weeknumber' : ''}`
25822
25872
  }, [dayNames[weekday]]))]), props.viewMode === 'month' && vue.createVNode("div", {
25823
25873
  "key": "VCalendarMonth",
@@ -25846,6 +25896,438 @@
25846
25896
  }
25847
25897
  });
25848
25898
 
25899
+ // Utilities
25900
+
25901
+ // Types
25902
+
25903
+ const makeLineProps = propsFactory({
25904
+ autoDraw: Boolean,
25905
+ autoDrawDuration: [Number, String],
25906
+ autoDrawEasing: {
25907
+ type: String,
25908
+ default: 'ease'
25909
+ },
25910
+ color: String,
25911
+ gradient: {
25912
+ type: Array,
25913
+ default: () => []
25914
+ },
25915
+ gradientDirection: {
25916
+ type: String,
25917
+ validator: val => ['top', 'bottom', 'left', 'right'].includes(val),
25918
+ default: 'top'
25919
+ },
25920
+ height: {
25921
+ type: [String, Number],
25922
+ default: 75
25923
+ },
25924
+ labels: {
25925
+ type: Array,
25926
+ default: () => []
25927
+ },
25928
+ labelSize: {
25929
+ type: [Number, String],
25930
+ default: 7
25931
+ },
25932
+ lineWidth: {
25933
+ type: [String, Number],
25934
+ default: 4
25935
+ },
25936
+ id: String,
25937
+ modelValue: {
25938
+ type: Array,
25939
+ default: () => []
25940
+ },
25941
+ padding: {
25942
+ type: [String, Number],
25943
+ default: 8
25944
+ },
25945
+ showLabels: Boolean,
25946
+ smooth: Boolean,
25947
+ width: {
25948
+ type: [Number, String],
25949
+ default: 300
25950
+ }
25951
+ }, 'Line');
25952
+
25953
+ // Types
25954
+
25955
+ const makeVBarlineProps = propsFactory({
25956
+ autoLineWidth: Boolean,
25957
+ ...makeLineProps()
25958
+ }, 'VBarline');
25959
+ const VBarline = genericComponent()({
25960
+ name: 'VBarline',
25961
+ props: makeVBarlineProps(),
25962
+ setup(props, _ref) {
25963
+ let {
25964
+ slots
25965
+ } = _ref;
25966
+ const uid = getUid();
25967
+ const id = vue.computed(() => props.id || `barline-${uid}`);
25968
+ const autoDrawDuration = vue.computed(() => Number(props.autoDrawDuration) || 500);
25969
+ const hasLabels = vue.computed(() => {
25970
+ return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
25971
+ });
25972
+ const lineWidth = vue.computed(() => parseFloat(props.lineWidth) || 4);
25973
+ const totalWidth = vue.computed(() => Math.max(props.modelValue.length * lineWidth.value, Number(props.width)));
25974
+ const boundary = vue.computed(() => {
25975
+ return {
25976
+ minX: 0,
25977
+ maxX: totalWidth.value,
25978
+ minY: 0,
25979
+ maxY: parseInt(props.height, 10)
25980
+ };
25981
+ });
25982
+ function genBars(values, boundary) {
25983
+ const {
25984
+ minX,
25985
+ maxX,
25986
+ minY,
25987
+ maxY
25988
+ } = boundary;
25989
+ const totalValues = values.length;
25990
+ let maxValue = Math.max(...values);
25991
+ let minValue = Math.min(...values);
25992
+ if (minValue > 0) minValue = 0;
25993
+ if (maxValue < 0) maxValue = 0;
25994
+ const gridX = maxX / totalValues;
25995
+ const gridY = (maxY - minY) / (maxValue - minValue || 1);
25996
+ const horizonY = maxY - Math.abs(minValue * gridY);
25997
+ return values.map((value, index) => {
25998
+ const height = Math.abs(gridY * value);
25999
+ return {
26000
+ x: minX + index * gridX,
26001
+ y: horizonY - height + +(value < 0) * height,
26002
+ height,
26003
+ value
26004
+ };
26005
+ });
26006
+ }
26007
+ const parsedLabels = vue.computed(() => {
26008
+ const labels = [];
26009
+ const points = genBars(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value);
26010
+ const len = points.length;
26011
+ for (let i = 0; labels.length < len; i++) {
26012
+ const item = points[i];
26013
+ let value = props.labels[i];
26014
+ if (!value) {
26015
+ value = typeof item === 'object' ? item.value : item;
26016
+ }
26017
+ labels.push({
26018
+ x: item.x,
26019
+ value: String(value)
26020
+ });
26021
+ }
26022
+ return labels;
26023
+ });
26024
+ const bars = vue.computed(() => genBars(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value));
26025
+ const offsetX = vue.computed(() => (Math.abs(bars.value[0].x - bars.value[1].x) - lineWidth.value) / 2);
26026
+ useRender(() => {
26027
+ const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
26028
+ return vue.createVNode("svg", {
26029
+ "display": "block"
26030
+ }, [vue.createVNode("defs", null, [vue.createVNode("linearGradient", {
26031
+ "id": id.value,
26032
+ "gradientUnits": "userSpaceOnUse",
26033
+ "x1": props.gradientDirection === 'left' ? '100%' : '0',
26034
+ "y1": props.gradientDirection === 'top' ? '100%' : '0',
26035
+ "x2": props.gradientDirection === 'right' ? '100%' : '0',
26036
+ "y2": props.gradientDirection === 'bottom' ? '100%' : '0'
26037
+ }, [gradientData.map((color, index) => vue.createVNode("stop", {
26038
+ "offset": index / Math.max(gradientData.length - 1, 1),
26039
+ "stop-color": color || 'currentColor'
26040
+ }, null))])]), vue.createVNode("clipPath", {
26041
+ "id": `${id.value}-clip`
26042
+ }, [bars.value.map(item => vue.createVNode("rect", {
26043
+ "x": item.x + offsetX.value,
26044
+ "y": item.y,
26045
+ "width": lineWidth.value,
26046
+ "height": item.height,
26047
+ "rx": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0,
26048
+ "ry": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0
26049
+ }, [props.autoDraw && vue.createVNode(vue.Fragment, null, [vue.createVNode("animate", {
26050
+ "attributeName": "y",
26051
+ "from": item.y + item.height,
26052
+ "to": item.y,
26053
+ "dur": `${autoDrawDuration.value}ms`,
26054
+ "fill": "freeze"
26055
+ }, null), vue.createVNode("animate", {
26056
+ "attributeName": "height",
26057
+ "from": "0",
26058
+ "to": item.height,
26059
+ "dur": `${autoDrawDuration.value}ms`,
26060
+ "fill": "freeze"
26061
+ }, null)])]))]), hasLabels.value && vue.createVNode("g", {
26062
+ "key": "labels",
26063
+ "style": {
26064
+ textAnchor: 'middle',
26065
+ dominantBaseline: 'mathematical',
26066
+ fill: 'currentColor'
26067
+ }
26068
+ }, [parsedLabels.value.map((item, i) => vue.createVNode("text", {
26069
+ "x": item.x + offsetX.value + lineWidth.value / 2,
26070
+ "y": parseInt(props.height, 10) - 2 + (parseInt(props.labelSize, 10) || 7 * 0.75),
26071
+ "font-size": Number(props.labelSize) || 7
26072
+ }, [slots.label?.({
26073
+ index: i,
26074
+ value: item.value
26075
+ }) ?? item.value]))]), vue.createVNode("g", {
26076
+ "clip-path": `url(#${id.value}-clip)`,
26077
+ "fill": `url(#${id.value})`
26078
+ }, [vue.createVNode("rect", {
26079
+ "x": 0,
26080
+ "y": 0,
26081
+ "width": Math.max(props.modelValue.length * lineWidth.value, Number(props.width)),
26082
+ "height": props.height
26083
+ }, null)])]);
26084
+ });
26085
+ }
26086
+ });
26087
+
26088
+ // @ts-nocheck
26089
+ /* eslint-disable */
26090
+
26091
+ // import { checkCollinear, getDistance, moveTo } from './math'
26092
+
26093
+ /**
26094
+ * From https://github.com/unsplash/react-trend/blob/master/src/helpers/DOM.helpers.js#L18
26095
+ */
26096
+ function genPath(points, radius) {
26097
+ let fill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
26098
+ let height = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 75;
26099
+ if (points.length === 0) return '';
26100
+ const start = points.shift();
26101
+ const end = points[points.length - 1];
26102
+ return (fill ? `M${start.x} ${height - start.x + 2} L${start.x} ${start.y}` : `M${start.x} ${start.y}`) + points.map((point, index) => {
26103
+ const next = points[index + 1];
26104
+ const prev = points[index - 1] || start;
26105
+ const isCollinear = next && checkCollinear(next, point, prev);
26106
+ if (!next || isCollinear) {
26107
+ return `L${point.x} ${point.y}`;
26108
+ }
26109
+ const threshold = Math.min(getDistance(prev, point), getDistance(next, point));
26110
+ const isTooCloseForRadius = threshold / 2 < radius;
26111
+ const radiusForPoint = isTooCloseForRadius ? threshold / 2 : radius;
26112
+ const before = moveTo(prev, point, radiusForPoint);
26113
+ const after = moveTo(next, point, radiusForPoint);
26114
+ return `L${before.x} ${before.y}S${point.x} ${point.y} ${after.x} ${after.y}`;
26115
+ }).join('') + (fill ? `L${end.x} ${height - start.x + 2} Z` : '');
26116
+ }
26117
+ function int(value) {
26118
+ return parseInt(value, 10);
26119
+ }
26120
+
26121
+ /**
26122
+ * https://en.wikipedia.org/wiki/Collinearity
26123
+ * x=(x1+x2)/2
26124
+ * y=(y1+y2)/2
26125
+ */
26126
+ function checkCollinear(p0, p1, p2) {
26127
+ return int(p0.x + p2.x) === int(2 * p1.x) && int(p0.y + p2.y) === int(2 * p1.y);
26128
+ }
26129
+ function getDistance(p1, p2) {
26130
+ return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
26131
+ }
26132
+ function moveTo(to, from, radius) {
26133
+ const vector = {
26134
+ x: to.x - from.x,
26135
+ y: to.y - from.y
26136
+ };
26137
+ const length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
26138
+ const unitVector = {
26139
+ x: vector.x / length,
26140
+ y: vector.y / length
26141
+ };
26142
+ return {
26143
+ x: from.x + unitVector.x * radius,
26144
+ y: from.y + unitVector.y * radius
26145
+ };
26146
+ }
26147
+
26148
+ // Types
26149
+
26150
+ const makeVTrendlineProps = propsFactory({
26151
+ fill: Boolean,
26152
+ ...makeLineProps()
26153
+ }, 'VTrendline');
26154
+ const VTrendline = genericComponent()({
26155
+ name: 'VTrendline',
26156
+ props: makeVTrendlineProps(),
26157
+ setup(props, _ref) {
26158
+ let {
26159
+ slots
26160
+ } = _ref;
26161
+ const uid = getUid();
26162
+ const id = vue.computed(() => props.id || `trendline-${uid}`);
26163
+ const autoDrawDuration = vue.computed(() => Number(props.autoDrawDuration) || (props.fill ? 500 : 2000));
26164
+ const lastLength = vue.ref(0);
26165
+ const path = vue.ref(null);
26166
+ function genPoints(values, boundary) {
26167
+ const {
26168
+ minX,
26169
+ maxX,
26170
+ minY,
26171
+ maxY
26172
+ } = boundary;
26173
+ const totalValues = values.length;
26174
+ const maxValue = Math.max(...values);
26175
+ const minValue = Math.min(...values);
26176
+ const gridX = (maxX - minX) / (totalValues - 1);
26177
+ const gridY = (maxY - minY) / (maxValue - minValue || 1);
26178
+ return values.map((value, index) => {
26179
+ return {
26180
+ x: minX + index * gridX,
26181
+ y: maxY - (value - minValue) * gridY,
26182
+ value
26183
+ };
26184
+ });
26185
+ }
26186
+ const hasLabels = vue.computed(() => {
26187
+ return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
26188
+ });
26189
+ const lineWidth = vue.computed(() => {
26190
+ return parseFloat(props.lineWidth) || 4;
26191
+ });
26192
+ const totalWidth = vue.computed(() => Number(props.width));
26193
+ const boundary = vue.computed(() => {
26194
+ const padding = Number(props.padding);
26195
+ return {
26196
+ minX: padding,
26197
+ maxX: totalWidth.value - padding,
26198
+ minY: padding,
26199
+ maxY: parseInt(props.height, 10) - padding
26200
+ };
26201
+ });
26202
+ const parsedLabels = vue.computed(() => {
26203
+ const labels = [];
26204
+ const points = genPoints(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value);
26205
+ const len = points.length;
26206
+ for (let i = 0; labels.length < len; i++) {
26207
+ const item = points[i];
26208
+ let value = props.labels[i];
26209
+ if (!value) {
26210
+ value = typeof item === 'object' ? item.value : item;
26211
+ }
26212
+ labels.push({
26213
+ x: item.x,
26214
+ value: String(value)
26215
+ });
26216
+ }
26217
+ return labels;
26218
+ });
26219
+ vue.watch(() => props.modelValue, async () => {
26220
+ await vue.nextTick();
26221
+ if (!props.autoDraw || !path.value) return;
26222
+ const pathRef = path.value;
26223
+ const length = pathRef.getTotalLength();
26224
+ if (!props.fill) {
26225
+ // Initial setup to "hide" the line by using the stroke dash array
26226
+ pathRef.style.strokeDasharray = `${length}`;
26227
+ pathRef.style.strokeDashoffset = `${length}`;
26228
+
26229
+ // Force reflow to ensure the transition starts from this state
26230
+ pathRef.getBoundingClientRect();
26231
+
26232
+ // Animate the stroke dash offset to "draw" the line
26233
+ pathRef.style.transition = `stroke-dashoffset ${autoDrawDuration.value}ms ${props.autoDrawEasing}`;
26234
+ pathRef.style.strokeDashoffset = '0';
26235
+ } else {
26236
+ // Your existing logic for filled paths remains the same
26237
+ pathRef.style.transformOrigin = 'bottom center';
26238
+ pathRef.style.transition = 'none';
26239
+ pathRef.style.transform = `scaleY(0)`;
26240
+ pathRef.getBoundingClientRect();
26241
+ pathRef.style.transition = `transform ${autoDrawDuration.value}ms ${props.autoDrawEasing}`;
26242
+ pathRef.style.transform = `scaleY(1)`;
26243
+ }
26244
+ lastLength.value = length;
26245
+ }, {
26246
+ immediate: true
26247
+ });
26248
+ useRender(() => {
26249
+ const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
26250
+ return vue.createVNode("svg", {
26251
+ "display": "block",
26252
+ "stroke-width": parseFloat(props.lineWidth) ?? 4
26253
+ }, [vue.createVNode("defs", null, [vue.createVNode("linearGradient", {
26254
+ "id": id.value,
26255
+ "gradientUnits": "userSpaceOnUse",
26256
+ "x1": props.gradientDirection === 'left' ? '100%' : '0',
26257
+ "y1": props.gradientDirection === 'top' ? '100%' : '0',
26258
+ "x2": props.gradientDirection === 'right' ? '100%' : '0',
26259
+ "y2": props.gradientDirection === 'bottom' ? '100%' : '0'
26260
+ }, [gradientData.map((color, index) => vue.createVNode("stop", {
26261
+ "offset": index / Math.max(gradientData.length - 1, 1),
26262
+ "stop-color": color || 'currentColor'
26263
+ }, null))])]), hasLabels.value && vue.createVNode("g", {
26264
+ "key": "labels",
26265
+ "style": {
26266
+ textAnchor: 'middle',
26267
+ dominantBaseline: 'mathematical',
26268
+ fill: 'currentColor'
26269
+ }
26270
+ }, [parsedLabels.value.map((item, i) => vue.createVNode("text", {
26271
+ "x": item.x + lineWidth.value / 2 + lineWidth.value / 2,
26272
+ "y": parseInt(props.height, 10) - 4 + (parseInt(props.labelSize, 10) || 7 * 0.75),
26273
+ "font-size": Number(props.labelSize) || 7
26274
+ }, [slots.label?.({
26275
+ index: i,
26276
+ value: item.value
26277
+ }) ?? item.value]))]), vue.createVNode("path", {
26278
+ "ref": path,
26279
+ "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)),
26280
+ "fill": props.fill ? `url(#${id.value})` : 'none',
26281
+ "stroke": props.fill ? 'none' : `url(#${id.value})`
26282
+ }, null)]);
26283
+ });
26284
+ }
26285
+ });
26286
+
26287
+ // Types
26288
+
26289
+ // Types
26290
+
26291
+ const makeVSparklineProps = propsFactory({
26292
+ type: {
26293
+ type: String,
26294
+ default: 'trend'
26295
+ },
26296
+ ...makeVBarlineProps(),
26297
+ ...makeVTrendlineProps()
26298
+ }, 'VSparkline');
26299
+ const VSparkline = genericComponent()({
26300
+ name: 'VSparkline',
26301
+ props: makeVSparklineProps(),
26302
+ setup(props, _ref) {
26303
+ let {
26304
+ slots
26305
+ } = _ref;
26306
+ const {
26307
+ textColorClasses,
26308
+ textColorStyles
26309
+ } = useTextColor(vue.toRef(props, 'color'));
26310
+ const hasLabels = vue.computed(() => {
26311
+ return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
26312
+ });
26313
+ const totalHeight = vue.computed(() => {
26314
+ let height = parseInt(props.height, 10);
26315
+ if (hasLabels.value) height += parseInt(props.labelSize, 10) * 1.5;
26316
+ return height;
26317
+ });
26318
+ useRender(() => {
26319
+ const Tag = props.type === 'trend' ? VTrendline : VBarline;
26320
+ const lineProps = props.type === 'trend' ? VTrendline.filterProps(props) : VBarline.filterProps(props);
26321
+ return vue.createVNode(Tag, vue.mergeProps({
26322
+ "key": props.type,
26323
+ "class": textColorClasses.value,
26324
+ "style": textColorStyles.value,
26325
+ "viewBox": `0 0 ${props.width} ${parseInt(totalHeight.value, 10)}`
26326
+ }, lineProps), slots);
26327
+ });
26328
+ }
26329
+ });
26330
+
25849
26331
  var components = /*#__PURE__*/Object.freeze({
25850
26332
  __proto__: null,
25851
26333
  VAlert: VAlert,
@@ -25988,6 +26470,7 @@
25988
26470
  VSlider: VSlider,
25989
26471
  VSnackbar: VSnackbar,
25990
26472
  VSpacer: VSpacer,
26473
+ VSparkline: VSparkline,
25991
26474
  VStepper: VStepper,
25992
26475
  VStepperActions: VStepperActions,
25993
26476
  VStepperHeader: VStepperHeader,
@@ -26235,7 +26718,7 @@
26235
26718
  goTo
26236
26719
  };
26237
26720
  }
26238
- const version$1 = "3.5.4";
26721
+ const version$1 = "3.5.5";
26239
26722
  createVuetify$1.version = version$1;
26240
26723
 
26241
26724
  // Vue's inject() can only be used in setup
@@ -26249,7 +26732,7 @@
26249
26732
 
26250
26733
  /* eslint-disable local-rules/sort-imports */
26251
26734
 
26252
- const version = "3.5.4";
26735
+ const version = "3.5.5";
26253
26736
 
26254
26737
  /* eslint-disable local-rules/sort-imports */
26255
26738