@vuetify/nightly 3.4.0-alpha.1-dev.2023-10-21 → 3.4.0-alpha.1-dev.2023-10-26

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 (189) hide show
  1. package/CHANGELOG.md +6 -3
  2. package/dist/_component-variables-labs.sass +1 -4
  3. package/dist/_component-variables.sass +3 -0
  4. package/dist/json/attributes.json +26 -26
  5. package/dist/json/importMap-labs.json +20 -52
  6. package/dist/json/importMap.json +56 -24
  7. package/dist/json/web-types.json +30 -30
  8. package/dist/vuetify-labs.css +725 -724
  9. package/dist/vuetify-labs.d.ts +41344 -36620
  10. package/dist/vuetify-labs.esm.js +5358 -5336
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +5357 -5335
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.css +385 -13
  15. package/dist/vuetify.d.ts +19744 -12997
  16. package/dist/vuetify.esm.js +735 -145
  17. package/dist/vuetify.esm.js.map +1 -1
  18. package/dist/vuetify.js +734 -144
  19. package/dist/vuetify.js.map +1 -1
  20. package/dist/vuetify.min.css +2 -2
  21. package/dist/vuetify.min.js +808 -779
  22. package/dist/vuetify.min.js.map +1 -1
  23. package/lib/components/VAlert/index.d.mts +114 -106
  24. package/lib/components/VApp/index.d.mts +24 -47
  25. package/lib/components/VAppBar/index.d.mts +219 -175
  26. package/lib/components/VAutocomplete/VAutocomplete.mjs +13 -10
  27. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  28. package/lib/components/VAutocomplete/index.d.mts +1203 -551
  29. package/lib/components/VAvatar/index.d.mts +45 -53
  30. package/lib/components/VBadge/index.d.mts +66 -58
  31. package/lib/components/VBanner/index.d.mts +106 -146
  32. package/lib/components/VBottomNavigation/index.d.mts +72 -63
  33. package/lib/{labs → components}/VBottomSheet/VBottomSheet.mjs +1 -1
  34. package/lib/components/VBottomSheet/VBottomSheet.mjs.map +1 -0
  35. package/lib/{labs → components}/VBottomSheet/index.d.mts +153 -83
  36. package/lib/components/VBottomSheet/index.mjs.map +1 -0
  37. package/lib/components/VBreadcrumbs/index.d.mts +89 -147
  38. package/lib/components/VBtn/index.d.mts +107 -66
  39. package/lib/components/VBtnGroup/index.d.mts +38 -51
  40. package/lib/components/VBtnToggle/index.d.mts +53 -55
  41. package/lib/components/VCard/index.d.mts +238 -298
  42. package/lib/components/VCarousel/index.d.mts +251 -131
  43. package/lib/components/VCheckbox/index.d.mts +259 -146
  44. package/lib/components/VChip/index.d.mts +157 -76
  45. package/lib/components/VChipGroup/index.d.mts +76 -55
  46. package/lib/components/VCode/index.d.mts +21 -46
  47. package/lib/components/VColorPicker/index.d.mts +112 -61
  48. package/lib/components/VCombobox/VCombobox.mjs +13 -10
  49. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  50. package/lib/components/VCombobox/index.d.mts +1203 -551
  51. package/lib/components/VCounter/index.d.mts +45 -57
  52. package/lib/components/VDefaultsProvider/index.d.mts +24 -49
  53. package/lib/components/VDialog/index.d.mts +583 -329
  54. package/lib/components/VDivider/index.d.mts +30 -49
  55. package/lib/components/VExpansionPanel/index.d.mts +188 -212
  56. package/lib/components/VField/index.d.mts +88 -105
  57. package/lib/components/VFileInput/index.d.mts +472 -287
  58. package/lib/components/VFooter/index.d.mts +42 -52
  59. package/lib/components/VForm/index.d.mts +149 -51
  60. package/lib/components/VGrid/index.d.mts +146 -196
  61. package/lib/components/VHover/index.d.mts +37 -49
  62. package/lib/components/VIcon/index.d.mts +79 -234
  63. package/lib/components/VImg/index.d.mts +80 -61
  64. package/lib/components/VInput/index.d.mts +90 -66
  65. package/lib/components/VItemGroup/index.d.mts +115 -99
  66. package/lib/components/VKbd/index.d.mts +21 -46
  67. package/lib/components/VLabel/index.d.mts +24 -47
  68. package/lib/components/VLayout/index.d.mts +55 -96
  69. package/lib/components/VLazy/index.d.mts +43 -50
  70. package/lib/components/VList/index.d.mts +403 -468
  71. package/lib/components/VLocaleProvider/index.d.mts +24 -46
  72. package/lib/components/VMain/index.d.mts +24 -47
  73. package/lib/components/VMenu/index.d.mts +573 -324
  74. package/lib/components/VMessages/index.d.mts +41 -49
  75. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +1 -0
  76. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +1 -0
  77. package/lib/components/VNavigationDrawer/index.d.mts +95 -67
  78. package/lib/components/VOverlay/index.d.mts +138 -76
  79. package/lib/components/VPagination/index.d.mts +114 -73
  80. package/lib/components/VParallax/index.d.mts +31 -47
  81. package/lib/components/VProgressCircular/index.d.mts +48 -53
  82. package/lib/components/VProgressLinear/index.d.mts +84 -63
  83. package/lib/components/VRadio/index.d.mts +93 -61
  84. package/lib/components/VRadioGroup/index.d.mts +130 -77
  85. package/lib/components/VRangeSlider/index.d.mts +169 -86
  86. package/lib/components/VRating/index.d.mts +75 -62
  87. package/lib/components/VResponsive/index.d.mts +33 -47
  88. package/lib/components/VSelect/VSelect.mjs +13 -10
  89. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  90. package/lib/components/VSelect/index.d.mts +1191 -546
  91. package/lib/components/VSelectionControl/index.d.mts +48 -53
  92. package/lib/components/VSelectionControlGroup/index.d.mts +58 -57
  93. package/lib/components/VSheet/index.d.mts +37 -48
  94. package/lib/components/VSkeletonLoader/VSkeletonLoader.mjs.map +1 -0
  95. package/lib/{labs → components}/VSkeletonLoader/index.d.mts +36 -51
  96. package/lib/components/VSkeletonLoader/index.mjs.map +1 -0
  97. package/lib/components/VSlideGroup/index.d.mts +106 -105
  98. package/lib/components/VSlider/index.d.mts +166 -85
  99. package/lib/components/VSnackbar/index.d.mts +572 -324
  100. package/lib/components/VStepper/VStepper.mjs +137 -98
  101. package/lib/components/VStepper/VStepper.mjs.map +1 -1
  102. package/lib/components/VStepper/VStepper.sass +38 -198
  103. package/lib/{labs → components}/VStepper/VStepperActions.mjs +2 -2
  104. package/lib/components/VStepper/VStepperActions.mjs.map +1 -0
  105. package/lib/components/VStepper/VStepperHeader.mjs.map +1 -0
  106. package/lib/{labs → components}/VStepper/VStepperItem.mjs +2 -2
  107. package/lib/components/VStepper/VStepperItem.mjs.map +1 -0
  108. package/lib/{labs → components}/VStepper/VStepperWindow.mjs +1 -1
  109. package/lib/components/VStepper/VStepperWindow.mjs.map +1 -0
  110. package/lib/{labs → components}/VStepper/VStepperWindowItem.mjs +1 -1
  111. package/lib/components/VStepper/VStepperWindowItem.mjs.map +1 -0
  112. package/lib/components/VStepper/_variables.scss +21 -31
  113. package/lib/{labs → components}/VStepper/index.d.mts +368 -340
  114. package/lib/components/VStepper/index.mjs +6 -17
  115. package/lib/components/VStepper/index.mjs.map +1 -1
  116. package/lib/components/VSwitch/index.d.mts +168 -86
  117. package/lib/components/VSystemBar/index.d.mts +39 -51
  118. package/lib/components/VTable/index.d.mts +45 -51
  119. package/lib/components/VTabs/index.d.mts +177 -132
  120. package/lib/components/VTextField/index.d.mts +665 -470
  121. package/lib/components/VTextarea/index.d.mts +469 -297
  122. package/lib/components/VThemeProvider/index.d.mts +26 -48
  123. package/lib/components/VTimeline/index.d.mts +98 -106
  124. package/lib/components/VToolbar/index.d.mts +119 -150
  125. package/lib/components/VTooltip/index.d.mts +565 -321
  126. package/lib/components/VValidation/index.d.mts +108 -62
  127. package/lib/components/VVirtualScroll/index.d.mts +18 -46
  128. package/lib/components/VWindow/index.d.mts +130 -110
  129. package/lib/components/index.d.mts +19539 -12808
  130. package/lib/components/index.mjs +4 -2
  131. package/lib/components/index.mjs.map +1 -1
  132. package/lib/components/transitions/index.d.mts +455 -819
  133. package/lib/composables/color.mjs +2 -2
  134. package/lib/composables/color.mjs.map +1 -1
  135. package/lib/entry-bundler.mjs +1 -1
  136. package/lib/framework.mjs +1 -1
  137. package/lib/index.d.mts +22 -22
  138. package/lib/labs/VDataIterator/index.d.mts +112 -75
  139. package/lib/labs/VDataTable/index.d.mts +1456 -530
  140. package/lib/labs/VDateInput/index.d.mts +260 -157
  141. package/lib/labs/VDatePicker/index.d.mts +1100 -889
  142. package/lib/labs/VDateRangePicker/index.d.mts +207 -129
  143. package/lib/labs/VInfiniteScroll/index.d.mts +59 -54
  144. package/lib/labs/VOtpInput/index.d.mts +80 -64
  145. package/lib/labs/VPicker/index.d.mts +74 -97
  146. package/lib/labs/components.d.mts +7777 -9883
  147. package/lib/labs/components.mjs +0 -3
  148. package/lib/labs/components.mjs.map +1 -1
  149. package/lib/labs/date/adapters/vuetify.mjs +6 -3
  150. package/lib/labs/date/adapters/vuetify.mjs.map +1 -1
  151. package/lib/locale/fr.mjs +19 -19
  152. package/lib/locale/fr.mjs.map +1 -1
  153. package/lib/util/colorUtils.mjs +3 -0
  154. package/lib/util/colorUtils.mjs.map +1 -1
  155. package/lib/util/helpers.mjs +8 -1
  156. package/lib/util/helpers.mjs.map +1 -1
  157. package/package.json +1 -1
  158. package/lib/components/VStepper/VStepperContent.mjs +0 -114
  159. package/lib/components/VStepper/VStepperContent.mjs.map +0 -1
  160. package/lib/components/VStepper/VStepperStep.mjs +0 -134
  161. package/lib/components/VStepper/VStepperStep.mjs.map +0 -1
  162. package/lib/labs/VBottomSheet/VBottomSheet.mjs.map +0 -1
  163. package/lib/labs/VBottomSheet/index.mjs.map +0 -1
  164. package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs.map +0 -1
  165. package/lib/labs/VSkeletonLoader/index.mjs.map +0 -1
  166. package/lib/labs/VStepper/VStepper.mjs +0 -149
  167. package/lib/labs/VStepper/VStepper.mjs.map +0 -1
  168. package/lib/labs/VStepper/VStepper.sass +0 -53
  169. package/lib/labs/VStepper/VStepperActions.mjs.map +0 -1
  170. package/lib/labs/VStepper/VStepperHeader.mjs.map +0 -1
  171. package/lib/labs/VStepper/VStepperItem.mjs.map +0 -1
  172. package/lib/labs/VStepper/VStepperWindow.mjs.map +0 -1
  173. package/lib/labs/VStepper/VStepperWindowItem.mjs.map +0 -1
  174. package/lib/labs/VStepper/_variables.scss +0 -27
  175. package/lib/labs/VStepper/index.mjs +0 -7
  176. package/lib/labs/VStepper/index.mjs.map +0 -1
  177. /package/lib/{labs → components}/VBottomSheet/VBottomSheet.css +0 -0
  178. /package/lib/{labs → components}/VBottomSheet/VBottomSheet.sass +0 -0
  179. /package/lib/{labs → components}/VBottomSheet/_variables.scss +0 -0
  180. /package/lib/{labs → components}/VBottomSheet/index.mjs +0 -0
  181. /package/lib/{labs → components}/VSkeletonLoader/VSkeletonLoader.css +0 -0
  182. /package/lib/{labs → components}/VSkeletonLoader/VSkeletonLoader.mjs +0 -0
  183. /package/lib/{labs → components}/VSkeletonLoader/VSkeletonLoader.sass +0 -0
  184. /package/lib/{labs → components}/VSkeletonLoader/_variables.scss +0 -0
  185. /package/lib/{labs → components}/VSkeletonLoader/index.mjs +0 -0
  186. /package/lib/{labs → components}/VStepper/VStepper.css +0 -0
  187. /package/lib/{labs → components}/VStepper/VStepperHeader.mjs +0 -0
  188. /package/lib/{labs → components}/VStepper/VStepperItem.css +0 -0
  189. /package/lib/{labs → components}/VStepper/VStepperItem.sass +0 -0
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.4.0-alpha.1-dev.2023-10-21
2
+ * Vuetify v3.4.0-alpha.1-dev.2023-10-26
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -238,6 +238,11 @@
238
238
  exclude.forEach(prop => delete clone[prop]);
239
239
  return clone;
240
240
  }
241
+ function only(obj, include) {
242
+ const clone = {};
243
+ include.forEach(prop => clone[prop] = obj[prop]);
244
+ return clone;
245
+ }
241
246
  const onRE = /^on[^a-z]/;
242
247
  const isOn = key => onRE.test(key);
243
248
  const bubblingEvents = ['onAfterscriptexecute', 'onAnimationcancel', 'onAnimationend', 'onAnimationiteration', 'onAnimationstart', 'onAuxclick', 'onBeforeinput', 'onBeforescriptexecute', 'onChange', 'onClick', 'onCompositionend', 'onCompositionstart', 'onCompositionupdate', 'onContextmenu', 'onCopy', 'onCut', 'onDblclick', 'onFocusin', 'onFocusout', 'onFullscreenchange', 'onFullscreenerror', 'onGesturechange', 'onGestureend', 'onGesturestart', 'onGotpointercapture', 'onInput', 'onKeydown', 'onKeypress', 'onKeyup', 'onLostpointercapture', 'onMousedown', 'onMousemove', 'onMouseout', 'onMouseover', 'onMouseup', 'onMousewheel', 'onPaste', 'onPointercancel', 'onPointerdown', 'onPointerenter', 'onPointerleave', 'onPointermove', 'onPointerout', 'onPointerover', 'onPointerup', 'onReset', 'onSelect', 'onSubmit', 'onTouchcancel', 'onTouchend', 'onTouchmove', 'onTouchstart', 'onTransitioncancel', 'onTransitionend', 'onTransitionrun', 'onTransitionstart', 'onWheel'];
@@ -478,6 +483,13 @@
478
483
  return null;
479
484
  }
480
485
  }
486
+ function ensureValidVNode(vnodes) {
487
+ return vnodes.some(child => {
488
+ if (!vue.isVNode(child)) return true;
489
+ if (child.type === vue.Comment) return false;
490
+ return child.type !== vue.Fragment || ensureValidVNode(child.children);
491
+ }) ? vnodes : null;
492
+ }
481
493
 
482
494
  // Utilities
483
495
  const block = ['top', 'bottom'];
@@ -870,6 +882,9 @@
870
882
  function isCssColor(color) {
871
883
  return !!color && /^(#|var\(--|(rgb|hsl)a?\()/.test(color);
872
884
  }
885
+ function isParsableColor(color) {
886
+ return isCssColor(color) && !/^((rgb|hsl)a?\()?var\(--/.test(color);
887
+ }
873
888
  const cssColorRe = /^(?<fn>(?:rgb|hsl)a?)\((?<values>.+)\)/;
874
889
  const mappers = {
875
890
  rgb: (r, g, b, a) => ({
@@ -3306,7 +3321,7 @@
3306
3321
  if (colors.value.background) {
3307
3322
  if (isCssColor(colors.value.background)) {
3308
3323
  styles.backgroundColor = colors.value.background;
3309
- if (!colors.value.text) {
3324
+ if (!colors.value.text && isParsableColor(colors.value.background)) {
3310
3325
  const backgroundColor = parseColor(colors.value.background);
3311
3326
  if (backgroundColor.a == null || backgroundColor.a === 1) {
3312
3327
  const textColor = getForeground(backgroundColor);
@@ -11254,6 +11269,16 @@
11254
11269
  modelValue: true,
11255
11270
  'onUpdate:modelValue': undefined
11256
11271
  };
11272
+ const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
11273
+ const slotContent = hasSlot ? ensureValidVNode(hasChips ? slots.chip({
11274
+ item,
11275
+ index,
11276
+ props: slotProps
11277
+ }) : slots.selection({
11278
+ item,
11279
+ index
11280
+ })) : undefined;
11281
+ if (hasSlot && !slotContent) return undefined;
11257
11282
  return vue.createVNode("div", {
11258
11283
  "key": item.value,
11259
11284
  "class": "v-select__selection"
@@ -11273,15 +11298,8 @@
11273
11298
  }
11274
11299
  }
11275
11300
  }, {
11276
- default: () => [slots.chip?.({
11277
- item,
11278
- index,
11279
- props: slotProps
11280
- })]
11281
- }) : slots.selection?.({
11282
- item,
11283
- index
11284
- }) ?? vue.createVNode("span", {
11301
+ default: () => [slotContent]
11302
+ }) : slotContent ?? vue.createVNode("span", {
11285
11303
  "class": "v-select__selection-text"
11286
11304
  }, [item.title, props.multiple && index < model.value.length - 1 && vue.createVNode("span", {
11287
11305
  "class": "v-select__selection-comma"
@@ -11782,6 +11800,16 @@
11782
11800
  modelValue: true,
11783
11801
  'onUpdate:modelValue': undefined
11784
11802
  };
11803
+ const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
11804
+ const slotContent = hasSlot ? ensureValidVNode(hasChips ? slots.chip({
11805
+ item,
11806
+ index,
11807
+ props: slotProps
11808
+ }) : slots.selection({
11809
+ item,
11810
+ index
11811
+ })) : undefined;
11812
+ if (hasSlot && !slotContent) return undefined;
11785
11813
  return vue.createVNode("div", {
11786
11814
  "key": item.value,
11787
11815
  "class": ['v-autocomplete__selection', index === selectionIndex.value && ['v-autocomplete__selection--selected', textColorClasses.value]],
@@ -11802,15 +11830,8 @@
11802
11830
  }
11803
11831
  }
11804
11832
  }, {
11805
- default: () => [slots.chip?.({
11806
- item,
11807
- index,
11808
- props: slotProps
11809
- })]
11810
- }) : slots.selection?.({
11811
- item,
11812
- index
11813
- }) ?? vue.createVNode("span", {
11833
+ default: () => [slotContent]
11834
+ }) : slotContent ?? vue.createVNode("span", {
11814
11835
  "class": "v-autocomplete__selection-text"
11815
11836
  }, [item.title, props.multiple && index < model.value.length - 1 && vue.createVNode("span", {
11816
11837
  "class": "v-autocomplete__selection-comma"
@@ -12195,6 +12216,151 @@
12195
12216
  }
12196
12217
  });
12197
12218
 
12219
+ // Types
12220
+
12221
+ const makeVDialogProps = propsFactory({
12222
+ fullscreen: Boolean,
12223
+ retainFocus: {
12224
+ type: Boolean,
12225
+ default: true
12226
+ },
12227
+ scrollable: Boolean,
12228
+ ...makeVOverlayProps({
12229
+ origin: 'center center',
12230
+ scrollStrategy: 'block',
12231
+ transition: {
12232
+ component: VDialogTransition
12233
+ },
12234
+ zIndex: 2400
12235
+ })
12236
+ }, 'VDialog');
12237
+ const VDialog = genericComponent()({
12238
+ name: 'VDialog',
12239
+ props: makeVDialogProps(),
12240
+ emits: {
12241
+ 'update:modelValue': value => true
12242
+ },
12243
+ setup(props, _ref) {
12244
+ let {
12245
+ slots
12246
+ } = _ref;
12247
+ const isActive = useProxiedModel(props, 'modelValue');
12248
+ const {
12249
+ scopeId
12250
+ } = useScopeId();
12251
+ const overlay = vue.ref();
12252
+ function onFocusin(e) {
12253
+ const before = e.relatedTarget;
12254
+ const after = e.target;
12255
+ if (before !== after && overlay.value?.contentEl &&
12256
+ // We're the topmost dialog
12257
+ overlay.value?.globalTop &&
12258
+ // It isn't the document or the dialog body
12259
+ ![document, overlay.value.contentEl].includes(after) &&
12260
+ // It isn't inside the dialog body
12261
+ !overlay.value.contentEl.contains(after)) {
12262
+ const focusable = focusableChildren(overlay.value.contentEl);
12263
+ if (!focusable.length) return;
12264
+ const firstElement = focusable[0];
12265
+ const lastElement = focusable[focusable.length - 1];
12266
+ if (before === firstElement) {
12267
+ lastElement.focus();
12268
+ } else {
12269
+ firstElement.focus();
12270
+ }
12271
+ }
12272
+ }
12273
+ if (IN_BROWSER) {
12274
+ vue.watch(() => isActive.value && props.retainFocus, val => {
12275
+ val ? document.addEventListener('focusin', onFocusin) : document.removeEventListener('focusin', onFocusin);
12276
+ }, {
12277
+ immediate: true
12278
+ });
12279
+ }
12280
+ vue.watch(isActive, async val => {
12281
+ await vue.nextTick();
12282
+ if (val) {
12283
+ overlay.value.contentEl?.focus({
12284
+ preventScroll: true
12285
+ });
12286
+ } else {
12287
+ overlay.value.activatorEl?.focus({
12288
+ preventScroll: true
12289
+ });
12290
+ }
12291
+ });
12292
+ const activatorProps = vue.computed(() => vue.mergeProps({
12293
+ 'aria-haspopup': 'dialog',
12294
+ 'aria-expanded': String(isActive.value)
12295
+ }, props.activatorProps));
12296
+ useRender(() => {
12297
+ const [overlayProps] = VOverlay.filterProps(props);
12298
+ return vue.createVNode(VOverlay, vue.mergeProps({
12299
+ "ref": overlay,
12300
+ "class": ['v-dialog', {
12301
+ 'v-dialog--fullscreen': props.fullscreen,
12302
+ 'v-dialog--scrollable': props.scrollable
12303
+ }, props.class],
12304
+ "style": props.style
12305
+ }, overlayProps, {
12306
+ "modelValue": isActive.value,
12307
+ "onUpdate:modelValue": $event => isActive.value = $event,
12308
+ "aria-modal": "true",
12309
+ "activatorProps": activatorProps.value,
12310
+ "role": "dialog"
12311
+ }, scopeId), {
12312
+ activator: slots.activator,
12313
+ default: function () {
12314
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
12315
+ args[_key] = arguments[_key];
12316
+ }
12317
+ return vue.createVNode(VDefaultsProvider, {
12318
+ "root": "VDialog"
12319
+ }, {
12320
+ default: () => [slots.default?.(...args)]
12321
+ });
12322
+ }
12323
+ });
12324
+ });
12325
+ return forwardRefs({}, overlay);
12326
+ }
12327
+ });
12328
+
12329
+ // Types
12330
+
12331
+ const makeVBottomSheetProps = propsFactory({
12332
+ inset: Boolean,
12333
+ ...makeVDialogProps({
12334
+ transition: 'bottom-sheet-transition'
12335
+ })
12336
+ }, 'VBottomSheet');
12337
+ const VBottomSheet = genericComponent()({
12338
+ name: 'VBottomSheet',
12339
+ props: makeVBottomSheetProps(),
12340
+ emits: {
12341
+ 'update:modelValue': value => true
12342
+ },
12343
+ setup(props, _ref) {
12344
+ let {
12345
+ slots
12346
+ } = _ref;
12347
+ const isActive = useProxiedModel(props, 'modelValue');
12348
+ useRender(() => {
12349
+ const [dialogProps] = VDialog.filterProps(props);
12350
+ return vue.createVNode(VDialog, vue.mergeProps(dialogProps, {
12351
+ "contentClass": ['v-bottom-sheet__content', props.contentClass],
12352
+ "modelValue": isActive.value,
12353
+ "onUpdate:modelValue": $event => isActive.value = $event,
12354
+ "class": ['v-bottom-sheet', {
12355
+ 'v-bottom-sheet--inset': props.inset
12356
+ }, props.class],
12357
+ "style": props.style
12358
+ }), slots);
12359
+ });
12360
+ return {};
12361
+ }
12362
+ });
12363
+
12198
12364
  const makeVBreadcrumbsDividerProps = propsFactory({
12199
12365
  divider: [Number, String],
12200
12366
  ...makeComponentProps()
@@ -15377,6 +15543,16 @@
15377
15543
  modelValue: true,
15378
15544
  'onUpdate:modelValue': undefined
15379
15545
  };
15546
+ const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
15547
+ const slotContent = hasSlot ? ensureValidVNode(hasChips ? slots.chip({
15548
+ item,
15549
+ index,
15550
+ props: slotProps
15551
+ }) : slots.selection({
15552
+ item,
15553
+ index
15554
+ })) : undefined;
15555
+ if (hasSlot && !slotContent) return undefined;
15380
15556
  return vue.createVNode("div", {
15381
15557
  "key": item.value,
15382
15558
  "class": ['v-combobox__selection', index === selectionIndex.value && ['v-combobox__selection--selected', textColorClasses.value]],
@@ -15397,15 +15573,8 @@
15397
15573
  }
15398
15574
  }
15399
15575
  }, {
15400
- default: () => [slots.chip?.({
15401
- item,
15402
- index,
15403
- props: slotProps
15404
- })]
15405
- }) : slots.selection?.({
15406
- item,
15407
- index
15408
- }) ?? vue.createVNode("span", {
15576
+ default: () => [slotContent]
15577
+ }) : slotContent ?? vue.createVNode("span", {
15409
15578
  "class": "v-combobox__selection-text"
15410
15579
  }, [item.title, props.multiple && index < model.value.length - 1 && vue.createVNode("span", {
15411
15580
  "class": "v-combobox__selection-comma"
@@ -15440,116 +15609,6 @@
15440
15609
 
15441
15610
  // Types
15442
15611
 
15443
- const makeVDialogProps = propsFactory({
15444
- fullscreen: Boolean,
15445
- retainFocus: {
15446
- type: Boolean,
15447
- default: true
15448
- },
15449
- scrollable: Boolean,
15450
- ...makeVOverlayProps({
15451
- origin: 'center center',
15452
- scrollStrategy: 'block',
15453
- transition: {
15454
- component: VDialogTransition
15455
- },
15456
- zIndex: 2400
15457
- })
15458
- }, 'VDialog');
15459
- const VDialog = genericComponent()({
15460
- name: 'VDialog',
15461
- props: makeVDialogProps(),
15462
- emits: {
15463
- 'update:modelValue': value => true
15464
- },
15465
- setup(props, _ref) {
15466
- let {
15467
- slots
15468
- } = _ref;
15469
- const isActive = useProxiedModel(props, 'modelValue');
15470
- const {
15471
- scopeId
15472
- } = useScopeId();
15473
- const overlay = vue.ref();
15474
- function onFocusin(e) {
15475
- const before = e.relatedTarget;
15476
- const after = e.target;
15477
- if (before !== after && overlay.value?.contentEl &&
15478
- // We're the topmost dialog
15479
- overlay.value?.globalTop &&
15480
- // It isn't the document or the dialog body
15481
- ![document, overlay.value.contentEl].includes(after) &&
15482
- // It isn't inside the dialog body
15483
- !overlay.value.contentEl.contains(after)) {
15484
- const focusable = focusableChildren(overlay.value.contentEl);
15485
- if (!focusable.length) return;
15486
- const firstElement = focusable[0];
15487
- const lastElement = focusable[focusable.length - 1];
15488
- if (before === firstElement) {
15489
- lastElement.focus();
15490
- } else {
15491
- firstElement.focus();
15492
- }
15493
- }
15494
- }
15495
- if (IN_BROWSER) {
15496
- vue.watch(() => isActive.value && props.retainFocus, val => {
15497
- val ? document.addEventListener('focusin', onFocusin) : document.removeEventListener('focusin', onFocusin);
15498
- }, {
15499
- immediate: true
15500
- });
15501
- }
15502
- vue.watch(isActive, async val => {
15503
- await vue.nextTick();
15504
- if (val) {
15505
- overlay.value.contentEl?.focus({
15506
- preventScroll: true
15507
- });
15508
- } else {
15509
- overlay.value.activatorEl?.focus({
15510
- preventScroll: true
15511
- });
15512
- }
15513
- });
15514
- const activatorProps = vue.computed(() => vue.mergeProps({
15515
- 'aria-haspopup': 'dialog',
15516
- 'aria-expanded': String(isActive.value)
15517
- }, props.activatorProps));
15518
- useRender(() => {
15519
- const [overlayProps] = VOverlay.filterProps(props);
15520
- return vue.createVNode(VOverlay, vue.mergeProps({
15521
- "ref": overlay,
15522
- "class": ['v-dialog', {
15523
- 'v-dialog--fullscreen': props.fullscreen,
15524
- 'v-dialog--scrollable': props.scrollable
15525
- }, props.class],
15526
- "style": props.style
15527
- }, overlayProps, {
15528
- "modelValue": isActive.value,
15529
- "onUpdate:modelValue": $event => isActive.value = $event,
15530
- "aria-modal": "true",
15531
- "activatorProps": activatorProps.value,
15532
- "role": "dialog"
15533
- }, scopeId), {
15534
- activator: slots.activator,
15535
- default: function () {
15536
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
15537
- args[_key] = arguments[_key];
15538
- }
15539
- return vue.createVNode(VDefaultsProvider, {
15540
- "root": "VDialog"
15541
- }, {
15542
- default: () => [slots.default?.(...args)]
15543
- });
15544
- }
15545
- });
15546
- });
15547
- return forwardRefs({}, overlay);
15548
- }
15549
- });
15550
-
15551
- // Types
15552
-
15553
15612
  const VExpansionPanelSymbol = Symbol.for('vuetify:v-expansion-panel');
15554
15613
  const allowedVariants = ['default', 'accordion', 'inset', 'popout'];
15555
15614
  const makeVExpansionPanelsProps = propsFactory({
@@ -18178,6 +18237,140 @@
18178
18237
  }
18179
18238
  });
18180
18239
 
18240
+ // Types
18241
+
18242
+ const rootTypes = {
18243
+ actions: 'button@2',
18244
+ article: 'heading, paragraph',
18245
+ avatar: 'avatar',
18246
+ button: 'button',
18247
+ card: 'image, heading',
18248
+ 'card-avatar': 'image, list-item-avatar',
18249
+ chip: 'chip',
18250
+ 'date-picker': 'list-item, heading, divider, date-picker-options, date-picker-days, actions',
18251
+ 'date-picker-options': 'text, avatar@2',
18252
+ 'date-picker-days': 'avatar@28',
18253
+ divider: 'divider',
18254
+ heading: 'heading',
18255
+ image: 'image',
18256
+ 'list-item': 'text',
18257
+ 'list-item-avatar': 'avatar, text',
18258
+ 'list-item-two-line': 'sentences',
18259
+ 'list-item-avatar-two-line': 'avatar, sentences',
18260
+ 'list-item-three-line': 'paragraph',
18261
+ 'list-item-avatar-three-line': 'avatar, paragraph',
18262
+ ossein: 'ossein',
18263
+ paragraph: 'text@3',
18264
+ sentences: 'text@2',
18265
+ subtitle: 'text',
18266
+ table: 'table-heading, table-thead, table-tbody, table-tfoot',
18267
+ 'table-heading': 'chip, text',
18268
+ 'table-thead': 'heading@6',
18269
+ 'table-tbody': 'table-row-divider@6',
18270
+ 'table-row-divider': 'table-row, divider',
18271
+ 'table-row': 'text@6',
18272
+ 'table-tfoot': 'text@2, avatar@2',
18273
+ text: 'text'
18274
+ };
18275
+ function genBone(type) {
18276
+ let children = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
18277
+ return vue.createVNode("div", {
18278
+ "class": ['v-skeleton-loader__bone', `v-skeleton-loader__${type}`]
18279
+ }, [children]);
18280
+ }
18281
+ function genBones(bone) {
18282
+ // e.g. 'text@3'
18283
+ const [type, length] = bone.split('@');
18284
+
18285
+ // Generate a length array based upon
18286
+ // value after @ in the bone string
18287
+ return Array.from({
18288
+ length
18289
+ }).map(() => genStructure(type));
18290
+ }
18291
+ function genStructure(type) {
18292
+ let children = [];
18293
+ if (!type) return children;
18294
+
18295
+ // TODO: figure out a better way to type this
18296
+ const bone = rootTypes[type];
18297
+
18298
+ // End of recursion, do nothing
18299
+ /* eslint-disable-next-line no-empty, brace-style */
18300
+ if (type === bone) ;
18301
+ // Array of values - e.g. 'heading, paragraph, text@2'
18302
+ else if (type.includes(',')) return mapBones(type);
18303
+ // Array of values - e.g. 'paragraph@4'
18304
+ else if (type.includes('@')) return genBones(type);
18305
+ // Array of values - e.g. 'card@2'
18306
+ else if (bone.includes(',')) children = mapBones(bone);
18307
+ // Array of values - e.g. 'list-item@2'
18308
+ else if (bone.includes('@')) children = genBones(bone);
18309
+ // Single value - e.g. 'card-heading'
18310
+ else if (bone) children.push(genStructure(bone));
18311
+ return [genBone(type, children)];
18312
+ }
18313
+ function mapBones(bones) {
18314
+ // Remove spaces and return array of structures
18315
+ return bones.replace(/\s/g, '').split(',').map(genStructure);
18316
+ }
18317
+ const makeVSkeletonLoaderProps = propsFactory({
18318
+ boilerplate: Boolean,
18319
+ color: String,
18320
+ loading: Boolean,
18321
+ loadingText: {
18322
+ type: String,
18323
+ default: '$vuetify.loading'
18324
+ },
18325
+ type: {
18326
+ type: [String, Array],
18327
+ default: 'ossein'
18328
+ },
18329
+ ...makeDimensionProps(),
18330
+ ...makeElevationProps(),
18331
+ ...makeThemeProps()
18332
+ }, 'VSkeletonLoader');
18333
+ const VSkeletonLoader = genericComponent()({
18334
+ name: 'VSkeletonLoader',
18335
+ props: makeVSkeletonLoaderProps(),
18336
+ setup(props, _ref) {
18337
+ let {
18338
+ slots
18339
+ } = _ref;
18340
+ const {
18341
+ backgroundColorClasses,
18342
+ backgroundColorStyles
18343
+ } = useBackgroundColor(vue.toRef(props, 'color'));
18344
+ const {
18345
+ dimensionStyles
18346
+ } = useDimension(props);
18347
+ const {
18348
+ elevationClasses
18349
+ } = useElevation(props);
18350
+ const {
18351
+ themeClasses
18352
+ } = provideTheme(props);
18353
+ const {
18354
+ t
18355
+ } = useLocale();
18356
+ const items = vue.computed(() => genStructure(wrapInArray(props.type).join(',')));
18357
+ useRender(() => {
18358
+ const isLoading = !slots.default || props.loading;
18359
+ return vue.createVNode("div", {
18360
+ "class": ['v-skeleton-loader', {
18361
+ 'v-skeleton-loader--boilerplate': props.boilerplate
18362
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
18363
+ "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}],
18364
+ "aria-busy": !props.boilerplate ? isLoading : undefined,
18365
+ "aria-live": !props.boilerplate ? 'polite' : undefined,
18366
+ "aria-label": !props.boilerplate ? t(props.loadingText) : undefined,
18367
+ "role": !props.boilerplate ? 'alert' : undefined
18368
+ }, [isLoading ? items.value : slots.default?.()]);
18369
+ });
18370
+ return {};
18371
+ }
18372
+ });
18373
+
18181
18374
  function bias(val) {
18182
18375
  const c = 0.501;
18183
18376
  const x = Math.abs(val);
@@ -18741,6 +18934,392 @@
18741
18934
 
18742
18935
  // Types
18743
18936
 
18937
+ const makeVStepperActionsProps = propsFactory({
18938
+ color: String,
18939
+ disabled: {
18940
+ type: [Boolean, String],
18941
+ default: false
18942
+ },
18943
+ prevText: {
18944
+ type: String,
18945
+ default: '$vuetify.stepper.prev'
18946
+ },
18947
+ nextText: {
18948
+ type: String,
18949
+ default: '$vuetify.stepper.next'
18950
+ }
18951
+ }, 'VStepperActions');
18952
+ const VStepperActions = genericComponent()({
18953
+ name: 'VStepperActions',
18954
+ props: makeVStepperActionsProps(),
18955
+ emits: {
18956
+ 'click:prev': () => true,
18957
+ 'click:next': () => true
18958
+ },
18959
+ setup(props, _ref) {
18960
+ let {
18961
+ emit,
18962
+ slots
18963
+ } = _ref;
18964
+ const {
18965
+ t
18966
+ } = useLocale();
18967
+ function onClickPrev() {
18968
+ emit('click:prev');
18969
+ }
18970
+ function onClickNext() {
18971
+ emit('click:next');
18972
+ }
18973
+ useRender(() => {
18974
+ const prevSlotProps = {
18975
+ onClick: onClickPrev
18976
+ };
18977
+ const nextSlotProps = {
18978
+ onClick: onClickNext
18979
+ };
18980
+ return vue.createVNode("div", {
18981
+ "class": "v-stepper-actions"
18982
+ }, [vue.createVNode(VDefaultsProvider, {
18983
+ "defaults": {
18984
+ VBtn: {
18985
+ disabled: ['prev', true].includes(props.disabled),
18986
+ text: t(props.prevText),
18987
+ variant: 'text'
18988
+ }
18989
+ }
18990
+ }, {
18991
+ default: () => [slots.prev?.({
18992
+ props: prevSlotProps
18993
+ }) ?? vue.createVNode(VBtn, prevSlotProps, null)]
18994
+ }), vue.createVNode(VDefaultsProvider, {
18995
+ "defaults": {
18996
+ VBtn: {
18997
+ color: props.color,
18998
+ disabled: ['next', true].includes(props.disabled),
18999
+ text: t(props.nextText),
19000
+ variant: 'tonal'
19001
+ }
19002
+ }
19003
+ }, {
19004
+ default: () => [slots.next?.({
19005
+ props: nextSlotProps
19006
+ }) ?? vue.createVNode(VBtn, nextSlotProps, null)]
19007
+ })]);
19008
+ });
19009
+ return {};
19010
+ }
19011
+ });
19012
+
19013
+ // Utilities
19014
+ const VStepperHeader = createSimpleFunctional('v-stepper-header');
19015
+
19016
+ // Types
19017
+
19018
+ const makeVStepperItemProps = propsFactory({
19019
+ color: String,
19020
+ title: String,
19021
+ subtitle: String,
19022
+ complete: Boolean,
19023
+ completeIcon: {
19024
+ type: String,
19025
+ default: '$complete'
19026
+ },
19027
+ editable: Boolean,
19028
+ editIcon: {
19029
+ type: String,
19030
+ default: '$edit'
19031
+ },
19032
+ error: Boolean,
19033
+ errorIcon: {
19034
+ type: String,
19035
+ default: '$error'
19036
+ },
19037
+ icon: String,
19038
+ ripple: {
19039
+ type: [Boolean, Object],
19040
+ default: true
19041
+ },
19042
+ rules: {
19043
+ type: Array,
19044
+ default: () => []
19045
+ },
19046
+ ...makeGroupItemProps()
19047
+ }, 'VStepperItem');
19048
+ const VStepperItem = genericComponent()({
19049
+ name: 'VStepperItem',
19050
+ directives: {
19051
+ Ripple
19052
+ },
19053
+ props: makeVStepperItemProps(),
19054
+ emits: {
19055
+ 'group:selected': val => true
19056
+ },
19057
+ setup(props, _ref) {
19058
+ let {
19059
+ slots
19060
+ } = _ref;
19061
+ const group = useGroupItem(props, VStepperSymbol, true);
19062
+ const step = vue.computed(() => group?.value.value ?? props.value);
19063
+ const isValid = vue.computed(() => props.rules.every(handler => handler() === true));
19064
+ const canEdit = vue.computed(() => !props.disabled && props.editable);
19065
+ const hasError = vue.computed(() => props.error || !isValid.value);
19066
+ const hasCompleted = vue.computed(() => props.complete || props.rules.length > 0 && isValid.value);
19067
+ const icon = vue.computed(() => {
19068
+ if (hasError.value) return props.errorIcon;
19069
+ if (hasCompleted.value) return props.completeIcon;
19070
+ if (props.editable) return props.editIcon;
19071
+ return props.icon;
19072
+ });
19073
+ const slotProps = vue.computed(() => ({
19074
+ canEdit: canEdit.value,
19075
+ hasError: hasError.value,
19076
+ hasCompleted: hasCompleted.value,
19077
+ title: props.title,
19078
+ subtitle: props.subtitle,
19079
+ step: step.value,
19080
+ value: props.value
19081
+ }));
19082
+ useRender(() => {
19083
+ const hasColor = (!group || group.isSelected.value || hasCompleted.value || canEdit.value) && !hasError.value && !props.disabled;
19084
+ const hasTitle = !!(props.title || slots.title);
19085
+ const hasSubtitle = !!(props.subtitle || slots.subtitle);
19086
+ function onClick() {
19087
+ group?.toggle();
19088
+ }
19089
+ return vue.withDirectives(vue.createVNode("button", {
19090
+ "class": ['v-stepper-item', {
19091
+ 'v-stepper-item--complete': hasCompleted.value,
19092
+ 'v-stepper-item--disabled': props.disabled,
19093
+ 'v-stepper-item--error': hasError.value
19094
+ }, group?.selectedClass.value],
19095
+ "disabled": !props.editable,
19096
+ "onClick": onClick
19097
+ }, [vue.createVNode(VAvatar, {
19098
+ "key": "stepper-avatar",
19099
+ "class": "v-stepper-item__avatar",
19100
+ "color": hasColor ? props.color : undefined,
19101
+ "size": 24
19102
+ }, {
19103
+ default: () => [slots.icon?.(slotProps.value) ?? (icon.value ? vue.createVNode(VIcon, {
19104
+ "icon": icon.value
19105
+ }, null) : step.value)]
19106
+ }), vue.createVNode("div", {
19107
+ "class": "v-stepper-item__content"
19108
+ }, [hasTitle && vue.createVNode("div", {
19109
+ "key": "title",
19110
+ "class": "v-stepper-item__title"
19111
+ }, [slots.title?.(slotProps.value) ?? props.title]), hasSubtitle && vue.createVNode("div", {
19112
+ "key": "subtitle",
19113
+ "class": "v-stepper-item__subtitle"
19114
+ }, [slots.subtitle?.(slotProps.value) ?? props.subtitle]), slots.default?.(slotProps.value)])]), [[vue.resolveDirective("ripple"), props.ripple && props.editable, null]]);
19115
+ });
19116
+ return {};
19117
+ }
19118
+ });
19119
+
19120
+ // Types
19121
+
19122
+ const VStepperSymbol$1 = Symbol.for('vuetify:v-stepper');
19123
+ const makeVStepperWindowProps = propsFactory({
19124
+ ...makeVWindowProps({
19125
+ mandatory: false
19126
+ })
19127
+ }, 'VStepperWindow');
19128
+ const VStepperWindow = genericComponent()({
19129
+ name: 'VStepperWindow',
19130
+ props: makeVStepperWindowProps(),
19131
+ emits: {
19132
+ 'update:modelValue': v => true
19133
+ },
19134
+ setup(props, _ref) {
19135
+ let {
19136
+ slots
19137
+ } = _ref;
19138
+ const group = vue.inject(VStepperSymbol$1, null);
19139
+ const _model = useProxiedModel(props, 'modelValue');
19140
+ const model = vue.computed({
19141
+ get() {
19142
+ // Always return modelValue if defined
19143
+ // or if not within a VStepper group
19144
+ if (_model.value != null || !group) return _model.value;
19145
+
19146
+ // If inside of a VStepper, find the currently selected
19147
+ // item by id. Item value may be assigned by its index
19148
+ return group.items.value.find(item => group.selected.value.includes(item.id))?.value;
19149
+ },
19150
+ set(val) {
19151
+ _model.value = val;
19152
+ }
19153
+ });
19154
+ useRender(() => {
19155
+ const [windowProps] = VWindow.filterProps(props);
19156
+ return vue.createVNode(VWindow, vue.mergeProps(windowProps, {
19157
+ "modelValue": model.value,
19158
+ "onUpdate:modelValue": $event => model.value = $event,
19159
+ "class": "v-stepper-window"
19160
+ }), slots);
19161
+ });
19162
+ return {};
19163
+ }
19164
+ });
19165
+
19166
+ const makeVStepperWindowItemProps = propsFactory({
19167
+ ...makeVWindowItemProps()
19168
+ }, 'VStepperWindowItem');
19169
+ const VStepperWindowItem = genericComponent()({
19170
+ name: 'VStepperWindowItem',
19171
+ props: makeVStepperWindowItemProps(),
19172
+ setup(props, _ref) {
19173
+ let {
19174
+ slots
19175
+ } = _ref;
19176
+ useRender(() => {
19177
+ const [windowItemProps] = VWindowItem.filterProps(props);
19178
+ return vue.createVNode(VWindowItem, vue.mergeProps(windowItemProps, {
19179
+ "class": "v-stepper-window-item"
19180
+ }), slots);
19181
+ });
19182
+ return {};
19183
+ }
19184
+ });
19185
+
19186
+ // Types
19187
+
19188
+ const VStepperSymbol = Symbol.for('vuetify:v-stepper');
19189
+ const makeVStepperProps = propsFactory({
19190
+ altLabels: Boolean,
19191
+ bgColor: String,
19192
+ editable: Boolean,
19193
+ hideActions: Boolean,
19194
+ items: {
19195
+ type: Array,
19196
+ default: () => []
19197
+ },
19198
+ itemTitle: {
19199
+ type: String,
19200
+ default: 'title'
19201
+ },
19202
+ itemValue: {
19203
+ type: String,
19204
+ default: 'value'
19205
+ },
19206
+ mobile: Boolean,
19207
+ nonLinear: Boolean,
19208
+ flat: Boolean,
19209
+ ...makeGroupProps({
19210
+ mandatory: 'force',
19211
+ selectedClass: 'v-stepper-item--selected'
19212
+ }),
19213
+ ...makeVSheetProps(),
19214
+ ...only(makeVStepperActionsProps(), ['prevText', 'nextText'])
19215
+ }, 'VStepper');
19216
+ const VStepper = genericComponent()({
19217
+ name: 'VStepper',
19218
+ props: makeVStepperProps(),
19219
+ emits: {
19220
+ 'update:modelValue': v => true
19221
+ },
19222
+ setup(props, _ref) {
19223
+ let {
19224
+ slots
19225
+ } = _ref;
19226
+ const {
19227
+ items: _items,
19228
+ next,
19229
+ prev,
19230
+ selected
19231
+ } = useGroup(props, VStepperSymbol);
19232
+ const {
19233
+ color,
19234
+ editable,
19235
+ prevText,
19236
+ nextText
19237
+ } = vue.toRefs(props);
19238
+ const items = vue.computed(() => props.items.map((item, index) => {
19239
+ const title = getPropertyFromItem(item, props.itemTitle, item);
19240
+ const value = getPropertyFromItem(item, props.itemValue, index + 1);
19241
+ return {
19242
+ title,
19243
+ value,
19244
+ raw: item
19245
+ };
19246
+ }));
19247
+ const activeIndex = vue.computed(() => {
19248
+ return _items.value.findIndex(item => selected.value.includes(item.id));
19249
+ });
19250
+ const disabled = vue.computed(() => {
19251
+ if (props.disabled) return props.disabled;
19252
+ if (activeIndex.value === 0) return 'prev';
19253
+ if (activeIndex.value === _items.value.length - 1) return 'next';
19254
+ return false;
19255
+ });
19256
+ provideDefaults({
19257
+ VStepperItem: {
19258
+ editable,
19259
+ prevText,
19260
+ nextText
19261
+ },
19262
+ VStepperActions: {
19263
+ color,
19264
+ disabled,
19265
+ prevText,
19266
+ nextText
19267
+ }
19268
+ });
19269
+ useRender(() => {
19270
+ const [sheetProps] = VSheet.filterProps(props);
19271
+ const hasHeader = !!(slots.header || props.items.length);
19272
+ const hasWindow = props.items.length > 0;
19273
+ const hasActions = !props.hideActions && !!(hasWindow || slots.actions);
19274
+ return vue.createVNode(VSheet, vue.mergeProps(sheetProps, {
19275
+ "color": props.bgColor,
19276
+ "class": ['v-stepper', {
19277
+ 'v-stepper--alt-labels': props.altLabels,
19278
+ 'v-stepper--flat': props.flat,
19279
+ 'v-stepper--non-linear': props.nonLinear,
19280
+ 'v-stepper--mobile': props.mobile
19281
+ }, props.class],
19282
+ "style": props.style
19283
+ }), {
19284
+ default: () => [hasHeader && vue.createVNode(VStepperHeader, {
19285
+ "key": "stepper-header"
19286
+ }, {
19287
+ default: () => [items.value.map((item, index) => vue.createVNode(vue.Fragment, null, [!!index && vue.createVNode(VDivider, null, null), vue.createVNode(VStepperItem, item, {
19288
+ default: slots[`header-item.${item.value}`] ?? slots.header,
19289
+ icon: slots.icon,
19290
+ title: slots.title,
19291
+ subtitle: slots.subtitle
19292
+ })]))]
19293
+ }), hasWindow && vue.createVNode(VStepperWindow, {
19294
+ "key": "stepper-window"
19295
+ }, {
19296
+ default: () => [items.value.map(item => vue.createVNode(VStepperWindowItem, {
19297
+ "value": item.value
19298
+ }, {
19299
+ default: () => slots[`item.${item.value}`]?.(item) ?? slots.item?.(item)
19300
+ }))]
19301
+ }), slots.default?.({
19302
+ prev,
19303
+ next
19304
+ }), hasActions && (slots.actions?.({
19305
+ next,
19306
+ prev
19307
+ }) ?? vue.createVNode(VStepperActions, {
19308
+ "key": "stepper-actions",
19309
+ "onClick:prev": prev,
19310
+ "onClick:next": next
19311
+ }, slots))]
19312
+ });
19313
+ });
19314
+ return {
19315
+ prev,
19316
+ next
19317
+ };
19318
+ }
19319
+ });
19320
+
19321
+ // Types
19322
+
18744
19323
  const makeVSwitchProps = propsFactory({
18745
19324
  indeterminate: Boolean,
18746
19325
  inset: Boolean,
@@ -19819,6 +20398,7 @@
19819
20398
  VBannerActions: VBannerActions,
19820
20399
  VBannerText: VBannerText,
19821
20400
  VBottomNavigation: VBottomNavigation,
20401
+ VBottomSheet: VBottomSheet,
19822
20402
  VBreadcrumbs: VBreadcrumbs,
19823
20403
  VBreadcrumbsDivider: VBreadcrumbsDivider,
19824
20404
  VBreadcrumbsItem: VBreadcrumbsItem,
@@ -19911,6 +20491,7 @@
19911
20491
  VSelectionControl: VSelectionControl,
19912
20492
  VSelectionControlGroup: VSelectionControlGroup,
19913
20493
  VSheet: VSheet,
20494
+ VSkeletonLoader: VSkeletonLoader,
19914
20495
  VSlideGroup: VSlideGroup,
19915
20496
  VSlideGroupItem: VSlideGroupItem,
19916
20497
  VSlideXReverseTransition: VSlideXReverseTransition,
@@ -19920,6 +20501,12 @@
19920
20501
  VSlider: VSlider,
19921
20502
  VSnackbar: VSnackbar,
19922
20503
  VSpacer: VSpacer,
20504
+ VStepper: VStepper,
20505
+ VStepperActions: VStepperActions,
20506
+ VStepperHeader: VStepperHeader,
20507
+ VStepperItem: VStepperItem,
20508
+ VStepperWindow: VStepperWindow,
20509
+ VStepperWindowItem: VStepperWindowItem,
19923
20510
  VSvgIcon: VSvgIcon,
19924
20511
  VSwitch: VSwitch,
19925
20512
  VSystemBar: VSystemBar,
@@ -20300,7 +20887,6 @@
20300
20887
  });
20301
20888
  }
20302
20889
  function format(value, formatString, locale) {
20303
- const date = new Date(value);
20304
20890
  let options = {};
20305
20891
  switch (formatString) {
20306
20892
  case 'fullDateWithWeekday':
@@ -20319,7 +20905,11 @@
20319
20905
  };
20320
20906
  break;
20321
20907
  case 'keyboardDate':
20322
- options = {};
20908
+ options = {
20909
+ day: '2-digit',
20910
+ month: '2-digit',
20911
+ year: 'numeric'
20912
+ };
20323
20913
  break;
20324
20914
  case 'monthAndDate':
20325
20915
  options = {
@@ -20349,7 +20939,7 @@
20349
20939
  timeZoneName: 'short'
20350
20940
  };
20351
20941
  }
20352
- return new Intl.DateTimeFormat(locale, options).format(date);
20942
+ return new Intl.DateTimeFormat(locale, options).format(date(value) ?? undefined);
20353
20943
  }
20354
20944
  function toISO(adapter, value) {
20355
20945
  const date = adapter.toJsDate(value);
@@ -20649,7 +21239,7 @@
20649
21239
  date
20650
21240
  };
20651
21241
  }
20652
- const version$1 = "3.4.0-alpha.1-dev.2023-10-21";
21242
+ const version$1 = "3.4.0-alpha.1-dev.2023-10-26";
20653
21243
  createVuetify$1.version = version$1;
20654
21244
 
20655
21245
  // Vue's inject() can only be used in setup
@@ -20674,7 +21264,7 @@
20674
21264
  ...options
20675
21265
  });
20676
21266
  };
20677
- const version = "3.4.0-alpha.1-dev.2023-10-21";
21267
+ const version = "3.4.0-alpha.1-dev.2023-10-26";
20678
21268
  createVuetify.version = version;
20679
21269
 
20680
21270
  exports.components = components;