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

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 (198) hide show
  1. package/CHANGELOG.md +7 -3
  2. package/dist/_component-variables-labs.sass +1 -5
  3. package/dist/_component-variables.sass +4 -0
  4. package/dist/json/attributes.json +26 -26
  5. package/dist/json/importMap-labs.json +14 -50
  6. package/dist/json/importMap.json +98 -62
  7. package/dist/json/web-types.json +30 -30
  8. package/dist/vuetify-labs.css +695 -694
  9. package/dist/vuetify-labs.d.ts +41561 -36837
  10. package/dist/vuetify-labs.esm.js +3188 -3166
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +3187 -3165
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.css +505 -108
  15. package/dist/vuetify.d.ts +20359 -13201
  16. package/dist/vuetify.esm.js +995 -175
  17. package/dist/vuetify.esm.js.map +1 -1
  18. package/dist/vuetify.js +994 -174
  19. package/dist/vuetify.js.map +1 -1
  20. package/dist/vuetify.min.css +2 -2
  21. package/dist/vuetify.min.js +1306 -1256
  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/{labs → components}/VInfiniteScroll/VInfiniteScroll.mjs +2 -2
  65. package/lib/components/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -0
  66. package/lib/{labs → components}/VInfiniteScroll/index.d.mts +59 -54
  67. package/lib/components/VInfiniteScroll/index.mjs.map +1 -0
  68. package/lib/components/VInput/index.d.mts +90 -66
  69. package/lib/components/VItemGroup/index.d.mts +115 -99
  70. package/lib/components/VKbd/index.d.mts +21 -46
  71. package/lib/components/VLabel/index.d.mts +24 -47
  72. package/lib/components/VLayout/index.d.mts +55 -96
  73. package/lib/components/VLazy/index.d.mts +43 -50
  74. package/lib/components/VList/index.d.mts +403 -468
  75. package/lib/components/VLocaleProvider/index.d.mts +24 -46
  76. package/lib/components/VMain/index.d.mts +24 -47
  77. package/lib/components/VMenu/index.d.mts +573 -324
  78. package/lib/components/VMessages/index.d.mts +41 -49
  79. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +1 -0
  80. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +1 -0
  81. package/lib/components/VNavigationDrawer/index.d.mts +95 -67
  82. package/lib/components/VOverlay/index.d.mts +138 -76
  83. package/lib/components/VPagination/index.d.mts +114 -73
  84. package/lib/components/VParallax/index.d.mts +31 -47
  85. package/lib/components/VProgressCircular/index.d.mts +48 -53
  86. package/lib/components/VProgressLinear/index.d.mts +84 -63
  87. package/lib/components/VRadio/index.d.mts +93 -61
  88. package/lib/components/VRadioGroup/index.d.mts +130 -77
  89. package/lib/components/VRangeSlider/index.d.mts +169 -86
  90. package/lib/components/VRating/index.d.mts +75 -62
  91. package/lib/components/VResponsive/index.d.mts +33 -47
  92. package/lib/components/VSelect/VSelect.mjs +13 -10
  93. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  94. package/lib/components/VSelect/index.d.mts +1191 -546
  95. package/lib/components/VSelectionControl/index.d.mts +48 -53
  96. package/lib/components/VSelectionControlGroup/index.d.mts +58 -57
  97. package/lib/components/VSheet/index.d.mts +37 -48
  98. package/lib/components/VSkeletonLoader/VSkeletonLoader.mjs.map +1 -0
  99. package/lib/{labs → components}/VSkeletonLoader/index.d.mts +36 -51
  100. package/lib/components/VSkeletonLoader/index.mjs.map +1 -0
  101. package/lib/components/VSlideGroup/index.d.mts +106 -105
  102. package/lib/components/VSlider/index.d.mts +166 -85
  103. package/lib/components/VSnackbar/index.d.mts +572 -324
  104. package/lib/components/VStepper/VStepper.mjs +137 -98
  105. package/lib/components/VStepper/VStepper.mjs.map +1 -1
  106. package/lib/components/VStepper/VStepper.sass +38 -198
  107. package/lib/{labs → components}/VStepper/VStepperActions.mjs +2 -2
  108. package/lib/components/VStepper/VStepperActions.mjs.map +1 -0
  109. package/lib/components/VStepper/VStepperHeader.mjs.map +1 -0
  110. package/lib/{labs → components}/VStepper/VStepperItem.mjs +2 -2
  111. package/lib/components/VStepper/VStepperItem.mjs.map +1 -0
  112. package/lib/{labs → components}/VStepper/VStepperWindow.mjs +1 -1
  113. package/lib/components/VStepper/VStepperWindow.mjs.map +1 -0
  114. package/lib/{labs → components}/VStepper/VStepperWindowItem.mjs +1 -1
  115. package/lib/components/VStepper/VStepperWindowItem.mjs.map +1 -0
  116. package/lib/components/VStepper/_variables.scss +21 -31
  117. package/lib/{labs → components}/VStepper/index.d.mts +368 -340
  118. package/lib/components/VStepper/index.mjs +6 -17
  119. package/lib/components/VStepper/index.mjs.map +1 -1
  120. package/lib/components/VSwitch/index.d.mts +168 -86
  121. package/lib/components/VSystemBar/index.d.mts +39 -51
  122. package/lib/components/VTable/index.d.mts +45 -51
  123. package/lib/components/VTabs/index.d.mts +177 -132
  124. package/lib/components/VTextField/index.d.mts +665 -470
  125. package/lib/components/VTextarea/index.d.mts +469 -297
  126. package/lib/components/VThemeProvider/index.d.mts +26 -48
  127. package/lib/components/VTimeline/index.d.mts +98 -106
  128. package/lib/components/VToolbar/index.d.mts +119 -150
  129. package/lib/components/VTooltip/index.d.mts +565 -321
  130. package/lib/components/VValidation/index.d.mts +108 -62
  131. package/lib/components/VVirtualScroll/index.d.mts +18 -46
  132. package/lib/components/VWindow/index.d.mts +130 -110
  133. package/lib/components/index.d.mts +19973 -12833
  134. package/lib/components/index.mjs +5 -2
  135. package/lib/components/index.mjs.map +1 -1
  136. package/lib/components/transitions/index.d.mts +455 -819
  137. package/lib/composables/color.mjs +2 -2
  138. package/lib/composables/color.mjs.map +1 -1
  139. package/lib/entry-bundler.mjs +1 -1
  140. package/lib/framework.mjs +1 -1
  141. package/lib/index.d.mts +36 -36
  142. package/lib/labs/VDataIterator/index.d.mts +112 -75
  143. package/lib/labs/VDataTable/index.d.mts +1456 -530
  144. package/lib/labs/VDateInput/index.d.mts +260 -157
  145. package/lib/labs/VDatePicker/index.d.mts +1100 -889
  146. package/lib/labs/VDateRangePicker/index.d.mts +207 -129
  147. package/lib/labs/VOtpInput/index.d.mts +80 -64
  148. package/lib/labs/VPicker/index.d.mts +74 -97
  149. package/lib/labs/components.d.mts +7514 -10029
  150. package/lib/labs/components.mjs +0 -4
  151. package/lib/labs/components.mjs.map +1 -1
  152. package/lib/labs/date/adapters/vuetify.mjs +6 -3
  153. package/lib/labs/date/adapters/vuetify.mjs.map +1 -1
  154. package/lib/locale/fr.mjs +19 -19
  155. package/lib/locale/fr.mjs.map +1 -1
  156. package/lib/util/colorUtils.mjs +3 -0
  157. package/lib/util/colorUtils.mjs.map +1 -1
  158. package/lib/util/helpers.mjs +8 -1
  159. package/lib/util/helpers.mjs.map +1 -1
  160. package/package.json +1 -1
  161. package/lib/components/VStepper/VStepperContent.mjs +0 -114
  162. package/lib/components/VStepper/VStepperContent.mjs.map +0 -1
  163. package/lib/components/VStepper/VStepperStep.mjs +0 -134
  164. package/lib/components/VStepper/VStepperStep.mjs.map +0 -1
  165. package/lib/labs/VBottomSheet/VBottomSheet.mjs.map +0 -1
  166. package/lib/labs/VBottomSheet/index.mjs.map +0 -1
  167. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs.map +0 -1
  168. package/lib/labs/VInfiniteScroll/index.mjs.map +0 -1
  169. package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs.map +0 -1
  170. package/lib/labs/VSkeletonLoader/index.mjs.map +0 -1
  171. package/lib/labs/VStepper/VStepper.mjs +0 -149
  172. package/lib/labs/VStepper/VStepper.mjs.map +0 -1
  173. package/lib/labs/VStepper/VStepper.sass +0 -53
  174. package/lib/labs/VStepper/VStepperActions.mjs.map +0 -1
  175. package/lib/labs/VStepper/VStepperHeader.mjs.map +0 -1
  176. package/lib/labs/VStepper/VStepperItem.mjs.map +0 -1
  177. package/lib/labs/VStepper/VStepperWindow.mjs.map +0 -1
  178. package/lib/labs/VStepper/VStepperWindowItem.mjs.map +0 -1
  179. package/lib/labs/VStepper/_variables.scss +0 -27
  180. package/lib/labs/VStepper/index.mjs +0 -7
  181. package/lib/labs/VStepper/index.mjs.map +0 -1
  182. /package/lib/{labs → components}/VBottomSheet/VBottomSheet.css +0 -0
  183. /package/lib/{labs → components}/VBottomSheet/VBottomSheet.sass +0 -0
  184. /package/lib/{labs → components}/VBottomSheet/_variables.scss +0 -0
  185. /package/lib/{labs → components}/VBottomSheet/index.mjs +0 -0
  186. /package/lib/{labs → components}/VInfiniteScroll/VInfiniteScroll.css +0 -0
  187. /package/lib/{labs → components}/VInfiniteScroll/VInfiniteScroll.sass +0 -0
  188. /package/lib/{labs → components}/VInfiniteScroll/_variables.scss +0 -0
  189. /package/lib/{labs → components}/VInfiniteScroll/index.mjs +0 -0
  190. /package/lib/{labs → components}/VSkeletonLoader/VSkeletonLoader.css +0 -0
  191. /package/lib/{labs → components}/VSkeletonLoader/VSkeletonLoader.mjs +0 -0
  192. /package/lib/{labs → components}/VSkeletonLoader/VSkeletonLoader.sass +0 -0
  193. /package/lib/{labs → components}/VSkeletonLoader/_variables.scss +0 -0
  194. /package/lib/{labs → components}/VSkeletonLoader/index.mjs +0 -0
  195. /package/lib/{labs → components}/VStepper/VStepper.css +0 -0
  196. /package/lib/{labs → components}/VStepper/VStepperHeader.mjs +0 -0
  197. /package/lib/{labs → components}/VStepper/VStepperItem.css +0 -0
  198. /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-28
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,154 +15609,44 @@
15440
15609
 
15441
15610
  // Types
15442
15611
 
15443
- const makeVDialogProps = propsFactory({
15444
- fullscreen: Boolean,
15445
- retainFocus: {
15446
- type: Boolean,
15447
- default: true
15612
+ const VExpansionPanelSymbol = Symbol.for('vuetify:v-expansion-panel');
15613
+ const allowedVariants = ['default', 'accordion', 'inset', 'popout'];
15614
+ const makeVExpansionPanelsProps = propsFactory({
15615
+ color: String,
15616
+ static: Boolean,
15617
+ variant: {
15618
+ type: String,
15619
+ default: 'default',
15620
+ validator: v => allowedVariants.includes(v)
15448
15621
  },
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(),
15622
+ readonly: Boolean,
15623
+ ...makeComponentProps(),
15624
+ ...makeGroupProps(),
15625
+ ...makeTagProps(),
15626
+ ...makeThemeProps()
15627
+ }, 'VExpansionPanels');
15628
+ const VExpansionPanels = genericComponent()({
15629
+ name: 'VExpansionPanels',
15630
+ props: makeVExpansionPanelsProps(),
15462
15631
  emits: {
15463
- 'update:modelValue': value => true
15632
+ 'update:modelValue': val => true
15464
15633
  },
15465
15634
  setup(props, _ref) {
15466
15635
  let {
15467
15636
  slots
15468
15637
  } = _ref;
15469
- const isActive = useProxiedModel(props, 'modelValue');
15638
+ useGroup(props, VExpansionPanelSymbol);
15470
15639
  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
- const VExpansionPanelSymbol = Symbol.for('vuetify:v-expansion-panel');
15554
- const allowedVariants = ['default', 'accordion', 'inset', 'popout'];
15555
- const makeVExpansionPanelsProps = propsFactory({
15556
- color: String,
15557
- static: Boolean,
15558
- variant: {
15559
- type: String,
15560
- default: 'default',
15561
- validator: v => allowedVariants.includes(v)
15562
- },
15563
- readonly: Boolean,
15564
- ...makeComponentProps(),
15565
- ...makeGroupProps(),
15566
- ...makeTagProps(),
15567
- ...makeThemeProps()
15568
- }, 'VExpansionPanels');
15569
- const VExpansionPanels = genericComponent()({
15570
- name: 'VExpansionPanels',
15571
- props: makeVExpansionPanelsProps(),
15572
- emits: {
15573
- 'update:modelValue': val => true
15574
- },
15575
- setup(props, _ref) {
15576
- let {
15577
- slots
15578
- } = _ref;
15579
- useGroup(props, VExpansionPanelSymbol);
15580
- const {
15581
- themeClasses
15582
- } = provideTheme(props);
15583
- const variantClass = vue.computed(() => props.variant && `v-expansion-panels--variant-${props.variant}`);
15584
- provideDefaults({
15585
- VExpansionPanel: {
15586
- color: vue.toRef(props, 'color')
15587
- },
15588
- VExpansionPanelTitle: {
15589
- readonly: vue.toRef(props, 'readonly'),
15590
- static: vue.toRef(props, 'static')
15640
+ themeClasses
15641
+ } = provideTheme(props);
15642
+ const variantClass = vue.computed(() => props.variant && `v-expansion-panels--variant-${props.variant}`);
15643
+ provideDefaults({
15644
+ VExpansionPanel: {
15645
+ color: vue.toRef(props, 'color')
15646
+ },
15647
+ VExpansionPanelTitle: {
15648
+ readonly: vue.toRef(props, 'readonly'),
15649
+ static: vue.toRef(props, 'static')
15591
15650
  }
15592
15651
  });
15593
15652
  useRender(() => vue.createVNode(props.tag, {
@@ -16426,6 +16485,235 @@
16426
16485
  }
16427
16486
  });
16428
16487
 
16488
+ // Types
16489
+
16490
+ const makeVInfiniteScrollProps = propsFactory({
16491
+ color: String,
16492
+ direction: {
16493
+ type: String,
16494
+ default: 'vertical',
16495
+ validator: v => ['vertical', 'horizontal'].includes(v)
16496
+ },
16497
+ side: {
16498
+ type: String,
16499
+ default: 'end',
16500
+ validator: v => ['start', 'end', 'both'].includes(v)
16501
+ },
16502
+ mode: {
16503
+ type: String,
16504
+ default: 'intersect',
16505
+ validator: v => ['intersect', 'manual'].includes(v)
16506
+ },
16507
+ margin: [Number, String],
16508
+ loadMoreText: {
16509
+ type: String,
16510
+ default: '$vuetify.infiniteScroll.loadMore'
16511
+ },
16512
+ emptyText: {
16513
+ type: String,
16514
+ default: '$vuetify.infiniteScroll.empty'
16515
+ },
16516
+ ...makeDimensionProps(),
16517
+ ...makeTagProps()
16518
+ }, 'VInfiniteScroll');
16519
+ const VInfiniteScrollIntersect = defineComponent({
16520
+ name: 'VInfiniteScrollIntersect',
16521
+ props: {
16522
+ side: {
16523
+ type: String,
16524
+ required: true
16525
+ },
16526
+ rootRef: null,
16527
+ rootMargin: String
16528
+ },
16529
+ emits: {
16530
+ intersect: (side, isIntersecting) => true
16531
+ },
16532
+ setup(props, _ref) {
16533
+ let {
16534
+ emit
16535
+ } = _ref;
16536
+ const {
16537
+ intersectionRef,
16538
+ isIntersecting
16539
+ } = useIntersectionObserver(entries => {}, props.rootMargin ? {
16540
+ rootMargin: props.rootMargin
16541
+ } : undefined);
16542
+ vue.watch(isIntersecting, async val => {
16543
+ emit('intersect', props.side, val);
16544
+ });
16545
+ useRender(() => vue.createVNode("div", {
16546
+ "class": "v-infinite-scroll-intersect",
16547
+ "ref": intersectionRef
16548
+ }, [vue.createTextVNode("\xA0")]));
16549
+ return {};
16550
+ }
16551
+ });
16552
+ const VInfiniteScroll = genericComponent()({
16553
+ name: 'VInfiniteScroll',
16554
+ props: makeVInfiniteScrollProps(),
16555
+ emits: {
16556
+ load: options => true
16557
+ },
16558
+ setup(props, _ref2) {
16559
+ let {
16560
+ slots,
16561
+ emit
16562
+ } = _ref2;
16563
+ const rootEl = vue.ref();
16564
+ const startStatus = vue.shallowRef('ok');
16565
+ const endStatus = vue.shallowRef('ok');
16566
+ const margin = vue.computed(() => convertToUnit(props.margin));
16567
+ const isIntersecting = vue.shallowRef(false);
16568
+ function setScrollAmount(amount) {
16569
+ if (!rootEl.value) return;
16570
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
16571
+ rootEl.value[property] = amount;
16572
+ }
16573
+ function getScrollAmount() {
16574
+ if (!rootEl.value) return 0;
16575
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
16576
+ return rootEl.value[property];
16577
+ }
16578
+ function getScrollSize() {
16579
+ if (!rootEl.value) return 0;
16580
+ const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth';
16581
+ return rootEl.value[property];
16582
+ }
16583
+ function getContainerSize() {
16584
+ if (!rootEl.value) return 0;
16585
+ const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth';
16586
+ return rootEl.value[property];
16587
+ }
16588
+ vue.onMounted(() => {
16589
+ if (!rootEl.value) return;
16590
+ if (props.side === 'start') {
16591
+ setScrollAmount(getScrollSize());
16592
+ } else if (props.side === 'both') {
16593
+ setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2);
16594
+ }
16595
+ });
16596
+ function setStatus(side, status) {
16597
+ if (side === 'start') {
16598
+ startStatus.value = status;
16599
+ } else if (side === 'end') {
16600
+ endStatus.value = status;
16601
+ }
16602
+ }
16603
+ function getStatus(side) {
16604
+ return side === 'start' ? startStatus.value : endStatus.value;
16605
+ }
16606
+ let previousScrollSize = 0;
16607
+ function handleIntersect(side, _isIntersecting) {
16608
+ isIntersecting.value = _isIntersecting;
16609
+ if (isIntersecting.value) {
16610
+ intersecting(side);
16611
+ }
16612
+ }
16613
+ function intersecting(side) {
16614
+ if (props.mode !== 'manual' && !isIntersecting.value) return;
16615
+ const status = getStatus(side);
16616
+ if (!rootEl.value || status === 'loading') return;
16617
+ previousScrollSize = getScrollSize();
16618
+ setStatus(side, 'loading');
16619
+ function done(status) {
16620
+ setStatus(side, status);
16621
+ vue.nextTick(() => {
16622
+ if (status === 'empty' || status === 'error') return;
16623
+ if (status === 'ok' && side === 'start') {
16624
+ setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
16625
+ }
16626
+ if (props.mode !== 'manual') {
16627
+ vue.nextTick(() => {
16628
+ window.requestAnimationFrame(() => {
16629
+ window.requestAnimationFrame(() => {
16630
+ window.requestAnimationFrame(() => {
16631
+ intersecting(side);
16632
+ });
16633
+ });
16634
+ });
16635
+ });
16636
+ }
16637
+ });
16638
+ }
16639
+ emit('load', {
16640
+ side,
16641
+ done
16642
+ });
16643
+ }
16644
+ const {
16645
+ t
16646
+ } = useLocale();
16647
+ function renderSide(side, status) {
16648
+ if (props.side !== side && props.side !== 'both') return;
16649
+ const onClick = () => intersecting(side);
16650
+ const slotProps = {
16651
+ side,
16652
+ props: {
16653
+ onClick,
16654
+ color: props.color
16655
+ }
16656
+ };
16657
+ if (status === 'error') return slots.error?.(slotProps);
16658
+ if (status === 'empty') return slots.empty?.(slotProps) ?? vue.createVNode("div", null, [t(props.emptyText)]);
16659
+ if (props.mode === 'manual') {
16660
+ if (status === 'loading') {
16661
+ return slots.loading?.(slotProps) ?? vue.createVNode(VProgressCircular, {
16662
+ "indeterminate": true,
16663
+ "color": props.color
16664
+ }, null);
16665
+ }
16666
+ return slots['load-more']?.(slotProps) ?? vue.createVNode(VBtn, {
16667
+ "variant": "outlined",
16668
+ "color": props.color,
16669
+ "onClick": onClick
16670
+ }, {
16671
+ default: () => [t(props.loadMoreText)]
16672
+ });
16673
+ }
16674
+ return slots.loading?.(slotProps) ?? vue.createVNode(VProgressCircular, {
16675
+ "indeterminate": true,
16676
+ "color": props.color
16677
+ }, null);
16678
+ }
16679
+ const {
16680
+ dimensionStyles
16681
+ } = useDimension(props);
16682
+ useRender(() => {
16683
+ const Tag = props.tag;
16684
+ const hasStartIntersect = props.side === 'start' || props.side === 'both';
16685
+ const hasEndIntersect = props.side === 'end' || props.side === 'both';
16686
+ const intersectMode = props.mode === 'intersect';
16687
+ return vue.createVNode(Tag, {
16688
+ "ref": rootEl,
16689
+ "class": ['v-infinite-scroll', `v-infinite-scroll--${props.direction}`, {
16690
+ 'v-infinite-scroll--start': hasStartIntersect,
16691
+ 'v-infinite-scroll--end': hasEndIntersect
16692
+ }],
16693
+ "style": dimensionStyles.value
16694
+ }, {
16695
+ default: () => [vue.createVNode("div", {
16696
+ "class": "v-infinite-scroll__side"
16697
+ }, [renderSide('start', startStatus.value)]), rootEl.value && hasStartIntersect && intersectMode && vue.createVNode(VInfiniteScrollIntersect, {
16698
+ "key": "start",
16699
+ "side": "start",
16700
+ "onIntersect": handleIntersect,
16701
+ "rootRef": rootEl.value,
16702
+ "rootMargin": margin.value
16703
+ }, null), slots.default?.(), rootEl.value && hasEndIntersect && intersectMode && vue.createVNode(VInfiniteScrollIntersect, {
16704
+ "key": "end",
16705
+ "side": "end",
16706
+ "onIntersect": handleIntersect,
16707
+ "rootRef": rootEl.value,
16708
+ "rootMargin": margin.value
16709
+ }, null), vue.createVNode("div", {
16710
+ "class": "v-infinite-scroll__side"
16711
+ }, [renderSide('end', endStatus.value)])]
16712
+ });
16713
+ });
16714
+ }
16715
+ });
16716
+
16429
16717
  const VItemGroupSymbol = Symbol.for('vuetify:v-item-group');
16430
16718
  const makeVItemGroupProps = propsFactory({
16431
16719
  ...makeComponentProps(),
@@ -18178,6 +18466,140 @@
18178
18466
  }
18179
18467
  });
18180
18468
 
18469
+ // Types
18470
+
18471
+ const rootTypes = {
18472
+ actions: 'button@2',
18473
+ article: 'heading, paragraph',
18474
+ avatar: 'avatar',
18475
+ button: 'button',
18476
+ card: 'image, heading',
18477
+ 'card-avatar': 'image, list-item-avatar',
18478
+ chip: 'chip',
18479
+ 'date-picker': 'list-item, heading, divider, date-picker-options, date-picker-days, actions',
18480
+ 'date-picker-options': 'text, avatar@2',
18481
+ 'date-picker-days': 'avatar@28',
18482
+ divider: 'divider',
18483
+ heading: 'heading',
18484
+ image: 'image',
18485
+ 'list-item': 'text',
18486
+ 'list-item-avatar': 'avatar, text',
18487
+ 'list-item-two-line': 'sentences',
18488
+ 'list-item-avatar-two-line': 'avatar, sentences',
18489
+ 'list-item-three-line': 'paragraph',
18490
+ 'list-item-avatar-three-line': 'avatar, paragraph',
18491
+ ossein: 'ossein',
18492
+ paragraph: 'text@3',
18493
+ sentences: 'text@2',
18494
+ subtitle: 'text',
18495
+ table: 'table-heading, table-thead, table-tbody, table-tfoot',
18496
+ 'table-heading': 'chip, text',
18497
+ 'table-thead': 'heading@6',
18498
+ 'table-tbody': 'table-row-divider@6',
18499
+ 'table-row-divider': 'table-row, divider',
18500
+ 'table-row': 'text@6',
18501
+ 'table-tfoot': 'text@2, avatar@2',
18502
+ text: 'text'
18503
+ };
18504
+ function genBone(type) {
18505
+ let children = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
18506
+ return vue.createVNode("div", {
18507
+ "class": ['v-skeleton-loader__bone', `v-skeleton-loader__${type}`]
18508
+ }, [children]);
18509
+ }
18510
+ function genBones(bone) {
18511
+ // e.g. 'text@3'
18512
+ const [type, length] = bone.split('@');
18513
+
18514
+ // Generate a length array based upon
18515
+ // value after @ in the bone string
18516
+ return Array.from({
18517
+ length
18518
+ }).map(() => genStructure(type));
18519
+ }
18520
+ function genStructure(type) {
18521
+ let children = [];
18522
+ if (!type) return children;
18523
+
18524
+ // TODO: figure out a better way to type this
18525
+ const bone = rootTypes[type];
18526
+
18527
+ // End of recursion, do nothing
18528
+ /* eslint-disable-next-line no-empty, brace-style */
18529
+ if (type === bone) ;
18530
+ // Array of values - e.g. 'heading, paragraph, text@2'
18531
+ else if (type.includes(',')) return mapBones(type);
18532
+ // Array of values - e.g. 'paragraph@4'
18533
+ else if (type.includes('@')) return genBones(type);
18534
+ // Array of values - e.g. 'card@2'
18535
+ else if (bone.includes(',')) children = mapBones(bone);
18536
+ // Array of values - e.g. 'list-item@2'
18537
+ else if (bone.includes('@')) children = genBones(bone);
18538
+ // Single value - e.g. 'card-heading'
18539
+ else if (bone) children.push(genStructure(bone));
18540
+ return [genBone(type, children)];
18541
+ }
18542
+ function mapBones(bones) {
18543
+ // Remove spaces and return array of structures
18544
+ return bones.replace(/\s/g, '').split(',').map(genStructure);
18545
+ }
18546
+ const makeVSkeletonLoaderProps = propsFactory({
18547
+ boilerplate: Boolean,
18548
+ color: String,
18549
+ loading: Boolean,
18550
+ loadingText: {
18551
+ type: String,
18552
+ default: '$vuetify.loading'
18553
+ },
18554
+ type: {
18555
+ type: [String, Array],
18556
+ default: 'ossein'
18557
+ },
18558
+ ...makeDimensionProps(),
18559
+ ...makeElevationProps(),
18560
+ ...makeThemeProps()
18561
+ }, 'VSkeletonLoader');
18562
+ const VSkeletonLoader = genericComponent()({
18563
+ name: 'VSkeletonLoader',
18564
+ props: makeVSkeletonLoaderProps(),
18565
+ setup(props, _ref) {
18566
+ let {
18567
+ slots
18568
+ } = _ref;
18569
+ const {
18570
+ backgroundColorClasses,
18571
+ backgroundColorStyles
18572
+ } = useBackgroundColor(vue.toRef(props, 'color'));
18573
+ const {
18574
+ dimensionStyles
18575
+ } = useDimension(props);
18576
+ const {
18577
+ elevationClasses
18578
+ } = useElevation(props);
18579
+ const {
18580
+ themeClasses
18581
+ } = provideTheme(props);
18582
+ const {
18583
+ t
18584
+ } = useLocale();
18585
+ const items = vue.computed(() => genStructure(wrapInArray(props.type).join(',')));
18586
+ useRender(() => {
18587
+ const isLoading = !slots.default || props.loading;
18588
+ return vue.createVNode("div", {
18589
+ "class": ['v-skeleton-loader', {
18590
+ 'v-skeleton-loader--boilerplate': props.boilerplate
18591
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
18592
+ "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}],
18593
+ "aria-busy": !props.boilerplate ? isLoading : undefined,
18594
+ "aria-live": !props.boilerplate ? 'polite' : undefined,
18595
+ "aria-label": !props.boilerplate ? t(props.loadingText) : undefined,
18596
+ "role": !props.boilerplate ? 'alert' : undefined
18597
+ }, [isLoading ? items.value : slots.default?.()]);
18598
+ });
18599
+ return {};
18600
+ }
18601
+ });
18602
+
18181
18603
  function bias(val) {
18182
18604
  const c = 0.501;
18183
18605
  const x = Math.abs(val);
@@ -18741,6 +19163,392 @@
18741
19163
 
18742
19164
  // Types
18743
19165
 
19166
+ const makeVStepperActionsProps = propsFactory({
19167
+ color: String,
19168
+ disabled: {
19169
+ type: [Boolean, String],
19170
+ default: false
19171
+ },
19172
+ prevText: {
19173
+ type: String,
19174
+ default: '$vuetify.stepper.prev'
19175
+ },
19176
+ nextText: {
19177
+ type: String,
19178
+ default: '$vuetify.stepper.next'
19179
+ }
19180
+ }, 'VStepperActions');
19181
+ const VStepperActions = genericComponent()({
19182
+ name: 'VStepperActions',
19183
+ props: makeVStepperActionsProps(),
19184
+ emits: {
19185
+ 'click:prev': () => true,
19186
+ 'click:next': () => true
19187
+ },
19188
+ setup(props, _ref) {
19189
+ let {
19190
+ emit,
19191
+ slots
19192
+ } = _ref;
19193
+ const {
19194
+ t
19195
+ } = useLocale();
19196
+ function onClickPrev() {
19197
+ emit('click:prev');
19198
+ }
19199
+ function onClickNext() {
19200
+ emit('click:next');
19201
+ }
19202
+ useRender(() => {
19203
+ const prevSlotProps = {
19204
+ onClick: onClickPrev
19205
+ };
19206
+ const nextSlotProps = {
19207
+ onClick: onClickNext
19208
+ };
19209
+ return vue.createVNode("div", {
19210
+ "class": "v-stepper-actions"
19211
+ }, [vue.createVNode(VDefaultsProvider, {
19212
+ "defaults": {
19213
+ VBtn: {
19214
+ disabled: ['prev', true].includes(props.disabled),
19215
+ text: t(props.prevText),
19216
+ variant: 'text'
19217
+ }
19218
+ }
19219
+ }, {
19220
+ default: () => [slots.prev?.({
19221
+ props: prevSlotProps
19222
+ }) ?? vue.createVNode(VBtn, prevSlotProps, null)]
19223
+ }), vue.createVNode(VDefaultsProvider, {
19224
+ "defaults": {
19225
+ VBtn: {
19226
+ color: props.color,
19227
+ disabled: ['next', true].includes(props.disabled),
19228
+ text: t(props.nextText),
19229
+ variant: 'tonal'
19230
+ }
19231
+ }
19232
+ }, {
19233
+ default: () => [slots.next?.({
19234
+ props: nextSlotProps
19235
+ }) ?? vue.createVNode(VBtn, nextSlotProps, null)]
19236
+ })]);
19237
+ });
19238
+ return {};
19239
+ }
19240
+ });
19241
+
19242
+ // Utilities
19243
+ const VStepperHeader = createSimpleFunctional('v-stepper-header');
19244
+
19245
+ // Types
19246
+
19247
+ const makeVStepperItemProps = propsFactory({
19248
+ color: String,
19249
+ title: String,
19250
+ subtitle: String,
19251
+ complete: Boolean,
19252
+ completeIcon: {
19253
+ type: String,
19254
+ default: '$complete'
19255
+ },
19256
+ editable: Boolean,
19257
+ editIcon: {
19258
+ type: String,
19259
+ default: '$edit'
19260
+ },
19261
+ error: Boolean,
19262
+ errorIcon: {
19263
+ type: String,
19264
+ default: '$error'
19265
+ },
19266
+ icon: String,
19267
+ ripple: {
19268
+ type: [Boolean, Object],
19269
+ default: true
19270
+ },
19271
+ rules: {
19272
+ type: Array,
19273
+ default: () => []
19274
+ },
19275
+ ...makeGroupItemProps()
19276
+ }, 'VStepperItem');
19277
+ const VStepperItem = genericComponent()({
19278
+ name: 'VStepperItem',
19279
+ directives: {
19280
+ Ripple
19281
+ },
19282
+ props: makeVStepperItemProps(),
19283
+ emits: {
19284
+ 'group:selected': val => true
19285
+ },
19286
+ setup(props, _ref) {
19287
+ let {
19288
+ slots
19289
+ } = _ref;
19290
+ const group = useGroupItem(props, VStepperSymbol, true);
19291
+ const step = vue.computed(() => group?.value.value ?? props.value);
19292
+ const isValid = vue.computed(() => props.rules.every(handler => handler() === true));
19293
+ const canEdit = vue.computed(() => !props.disabled && props.editable);
19294
+ const hasError = vue.computed(() => props.error || !isValid.value);
19295
+ const hasCompleted = vue.computed(() => props.complete || props.rules.length > 0 && isValid.value);
19296
+ const icon = vue.computed(() => {
19297
+ if (hasError.value) return props.errorIcon;
19298
+ if (hasCompleted.value) return props.completeIcon;
19299
+ if (props.editable) return props.editIcon;
19300
+ return props.icon;
19301
+ });
19302
+ const slotProps = vue.computed(() => ({
19303
+ canEdit: canEdit.value,
19304
+ hasError: hasError.value,
19305
+ hasCompleted: hasCompleted.value,
19306
+ title: props.title,
19307
+ subtitle: props.subtitle,
19308
+ step: step.value,
19309
+ value: props.value
19310
+ }));
19311
+ useRender(() => {
19312
+ const hasColor = (!group || group.isSelected.value || hasCompleted.value || canEdit.value) && !hasError.value && !props.disabled;
19313
+ const hasTitle = !!(props.title || slots.title);
19314
+ const hasSubtitle = !!(props.subtitle || slots.subtitle);
19315
+ function onClick() {
19316
+ group?.toggle();
19317
+ }
19318
+ return vue.withDirectives(vue.createVNode("button", {
19319
+ "class": ['v-stepper-item', {
19320
+ 'v-stepper-item--complete': hasCompleted.value,
19321
+ 'v-stepper-item--disabled': props.disabled,
19322
+ 'v-stepper-item--error': hasError.value
19323
+ }, group?.selectedClass.value],
19324
+ "disabled": !props.editable,
19325
+ "onClick": onClick
19326
+ }, [vue.createVNode(VAvatar, {
19327
+ "key": "stepper-avatar",
19328
+ "class": "v-stepper-item__avatar",
19329
+ "color": hasColor ? props.color : undefined,
19330
+ "size": 24
19331
+ }, {
19332
+ default: () => [slots.icon?.(slotProps.value) ?? (icon.value ? vue.createVNode(VIcon, {
19333
+ "icon": icon.value
19334
+ }, null) : step.value)]
19335
+ }), vue.createVNode("div", {
19336
+ "class": "v-stepper-item__content"
19337
+ }, [hasTitle && vue.createVNode("div", {
19338
+ "key": "title",
19339
+ "class": "v-stepper-item__title"
19340
+ }, [slots.title?.(slotProps.value) ?? props.title]), hasSubtitle && vue.createVNode("div", {
19341
+ "key": "subtitle",
19342
+ "class": "v-stepper-item__subtitle"
19343
+ }, [slots.subtitle?.(slotProps.value) ?? props.subtitle]), slots.default?.(slotProps.value)])]), [[vue.resolveDirective("ripple"), props.ripple && props.editable, null]]);
19344
+ });
19345
+ return {};
19346
+ }
19347
+ });
19348
+
19349
+ // Types
19350
+
19351
+ const VStepperSymbol$1 = Symbol.for('vuetify:v-stepper');
19352
+ const makeVStepperWindowProps = propsFactory({
19353
+ ...makeVWindowProps({
19354
+ mandatory: false
19355
+ })
19356
+ }, 'VStepperWindow');
19357
+ const VStepperWindow = genericComponent()({
19358
+ name: 'VStepperWindow',
19359
+ props: makeVStepperWindowProps(),
19360
+ emits: {
19361
+ 'update:modelValue': v => true
19362
+ },
19363
+ setup(props, _ref) {
19364
+ let {
19365
+ slots
19366
+ } = _ref;
19367
+ const group = vue.inject(VStepperSymbol$1, null);
19368
+ const _model = useProxiedModel(props, 'modelValue');
19369
+ const model = vue.computed({
19370
+ get() {
19371
+ // Always return modelValue if defined
19372
+ // or if not within a VStepper group
19373
+ if (_model.value != null || !group) return _model.value;
19374
+
19375
+ // If inside of a VStepper, find the currently selected
19376
+ // item by id. Item value may be assigned by its index
19377
+ return group.items.value.find(item => group.selected.value.includes(item.id))?.value;
19378
+ },
19379
+ set(val) {
19380
+ _model.value = val;
19381
+ }
19382
+ });
19383
+ useRender(() => {
19384
+ const [windowProps] = VWindow.filterProps(props);
19385
+ return vue.createVNode(VWindow, vue.mergeProps(windowProps, {
19386
+ "modelValue": model.value,
19387
+ "onUpdate:modelValue": $event => model.value = $event,
19388
+ "class": "v-stepper-window"
19389
+ }), slots);
19390
+ });
19391
+ return {};
19392
+ }
19393
+ });
19394
+
19395
+ const makeVStepperWindowItemProps = propsFactory({
19396
+ ...makeVWindowItemProps()
19397
+ }, 'VStepperWindowItem');
19398
+ const VStepperWindowItem = genericComponent()({
19399
+ name: 'VStepperWindowItem',
19400
+ props: makeVStepperWindowItemProps(),
19401
+ setup(props, _ref) {
19402
+ let {
19403
+ slots
19404
+ } = _ref;
19405
+ useRender(() => {
19406
+ const [windowItemProps] = VWindowItem.filterProps(props);
19407
+ return vue.createVNode(VWindowItem, vue.mergeProps(windowItemProps, {
19408
+ "class": "v-stepper-window-item"
19409
+ }), slots);
19410
+ });
19411
+ return {};
19412
+ }
19413
+ });
19414
+
19415
+ // Types
19416
+
19417
+ const VStepperSymbol = Symbol.for('vuetify:v-stepper');
19418
+ const makeVStepperProps = propsFactory({
19419
+ altLabels: Boolean,
19420
+ bgColor: String,
19421
+ editable: Boolean,
19422
+ hideActions: Boolean,
19423
+ items: {
19424
+ type: Array,
19425
+ default: () => []
19426
+ },
19427
+ itemTitle: {
19428
+ type: String,
19429
+ default: 'title'
19430
+ },
19431
+ itemValue: {
19432
+ type: String,
19433
+ default: 'value'
19434
+ },
19435
+ mobile: Boolean,
19436
+ nonLinear: Boolean,
19437
+ flat: Boolean,
19438
+ ...makeGroupProps({
19439
+ mandatory: 'force',
19440
+ selectedClass: 'v-stepper-item--selected'
19441
+ }),
19442
+ ...makeVSheetProps(),
19443
+ ...only(makeVStepperActionsProps(), ['prevText', 'nextText'])
19444
+ }, 'VStepper');
19445
+ const VStepper = genericComponent()({
19446
+ name: 'VStepper',
19447
+ props: makeVStepperProps(),
19448
+ emits: {
19449
+ 'update:modelValue': v => true
19450
+ },
19451
+ setup(props, _ref) {
19452
+ let {
19453
+ slots
19454
+ } = _ref;
19455
+ const {
19456
+ items: _items,
19457
+ next,
19458
+ prev,
19459
+ selected
19460
+ } = useGroup(props, VStepperSymbol);
19461
+ const {
19462
+ color,
19463
+ editable,
19464
+ prevText,
19465
+ nextText
19466
+ } = vue.toRefs(props);
19467
+ const items = vue.computed(() => props.items.map((item, index) => {
19468
+ const title = getPropertyFromItem(item, props.itemTitle, item);
19469
+ const value = getPropertyFromItem(item, props.itemValue, index + 1);
19470
+ return {
19471
+ title,
19472
+ value,
19473
+ raw: item
19474
+ };
19475
+ }));
19476
+ const activeIndex = vue.computed(() => {
19477
+ return _items.value.findIndex(item => selected.value.includes(item.id));
19478
+ });
19479
+ const disabled = vue.computed(() => {
19480
+ if (props.disabled) return props.disabled;
19481
+ if (activeIndex.value === 0) return 'prev';
19482
+ if (activeIndex.value === _items.value.length - 1) return 'next';
19483
+ return false;
19484
+ });
19485
+ provideDefaults({
19486
+ VStepperItem: {
19487
+ editable,
19488
+ prevText,
19489
+ nextText
19490
+ },
19491
+ VStepperActions: {
19492
+ color,
19493
+ disabled,
19494
+ prevText,
19495
+ nextText
19496
+ }
19497
+ });
19498
+ useRender(() => {
19499
+ const [sheetProps] = VSheet.filterProps(props);
19500
+ const hasHeader = !!(slots.header || props.items.length);
19501
+ const hasWindow = props.items.length > 0;
19502
+ const hasActions = !props.hideActions && !!(hasWindow || slots.actions);
19503
+ return vue.createVNode(VSheet, vue.mergeProps(sheetProps, {
19504
+ "color": props.bgColor,
19505
+ "class": ['v-stepper', {
19506
+ 'v-stepper--alt-labels': props.altLabels,
19507
+ 'v-stepper--flat': props.flat,
19508
+ 'v-stepper--non-linear': props.nonLinear,
19509
+ 'v-stepper--mobile': props.mobile
19510
+ }, props.class],
19511
+ "style": props.style
19512
+ }), {
19513
+ default: () => [hasHeader && vue.createVNode(VStepperHeader, {
19514
+ "key": "stepper-header"
19515
+ }, {
19516
+ default: () => [items.value.map((item, index) => vue.createVNode(vue.Fragment, null, [!!index && vue.createVNode(VDivider, null, null), vue.createVNode(VStepperItem, item, {
19517
+ default: slots[`header-item.${item.value}`] ?? slots.header,
19518
+ icon: slots.icon,
19519
+ title: slots.title,
19520
+ subtitle: slots.subtitle
19521
+ })]))]
19522
+ }), hasWindow && vue.createVNode(VStepperWindow, {
19523
+ "key": "stepper-window"
19524
+ }, {
19525
+ default: () => [items.value.map(item => vue.createVNode(VStepperWindowItem, {
19526
+ "value": item.value
19527
+ }, {
19528
+ default: () => slots[`item.${item.value}`]?.(item) ?? slots.item?.(item)
19529
+ }))]
19530
+ }), slots.default?.({
19531
+ prev,
19532
+ next
19533
+ }), hasActions && (slots.actions?.({
19534
+ next,
19535
+ prev
19536
+ }) ?? vue.createVNode(VStepperActions, {
19537
+ "key": "stepper-actions",
19538
+ "onClick:prev": prev,
19539
+ "onClick:next": next
19540
+ }, slots))]
19541
+ });
19542
+ });
19543
+ return {
19544
+ prev,
19545
+ next
19546
+ };
19547
+ }
19548
+ });
19549
+
19550
+ // Types
19551
+
18744
19552
  const makeVSwitchProps = propsFactory({
18745
19553
  indeterminate: Boolean,
18746
19554
  inset: Boolean,
@@ -19819,6 +20627,7 @@
19819
20627
  VBannerActions: VBannerActions,
19820
20628
  VBannerText: VBannerText,
19821
20629
  VBottomNavigation: VBottomNavigation,
20630
+ VBottomSheet: VBottomSheet,
19822
20631
  VBreadcrumbs: VBreadcrumbs,
19823
20632
  VBreadcrumbsDivider: VBreadcrumbsDivider,
19824
20633
  VBreadcrumbsItem: VBreadcrumbsItem,
@@ -19867,6 +20676,7 @@
19867
20676
  VHover: VHover,
19868
20677
  VIcon: VIcon,
19869
20678
  VImg: VImg,
20679
+ VInfiniteScroll: VInfiniteScroll,
19870
20680
  VInput: VInput,
19871
20681
  VItem: VItem,
19872
20682
  VItemGroup: VItemGroup,
@@ -19911,6 +20721,7 @@
19911
20721
  VSelectionControl: VSelectionControl,
19912
20722
  VSelectionControlGroup: VSelectionControlGroup,
19913
20723
  VSheet: VSheet,
20724
+ VSkeletonLoader: VSkeletonLoader,
19914
20725
  VSlideGroup: VSlideGroup,
19915
20726
  VSlideGroupItem: VSlideGroupItem,
19916
20727
  VSlideXReverseTransition: VSlideXReverseTransition,
@@ -19920,6 +20731,12 @@
19920
20731
  VSlider: VSlider,
19921
20732
  VSnackbar: VSnackbar,
19922
20733
  VSpacer: VSpacer,
20734
+ VStepper: VStepper,
20735
+ VStepperActions: VStepperActions,
20736
+ VStepperHeader: VStepperHeader,
20737
+ VStepperItem: VStepperItem,
20738
+ VStepperWindow: VStepperWindow,
20739
+ VStepperWindowItem: VStepperWindowItem,
19923
20740
  VSvgIcon: VSvgIcon,
19924
20741
  VSwitch: VSwitch,
19925
20742
  VSystemBar: VSystemBar,
@@ -20300,7 +21117,6 @@
20300
21117
  });
20301
21118
  }
20302
21119
  function format(value, formatString, locale) {
20303
- const date = new Date(value);
20304
21120
  let options = {};
20305
21121
  switch (formatString) {
20306
21122
  case 'fullDateWithWeekday':
@@ -20319,7 +21135,11 @@
20319
21135
  };
20320
21136
  break;
20321
21137
  case 'keyboardDate':
20322
- options = {};
21138
+ options = {
21139
+ day: '2-digit',
21140
+ month: '2-digit',
21141
+ year: 'numeric'
21142
+ };
20323
21143
  break;
20324
21144
  case 'monthAndDate':
20325
21145
  options = {
@@ -20349,7 +21169,7 @@
20349
21169
  timeZoneName: 'short'
20350
21170
  };
20351
21171
  }
20352
- return new Intl.DateTimeFormat(locale, options).format(date);
21172
+ return new Intl.DateTimeFormat(locale, options).format(date(value) ?? undefined);
20353
21173
  }
20354
21174
  function toISO(adapter, value) {
20355
21175
  const date = adapter.toJsDate(value);
@@ -20649,7 +21469,7 @@
20649
21469
  date
20650
21470
  };
20651
21471
  }
20652
- const version$1 = "3.4.0-alpha.1-dev.2023-10-21";
21472
+ const version$1 = "3.4.0-alpha.1-dev.2023-10-28";
20653
21473
  createVuetify$1.version = version$1;
20654
21474
 
20655
21475
  // Vue's inject() can only be used in setup
@@ -20674,7 +21494,7 @@
20674
21494
  ...options
20675
21495
  });
20676
21496
  };
20677
- const version = "3.4.0-alpha.1-dev.2023-10-21";
21497
+ const version = "3.4.0-alpha.1-dev.2023-10-28";
20678
21498
  createVuetify.version = version;
20679
21499
 
20680
21500
  exports.components = components;