vuetify 3.6.3 → 3.6.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 (163) hide show
  1. package/dist/_component-variables-labs.sass +1 -0
  2. package/dist/json/attributes.json +489 -61
  3. package/dist/json/importMap-labs.json +30 -18
  4. package/dist/json/importMap.json +168 -168
  5. package/dist/json/tags.json +123 -1
  6. package/dist/json/web-types.json +1915 -198
  7. package/dist/vuetify-labs.css +3151 -2738
  8. package/dist/vuetify-labs.d.ts +3424 -1434
  9. package/dist/vuetify-labs.esm.js +483 -173
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +482 -172
  12. package/dist/vuetify-labs.min.css +3 -3
  13. package/dist/vuetify.css +957 -616
  14. package/dist/vuetify.d.ts +1451 -1380
  15. package/dist/vuetify.esm.js +171 -99
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +170 -98
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +3 -3
  20. package/dist/vuetify.min.js +982 -978
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/components/VAlert/VAlert.css +3 -1
  23. package/lib/components/VAutocomplete/VAutocomplete.mjs +1 -1
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  25. package/lib/components/VAutocomplete/index.d.mts +187 -158
  26. package/lib/components/VAvatar/VAvatar.css +3 -1
  27. package/lib/components/VBanner/index.d.mts +11 -11
  28. package/lib/components/VBottomSheet/index.d.mts +42 -42
  29. package/lib/components/VBtn/VBtn.css +3 -1
  30. package/lib/components/VBtn/index.d.mts +2 -0
  31. package/lib/components/VCard/VCard.css +3 -1
  32. package/lib/components/VCarousel/index.d.mts +6 -6
  33. package/lib/components/VChip/VChip.css +3 -1
  34. package/lib/components/VChipGroup/index.d.mts +11 -11
  35. package/lib/components/VColorPicker/VColorPickerCanvas.mjs +1 -1
  36. package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
  37. package/lib/components/VCombobox/index.d.mts +187 -158
  38. package/lib/components/VDataIterator/index.d.mts +1 -1
  39. package/lib/components/VDataTable/VDataTable.css +1 -1
  40. package/lib/components/VDataTable/VDataTable.mjs +6 -2
  41. package/lib/components/VDataTable/VDataTable.mjs.map +1 -1
  42. package/lib/components/VDataTable/VDataTable.sass +2 -1
  43. package/lib/components/VDataTable/VDataTableHeaders.mjs +1 -1
  44. package/lib/components/VDataTable/VDataTableHeaders.mjs.map +1 -1
  45. package/lib/components/VDataTable/VDataTableServer.mjs +3 -2
  46. package/lib/components/VDataTable/VDataTableServer.mjs.map +1 -1
  47. package/lib/components/VDataTable/VDataTableVirtual.mjs +3 -1
  48. package/lib/components/VDataTable/VDataTableVirtual.mjs.map +1 -1
  49. package/lib/components/VDataTable/composables/select.mjs +2 -1
  50. package/lib/components/VDataTable/composables/select.mjs.map +1 -1
  51. package/lib/components/VDataTable/index.d.mts +130 -71
  52. package/lib/components/VDatePicker/VDatePickerYears.mjs +4 -4
  53. package/lib/components/VDatePicker/VDatePickerYears.mjs.map +1 -1
  54. package/lib/components/VDialog/index.d.mts +126 -126
  55. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +3 -1
  56. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  57. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +15 -4
  58. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  59. package/lib/components/VExpansionPanel/index.d.mts +82 -27
  60. package/lib/components/VFileInput/VFileInput.mjs +2 -2
  61. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  62. package/lib/components/VFileInput/index.d.mts +9 -9
  63. package/lib/components/VImg/index.d.mts +6 -6
  64. package/lib/components/VInfiniteScroll/VInfiniteScroll.mjs +1 -1
  65. package/lib/components/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -1
  66. package/lib/components/VList/VList.mjs.map +1 -1
  67. package/lib/components/VList/VListItem.css +3 -1
  68. package/lib/components/VList/VListItem.mjs +3 -2
  69. package/lib/components/VList/VListItem.mjs.map +1 -1
  70. package/lib/components/VList/index.d.mts +76 -52
  71. package/lib/components/VMenu/index.d.mts +126 -126
  72. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +3 -1
  73. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  74. package/lib/components/VNavigationDrawer/index.d.mts +19 -13
  75. package/lib/components/VOverlay/VOverlay.mjs +2 -5
  76. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  77. package/lib/components/VOverlay/index.d.mts +42 -42
  78. package/lib/components/VOverlay/useActivator.mjs +5 -5
  79. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  80. package/lib/components/VResponsive/VResponsive.mjs +1 -1
  81. package/lib/components/VResponsive/VResponsive.mjs.map +1 -1
  82. package/lib/components/VResponsive/index.d.mts +6 -6
  83. package/lib/components/VSelect/index.d.mts +187 -158
  84. package/lib/components/VSheet/VSheet.css +1 -1
  85. package/lib/components/VSheet/_variables.scss +1 -1
  86. package/lib/components/VSlideGroup/VSlideGroup.mjs +25 -25
  87. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  88. package/lib/components/VSlideGroup/index.d.mts +13 -11
  89. package/lib/components/VSlider/VSliderThumb.css +5 -0
  90. package/lib/components/VSlider/VSliderThumb.sass +3 -0
  91. package/lib/components/VSlider/VSliderTrack.css +15 -0
  92. package/lib/components/VSlider/VSliderTrack.sass +9 -0
  93. package/lib/components/VSnackbar/VSnackbar.css +3 -1
  94. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  95. package/lib/components/VSnackbar/index.d.mts +126 -126
  96. package/lib/components/VSpeedDial/index.d.mts +42 -42
  97. package/lib/components/VStepper/VStepper.mjs +17 -8
  98. package/lib/components/VStepper/VStepper.mjs.map +1 -1
  99. package/lib/components/VStepper/VStepperItem.css +47 -0
  100. package/lib/components/VStepper/VStepperItem.mjs +10 -5
  101. package/lib/components/VStepper/VStepperItem.mjs.map +1 -1
  102. package/lib/components/VStepper/VStepperItem.sass +18 -0
  103. package/lib/components/VStepper/VStepperWindow.mjs +2 -1
  104. package/lib/components/VStepper/VStepperWindow.mjs.map +1 -1
  105. package/lib/components/VStepper/VStepperWindowItem.mjs +2 -1
  106. package/lib/components/VStepper/VStepperWindowItem.mjs.map +1 -1
  107. package/lib/components/VStepper/index.d.mts +1 -1
  108. package/lib/components/VTabs/VTabs.mjs +8 -3
  109. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  110. package/lib/components/VTabs/VTabsWindow.mjs +2 -1
  111. package/lib/components/VTabs/VTabsWindow.mjs.map +1 -1
  112. package/lib/components/VTabs/index.d.mts +13 -11
  113. package/lib/components/VToolbar/VToolbar.css +5 -5
  114. package/lib/components/VToolbar/_variables.scss +3 -3
  115. package/lib/components/VTooltip/index.d.mts +126 -126
  116. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -1
  117. package/lib/components/VWindow/index.d.mts +2 -0
  118. package/lib/components/index.d.mts +1393 -1325
  119. package/lib/composables/component.mjs +1 -1
  120. package/lib/composables/component.mjs.map +1 -1
  121. package/lib/composables/display.mjs +1 -1
  122. package/lib/composables/display.mjs.map +1 -1
  123. package/lib/composables/group.mjs +8 -0
  124. package/lib/composables/group.mjs.map +1 -1
  125. package/lib/composables/nested/activeStrategies.mjs +16 -10
  126. package/lib/composables/nested/activeStrategies.mjs.map +1 -1
  127. package/lib/composables/nested/nested.mjs +7 -5
  128. package/lib/composables/nested/nested.mjs.map +1 -1
  129. package/lib/composables/resizeObserver.mjs +5 -5
  130. package/lib/composables/resizeObserver.mjs.map +1 -1
  131. package/lib/entry-bundler.mjs +1 -1
  132. package/lib/framework.mjs +1 -1
  133. package/lib/index.d.mts +58 -55
  134. package/lib/labs/VCalendar/VCalendar.css +5 -1
  135. package/lib/labs/VCalendar/VCalendar.sass +3 -2
  136. package/lib/labs/VCalendar/_variables.scss +8 -0
  137. package/lib/labs/VNumberInput/VNumberInput.mjs +57 -81
  138. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  139. package/lib/labs/VNumberInput/index.d.mts +402 -34
  140. package/lib/labs/VSnackbarQueue/index.d.mts +138 -138
  141. package/lib/labs/VStepperVertical/VStepperVertical.mjs +106 -0
  142. package/lib/labs/VStepperVertical/VStepperVertical.mjs.map +1 -0
  143. package/lib/labs/VStepperVertical/VStepperVerticalActions.mjs +38 -0
  144. package/lib/labs/VStepperVertical/VStepperVerticalActions.mjs.map +1 -0
  145. package/lib/labs/VStepperVertical/VStepperVerticalItem.css +69 -0
  146. package/lib/labs/VStepperVertical/VStepperVerticalItem.mjs +134 -0
  147. package/lib/labs/VStepperVertical/VStepperVerticalItem.mjs.map +1 -0
  148. package/lib/labs/VStepperVertical/VStepperVerticalItem.sass +74 -0
  149. package/lib/labs/VStepperVertical/_variables.scss +3 -0
  150. package/lib/labs/VStepperVertical/index.d.mts +1590 -0
  151. package/lib/labs/VStepperVertical/index.mjs +4 -0
  152. package/lib/labs/VStepperVertical/index.mjs.map +1 -0
  153. package/lib/labs/VTreeview/VTreeview.mjs.map +1 -1
  154. package/lib/labs/VTreeview/index.d.mts +88 -64
  155. package/lib/labs/components.d.mts +2303 -339
  156. package/lib/labs/components.mjs +1 -0
  157. package/lib/labs/components.mjs.map +1 -1
  158. package/lib/styles/generic/_colors.scss +1 -0
  159. package/lib/styles/main.css +260 -0
  160. package/lib/styles/tools/_variant.sass +3 -1
  161. package/lib/util/helpers.mjs +16 -0
  162. package/lib/util/helpers.mjs.map +1 -1
  163. package/package.json +3 -3
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.6.3
2
+ * Vuetify v3.6.5
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -74,7 +74,7 @@
74
74
 
75
75
  // Composables
76
76
  const makeComponentProps = propsFactory({
77
- class: [String, Array],
77
+ class: [String, Array, Object],
78
78
  style: {
79
79
  type: [String, Array, Object],
80
80
  default: null
@@ -561,6 +561,22 @@
561
561
  const divBottom = divRect.bottom;
562
562
  return mouseX >= divLeft && mouseX <= divRight && mouseY >= divTop && mouseY <= divBottom;
563
563
  }
564
+ function templateRef() {
565
+ const el = vue.shallowRef();
566
+ const fn = target => {
567
+ el.value = target;
568
+ };
569
+ Object.defineProperty(fn, 'value', {
570
+ enumerable: true,
571
+ get: () => el.value,
572
+ set: val => el.value = val
573
+ });
574
+ Object.defineProperty(fn, 'el', {
575
+ enumerable: true,
576
+ get: () => refElement(el.value)
577
+ });
578
+ return fn;
579
+ }
564
580
 
565
581
  // Utilities
566
582
  const block = ['top', 'bottom'];
@@ -1569,7 +1585,7 @@
1569
1585
 
1570
1586
  function useResizeObserver(callback) {
1571
1587
  let box = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'content';
1572
- const resizeRef = vue.ref();
1588
+ const resizeRef = templateRef();
1573
1589
  const contentRect = vue.ref();
1574
1590
  if (IN_BROWSER) {
1575
1591
  const observer = new ResizeObserver(entries => {
@@ -1584,12 +1600,12 @@
1584
1600
  vue.onBeforeUnmount(() => {
1585
1601
  observer.disconnect();
1586
1602
  });
1587
- vue.watch(resizeRef, (newValue, oldValue) => {
1603
+ vue.watch(() => resizeRef.el, (newValue, oldValue) => {
1588
1604
  if (oldValue) {
1589
- observer.unobserve(refElement(oldValue));
1605
+ observer.unobserve(oldValue);
1590
1606
  contentRect.value = undefined;
1591
1607
  }
1592
- if (newValue) observer.observe(refElement(newValue));
1608
+ if (newValue) observer.observe(newValue);
1593
1609
  }, {
1594
1610
  flush: 'post'
1595
1611
  });
@@ -3005,7 +3021,7 @@
3005
3021
  }
3006
3022
  const makeVResponsiveProps = propsFactory({
3007
3023
  aspectRatio: [String, Number],
3008
- contentClass: String,
3024
+ contentClass: null,
3009
3025
  inline: Boolean,
3010
3026
  ...makeComponentProps(),
3011
3027
  ...makeDimensionProps()
@@ -4121,6 +4137,12 @@
4121
4137
  const isSelected = vue.computed(() => {
4122
4138
  return group.isSelected(id);
4123
4139
  });
4140
+ const isFirst = vue.computed(() => {
4141
+ return group.items.value[0].id === id;
4142
+ });
4143
+ const isLast = vue.computed(() => {
4144
+ return group.items.value[group.items.value.length - 1].id === id;
4145
+ });
4124
4146
  const selectedClass = vue.computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass]);
4125
4147
  vue.watch(isSelected, value => {
4126
4148
  vm.emit('group:selected', {
@@ -4132,6 +4154,8 @@
4132
4154
  return {
4133
4155
  id,
4134
4156
  isSelected,
4157
+ isFirst,
4158
+ isLast,
4135
4159
  toggle: () => group.select(id, !isSelected.value),
4136
4160
  select: value => group.select(id, value),
4137
4161
  selectedClass,
@@ -7093,7 +7117,7 @@
7093
7117
  const makeDisplayProps = propsFactory({
7094
7118
  mobile: {
7095
7119
  type: Boolean,
7096
- default: null
7120
+ default: false
7097
7121
  },
7098
7122
  mobileBreakpoint: [Number, String]
7099
7123
  }, 'display');
@@ -7388,7 +7412,7 @@
7388
7412
  const goTo = useGoTo();
7389
7413
  const goToOptions = vue.computed(() => {
7390
7414
  return {
7391
- container: containerRef.value,
7415
+ container: containerRef.el,
7392
7416
  duration: 200,
7393
7417
  easing: 'easeOutQuart'
7394
7418
  };
@@ -7412,9 +7436,9 @@
7412
7436
  contentSize.value = contentRect.value[sizeProperty];
7413
7437
  isOverflowing.value = containerSize.value + 1 < contentSize.value;
7414
7438
  }
7415
- if (firstSelectedIndex.value >= 0 && contentRef.value) {
7439
+ if (firstSelectedIndex.value >= 0 && contentRef.el) {
7416
7440
  // TODO: Is this too naive? Should we store element references in group composable?
7417
- const selectedElement = contentRef.value.children[lastSelectedIndex.value];
7441
+ const selectedElement = contentRef.el.children[lastSelectedIndex.value];
7418
7442
  scrollToChildren(selectedElement, props.centerActive);
7419
7443
  }
7420
7444
  });
@@ -7425,13 +7449,13 @@
7425
7449
  let target = 0;
7426
7450
  if (center) {
7427
7451
  target = calculateCenteredTarget({
7428
- containerElement: containerRef.value,
7452
+ containerElement: containerRef.el,
7429
7453
  isHorizontal: isHorizontal.value,
7430
7454
  selectedElement: children
7431
7455
  });
7432
7456
  } else {
7433
7457
  target = calculateUpdatedTarget({
7434
- containerElement: containerRef.value,
7458
+ containerElement: containerRef.el,
7435
7459
  isHorizontal: isHorizontal.value,
7436
7460
  isRtl: isRtl.value,
7437
7461
  selectedElement: children
@@ -7440,18 +7464,18 @@
7440
7464
  scrollToPosition(target);
7441
7465
  }
7442
7466
  function scrollToPosition(newPosition) {
7443
- if (!IN_BROWSER || !containerRef.value) return;
7444
- const offsetSize = getOffsetSize(isHorizontal.value, containerRef.value);
7445
- const scrollPosition = getScrollPosition(isHorizontal.value, isRtl.value, containerRef.value);
7446
- const scrollSize = getScrollSize(isHorizontal.value, containerRef.value);
7467
+ if (!IN_BROWSER || !containerRef.el) return;
7468
+ const offsetSize = getOffsetSize(isHorizontal.value, containerRef.el);
7469
+ const scrollPosition = getScrollPosition(isHorizontal.value, isRtl.value, containerRef.el);
7470
+ const scrollSize = getScrollSize(isHorizontal.value, containerRef.el);
7447
7471
  if (scrollSize <= offsetSize ||
7448
7472
  // Prevent scrolling by only a couple of pixels, which doesn't look smooth
7449
7473
  Math.abs(newPosition - scrollPosition) < 16) return;
7450
- if (isHorizontal.value && isRtl.value && containerRef.value) {
7474
+ if (isHorizontal.value && isRtl.value && containerRef.el) {
7451
7475
  const {
7452
7476
  scrollWidth,
7453
7477
  offsetWidth: containerWidth
7454
- } = containerRef.value;
7478
+ } = containerRef.el;
7455
7479
  newPosition = scrollWidth - containerWidth - newPosition;
7456
7480
  }
7457
7481
  if (isHorizontal.value) {
@@ -7469,12 +7493,12 @@
7469
7493
  }
7470
7494
  function onFocusin(e) {
7471
7495
  isFocused.value = true;
7472
- if (!isOverflowing.value || !contentRef.value) return;
7496
+ if (!isOverflowing.value || !contentRef.el) return;
7473
7497
 
7474
7498
  // Focused element is likely to be the root of an item, so a
7475
7499
  // breadth-first search will probably find it in the first iteration
7476
7500
  for (const el of e.composedPath()) {
7477
- for (const item of contentRef.value.children) {
7501
+ for (const item of contentRef.el.children) {
7478
7502
  if (item === el) {
7479
7503
  scrollToChildren(item);
7480
7504
  return;
@@ -7489,14 +7513,14 @@
7489
7513
  // Affix clicks produce onFocus that we have to ignore to avoid extra scrollToChildren
7490
7514
  let ignoreFocusEvent = false;
7491
7515
  function onFocus(e) {
7492
- if (!ignoreFocusEvent && !isFocused.value && !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget))) focus();
7516
+ if (!ignoreFocusEvent && !isFocused.value && !(e.relatedTarget && contentRef.el?.contains(e.relatedTarget))) focus();
7493
7517
  ignoreFocusEvent = false;
7494
7518
  }
7495
7519
  function onFocusAffixes() {
7496
7520
  ignoreFocusEvent = true;
7497
7521
  }
7498
7522
  function onKeydown(e) {
7499
- if (!contentRef.value) return;
7523
+ if (!contentRef.el) return;
7500
7524
  function toFocus(location) {
7501
7525
  e.preventDefault();
7502
7526
  focus(location);
@@ -7521,21 +7545,21 @@
7521
7545
  }
7522
7546
  }
7523
7547
  function focus(location) {
7524
- if (!contentRef.value) return;
7548
+ if (!contentRef.el) return;
7525
7549
  let el;
7526
7550
  if (!location) {
7527
- const focusable = focusableChildren(contentRef.value);
7551
+ const focusable = focusableChildren(contentRef.el);
7528
7552
  el = focusable[0];
7529
7553
  } else if (location === 'next') {
7530
- el = contentRef.value.querySelector(':focus')?.nextElementSibling;
7554
+ el = contentRef.el.querySelector(':focus')?.nextElementSibling;
7531
7555
  if (!el) return focus('first');
7532
7556
  } else if (location === 'prev') {
7533
- el = contentRef.value.querySelector(':focus')?.previousElementSibling;
7557
+ el = contentRef.el.querySelector(':focus')?.previousElementSibling;
7534
7558
  if (!el) return focus('last');
7535
7559
  } else if (location === 'first') {
7536
- el = contentRef.value.firstElementChild;
7560
+ el = contentRef.el.firstElementChild;
7537
7561
  } else if (location === 'last') {
7538
- el = contentRef.value.lastElementChild;
7562
+ el = contentRef.el.lastElementChild;
7539
7563
  }
7540
7564
  if (el) {
7541
7565
  el.focus({
@@ -7549,11 +7573,11 @@
7549
7573
  let newPosition = scrollOffset.value + offsetStep;
7550
7574
 
7551
7575
  // TODO: improve it
7552
- if (isHorizontal.value && isRtl.value && containerRef.value) {
7576
+ if (isHorizontal.value && isRtl.value && containerRef.el) {
7553
7577
  const {
7554
7578
  scrollWidth,
7555
7579
  offsetWidth: containerWidth
7556
- } = containerRef.value;
7580
+ } = containerRef.el;
7557
7581
  newPosition += scrollWidth - containerWidth;
7558
7582
  }
7559
7583
  scrollToPosition(newPosition);
@@ -7596,8 +7620,8 @@
7596
7620
  });
7597
7621
  const hasNext = vue.computed(() => {
7598
7622
  if (!containerRef.value) return false;
7599
- const scrollSize = getScrollSize(isHorizontal.value, containerRef.value);
7600
- const clientSize = getClientSize(isHorizontal.value, containerRef.value);
7623
+ const scrollSize = getScrollSize(isHorizontal.value, containerRef.el);
7624
+ const clientSize = getClientSize(isHorizontal.value, containerRef.el);
7601
7625
  const scrollSizeMax = scrollSize - clientSize;
7602
7626
 
7603
7627
  // 1 pixel in reserve, may be lost after rounding
@@ -8021,14 +8045,16 @@
8021
8045
  },
8022
8046
  in: (v, children, parents) => {
8023
8047
  let set = new Set();
8024
- for (const id of v || []) {
8025
- set = strategy.activate({
8026
- id,
8027
- value: true,
8028
- activated: new Set(set),
8029
- children,
8030
- parents
8031
- });
8048
+ if (v != null) {
8049
+ for (const id of wrapInArray(v)) {
8050
+ set = strategy.activate({
8051
+ id,
8052
+ value: true,
8053
+ activated: new Set(set),
8054
+ children,
8055
+ parents
8056
+ });
8057
+ }
8032
8058
  }
8033
8059
  return set;
8034
8060
  },
@@ -8057,8 +8083,11 @@
8057
8083
  },
8058
8084
  in: (v, children, parents) => {
8059
8085
  let set = new Set();
8060
- if (v?.length) {
8061
- set = parentStrategy.in(v.slice(0, 1), children, parents);
8086
+ if (v != null) {
8087
+ const arr = wrapInArray(v);
8088
+ if (arr.length) {
8089
+ set = parentStrategy.in(arr.slice(0, 1), children, parents);
8090
+ }
8062
8091
  }
8063
8092
  return set;
8064
8093
  },
@@ -8402,12 +8431,12 @@
8402
8431
  const makeNestedProps = propsFactory({
8403
8432
  activatable: Boolean,
8404
8433
  selectable: Boolean,
8405
- activeStrategy: [String, Function],
8406
- selectStrategy: [String, Function],
8434
+ activeStrategy: [String, Function, Object],
8435
+ selectStrategy: [String, Function, Object],
8407
8436
  openStrategy: [String, Object],
8408
- opened: Array,
8409
- activated: Array,
8410
- selected: Array,
8437
+ opened: null,
8438
+ activated: null,
8439
+ selected: null,
8411
8440
  mandatory: Boolean
8412
8441
  }, 'nested');
8413
8442
  const useNested = props => {
@@ -8417,6 +8446,7 @@
8417
8446
  const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(v), v => [...v.values()]);
8418
8447
  const activeStrategy = vue.computed(() => {
8419
8448
  if (typeof props.activeStrategy === 'object') return props.activeStrategy;
8449
+ if (typeof props.activeStrategy === 'function') return props.activeStrategy(props.mandatory);
8420
8450
  switch (props.activeStrategy) {
8421
8451
  case 'leaf':
8422
8452
  return leafActiveStrategy(props.mandatory);
@@ -8431,6 +8461,7 @@
8431
8461
  });
8432
8462
  const selectStrategy = vue.computed(() => {
8433
8463
  if (typeof props.selectStrategy === 'object') return props.selectStrategy;
8464
+ if (typeof props.selectStrategy === 'function') return props.selectStrategy(props.mandatory);
8434
8465
  switch (props.selectStrategy) {
8435
8466
  case 'single-leaf':
8436
8467
  return leafSingleSelectStrategy(props.mandatory);
@@ -8759,7 +8790,7 @@
8759
8790
  appendIcon: IconValue,
8760
8791
  baseColor: String,
8761
8792
  disabled: Boolean,
8762
- lines: String,
8793
+ lines: [Boolean, String],
8763
8794
  link: {
8764
8795
  type: Boolean,
8765
8796
  default: undefined
@@ -8870,8 +8901,9 @@
8870
8901
  }));
8871
8902
  function onClick(e) {
8872
8903
  emit('click', e);
8873
- if (isGroupActivator || !isClickable.value) return;
8904
+ if (!isClickable.value) return;
8874
8905
  link.navigate?.(e);
8906
+ if (isGroupActivator) return;
8875
8907
  if (root.activatable.value) {
8876
8908
  activate(!isActivated.value, e);
8877
8909
  } else if (root.selectable.value) {
@@ -10330,17 +10362,17 @@
10330
10362
  }, {
10331
10363
  flush: 'post'
10332
10364
  });
10333
- const activatorRef = vue.ref();
10365
+ const activatorRef = templateRef();
10334
10366
  vue.watchEffect(() => {
10335
10367
  if (!activatorRef.value) return;
10336
10368
  vue.nextTick(() => {
10337
- activatorEl.value = refElement(activatorRef.value);
10369
+ activatorEl.value = activatorRef.el;
10338
10370
  });
10339
10371
  });
10340
- const targetRef = vue.ref();
10372
+ const targetRef = templateRef();
10341
10373
  const target = vue.computed(() => {
10342
10374
  if (props.target === 'cursor' && cursorTarget.value) return cursorTarget.value;
10343
- if (targetRef.value) return refElement(targetRef.value);
10375
+ if (targetRef.value) return targetRef.el;
10344
10376
  return getTarget(props.target, vm) || activatorEl.value;
10345
10377
  });
10346
10378
  const targetEl = vue.computed(() => {
@@ -10685,10 +10717,7 @@
10685
10717
  disabled: Boolean,
10686
10718
  opacity: [Number, String],
10687
10719
  noClickAnimation: Boolean,
10688
- modelValue: {
10689
- type: Boolean,
10690
- default: null
10691
- },
10720
+ modelValue: Boolean,
10692
10721
  persistent: Boolean,
10693
10722
  scrim: {
10694
10723
  type: [Boolean, String],
@@ -10731,7 +10760,7 @@
10731
10760
  } = _ref;
10732
10761
  const model = useProxiedModel(props, 'modelValue');
10733
10762
  const isActive = vue.computed({
10734
- get: () => Boolean(model.value),
10763
+ get: () => model.value,
10735
10764
  set: v => {
10736
10765
  if (!(v && props.disabled)) model.value = v;
10737
10766
  }
@@ -12968,7 +12997,7 @@
12968
12997
  select(displayItems.value[0]);
12969
12998
  }
12970
12999
  menu.value = false;
12971
- search.value = '';
13000
+ if (props.multiple || hasSelectionSlot.value) search.value = '';
12972
13001
  selectionIndex.value = -1;
12973
13002
  }
12974
13003
  });
@@ -14812,7 +14841,7 @@
14812
14841
  const {
14813
14842
  resizeRef
14814
14843
  } = useResizeObserver(entries => {
14815
- if (!resizeRef.value?.offsetParent) return;
14844
+ if (!resizeRef.el?.offsetParent) return;
14816
14845
  const {
14817
14846
  width,
14818
14847
  height
@@ -18435,6 +18464,7 @@
18435
18464
  });
18436
18465
  return !!items.length && isSelected(items);
18437
18466
  });
18467
+ const showSelectAll = vue.computed(() => selectStrategy.value.showSelectAll);
18438
18468
  const data = {
18439
18469
  toggleSelect,
18440
18470
  select,
@@ -18443,7 +18473,7 @@
18443
18473
  isSomeSelected,
18444
18474
  someSelected,
18445
18475
  allSelected,
18446
- showSelectAll: selectStrategy.value.showSelectAll
18476
+ showSelectAll
18447
18477
  };
18448
18478
  vue.provide(VDataTableSelectionSymbol, data);
18449
18479
  return data;
@@ -19714,7 +19744,7 @@
19714
19744
  };
19715
19745
  if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);
19716
19746
  if (column.key === 'data-table-select') {
19717
- return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll && vue.createVNode(VCheckboxBtn, {
19747
+ return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && vue.createVNode(VCheckboxBtn, {
19718
19748
  "modelValue": allSelected.value,
19719
19749
  "indeterminate": someSelected.value && !allSelected.value,
19720
19750
  "onUpdate:modelValue": selectAll
@@ -20233,6 +20263,8 @@
20233
20263
 
20234
20264
  const makeDataTableProps = propsFactory({
20235
20265
  ...makeVDataTableRowsProps(),
20266
+ hideDefaultFooter: Boolean,
20267
+ hideDefaultHeader: Boolean,
20236
20268
  width: [String, Number],
20237
20269
  search: String,
20238
20270
  ...makeDataTableExpandProps(),
@@ -20415,10 +20447,12 @@
20415
20447
  "style": props.style
20416
20448
  }, tableProps), {
20417
20449
  top: () => slots.top?.(slotProps.value),
20418
- default: () => slots.default ? slots.default(slotProps.value) : vue.createVNode(vue.Fragment, null, [slots.colgroup?.(slotProps.value), vue.createVNode("thead", null, [vue.createVNode(VDataTableHeaders, dataTableHeadersProps, slots)]), slots.thead?.(slotProps.value), vue.createVNode("tbody", null, [slots['body.prepend']?.(slotProps.value), slots.body ? slots.body(slotProps.value) : vue.createVNode(VDataTableRows, vue.mergeProps(attrs, dataTableRowsProps, {
20450
+ default: () => slots.default ? slots.default(slotProps.value) : vue.createVNode(vue.Fragment, null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && vue.createVNode("thead", {
20451
+ "key": "thead"
20452
+ }, [vue.createVNode(VDataTableHeaders, dataTableHeadersProps, slots)]), slots.thead?.(slotProps.value), vue.createVNode("tbody", null, [slots['body.prepend']?.(slotProps.value), slots.body ? slots.body(slotProps.value) : vue.createVNode(VDataTableRows, vue.mergeProps(attrs, dataTableRowsProps, {
20419
20453
  "items": paginatedItems.value
20420
20454
  }), slots), slots['body.append']?.(slotProps.value)]), slots.tbody?.(slotProps.value), slots.tfoot?.(slotProps.value)]),
20421
- bottom: () => slots.bottom ? slots.bottom(slotProps.value) : vue.createVNode(vue.Fragment, null, [vue.createVNode(VDivider, null, null), vue.createVNode(VDataTableFooter, dataTableFooterProps, {
20455
+ bottom: () => slots.bottom ? slots.bottom(slotProps.value) : !props.hideDefaultFooter && vue.createVNode(vue.Fragment, null, [vue.createVNode(VDivider, null, null), vue.createVNode(VDataTableFooter, dataTableFooterProps, {
20422
20456
  prepend: slots['footer.prepend']
20423
20457
  })])
20424
20458
  });
@@ -20586,7 +20620,9 @@
20586
20620
  "style": {
20587
20621
  height: convertToUnit(props.height)
20588
20622
  }
20589
- }, [vue.createVNode("table", null, [slots.colgroup?.(slotProps.value), vue.createVNode("thead", null, [vue.createVNode(VDataTableHeaders, vue.mergeProps(dataTableHeadersProps, {
20623
+ }, [vue.createVNode("table", null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && vue.createVNode("thead", {
20624
+ "key": "thead"
20625
+ }, [vue.createVNode(VDataTableHeaders, vue.mergeProps(dataTableHeadersProps, {
20590
20626
  "sticky": props.fixedHeader
20591
20627
  }), slots)]), vue.createVNode("tbody", null, [vue.createVNode("tr", {
20592
20628
  "ref": markerRef,
@@ -20791,7 +20827,8 @@
20791
20827
  "style": props.style
20792
20828
  }, tableProps), {
20793
20829
  top: () => slots.top?.(slotProps.value),
20794
- default: () => slots.default ? slots.default(slotProps.value) : vue.createVNode(vue.Fragment, null, [slots.colgroup?.(slotProps.value), vue.createVNode("thead", {
20830
+ default: () => slots.default ? slots.default(slotProps.value) : vue.createVNode(vue.Fragment, null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && vue.createVNode("thead", {
20831
+ "key": "thead",
20795
20832
  "class": "v-data-table__thead",
20796
20833
  "role": "rowgroup"
20797
20834
  }, [vue.createVNode(VDataTableHeaders, vue.mergeProps(dataTableHeadersProps, {
@@ -20802,7 +20839,7 @@
20802
20839
  }, [slots['body.prepend']?.(slotProps.value), slots.body ? slots.body(slotProps.value) : vue.createVNode(VDataTableRows, vue.mergeProps(attrs, dataTableRowsProps, {
20803
20840
  "items": flatItems.value
20804
20841
  }), slots), slots['body.append']?.(slotProps.value)]), slots.tbody?.(slotProps.value), slots.tfoot?.(slotProps.value)]),
20805
- bottom: () => slots.bottom ? slots.bottom(slotProps.value) : vue.createVNode(vue.Fragment, null, [vue.createVNode(VDivider, null, null), vue.createVNode(VDataTableFooter, dataTableFooterProps, {
20842
+ bottom: () => slots.bottom ? slots.bottom(slotProps.value) : !props.hideDefaultFooter && vue.createVNode(vue.Fragment, null, [vue.createVNode(VDivider, null, null), vue.createVNode(VDataTableFooter, dataTableFooterProps, {
20806
20843
  prepend: slots['footer.prepend']
20807
20844
  })])
20808
20845
  });
@@ -21683,10 +21720,10 @@
21683
21720
  vue.watchEffect(() => {
21684
21721
  model.value = model.value ?? adapter.getYear(adapter.date());
21685
21722
  });
21686
- const yearRef = vue.ref();
21723
+ const yearRef = templateRef();
21687
21724
  vue.onMounted(async () => {
21688
21725
  await vue.nextTick();
21689
- yearRef.value?.$el.scrollIntoView({
21726
+ yearRef.el?.scrollIntoView({
21690
21727
  block: 'center'
21691
21728
  });
21692
21729
  });
@@ -22346,7 +22383,9 @@
22346
22383
  }), slots.default?.()]
22347
22384
  });
22348
22385
  });
22349
- return {};
22386
+ return {
22387
+ groupItem
22388
+ };
22350
22389
  }
22351
22390
  });
22352
22391
 
@@ -22375,7 +22414,10 @@
22375
22414
  let {
22376
22415
  slots
22377
22416
  } = _ref;
22378
- useGroup(props, VExpansionPanelSymbol);
22417
+ const {
22418
+ next,
22419
+ prev
22420
+ } = useGroup(props, VExpansionPanelSymbol);
22379
22421
  const {
22380
22422
  themeClasses
22381
22423
  } = provideTheme(props);
@@ -22402,8 +22444,16 @@
22402
22444
  'v-expansion-panels--tile': props.tile
22403
22445
  }, themeClasses.value, variantClass.value, props.class],
22404
22446
  "style": props.style
22405
- }, slots));
22406
- return {};
22447
+ }, {
22448
+ default: () => [slots.default?.({
22449
+ prev,
22450
+ next
22451
+ })]
22452
+ }));
22453
+ return {
22454
+ next,
22455
+ prev
22456
+ };
22407
22457
  }
22408
22458
  });
22409
22459
 
@@ -22563,7 +22613,7 @@
22563
22613
  const {
22564
22614
  t
22565
22615
  } = useLocale();
22566
- const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => props.multiple || Array.isArray(props.modelValue) ? val : val[0]);
22616
+ const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => props.multiple || Array.isArray(props.modelValue) ? val : val[0] ?? null);
22567
22617
  const {
22568
22618
  isFocused,
22569
22619
  focus,
@@ -22667,7 +22717,7 @@
22667
22717
  }, fieldProps, {
22668
22718
  "id": id.value,
22669
22719
  "active": isActive.value || isDirty.value,
22670
- "dirty": isDirty.value,
22720
+ "dirty": isDirty.value || props.dirty,
22671
22721
  "disabled": isDisabled.value,
22672
22722
  "focused": isFocused.value,
22673
22723
  "error": isValid.value === false
@@ -23012,7 +23062,7 @@
23012
23062
  function intersecting(side) {
23013
23063
  if (props.mode !== 'manual' && !isIntersecting.value) return;
23014
23064
  const status = getStatus(side);
23015
- if (!rootEl.value || status === 'loading') return;
23065
+ if (!rootEl.value || ['empty', 'loading'].includes(status)) return;
23016
23066
  previousScrollSize = getScrollSize();
23017
23067
  setStatus(side, 'loading');
23018
23068
  function done(status) {
@@ -23758,7 +23808,9 @@
23758
23808
  ...makeBorderProps(),
23759
23809
  ...makeComponentProps(),
23760
23810
  ...makeDelayProps(),
23761
- ...makeDisplayProps(),
23811
+ ...makeDisplayProps({
23812
+ mobile: null
23813
+ }),
23762
23814
  ...makeElevationProps(),
23763
23815
  ...makeLayoutItemProps(),
23764
23816
  ...makeRoundedProps(),
@@ -25764,7 +25816,7 @@
25764
25816
 
25765
25817
  // Types
25766
25818
 
25767
- const makeVStepperItemProps = propsFactory({
25819
+ const makeStepperItemProps = propsFactory({
25768
25820
  color: String,
25769
25821
  title: String,
25770
25822
  subtitle: String,
@@ -25791,7 +25843,10 @@
25791
25843
  rules: {
25792
25844
  type: Array,
25793
25845
  default: () => []
25794
- },
25846
+ }
25847
+ }, 'StepperItem');
25848
+ const makeVStepperItemProps = propsFactory({
25849
+ ...makeStepperItemProps(),
25795
25850
  ...makeGroupItemProps()
25796
25851
  }, 'VStepperItem');
25797
25852
  const VStepperItem = genericComponent()({
@@ -25810,13 +25865,14 @@
25810
25865
  const group = useGroupItem(props, VStepperSymbol, true);
25811
25866
  const step = vue.computed(() => group?.value.value ?? props.value);
25812
25867
  const isValid = vue.computed(() => props.rules.every(handler => handler() === true));
25868
+ const isClickable = vue.computed(() => !props.disabled && props.editable);
25813
25869
  const canEdit = vue.computed(() => !props.disabled && props.editable);
25814
25870
  const hasError = vue.computed(() => props.error || !isValid.value);
25815
25871
  const hasCompleted = vue.computed(() => props.complete || props.rules.length > 0 && isValid.value);
25816
25872
  const icon = vue.computed(() => {
25817
25873
  if (hasError.value) return props.errorIcon;
25818
25874
  if (hasCompleted.value) return props.completeIcon;
25819
- if (props.editable) return props.editIcon;
25875
+ if (group.isSelected.value && props.editable) return props.editIcon;
25820
25876
  return props.icon;
25821
25877
  });
25822
25878
  const slotProps = vue.computed(() => ({
@@ -25843,7 +25899,7 @@
25843
25899
  }, group?.selectedClass.value],
25844
25900
  "disabled": !props.editable,
25845
25901
  "onClick": onClick
25846
- }, [vue.createVNode(VAvatar, {
25902
+ }, [isClickable.value && genOverlays(true, 'v-stepper-item'), vue.createVNode(VAvatar, {
25847
25903
  "key": "stepper-avatar",
25848
25904
  "class": "v-stepper-item__avatar",
25849
25905
  "color": hasColor ? props.color : undefined,
@@ -25905,7 +25961,8 @@
25905
25961
  }, windowProps, {
25906
25962
  "modelValue": model.value,
25907
25963
  "onUpdate:modelValue": $event => model.value = $event,
25908
- "class": "v-stepper-window",
25964
+ "class": ['v-stepper-window', props.class],
25965
+ "style": props.style,
25909
25966
  "mandatory": false,
25910
25967
  "touch": false
25911
25968
  }), slots);
@@ -25929,7 +25986,8 @@
25929
25986
  return vue.createVNode(VWindowItem, vue.mergeProps({
25930
25987
  "_as": "VStepperWindowItem"
25931
25988
  }, windowItemProps, {
25932
- "class": "v-stepper-window-item"
25989
+ "class": ['v-stepper-window-item', props.class],
25990
+ "style": props.style
25933
25991
  }), slots);
25934
25992
  });
25935
25993
  return {};
@@ -25939,7 +25997,7 @@
25939
25997
  // Types
25940
25998
 
25941
25999
  const VStepperSymbol = Symbol.for('vuetify:v-stepper');
25942
- const makeVStepperProps = propsFactory({
26000
+ const makeStepperProps = propsFactory({
25943
26001
  altLabels: Boolean,
25944
26002
  bgColor: String,
25945
26003
  editable: Boolean,
@@ -25958,7 +26016,10 @@
25958
26016
  },
25959
26017
  mobile: Boolean,
25960
26018
  nonLinear: Boolean,
25961
- flat: Boolean,
26019
+ flat: Boolean
26020
+ }, 'Stepper');
26021
+ const makeVStepperProps = propsFactory({
26022
+ ...makeStepperProps(),
25962
26023
  ...makeGroupProps({
25963
26024
  mandatory: 'force',
25964
26025
  selectedClass: 'v-stepper-item--selected'
@@ -26037,12 +26098,18 @@
26037
26098
  default: () => [hasHeader && vue.createVNode(VStepperHeader, {
26038
26099
  "key": "stepper-header"
26039
26100
  }, {
26040
- default: () => [items.value.map((item, index) => vue.createVNode(vue.Fragment, null, [!!index && vue.createVNode(VDivider, null, null), vue.createVNode(VStepperItem, item, {
26041
- default: slots[`header-item.${item.value}`] ?? slots.header,
26042
- icon: slots.icon,
26043
- title: slots.title,
26044
- subtitle: slots.subtitle
26045
- })]))]
26101
+ default: () => [items.value.map((_ref2, index) => {
26102
+ let {
26103
+ raw,
26104
+ ...item
26105
+ } = _ref2;
26106
+ return vue.createVNode(vue.Fragment, null, [!!index && vue.createVNode(VDivider, null, null), vue.createVNode(VStepperItem, item, {
26107
+ default: slots[`header-item.${item.value}`] ?? slots.header,
26108
+ icon: slots.icon,
26109
+ title: slots.title,
26110
+ subtitle: slots.subtitle
26111
+ })]);
26112
+ })]
26046
26113
  }), hasWindow && vue.createVNode(VStepperWindow, {
26047
26114
  "key": "stepper-window"
26048
26115
  }, {
@@ -26428,7 +26495,8 @@
26428
26495
  }, windowProps, {
26429
26496
  "modelValue": model.value,
26430
26497
  "onUpdate:modelValue": $event => model.value = $event,
26431
- "class": "v-tabs-window",
26498
+ "class": ['v-tabs-window', props.class],
26499
+ "style": props.style,
26432
26500
  "mandatory": false,
26433
26501
  "touch": false
26434
26502
  }), slots);
@@ -26505,6 +26573,7 @@
26505
26573
  },
26506
26574
  setup(props, _ref) {
26507
26575
  let {
26576
+ attrs,
26508
26577
  slots
26509
26578
  } = _ref;
26510
26579
  const model = useProxiedModel(props, 'modelValue');
@@ -26516,6 +26585,9 @@
26516
26585
  backgroundColorClasses,
26517
26586
  backgroundColorStyles
26518
26587
  } = useBackgroundColor(vue.toRef(props, 'bgColor'));
26588
+ const {
26589
+ scopeId
26590
+ } = useScopeId();
26519
26591
  provideDefaults({
26520
26592
  VTab: {
26521
26593
  color: vue.toRef(props, 'color'),
@@ -26542,7 +26614,7 @@
26542
26614
  }, backgroundColorStyles.value, props.style],
26543
26615
  "role": "tablist",
26544
26616
  "symbol": VTabsSymbol
26545
- }), {
26617
+ }, scopeId, attrs), {
26546
26618
  default: () => [slots.default?.() ?? items.value.map(item => slots.tab?.({
26547
26619
  item
26548
26620
  }) ?? vue.createVNode(VTab, vue.mergeProps(item, {
@@ -26553,11 +26625,11 @@
26553
26625
  item
26554
26626
  })
26555
26627
  }))]
26556
- }), hasWindow && vue.createVNode(VTabsWindow, {
26628
+ }), hasWindow && vue.createVNode(VTabsWindow, vue.mergeProps({
26557
26629
  "modelValue": model.value,
26558
26630
  "onUpdate:modelValue": $event => model.value = $event,
26559
26631
  "key": "tabs-window"
26560
- }, {
26632
+ }, scopeId), {
26561
26633
  default: () => [items.value.map(item => slots.item?.({
26562
26634
  item
26563
26635
  }) ?? vue.createVNode(VTabsWindowItem, {
@@ -27842,19 +27914,13 @@
27842
27914
  type: Number,
27843
27915
  default: 1
27844
27916
  },
27845
- ...only(makeVInputProps(), ['density', 'disabled', 'focused', 'hideDetails', 'hint', 'label', 'persistentHint', 'readonly']),
27846
- ...only(makeVFieldProps(), ['baseColor', 'bgColor', 'class', 'color', 'disabled', 'error', 'loading', 'reverse', 'rounded', 'style', 'theme', 'variant']),
27847
- ...makeFocusProps()
27917
+ ...omit(makeVTextFieldProps(), ['appendInnerIcon', 'prependInnerIcon'])
27848
27918
  }, 'VNumberInput');
27849
27919
  const VNumberInput = genericComponent()({
27850
27920
  name: 'VNumberInput',
27851
27921
  inheritAttrs: false,
27852
27922
  props: {
27853
- ...makeVNumberInputProps(),
27854
- modelValue: {
27855
- type: Number,
27856
- default: undefined
27857
- }
27923
+ ...makeVNumberInputProps()
27858
27924
  },
27859
27925
  emits: {
27860
27926
  'update:modelValue': val => true
@@ -27866,12 +27932,6 @@
27866
27932
  slots
27867
27933
  } = _ref;
27868
27934
  const model = useProxiedModel(props, 'modelValue');
27869
- const {
27870
- isFocused,
27871
- focus,
27872
- blur
27873
- } = useFocus(props);
27874
- const inputRef = vue.ref();
27875
27935
  const stepDecimals = vue.computed(() => getDecimals(props.step));
27876
27936
  const modelDecimals = vue.computed(() => model.value != null ? getDecimals(model.value) : 0);
27877
27937
  const canIncrease = vue.computed(() => {
@@ -27887,9 +27947,6 @@
27887
27947
  model.value = clamp(model.value, props.min, props.max);
27888
27948
  }
27889
27949
  });
27890
- function onFocus() {
27891
- if (!isFocused.value) focus();
27892
- }
27893
27950
  const controlVariant = vue.computed(() => {
27894
27951
  return props.hideInput ? 'stacked' : props.controlVariant;
27895
27952
  });
@@ -27919,7 +27976,7 @@
27919
27976
  toggleUpDown(false);
27920
27977
  }
27921
27978
  function onKeydown(e) {
27922
- if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace'].includes(e.key) || e.ctrlKey) return;
27979
+ if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Tab'].includes(e.key) || e.ctrlKey) return;
27923
27980
  if (['ArrowDown'].includes(e.key)) {
27924
27981
  e.preventDefault();
27925
27982
  toggleUpDown(false);
@@ -27936,17 +27993,14 @@
27936
27993
  e.preventDefault();
27937
27994
  }
27938
27995
  }
27939
- function onInput(e) {
27940
- const el = e.target;
27941
- model.value = el.value ? +el.value : undefined;
27996
+ function onModelUpdate(v) {
27997
+ model.value = v ? +v : undefined;
27942
27998
  }
27943
27999
  useRender(() => {
27944
- const fieldProps = filterFieldProps(props);
27945
- const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
27946
28000
  const {
27947
28001
  modelValue: _,
27948
- ...inputProps
27949
- } = VInput.filterProps(props);
28002
+ ...textFieldProps
28003
+ } = VTextField.filterProps(props);
27950
28004
  function controlNode() {
27951
28005
  const defaultHeight = controlVariant.value === 'stacked' ? 'auto' : '100%';
27952
28006
  return vue.createVNode("div", {
@@ -27959,6 +28013,7 @@
27959
28013
  "name": "decrement-btn",
27960
28014
  "icon": "$expand",
27961
28015
  "size": "small",
28016
+ "tabindex": "-1",
27962
28017
  "onClick": onClickDown
27963
28018
  }, null) : vue.createVNode(VDefaultsProvider, {
27964
28019
  "key": "decrement-defaults",
@@ -27983,7 +28038,8 @@
27983
28038
  "name": "increment-btn",
27984
28039
  "icon": "$collapse",
27985
28040
  "onClick": onClickUp,
27986
- "size": "small"
28041
+ "size": "small",
28042
+ "tabindex": "-1"
27987
28043
  }, null) : vue.createVNode(VDefaultsProvider, {
27988
28044
  "key": "increment-defaults",
27989
28045
  "defaults": {
@@ -28004,7 +28060,36 @@
28004
28060
  "vertical": true
28005
28061
  }, null) : undefined;
28006
28062
  }
28007
- return vue.createVNode(VInput, vue.mergeProps({
28063
+ const appendInnerControl = controlVariant.value === 'split' ? vue.createVNode("div", {
28064
+ "class": "v-number-input__control"
28065
+ }, [vue.createVNode(VDivider, {
28066
+ "vertical": true
28067
+ }, null), vue.createVNode(VBtn, {
28068
+ "flat": true,
28069
+ "height": "100%",
28070
+ "icon": "$plus",
28071
+ "tile": true,
28072
+ "tabindex": "-1",
28073
+ "onClick": onClickUp
28074
+ }, null)]) : !props.reverse ? vue.createVNode(vue.Fragment, null, [dividerNode(), controlNode()]) : undefined;
28075
+ const hasAppendInner = slots['append-inner'] || appendInnerControl;
28076
+ const prependInnerControl = controlVariant.value === 'split' ? vue.createVNode("div", {
28077
+ "class": "v-number-input__control"
28078
+ }, [vue.createVNode(VBtn, {
28079
+ "flat": true,
28080
+ "height": "100%",
28081
+ "icon": "$minus",
28082
+ "tile": true,
28083
+ "tabindex": "-1",
28084
+ "onClick": onClickDown
28085
+ }, null), vue.createVNode(VDivider, {
28086
+ "vertical": true
28087
+ }, null)]) : props.reverse ? vue.createVNode(vue.Fragment, null, [controlNode(), dividerNode()]) : undefined;
28088
+ const hasPrependInner = slots['prepend-inner'] || prependInnerControl;
28089
+ return vue.createVNode(VTextField, vue.mergeProps({
28090
+ "modelValue": model.value,
28091
+ "onUpdate:modelValue": onModelUpdate,
28092
+ "onKeydown": onKeydown,
28008
28093
  "class": ['v-number-input', {
28009
28094
  'v-number-input--default': controlVariant.value === 'default',
28010
28095
  'v-number-input--hide-input': props.hideInput,
@@ -28013,59 +28098,281 @@
28013
28098
  'v-number-input--split': controlVariant.value === 'split',
28014
28099
  'v-number-input--stacked': controlVariant.value === 'stacked'
28015
28100
  }, props.class]
28016
- }, rootAttrs, inputProps, {
28017
- "focused": isFocused.value,
28101
+ }, textFieldProps, {
28018
28102
  "style": props.style
28019
28103
  }), {
28020
28104
  ...slots,
28021
- default: () => vue.createVNode(VField, vue.mergeProps(fieldProps, {
28022
- "active": true,
28023
- "focused": isFocused.value
28024
- }), {
28025
- ...slots,
28026
- default: _ref2 => {
28105
+ 'append-inner': hasAppendInner ? function () {
28106
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
28107
+ args[_key] = arguments[_key];
28108
+ }
28109
+ return vue.createVNode(vue.Fragment, null, [slots['append-inner']?.(...args), appendInnerControl]);
28110
+ } : undefined,
28111
+ 'prepend-inner': hasPrependInner ? function () {
28112
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
28113
+ args[_key2] = arguments[_key2];
28114
+ }
28115
+ return vue.createVNode(vue.Fragment, null, [prependInnerControl, slots['prepend-inner']?.(...args)]);
28116
+ } : undefined
28117
+ });
28118
+ });
28119
+ }
28120
+ });
28121
+
28122
+ // Types
28123
+
28124
+ const makeVStepperVerticalActionsProps = propsFactory({
28125
+ ...makeVStepperActionsProps()
28126
+ }, 'VStepperActions');
28127
+ const VStepperVerticalActions = genericComponent()({
28128
+ name: 'VStepperVerticalActions',
28129
+ props: makeVStepperVerticalActionsProps(),
28130
+ emits: {
28131
+ 'click:prev': () => true,
28132
+ 'click:next': () => true
28133
+ },
28134
+ setup(props, _ref) {
28135
+ let {
28136
+ emit,
28137
+ slots
28138
+ } = _ref;
28139
+ function onClickPrev() {
28140
+ emit('click:prev');
28141
+ }
28142
+ function onClickNext() {
28143
+ emit('click:next');
28144
+ }
28145
+ useRender(() => {
28146
+ const stepperActionsProps = VStepperActions.filterProps(props);
28147
+ return vue.createVNode(VStepperActions, vue.mergeProps({
28148
+ "class": "v-stepper-vertical-actions"
28149
+ }, stepperActionsProps, {
28150
+ "onClick:prev": onClickPrev,
28151
+ "onClick:next": onClickNext
28152
+ }), slots);
28153
+ });
28154
+ return {};
28155
+ }
28156
+ });
28157
+
28158
+ // Types
28159
+
28160
+ const makeVStepperVerticalItemProps = propsFactory({
28161
+ hideActions: Boolean,
28162
+ ...makeStepperItemProps(),
28163
+ ...omit(makeVExpansionPanelProps({
28164
+ expandIcon: '',
28165
+ collapseIcon: ''
28166
+ }), ['hideActions'])
28167
+ }, 'VStepperVerticalItem');
28168
+ const VStepperVerticalItem = genericComponent()({
28169
+ name: 'VStepperVerticalItem',
28170
+ props: makeVStepperVerticalItemProps(),
28171
+ emits: {
28172
+ 'click:next': () => true,
28173
+ 'click:prev': () => true,
28174
+ 'click:finish': () => true
28175
+ },
28176
+ setup(props, _ref) {
28177
+ let {
28178
+ emit,
28179
+ slots
28180
+ } = _ref;
28181
+ const vExpansionPanelRef = vue.ref();
28182
+ const step = vue.computed(() => !isNaN(parseInt(props.value)) ? Number(props.value) : props.value);
28183
+ const groupItem = vue.computed(() => vExpansionPanelRef.value?.groupItem);
28184
+ const isSelected = vue.computed(() => groupItem.value?.isSelected.value ?? false);
28185
+ const isValid = vue.computed(() => isSelected.value ? props.rules.every(handler => handler() === true) : null);
28186
+ const canEdit = vue.computed(() => !props.disabled && props.editable);
28187
+ const hasError = vue.computed(() => props.error || isSelected.value && !isValid.value);
28188
+ const hasCompleted = vue.computed(() => props.complete || props.rules.length > 0 && isValid.value === true);
28189
+ const disabled = vue.computed(() => {
28190
+ if (props.disabled) return props.disabled;
28191
+ if (groupItem.value?.isFirst.value) return 'prev';
28192
+ return false;
28193
+ });
28194
+ const icon = vue.computed(() => {
28195
+ if (hasError.value) return props.errorIcon;
28196
+ if (hasCompleted.value) return props.completeIcon;
28197
+ if (groupItem.value?.isSelected.value && props.editable) return props.editIcon;
28198
+ return props.icon;
28199
+ });
28200
+ const slotProps = vue.computed(() => ({
28201
+ canEdit: canEdit.value,
28202
+ hasError: hasError.value,
28203
+ hasCompleted: hasCompleted.value,
28204
+ title: props.title,
28205
+ subtitle: props.subtitle,
28206
+ step: step.value,
28207
+ value: props.value
28208
+ }));
28209
+ const actionProps = vue.computed(() => ({
28210
+ ...slotProps.value,
28211
+ prev: onClickPrev,
28212
+ next: onClickNext
28213
+ }));
28214
+ function onClickNext() {
28215
+ emit('click:next');
28216
+ if (groupItem.value?.isLast.value) return;
28217
+ groupItem.value.group.next();
28218
+ }
28219
+ function onClickPrev() {
28220
+ emit('click:prev');
28221
+ groupItem.value.group.prev();
28222
+ }
28223
+ useRender(() => {
28224
+ const hasColor = (hasCompleted.value || groupItem.value?.isSelected.value) && !hasError.value && !props.disabled;
28225
+ const hasActions = !props.hideActions || !!slots.actions;
28226
+ const expansionPanelProps = VExpansionPanel.filterProps(props);
28227
+ return vue.createVNode(VExpansionPanel, vue.mergeProps({
28228
+ "_as": "VStepperVerticalItem",
28229
+ "ref": vExpansionPanelRef
28230
+ }, expansionPanelProps, {
28231
+ "class": ['v-stepper-vertical-item', {
28232
+ 'v-stepper-vertical-item--complete': hasCompleted.value,
28233
+ 'v-stepper-vertical-item--disabled': props.disabled,
28234
+ 'v-stepper-vertical-item--editable': canEdit.value,
28235
+ 'v-stepper-vertical-item--error': hasError.value
28236
+ }, props.class],
28237
+ "readonly": !props.editable,
28238
+ "style": props.style,
28239
+ "color": "",
28240
+ "hide-actions": false,
28241
+ "value": step.value
28242
+ }), {
28243
+ title: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(VAvatar, {
28244
+ "key": "stepper-avatar",
28245
+ "class": "v-stepper-vertical-item__avatar",
28246
+ "color": hasColor ? props.color : undefined,
28247
+ "size": 24,
28248
+ "start": true
28249
+ }, {
28250
+ default: () => [slots.icon?.(slotProps.value) ?? (icon.value ? vue.createVNode(VIcon, {
28251
+ "icon": icon.value
28252
+ }, null) : step.value)]
28253
+ }), vue.createVNode("div", null, [vue.createVNode("div", {
28254
+ "class": "v-stepper-vertical-item__title"
28255
+ }, [slots.title?.(slotProps.value) ?? props.title]), vue.createVNode("div", {
28256
+ "class": "v-stepper-vertical-item__subtitle"
28257
+ }, [slots.subtitle?.(slotProps.value) ?? props.subtitle])])]),
28258
+ text: () => vue.createVNode(vue.Fragment, null, [slots.default?.(slotProps.value) ?? props.text, hasActions && vue.createVNode(VDefaultsProvider, {
28259
+ "defaults": {
28260
+ VStepperVerticalActions: {
28261
+ disabled: disabled.value,
28262
+ finish: groupItem.value?.isLast.value
28263
+ }
28264
+ }
28265
+ }, {
28266
+ default: () => [slots.actions?.(actionProps.value) ?? vue.createVNode(VStepperVerticalActions, {
28267
+ "onClick:next": onClickNext,
28268
+ "onClick:prev": onClickPrev
28269
+ }, {
28270
+ prev: slots.prev ? () => slots.prev?.(actionProps.value) : undefined,
28271
+ next: slots.next ? () => slots.next?.(actionProps.value) : undefined
28272
+ })]
28273
+ })])
28274
+ });
28275
+ });
28276
+ return {};
28277
+ }
28278
+ });
28279
+
28280
+ // Types
28281
+
28282
+ const makeVStepperVerticalProps = propsFactory({
28283
+ prevText: {
28284
+ type: String,
28285
+ default: '$vuetify.stepper.prev'
28286
+ },
28287
+ nextText: {
28288
+ type: String,
28289
+ default: '$vuetify.stepper.next'
28290
+ },
28291
+ ...makeStepperProps(),
28292
+ ...omit(makeVExpansionPanelsProps({
28293
+ mandatory: 'force',
28294
+ variant: 'accordion'
28295
+ }), ['static'])
28296
+ }, 'VStepperVertical');
28297
+ const VStepperVertical = genericComponent()({
28298
+ name: 'VStepperVertical',
28299
+ props: makeVStepperVerticalProps(),
28300
+ emits: {
28301
+ 'update:modelValue': val => true
28302
+ },
28303
+ setup(props, _ref) {
28304
+ let {
28305
+ slots
28306
+ } = _ref;
28307
+ const vExpansionPanelsRef = vue.ref();
28308
+ const {
28309
+ color,
28310
+ editable,
28311
+ prevText,
28312
+ nextText,
28313
+ hideActions
28314
+ } = vue.toRefs(props);
28315
+ const model = useProxiedModel(props, 'modelValue');
28316
+ const items = vue.computed(() => props.items.map((item, index) => {
28317
+ const title = getPropertyFromItem(item, props.itemTitle, item);
28318
+ const value = getPropertyFromItem(item, props.itemValue, index + 1);
28319
+ return {
28320
+ title,
28321
+ value,
28322
+ raw: item
28323
+ };
28324
+ }));
28325
+ provideDefaults({
28326
+ VStepperVerticalItem: {
28327
+ color,
28328
+ editable,
28329
+ prevText,
28330
+ nextText,
28331
+ hideActions,
28332
+ static: true
28333
+ },
28334
+ VStepperActions: {
28335
+ color
28336
+ }
28337
+ });
28338
+ useRender(() => {
28339
+ const expansionPanelProps = VExpansionPanels.filterProps(props);
28340
+ return vue.createVNode(VExpansionPanels, vue.mergeProps(expansionPanelProps, {
28341
+ "modelValue": model.value,
28342
+ "onUpdate:modelValue": $event => model.value = $event,
28343
+ "ref": vExpansionPanelsRef,
28344
+ "class": ['v-stepper', {
28345
+ 'v-stepper--alt-labels': props.altLabels,
28346
+ 'v-stepper--flat': props.flat,
28347
+ 'v-stepper--non-linear': props.nonLinear,
28348
+ 'v-stepper--mobile': props.mobile
28349
+ }, props.class],
28350
+ "style": props.style
28351
+ }), {
28352
+ ...slots,
28353
+ default: _ref2 => {
28354
+ let {
28355
+ prev,
28356
+ next
28357
+ } = _ref2;
28358
+ return vue.createVNode(vue.Fragment, null, [items.value.map(_ref3 => {
28027
28359
  let {
28028
- props: {
28029
- class: fieldClass,
28030
- ...slotProps
28031
- }
28032
- } = _ref2;
28033
- return vue.createVNode("input", vue.mergeProps({
28034
- "ref": inputRef,
28035
- "type": "text",
28036
- "value": model.value,
28037
- "onInput": onInput,
28038
- "onKeydown": onKeydown,
28039
- "class": fieldClass,
28040
- "onFocus": onFocus,
28041
- "onBlur": blur
28042
- }, inputAttrs), null);
28043
- },
28044
- 'append-inner': controlVariant.value === 'split' ? () => vue.createVNode("div", {
28045
- "class": "v-number-input__control"
28046
- }, [vue.createVNode(VDivider, {
28047
- "vertical": true
28048
- }, null), vue.createVNode(VBtn, {
28049
- "flat": true,
28050
- "height": "100%",
28051
- "icon": "$plus",
28052
- "tile": true,
28053
- "onClick": onClickUp
28054
- }, null)]) : !props.reverse ? () => vue.createVNode(vue.Fragment, null, [dividerNode(), controlNode()]) : undefined,
28055
- 'prepend-inner': controlVariant.value === 'split' ? () => vue.createVNode("div", {
28056
- "class": "v-number-input__control"
28057
- }, [vue.createVNode(VBtn, {
28058
- "flat": true,
28059
- "height": "100%",
28060
- "icon": "$minus",
28061
- "tile": true,
28062
- "onClick": onClickDown
28063
- }, null), vue.createVNode(VDivider, {
28064
- "vertical": true
28065
- }, null)]) : props.reverse ? () => vue.createVNode(vue.Fragment, null, [controlNode(), dividerNode()]) : undefined
28066
- })
28360
+ raw,
28361
+ ...item
28362
+ } = _ref3;
28363
+ return vue.createVNode(VStepperVerticalItem, item, {
28364
+ ...slots,
28365
+ default: slots[`item.${item.value}`]
28366
+ });
28367
+ }), slots.default?.({
28368
+ prev,
28369
+ next,
28370
+ step: model.value
28371
+ })]);
28372
+ }
28067
28373
  });
28068
28374
  });
28375
+ return {};
28069
28376
  }
28070
28377
  });
28071
28378
 
@@ -29429,6 +29736,9 @@
29429
29736
  VStepperActions: VStepperActions,
29430
29737
  VStepperHeader: VStepperHeader,
29431
29738
  VStepperItem: VStepperItem,
29739
+ VStepperVertical: VStepperVertical,
29740
+ VStepperVerticalActions: VStepperVerticalActions,
29741
+ VStepperVerticalItem: VStepperVerticalItem,
29432
29742
  VStepperWindow: VStepperWindow,
29433
29743
  VStepperWindowItem: VStepperWindowItem,
29434
29744
  VSvgIcon: VSvgIcon,
@@ -29766,7 +30076,7 @@
29766
30076
  goTo
29767
30077
  };
29768
30078
  }
29769
- const version$1 = "3.6.3";
30079
+ const version$1 = "3.6.5";
29770
30080
  createVuetify$1.version = version$1;
29771
30081
 
29772
30082
  // Vue's inject() can only be used in setup
@@ -30019,7 +30329,7 @@
30019
30329
 
30020
30330
  /* eslint-disable local-rules/sort-imports */
30021
30331
 
30022
- const version = "3.6.3";
30332
+ const version = "3.6.5";
30023
30333
 
30024
30334
  /* eslint-disable local-rules/sort-imports */
30025
30335