@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
@@ -1,10 +1,10 @@
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
  */
6
6
 
7
- import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, warn, ref, unref, provide, shallowRef, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, vModelText } from 'vue';
7
+ import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, warn, ref, unref, provide, shallowRef, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, vModelText } from 'vue';
8
8
 
9
9
  // Types
10
10
  // eslint-disable-line vue/prefer-import-from-vue
@@ -234,6 +234,11 @@ function omit(obj, exclude) {
234
234
  exclude.forEach(prop => delete clone[prop]);
235
235
  return clone;
236
236
  }
237
+ function only(obj, include) {
238
+ const clone = {};
239
+ include.forEach(prop => clone[prop] = obj[prop]);
240
+ return clone;
241
+ }
237
242
  const onRE = /^on[^a-z]/;
238
243
  const isOn = key => onRE.test(key);
239
244
  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'];
@@ -474,6 +479,13 @@ function matchesSelector(el, selector) {
474
479
  return null;
475
480
  }
476
481
  }
482
+ function ensureValidVNode(vnodes) {
483
+ return vnodes.some(child => {
484
+ if (!isVNode(child)) return true;
485
+ if (child.type === Comment) return false;
486
+ return child.type !== Fragment || ensureValidVNode(child.children);
487
+ }) ? vnodes : null;
488
+ }
477
489
 
478
490
  // Utilities
479
491
  const block = ['top', 'bottom'];
@@ -866,6 +878,9 @@ function toXYZ(_ref) {
866
878
  function isCssColor(color) {
867
879
  return !!color && /^(#|var\(--|(rgb|hsl)a?\()/.test(color);
868
880
  }
881
+ function isParsableColor(color) {
882
+ return isCssColor(color) && !/^((rgb|hsl)a?\()?var\(--/.test(color);
883
+ }
869
884
  const cssColorRe = /^(?<fn>(?:rgb|hsl)a?)\((?<values>.+)\)/;
870
885
  const mappers = {
871
886
  rgb: (r, g, b, a) => ({
@@ -3302,7 +3317,7 @@ function useColor(colors) {
3302
3317
  if (colors.value.background) {
3303
3318
  if (isCssColor(colors.value.background)) {
3304
3319
  styles.backgroundColor = colors.value.background;
3305
- if (!colors.value.text) {
3320
+ if (!colors.value.text && isParsableColor(colors.value.background)) {
3306
3321
  const backgroundColor = parseColor(colors.value.background);
3307
3322
  if (backgroundColor.a == null || backgroundColor.a === 1) {
3308
3323
  const textColor = getForeground(backgroundColor);
@@ -11250,6 +11265,16 @@ const VSelect = genericComponent()({
11250
11265
  modelValue: true,
11251
11266
  'onUpdate:modelValue': undefined
11252
11267
  };
11268
+ const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
11269
+ const slotContent = hasSlot ? ensureValidVNode(hasChips ? slots.chip({
11270
+ item,
11271
+ index,
11272
+ props: slotProps
11273
+ }) : slots.selection({
11274
+ item,
11275
+ index
11276
+ })) : undefined;
11277
+ if (hasSlot && !slotContent) return undefined;
11253
11278
  return createVNode("div", {
11254
11279
  "key": item.value,
11255
11280
  "class": "v-select__selection"
@@ -11269,15 +11294,8 @@ const VSelect = genericComponent()({
11269
11294
  }
11270
11295
  }
11271
11296
  }, {
11272
- default: () => [slots.chip?.({
11273
- item,
11274
- index,
11275
- props: slotProps
11276
- })]
11277
- }) : slots.selection?.({
11278
- item,
11279
- index
11280
- }) ?? createVNode("span", {
11297
+ default: () => [slotContent]
11298
+ }) : slotContent ?? createVNode("span", {
11281
11299
  "class": "v-select__selection-text"
11282
11300
  }, [item.title, props.multiple && index < model.value.length - 1 && createVNode("span", {
11283
11301
  "class": "v-select__selection-comma"
@@ -11778,6 +11796,16 @@ const VAutocomplete = genericComponent()({
11778
11796
  modelValue: true,
11779
11797
  'onUpdate:modelValue': undefined
11780
11798
  };
11799
+ const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
11800
+ const slotContent = hasSlot ? ensureValidVNode(hasChips ? slots.chip({
11801
+ item,
11802
+ index,
11803
+ props: slotProps
11804
+ }) : slots.selection({
11805
+ item,
11806
+ index
11807
+ })) : undefined;
11808
+ if (hasSlot && !slotContent) return undefined;
11781
11809
  return createVNode("div", {
11782
11810
  "key": item.value,
11783
11811
  "class": ['v-autocomplete__selection', index === selectionIndex.value && ['v-autocomplete__selection--selected', textColorClasses.value]],
@@ -11798,15 +11826,8 @@ const VAutocomplete = genericComponent()({
11798
11826
  }
11799
11827
  }
11800
11828
  }, {
11801
- default: () => [slots.chip?.({
11802
- item,
11803
- index,
11804
- props: slotProps
11805
- })]
11806
- }) : slots.selection?.({
11807
- item,
11808
- index
11809
- }) ?? createVNode("span", {
11829
+ default: () => [slotContent]
11830
+ }) : slotContent ?? createVNode("span", {
11810
11831
  "class": "v-autocomplete__selection-text"
11811
11832
  }, [item.title, props.multiple && index < model.value.length - 1 && createVNode("span", {
11812
11833
  "class": "v-autocomplete__selection-comma"
@@ -12191,6 +12212,151 @@ const VBottomNavigation = genericComponent()({
12191
12212
  }
12192
12213
  });
12193
12214
 
12215
+ // Types
12216
+
12217
+ const makeVDialogProps = propsFactory({
12218
+ fullscreen: Boolean,
12219
+ retainFocus: {
12220
+ type: Boolean,
12221
+ default: true
12222
+ },
12223
+ scrollable: Boolean,
12224
+ ...makeVOverlayProps({
12225
+ origin: 'center center',
12226
+ scrollStrategy: 'block',
12227
+ transition: {
12228
+ component: VDialogTransition
12229
+ },
12230
+ zIndex: 2400
12231
+ })
12232
+ }, 'VDialog');
12233
+ const VDialog = genericComponent()({
12234
+ name: 'VDialog',
12235
+ props: makeVDialogProps(),
12236
+ emits: {
12237
+ 'update:modelValue': value => true
12238
+ },
12239
+ setup(props, _ref) {
12240
+ let {
12241
+ slots
12242
+ } = _ref;
12243
+ const isActive = useProxiedModel(props, 'modelValue');
12244
+ const {
12245
+ scopeId
12246
+ } = useScopeId();
12247
+ const overlay = ref();
12248
+ function onFocusin(e) {
12249
+ const before = e.relatedTarget;
12250
+ const after = e.target;
12251
+ if (before !== after && overlay.value?.contentEl &&
12252
+ // We're the topmost dialog
12253
+ overlay.value?.globalTop &&
12254
+ // It isn't the document or the dialog body
12255
+ ![document, overlay.value.contentEl].includes(after) &&
12256
+ // It isn't inside the dialog body
12257
+ !overlay.value.contentEl.contains(after)) {
12258
+ const focusable = focusableChildren(overlay.value.contentEl);
12259
+ if (!focusable.length) return;
12260
+ const firstElement = focusable[0];
12261
+ const lastElement = focusable[focusable.length - 1];
12262
+ if (before === firstElement) {
12263
+ lastElement.focus();
12264
+ } else {
12265
+ firstElement.focus();
12266
+ }
12267
+ }
12268
+ }
12269
+ if (IN_BROWSER) {
12270
+ watch(() => isActive.value && props.retainFocus, val => {
12271
+ val ? document.addEventListener('focusin', onFocusin) : document.removeEventListener('focusin', onFocusin);
12272
+ }, {
12273
+ immediate: true
12274
+ });
12275
+ }
12276
+ watch(isActive, async val => {
12277
+ await nextTick();
12278
+ if (val) {
12279
+ overlay.value.contentEl?.focus({
12280
+ preventScroll: true
12281
+ });
12282
+ } else {
12283
+ overlay.value.activatorEl?.focus({
12284
+ preventScroll: true
12285
+ });
12286
+ }
12287
+ });
12288
+ const activatorProps = computed(() => mergeProps({
12289
+ 'aria-haspopup': 'dialog',
12290
+ 'aria-expanded': String(isActive.value)
12291
+ }, props.activatorProps));
12292
+ useRender(() => {
12293
+ const [overlayProps] = VOverlay.filterProps(props);
12294
+ return createVNode(VOverlay, mergeProps({
12295
+ "ref": overlay,
12296
+ "class": ['v-dialog', {
12297
+ 'v-dialog--fullscreen': props.fullscreen,
12298
+ 'v-dialog--scrollable': props.scrollable
12299
+ }, props.class],
12300
+ "style": props.style
12301
+ }, overlayProps, {
12302
+ "modelValue": isActive.value,
12303
+ "onUpdate:modelValue": $event => isActive.value = $event,
12304
+ "aria-modal": "true",
12305
+ "activatorProps": activatorProps.value,
12306
+ "role": "dialog"
12307
+ }, scopeId), {
12308
+ activator: slots.activator,
12309
+ default: function () {
12310
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
12311
+ args[_key] = arguments[_key];
12312
+ }
12313
+ return createVNode(VDefaultsProvider, {
12314
+ "root": "VDialog"
12315
+ }, {
12316
+ default: () => [slots.default?.(...args)]
12317
+ });
12318
+ }
12319
+ });
12320
+ });
12321
+ return forwardRefs({}, overlay);
12322
+ }
12323
+ });
12324
+
12325
+ // Types
12326
+
12327
+ const makeVBottomSheetProps = propsFactory({
12328
+ inset: Boolean,
12329
+ ...makeVDialogProps({
12330
+ transition: 'bottom-sheet-transition'
12331
+ })
12332
+ }, 'VBottomSheet');
12333
+ const VBottomSheet = genericComponent()({
12334
+ name: 'VBottomSheet',
12335
+ props: makeVBottomSheetProps(),
12336
+ emits: {
12337
+ 'update:modelValue': value => true
12338
+ },
12339
+ setup(props, _ref) {
12340
+ let {
12341
+ slots
12342
+ } = _ref;
12343
+ const isActive = useProxiedModel(props, 'modelValue');
12344
+ useRender(() => {
12345
+ const [dialogProps] = VDialog.filterProps(props);
12346
+ return createVNode(VDialog, mergeProps(dialogProps, {
12347
+ "contentClass": ['v-bottom-sheet__content', props.contentClass],
12348
+ "modelValue": isActive.value,
12349
+ "onUpdate:modelValue": $event => isActive.value = $event,
12350
+ "class": ['v-bottom-sheet', {
12351
+ 'v-bottom-sheet--inset': props.inset
12352
+ }, props.class],
12353
+ "style": props.style
12354
+ }), slots);
12355
+ });
12356
+ return {};
12357
+ }
12358
+ });
12359
+
12194
12360
  const makeVBreadcrumbsDividerProps = propsFactory({
12195
12361
  divider: [Number, String],
12196
12362
  ...makeComponentProps()
@@ -15373,6 +15539,16 @@ const VCombobox = genericComponent()({
15373
15539
  modelValue: true,
15374
15540
  'onUpdate:modelValue': undefined
15375
15541
  };
15542
+ const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
15543
+ const slotContent = hasSlot ? ensureValidVNode(hasChips ? slots.chip({
15544
+ item,
15545
+ index,
15546
+ props: slotProps
15547
+ }) : slots.selection({
15548
+ item,
15549
+ index
15550
+ })) : undefined;
15551
+ if (hasSlot && !slotContent) return undefined;
15376
15552
  return createVNode("div", {
15377
15553
  "key": item.value,
15378
15554
  "class": ['v-combobox__selection', index === selectionIndex.value && ['v-combobox__selection--selected', textColorClasses.value]],
@@ -15393,15 +15569,8 @@ const VCombobox = genericComponent()({
15393
15569
  }
15394
15570
  }
15395
15571
  }, {
15396
- default: () => [slots.chip?.({
15397
- item,
15398
- index,
15399
- props: slotProps
15400
- })]
15401
- }) : slots.selection?.({
15402
- item,
15403
- index
15404
- }) ?? createVNode("span", {
15572
+ default: () => [slotContent]
15573
+ }) : slotContent ?? createVNode("span", {
15405
15574
  "class": "v-combobox__selection-text"
15406
15575
  }, [item.title, props.multiple && index < model.value.length - 1 && createVNode("span", {
15407
15576
  "class": "v-combobox__selection-comma"
@@ -15436,154 +15605,44 @@ const VCombobox = genericComponent()({
15436
15605
 
15437
15606
  // Types
15438
15607
 
15439
- const makeVDialogProps = propsFactory({
15440
- fullscreen: Boolean,
15441
- retainFocus: {
15442
- type: Boolean,
15443
- default: true
15608
+ const VExpansionPanelSymbol = Symbol.for('vuetify:v-expansion-panel');
15609
+ const allowedVariants = ['default', 'accordion', 'inset', 'popout'];
15610
+ const makeVExpansionPanelsProps = propsFactory({
15611
+ color: String,
15612
+ static: Boolean,
15613
+ variant: {
15614
+ type: String,
15615
+ default: 'default',
15616
+ validator: v => allowedVariants.includes(v)
15444
15617
  },
15445
- scrollable: Boolean,
15446
- ...makeVOverlayProps({
15447
- origin: 'center center',
15448
- scrollStrategy: 'block',
15449
- transition: {
15450
- component: VDialogTransition
15451
- },
15452
- zIndex: 2400
15453
- })
15454
- }, 'VDialog');
15455
- const VDialog = genericComponent()({
15456
- name: 'VDialog',
15457
- props: makeVDialogProps(),
15618
+ readonly: Boolean,
15619
+ ...makeComponentProps(),
15620
+ ...makeGroupProps(),
15621
+ ...makeTagProps(),
15622
+ ...makeThemeProps()
15623
+ }, 'VExpansionPanels');
15624
+ const VExpansionPanels = genericComponent()({
15625
+ name: 'VExpansionPanels',
15626
+ props: makeVExpansionPanelsProps(),
15458
15627
  emits: {
15459
- 'update:modelValue': value => true
15628
+ 'update:modelValue': val => true
15460
15629
  },
15461
15630
  setup(props, _ref) {
15462
15631
  let {
15463
15632
  slots
15464
15633
  } = _ref;
15465
- const isActive = useProxiedModel(props, 'modelValue');
15634
+ useGroup(props, VExpansionPanelSymbol);
15466
15635
  const {
15467
- scopeId
15468
- } = useScopeId();
15469
- const overlay = ref();
15470
- function onFocusin(e) {
15471
- const before = e.relatedTarget;
15472
- const after = e.target;
15473
- if (before !== after && overlay.value?.contentEl &&
15474
- // We're the topmost dialog
15475
- overlay.value?.globalTop &&
15476
- // It isn't the document or the dialog body
15477
- ![document, overlay.value.contentEl].includes(after) &&
15478
- // It isn't inside the dialog body
15479
- !overlay.value.contentEl.contains(after)) {
15480
- const focusable = focusableChildren(overlay.value.contentEl);
15481
- if (!focusable.length) return;
15482
- const firstElement = focusable[0];
15483
- const lastElement = focusable[focusable.length - 1];
15484
- if (before === firstElement) {
15485
- lastElement.focus();
15486
- } else {
15487
- firstElement.focus();
15488
- }
15489
- }
15490
- }
15491
- if (IN_BROWSER) {
15492
- watch(() => isActive.value && props.retainFocus, val => {
15493
- val ? document.addEventListener('focusin', onFocusin) : document.removeEventListener('focusin', onFocusin);
15494
- }, {
15495
- immediate: true
15496
- });
15497
- }
15498
- watch(isActive, async val => {
15499
- await nextTick();
15500
- if (val) {
15501
- overlay.value.contentEl?.focus({
15502
- preventScroll: true
15503
- });
15504
- } else {
15505
- overlay.value.activatorEl?.focus({
15506
- preventScroll: true
15507
- });
15508
- }
15509
- });
15510
- const activatorProps = computed(() => mergeProps({
15511
- 'aria-haspopup': 'dialog',
15512
- 'aria-expanded': String(isActive.value)
15513
- }, props.activatorProps));
15514
- useRender(() => {
15515
- const [overlayProps] = VOverlay.filterProps(props);
15516
- return createVNode(VOverlay, mergeProps({
15517
- "ref": overlay,
15518
- "class": ['v-dialog', {
15519
- 'v-dialog--fullscreen': props.fullscreen,
15520
- 'v-dialog--scrollable': props.scrollable
15521
- }, props.class],
15522
- "style": props.style
15523
- }, overlayProps, {
15524
- "modelValue": isActive.value,
15525
- "onUpdate:modelValue": $event => isActive.value = $event,
15526
- "aria-modal": "true",
15527
- "activatorProps": activatorProps.value,
15528
- "role": "dialog"
15529
- }, scopeId), {
15530
- activator: slots.activator,
15531
- default: function () {
15532
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
15533
- args[_key] = arguments[_key];
15534
- }
15535
- return createVNode(VDefaultsProvider, {
15536
- "root": "VDialog"
15537
- }, {
15538
- default: () => [slots.default?.(...args)]
15539
- });
15540
- }
15541
- });
15542
- });
15543
- return forwardRefs({}, overlay);
15544
- }
15545
- });
15546
-
15547
- // Types
15548
-
15549
- const VExpansionPanelSymbol = Symbol.for('vuetify:v-expansion-panel');
15550
- const allowedVariants = ['default', 'accordion', 'inset', 'popout'];
15551
- const makeVExpansionPanelsProps = propsFactory({
15552
- color: String,
15553
- static: Boolean,
15554
- variant: {
15555
- type: String,
15556
- default: 'default',
15557
- validator: v => allowedVariants.includes(v)
15558
- },
15559
- readonly: Boolean,
15560
- ...makeComponentProps(),
15561
- ...makeGroupProps(),
15562
- ...makeTagProps(),
15563
- ...makeThemeProps()
15564
- }, 'VExpansionPanels');
15565
- const VExpansionPanels = genericComponent()({
15566
- name: 'VExpansionPanels',
15567
- props: makeVExpansionPanelsProps(),
15568
- emits: {
15569
- 'update:modelValue': val => true
15570
- },
15571
- setup(props, _ref) {
15572
- let {
15573
- slots
15574
- } = _ref;
15575
- useGroup(props, VExpansionPanelSymbol);
15576
- const {
15577
- themeClasses
15578
- } = provideTheme(props);
15579
- const variantClass = computed(() => props.variant && `v-expansion-panels--variant-${props.variant}`);
15580
- provideDefaults({
15581
- VExpansionPanel: {
15582
- color: toRef(props, 'color')
15583
- },
15584
- VExpansionPanelTitle: {
15585
- readonly: toRef(props, 'readonly'),
15586
- static: toRef(props, 'static')
15636
+ themeClasses
15637
+ } = provideTheme(props);
15638
+ const variantClass = computed(() => props.variant && `v-expansion-panels--variant-${props.variant}`);
15639
+ provideDefaults({
15640
+ VExpansionPanel: {
15641
+ color: toRef(props, 'color')
15642
+ },
15643
+ VExpansionPanelTitle: {
15644
+ readonly: toRef(props, 'readonly'),
15645
+ static: toRef(props, 'static')
15587
15646
  }
15588
15647
  });
15589
15648
  useRender(() => createVNode(props.tag, {
@@ -16422,6 +16481,235 @@ const VHover = genericComponent()({
16422
16481
  }
16423
16482
  });
16424
16483
 
16484
+ // Types
16485
+
16486
+ const makeVInfiniteScrollProps = propsFactory({
16487
+ color: String,
16488
+ direction: {
16489
+ type: String,
16490
+ default: 'vertical',
16491
+ validator: v => ['vertical', 'horizontal'].includes(v)
16492
+ },
16493
+ side: {
16494
+ type: String,
16495
+ default: 'end',
16496
+ validator: v => ['start', 'end', 'both'].includes(v)
16497
+ },
16498
+ mode: {
16499
+ type: String,
16500
+ default: 'intersect',
16501
+ validator: v => ['intersect', 'manual'].includes(v)
16502
+ },
16503
+ margin: [Number, String],
16504
+ loadMoreText: {
16505
+ type: String,
16506
+ default: '$vuetify.infiniteScroll.loadMore'
16507
+ },
16508
+ emptyText: {
16509
+ type: String,
16510
+ default: '$vuetify.infiniteScroll.empty'
16511
+ },
16512
+ ...makeDimensionProps(),
16513
+ ...makeTagProps()
16514
+ }, 'VInfiniteScroll');
16515
+ const VInfiniteScrollIntersect = defineComponent({
16516
+ name: 'VInfiniteScrollIntersect',
16517
+ props: {
16518
+ side: {
16519
+ type: String,
16520
+ required: true
16521
+ },
16522
+ rootRef: null,
16523
+ rootMargin: String
16524
+ },
16525
+ emits: {
16526
+ intersect: (side, isIntersecting) => true
16527
+ },
16528
+ setup(props, _ref) {
16529
+ let {
16530
+ emit
16531
+ } = _ref;
16532
+ const {
16533
+ intersectionRef,
16534
+ isIntersecting
16535
+ } = useIntersectionObserver(entries => {}, props.rootMargin ? {
16536
+ rootMargin: props.rootMargin
16537
+ } : undefined);
16538
+ watch(isIntersecting, async val => {
16539
+ emit('intersect', props.side, val);
16540
+ });
16541
+ useRender(() => createVNode("div", {
16542
+ "class": "v-infinite-scroll-intersect",
16543
+ "ref": intersectionRef
16544
+ }, [createTextVNode("\xA0")]));
16545
+ return {};
16546
+ }
16547
+ });
16548
+ const VInfiniteScroll = genericComponent()({
16549
+ name: 'VInfiniteScroll',
16550
+ props: makeVInfiniteScrollProps(),
16551
+ emits: {
16552
+ load: options => true
16553
+ },
16554
+ setup(props, _ref2) {
16555
+ let {
16556
+ slots,
16557
+ emit
16558
+ } = _ref2;
16559
+ const rootEl = ref();
16560
+ const startStatus = shallowRef('ok');
16561
+ const endStatus = shallowRef('ok');
16562
+ const margin = computed(() => convertToUnit(props.margin));
16563
+ const isIntersecting = shallowRef(false);
16564
+ function setScrollAmount(amount) {
16565
+ if (!rootEl.value) return;
16566
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
16567
+ rootEl.value[property] = amount;
16568
+ }
16569
+ function getScrollAmount() {
16570
+ if (!rootEl.value) return 0;
16571
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
16572
+ return rootEl.value[property];
16573
+ }
16574
+ function getScrollSize() {
16575
+ if (!rootEl.value) return 0;
16576
+ const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth';
16577
+ return rootEl.value[property];
16578
+ }
16579
+ function getContainerSize() {
16580
+ if (!rootEl.value) return 0;
16581
+ const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth';
16582
+ return rootEl.value[property];
16583
+ }
16584
+ onMounted(() => {
16585
+ if (!rootEl.value) return;
16586
+ if (props.side === 'start') {
16587
+ setScrollAmount(getScrollSize());
16588
+ } else if (props.side === 'both') {
16589
+ setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2);
16590
+ }
16591
+ });
16592
+ function setStatus(side, status) {
16593
+ if (side === 'start') {
16594
+ startStatus.value = status;
16595
+ } else if (side === 'end') {
16596
+ endStatus.value = status;
16597
+ }
16598
+ }
16599
+ function getStatus(side) {
16600
+ return side === 'start' ? startStatus.value : endStatus.value;
16601
+ }
16602
+ let previousScrollSize = 0;
16603
+ function handleIntersect(side, _isIntersecting) {
16604
+ isIntersecting.value = _isIntersecting;
16605
+ if (isIntersecting.value) {
16606
+ intersecting(side);
16607
+ }
16608
+ }
16609
+ function intersecting(side) {
16610
+ if (props.mode !== 'manual' && !isIntersecting.value) return;
16611
+ const status = getStatus(side);
16612
+ if (!rootEl.value || status === 'loading') return;
16613
+ previousScrollSize = getScrollSize();
16614
+ setStatus(side, 'loading');
16615
+ function done(status) {
16616
+ setStatus(side, status);
16617
+ nextTick(() => {
16618
+ if (status === 'empty' || status === 'error') return;
16619
+ if (status === 'ok' && side === 'start') {
16620
+ setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
16621
+ }
16622
+ if (props.mode !== 'manual') {
16623
+ nextTick(() => {
16624
+ window.requestAnimationFrame(() => {
16625
+ window.requestAnimationFrame(() => {
16626
+ window.requestAnimationFrame(() => {
16627
+ intersecting(side);
16628
+ });
16629
+ });
16630
+ });
16631
+ });
16632
+ }
16633
+ });
16634
+ }
16635
+ emit('load', {
16636
+ side,
16637
+ done
16638
+ });
16639
+ }
16640
+ const {
16641
+ t
16642
+ } = useLocale();
16643
+ function renderSide(side, status) {
16644
+ if (props.side !== side && props.side !== 'both') return;
16645
+ const onClick = () => intersecting(side);
16646
+ const slotProps = {
16647
+ side,
16648
+ props: {
16649
+ onClick,
16650
+ color: props.color
16651
+ }
16652
+ };
16653
+ if (status === 'error') return slots.error?.(slotProps);
16654
+ if (status === 'empty') return slots.empty?.(slotProps) ?? createVNode("div", null, [t(props.emptyText)]);
16655
+ if (props.mode === 'manual') {
16656
+ if (status === 'loading') {
16657
+ return slots.loading?.(slotProps) ?? createVNode(VProgressCircular, {
16658
+ "indeterminate": true,
16659
+ "color": props.color
16660
+ }, null);
16661
+ }
16662
+ return slots['load-more']?.(slotProps) ?? createVNode(VBtn, {
16663
+ "variant": "outlined",
16664
+ "color": props.color,
16665
+ "onClick": onClick
16666
+ }, {
16667
+ default: () => [t(props.loadMoreText)]
16668
+ });
16669
+ }
16670
+ return slots.loading?.(slotProps) ?? createVNode(VProgressCircular, {
16671
+ "indeterminate": true,
16672
+ "color": props.color
16673
+ }, null);
16674
+ }
16675
+ const {
16676
+ dimensionStyles
16677
+ } = useDimension(props);
16678
+ useRender(() => {
16679
+ const Tag = props.tag;
16680
+ const hasStartIntersect = props.side === 'start' || props.side === 'both';
16681
+ const hasEndIntersect = props.side === 'end' || props.side === 'both';
16682
+ const intersectMode = props.mode === 'intersect';
16683
+ return createVNode(Tag, {
16684
+ "ref": rootEl,
16685
+ "class": ['v-infinite-scroll', `v-infinite-scroll--${props.direction}`, {
16686
+ 'v-infinite-scroll--start': hasStartIntersect,
16687
+ 'v-infinite-scroll--end': hasEndIntersect
16688
+ }],
16689
+ "style": dimensionStyles.value
16690
+ }, {
16691
+ default: () => [createVNode("div", {
16692
+ "class": "v-infinite-scroll__side"
16693
+ }, [renderSide('start', startStatus.value)]), rootEl.value && hasStartIntersect && intersectMode && createVNode(VInfiniteScrollIntersect, {
16694
+ "key": "start",
16695
+ "side": "start",
16696
+ "onIntersect": handleIntersect,
16697
+ "rootRef": rootEl.value,
16698
+ "rootMargin": margin.value
16699
+ }, null), slots.default?.(), rootEl.value && hasEndIntersect && intersectMode && createVNode(VInfiniteScrollIntersect, {
16700
+ "key": "end",
16701
+ "side": "end",
16702
+ "onIntersect": handleIntersect,
16703
+ "rootRef": rootEl.value,
16704
+ "rootMargin": margin.value
16705
+ }, null), createVNode("div", {
16706
+ "class": "v-infinite-scroll__side"
16707
+ }, [renderSide('end', endStatus.value)])]
16708
+ });
16709
+ });
16710
+ }
16711
+ });
16712
+
16425
16713
  const VItemGroupSymbol = Symbol.for('vuetify:v-item-group');
16426
16714
  const makeVItemGroupProps = propsFactory({
16427
16715
  ...makeComponentProps(),
@@ -18174,6 +18462,140 @@ const VRating = genericComponent()({
18174
18462
  }
18175
18463
  });
18176
18464
 
18465
+ // Types
18466
+
18467
+ const rootTypes = {
18468
+ actions: 'button@2',
18469
+ article: 'heading, paragraph',
18470
+ avatar: 'avatar',
18471
+ button: 'button',
18472
+ card: 'image, heading',
18473
+ 'card-avatar': 'image, list-item-avatar',
18474
+ chip: 'chip',
18475
+ 'date-picker': 'list-item, heading, divider, date-picker-options, date-picker-days, actions',
18476
+ 'date-picker-options': 'text, avatar@2',
18477
+ 'date-picker-days': 'avatar@28',
18478
+ divider: 'divider',
18479
+ heading: 'heading',
18480
+ image: 'image',
18481
+ 'list-item': 'text',
18482
+ 'list-item-avatar': 'avatar, text',
18483
+ 'list-item-two-line': 'sentences',
18484
+ 'list-item-avatar-two-line': 'avatar, sentences',
18485
+ 'list-item-three-line': 'paragraph',
18486
+ 'list-item-avatar-three-line': 'avatar, paragraph',
18487
+ ossein: 'ossein',
18488
+ paragraph: 'text@3',
18489
+ sentences: 'text@2',
18490
+ subtitle: 'text',
18491
+ table: 'table-heading, table-thead, table-tbody, table-tfoot',
18492
+ 'table-heading': 'chip, text',
18493
+ 'table-thead': 'heading@6',
18494
+ 'table-tbody': 'table-row-divider@6',
18495
+ 'table-row-divider': 'table-row, divider',
18496
+ 'table-row': 'text@6',
18497
+ 'table-tfoot': 'text@2, avatar@2',
18498
+ text: 'text'
18499
+ };
18500
+ function genBone(type) {
18501
+ let children = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
18502
+ return createVNode("div", {
18503
+ "class": ['v-skeleton-loader__bone', `v-skeleton-loader__${type}`]
18504
+ }, [children]);
18505
+ }
18506
+ function genBones(bone) {
18507
+ // e.g. 'text@3'
18508
+ const [type, length] = bone.split('@');
18509
+
18510
+ // Generate a length array based upon
18511
+ // value after @ in the bone string
18512
+ return Array.from({
18513
+ length
18514
+ }).map(() => genStructure(type));
18515
+ }
18516
+ function genStructure(type) {
18517
+ let children = [];
18518
+ if (!type) return children;
18519
+
18520
+ // TODO: figure out a better way to type this
18521
+ const bone = rootTypes[type];
18522
+
18523
+ // End of recursion, do nothing
18524
+ /* eslint-disable-next-line no-empty, brace-style */
18525
+ if (type === bone) ;
18526
+ // Array of values - e.g. 'heading, paragraph, text@2'
18527
+ else if (type.includes(',')) return mapBones(type);
18528
+ // Array of values - e.g. 'paragraph@4'
18529
+ else if (type.includes('@')) return genBones(type);
18530
+ // Array of values - e.g. 'card@2'
18531
+ else if (bone.includes(',')) children = mapBones(bone);
18532
+ // Array of values - e.g. 'list-item@2'
18533
+ else if (bone.includes('@')) children = genBones(bone);
18534
+ // Single value - e.g. 'card-heading'
18535
+ else if (bone) children.push(genStructure(bone));
18536
+ return [genBone(type, children)];
18537
+ }
18538
+ function mapBones(bones) {
18539
+ // Remove spaces and return array of structures
18540
+ return bones.replace(/\s/g, '').split(',').map(genStructure);
18541
+ }
18542
+ const makeVSkeletonLoaderProps = propsFactory({
18543
+ boilerplate: Boolean,
18544
+ color: String,
18545
+ loading: Boolean,
18546
+ loadingText: {
18547
+ type: String,
18548
+ default: '$vuetify.loading'
18549
+ },
18550
+ type: {
18551
+ type: [String, Array],
18552
+ default: 'ossein'
18553
+ },
18554
+ ...makeDimensionProps(),
18555
+ ...makeElevationProps(),
18556
+ ...makeThemeProps()
18557
+ }, 'VSkeletonLoader');
18558
+ const VSkeletonLoader = genericComponent()({
18559
+ name: 'VSkeletonLoader',
18560
+ props: makeVSkeletonLoaderProps(),
18561
+ setup(props, _ref) {
18562
+ let {
18563
+ slots
18564
+ } = _ref;
18565
+ const {
18566
+ backgroundColorClasses,
18567
+ backgroundColorStyles
18568
+ } = useBackgroundColor(toRef(props, 'color'));
18569
+ const {
18570
+ dimensionStyles
18571
+ } = useDimension(props);
18572
+ const {
18573
+ elevationClasses
18574
+ } = useElevation(props);
18575
+ const {
18576
+ themeClasses
18577
+ } = provideTheme(props);
18578
+ const {
18579
+ t
18580
+ } = useLocale();
18581
+ const items = computed(() => genStructure(wrapInArray(props.type).join(',')));
18582
+ useRender(() => {
18583
+ const isLoading = !slots.default || props.loading;
18584
+ return createVNode("div", {
18585
+ "class": ['v-skeleton-loader', {
18586
+ 'v-skeleton-loader--boilerplate': props.boilerplate
18587
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
18588
+ "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}],
18589
+ "aria-busy": !props.boilerplate ? isLoading : undefined,
18590
+ "aria-live": !props.boilerplate ? 'polite' : undefined,
18591
+ "aria-label": !props.boilerplate ? t(props.loadingText) : undefined,
18592
+ "role": !props.boilerplate ? 'alert' : undefined
18593
+ }, [isLoading ? items.value : slots.default?.()]);
18594
+ });
18595
+ return {};
18596
+ }
18597
+ });
18598
+
18177
18599
  function bias(val) {
18178
18600
  const c = 0.501;
18179
18601
  const x = Math.abs(val);
@@ -18737,6 +19159,392 @@ const VSnackbar = genericComponent()({
18737
19159
 
18738
19160
  // Types
18739
19161
 
19162
+ const makeVStepperActionsProps = propsFactory({
19163
+ color: String,
19164
+ disabled: {
19165
+ type: [Boolean, String],
19166
+ default: false
19167
+ },
19168
+ prevText: {
19169
+ type: String,
19170
+ default: '$vuetify.stepper.prev'
19171
+ },
19172
+ nextText: {
19173
+ type: String,
19174
+ default: '$vuetify.stepper.next'
19175
+ }
19176
+ }, 'VStepperActions');
19177
+ const VStepperActions = genericComponent()({
19178
+ name: 'VStepperActions',
19179
+ props: makeVStepperActionsProps(),
19180
+ emits: {
19181
+ 'click:prev': () => true,
19182
+ 'click:next': () => true
19183
+ },
19184
+ setup(props, _ref) {
19185
+ let {
19186
+ emit,
19187
+ slots
19188
+ } = _ref;
19189
+ const {
19190
+ t
19191
+ } = useLocale();
19192
+ function onClickPrev() {
19193
+ emit('click:prev');
19194
+ }
19195
+ function onClickNext() {
19196
+ emit('click:next');
19197
+ }
19198
+ useRender(() => {
19199
+ const prevSlotProps = {
19200
+ onClick: onClickPrev
19201
+ };
19202
+ const nextSlotProps = {
19203
+ onClick: onClickNext
19204
+ };
19205
+ return createVNode("div", {
19206
+ "class": "v-stepper-actions"
19207
+ }, [createVNode(VDefaultsProvider, {
19208
+ "defaults": {
19209
+ VBtn: {
19210
+ disabled: ['prev', true].includes(props.disabled),
19211
+ text: t(props.prevText),
19212
+ variant: 'text'
19213
+ }
19214
+ }
19215
+ }, {
19216
+ default: () => [slots.prev?.({
19217
+ props: prevSlotProps
19218
+ }) ?? createVNode(VBtn, prevSlotProps, null)]
19219
+ }), createVNode(VDefaultsProvider, {
19220
+ "defaults": {
19221
+ VBtn: {
19222
+ color: props.color,
19223
+ disabled: ['next', true].includes(props.disabled),
19224
+ text: t(props.nextText),
19225
+ variant: 'tonal'
19226
+ }
19227
+ }
19228
+ }, {
19229
+ default: () => [slots.next?.({
19230
+ props: nextSlotProps
19231
+ }) ?? createVNode(VBtn, nextSlotProps, null)]
19232
+ })]);
19233
+ });
19234
+ return {};
19235
+ }
19236
+ });
19237
+
19238
+ // Utilities
19239
+ const VStepperHeader = createSimpleFunctional('v-stepper-header');
19240
+
19241
+ // Types
19242
+
19243
+ const makeVStepperItemProps = propsFactory({
19244
+ color: String,
19245
+ title: String,
19246
+ subtitle: String,
19247
+ complete: Boolean,
19248
+ completeIcon: {
19249
+ type: String,
19250
+ default: '$complete'
19251
+ },
19252
+ editable: Boolean,
19253
+ editIcon: {
19254
+ type: String,
19255
+ default: '$edit'
19256
+ },
19257
+ error: Boolean,
19258
+ errorIcon: {
19259
+ type: String,
19260
+ default: '$error'
19261
+ },
19262
+ icon: String,
19263
+ ripple: {
19264
+ type: [Boolean, Object],
19265
+ default: true
19266
+ },
19267
+ rules: {
19268
+ type: Array,
19269
+ default: () => []
19270
+ },
19271
+ ...makeGroupItemProps()
19272
+ }, 'VStepperItem');
19273
+ const VStepperItem = genericComponent()({
19274
+ name: 'VStepperItem',
19275
+ directives: {
19276
+ Ripple
19277
+ },
19278
+ props: makeVStepperItemProps(),
19279
+ emits: {
19280
+ 'group:selected': val => true
19281
+ },
19282
+ setup(props, _ref) {
19283
+ let {
19284
+ slots
19285
+ } = _ref;
19286
+ const group = useGroupItem(props, VStepperSymbol, true);
19287
+ const step = computed(() => group?.value.value ?? props.value);
19288
+ const isValid = computed(() => props.rules.every(handler => handler() === true));
19289
+ const canEdit = computed(() => !props.disabled && props.editable);
19290
+ const hasError = computed(() => props.error || !isValid.value);
19291
+ const hasCompleted = computed(() => props.complete || props.rules.length > 0 && isValid.value);
19292
+ const icon = computed(() => {
19293
+ if (hasError.value) return props.errorIcon;
19294
+ if (hasCompleted.value) return props.completeIcon;
19295
+ if (props.editable) return props.editIcon;
19296
+ return props.icon;
19297
+ });
19298
+ const slotProps = computed(() => ({
19299
+ canEdit: canEdit.value,
19300
+ hasError: hasError.value,
19301
+ hasCompleted: hasCompleted.value,
19302
+ title: props.title,
19303
+ subtitle: props.subtitle,
19304
+ step: step.value,
19305
+ value: props.value
19306
+ }));
19307
+ useRender(() => {
19308
+ const hasColor = (!group || group.isSelected.value || hasCompleted.value || canEdit.value) && !hasError.value && !props.disabled;
19309
+ const hasTitle = !!(props.title || slots.title);
19310
+ const hasSubtitle = !!(props.subtitle || slots.subtitle);
19311
+ function onClick() {
19312
+ group?.toggle();
19313
+ }
19314
+ return withDirectives(createVNode("button", {
19315
+ "class": ['v-stepper-item', {
19316
+ 'v-stepper-item--complete': hasCompleted.value,
19317
+ 'v-stepper-item--disabled': props.disabled,
19318
+ 'v-stepper-item--error': hasError.value
19319
+ }, group?.selectedClass.value],
19320
+ "disabled": !props.editable,
19321
+ "onClick": onClick
19322
+ }, [createVNode(VAvatar, {
19323
+ "key": "stepper-avatar",
19324
+ "class": "v-stepper-item__avatar",
19325
+ "color": hasColor ? props.color : undefined,
19326
+ "size": 24
19327
+ }, {
19328
+ default: () => [slots.icon?.(slotProps.value) ?? (icon.value ? createVNode(VIcon, {
19329
+ "icon": icon.value
19330
+ }, null) : step.value)]
19331
+ }), createVNode("div", {
19332
+ "class": "v-stepper-item__content"
19333
+ }, [hasTitle && createVNode("div", {
19334
+ "key": "title",
19335
+ "class": "v-stepper-item__title"
19336
+ }, [slots.title?.(slotProps.value) ?? props.title]), hasSubtitle && createVNode("div", {
19337
+ "key": "subtitle",
19338
+ "class": "v-stepper-item__subtitle"
19339
+ }, [slots.subtitle?.(slotProps.value) ?? props.subtitle]), slots.default?.(slotProps.value)])]), [[resolveDirective("ripple"), props.ripple && props.editable, null]]);
19340
+ });
19341
+ return {};
19342
+ }
19343
+ });
19344
+
19345
+ // Types
19346
+
19347
+ const VStepperSymbol$1 = Symbol.for('vuetify:v-stepper');
19348
+ const makeVStepperWindowProps = propsFactory({
19349
+ ...makeVWindowProps({
19350
+ mandatory: false
19351
+ })
19352
+ }, 'VStepperWindow');
19353
+ const VStepperWindow = genericComponent()({
19354
+ name: 'VStepperWindow',
19355
+ props: makeVStepperWindowProps(),
19356
+ emits: {
19357
+ 'update:modelValue': v => true
19358
+ },
19359
+ setup(props, _ref) {
19360
+ let {
19361
+ slots
19362
+ } = _ref;
19363
+ const group = inject$1(VStepperSymbol$1, null);
19364
+ const _model = useProxiedModel(props, 'modelValue');
19365
+ const model = computed({
19366
+ get() {
19367
+ // Always return modelValue if defined
19368
+ // or if not within a VStepper group
19369
+ if (_model.value != null || !group) return _model.value;
19370
+
19371
+ // If inside of a VStepper, find the currently selected
19372
+ // item by id. Item value may be assigned by its index
19373
+ return group.items.value.find(item => group.selected.value.includes(item.id))?.value;
19374
+ },
19375
+ set(val) {
19376
+ _model.value = val;
19377
+ }
19378
+ });
19379
+ useRender(() => {
19380
+ const [windowProps] = VWindow.filterProps(props);
19381
+ return createVNode(VWindow, mergeProps(windowProps, {
19382
+ "modelValue": model.value,
19383
+ "onUpdate:modelValue": $event => model.value = $event,
19384
+ "class": "v-stepper-window"
19385
+ }), slots);
19386
+ });
19387
+ return {};
19388
+ }
19389
+ });
19390
+
19391
+ const makeVStepperWindowItemProps = propsFactory({
19392
+ ...makeVWindowItemProps()
19393
+ }, 'VStepperWindowItem');
19394
+ const VStepperWindowItem = genericComponent()({
19395
+ name: 'VStepperWindowItem',
19396
+ props: makeVStepperWindowItemProps(),
19397
+ setup(props, _ref) {
19398
+ let {
19399
+ slots
19400
+ } = _ref;
19401
+ useRender(() => {
19402
+ const [windowItemProps] = VWindowItem.filterProps(props);
19403
+ return createVNode(VWindowItem, mergeProps(windowItemProps, {
19404
+ "class": "v-stepper-window-item"
19405
+ }), slots);
19406
+ });
19407
+ return {};
19408
+ }
19409
+ });
19410
+
19411
+ // Types
19412
+
19413
+ const VStepperSymbol = Symbol.for('vuetify:v-stepper');
19414
+ const makeVStepperProps = propsFactory({
19415
+ altLabels: Boolean,
19416
+ bgColor: String,
19417
+ editable: Boolean,
19418
+ hideActions: Boolean,
19419
+ items: {
19420
+ type: Array,
19421
+ default: () => []
19422
+ },
19423
+ itemTitle: {
19424
+ type: String,
19425
+ default: 'title'
19426
+ },
19427
+ itemValue: {
19428
+ type: String,
19429
+ default: 'value'
19430
+ },
19431
+ mobile: Boolean,
19432
+ nonLinear: Boolean,
19433
+ flat: Boolean,
19434
+ ...makeGroupProps({
19435
+ mandatory: 'force',
19436
+ selectedClass: 'v-stepper-item--selected'
19437
+ }),
19438
+ ...makeVSheetProps(),
19439
+ ...only(makeVStepperActionsProps(), ['prevText', 'nextText'])
19440
+ }, 'VStepper');
19441
+ const VStepper = genericComponent()({
19442
+ name: 'VStepper',
19443
+ props: makeVStepperProps(),
19444
+ emits: {
19445
+ 'update:modelValue': v => true
19446
+ },
19447
+ setup(props, _ref) {
19448
+ let {
19449
+ slots
19450
+ } = _ref;
19451
+ const {
19452
+ items: _items,
19453
+ next,
19454
+ prev,
19455
+ selected
19456
+ } = useGroup(props, VStepperSymbol);
19457
+ const {
19458
+ color,
19459
+ editable,
19460
+ prevText,
19461
+ nextText
19462
+ } = toRefs(props);
19463
+ const items = computed(() => props.items.map((item, index) => {
19464
+ const title = getPropertyFromItem(item, props.itemTitle, item);
19465
+ const value = getPropertyFromItem(item, props.itemValue, index + 1);
19466
+ return {
19467
+ title,
19468
+ value,
19469
+ raw: item
19470
+ };
19471
+ }));
19472
+ const activeIndex = computed(() => {
19473
+ return _items.value.findIndex(item => selected.value.includes(item.id));
19474
+ });
19475
+ const disabled = computed(() => {
19476
+ if (props.disabled) return props.disabled;
19477
+ if (activeIndex.value === 0) return 'prev';
19478
+ if (activeIndex.value === _items.value.length - 1) return 'next';
19479
+ return false;
19480
+ });
19481
+ provideDefaults({
19482
+ VStepperItem: {
19483
+ editable,
19484
+ prevText,
19485
+ nextText
19486
+ },
19487
+ VStepperActions: {
19488
+ color,
19489
+ disabled,
19490
+ prevText,
19491
+ nextText
19492
+ }
19493
+ });
19494
+ useRender(() => {
19495
+ const [sheetProps] = VSheet.filterProps(props);
19496
+ const hasHeader = !!(slots.header || props.items.length);
19497
+ const hasWindow = props.items.length > 0;
19498
+ const hasActions = !props.hideActions && !!(hasWindow || slots.actions);
19499
+ return createVNode(VSheet, mergeProps(sheetProps, {
19500
+ "color": props.bgColor,
19501
+ "class": ['v-stepper', {
19502
+ 'v-stepper--alt-labels': props.altLabels,
19503
+ 'v-stepper--flat': props.flat,
19504
+ 'v-stepper--non-linear': props.nonLinear,
19505
+ 'v-stepper--mobile': props.mobile
19506
+ }, props.class],
19507
+ "style": props.style
19508
+ }), {
19509
+ default: () => [hasHeader && createVNode(VStepperHeader, {
19510
+ "key": "stepper-header"
19511
+ }, {
19512
+ default: () => [items.value.map((item, index) => createVNode(Fragment, null, [!!index && createVNode(VDivider, null, null), createVNode(VStepperItem, item, {
19513
+ default: slots[`header-item.${item.value}`] ?? slots.header,
19514
+ icon: slots.icon,
19515
+ title: slots.title,
19516
+ subtitle: slots.subtitle
19517
+ })]))]
19518
+ }), hasWindow && createVNode(VStepperWindow, {
19519
+ "key": "stepper-window"
19520
+ }, {
19521
+ default: () => [items.value.map(item => createVNode(VStepperWindowItem, {
19522
+ "value": item.value
19523
+ }, {
19524
+ default: () => slots[`item.${item.value}`]?.(item) ?? slots.item?.(item)
19525
+ }))]
19526
+ }), slots.default?.({
19527
+ prev,
19528
+ next
19529
+ }), hasActions && (slots.actions?.({
19530
+ next,
19531
+ prev
19532
+ }) ?? createVNode(VStepperActions, {
19533
+ "key": "stepper-actions",
19534
+ "onClick:prev": prev,
19535
+ "onClick:next": next
19536
+ }, slots))]
19537
+ });
19538
+ });
19539
+ return {
19540
+ prev,
19541
+ next
19542
+ };
19543
+ }
19544
+ });
19545
+
19546
+ // Types
19547
+
18740
19548
  const makeVSwitchProps = propsFactory({
18741
19549
  indeterminate: Boolean,
18742
19550
  inset: Boolean,
@@ -19815,6 +20623,7 @@ var components = /*#__PURE__*/Object.freeze({
19815
20623
  VBannerActions: VBannerActions,
19816
20624
  VBannerText: VBannerText,
19817
20625
  VBottomNavigation: VBottomNavigation,
20626
+ VBottomSheet: VBottomSheet,
19818
20627
  VBreadcrumbs: VBreadcrumbs,
19819
20628
  VBreadcrumbsDivider: VBreadcrumbsDivider,
19820
20629
  VBreadcrumbsItem: VBreadcrumbsItem,
@@ -19863,6 +20672,7 @@ var components = /*#__PURE__*/Object.freeze({
19863
20672
  VHover: VHover,
19864
20673
  VIcon: VIcon,
19865
20674
  VImg: VImg,
20675
+ VInfiniteScroll: VInfiniteScroll,
19866
20676
  VInput: VInput,
19867
20677
  VItem: VItem,
19868
20678
  VItemGroup: VItemGroup,
@@ -19907,6 +20717,7 @@ var components = /*#__PURE__*/Object.freeze({
19907
20717
  VSelectionControl: VSelectionControl,
19908
20718
  VSelectionControlGroup: VSelectionControlGroup,
19909
20719
  VSheet: VSheet,
20720
+ VSkeletonLoader: VSkeletonLoader,
19910
20721
  VSlideGroup: VSlideGroup,
19911
20722
  VSlideGroupItem: VSlideGroupItem,
19912
20723
  VSlideXReverseTransition: VSlideXReverseTransition,
@@ -19916,6 +20727,12 @@ var components = /*#__PURE__*/Object.freeze({
19916
20727
  VSlider: VSlider,
19917
20728
  VSnackbar: VSnackbar,
19918
20729
  VSpacer: VSpacer,
20730
+ VStepper: VStepper,
20731
+ VStepperActions: VStepperActions,
20732
+ VStepperHeader: VStepperHeader,
20733
+ VStepperItem: VStepperItem,
20734
+ VStepperWindow: VStepperWindow,
20735
+ VStepperWindowItem: VStepperWindowItem,
19919
20736
  VSvgIcon: VSvgIcon,
19920
20737
  VSwitch: VSwitch,
19921
20738
  VSystemBar: VSystemBar,
@@ -20296,7 +21113,6 @@ function getWeekdays(locale) {
20296
21113
  });
20297
21114
  }
20298
21115
  function format(value, formatString, locale) {
20299
- const date = new Date(value);
20300
21116
  let options = {};
20301
21117
  switch (formatString) {
20302
21118
  case 'fullDateWithWeekday':
@@ -20315,7 +21131,11 @@ function format(value, formatString, locale) {
20315
21131
  };
20316
21132
  break;
20317
21133
  case 'keyboardDate':
20318
- options = {};
21134
+ options = {
21135
+ day: '2-digit',
21136
+ month: '2-digit',
21137
+ year: 'numeric'
21138
+ };
20319
21139
  break;
20320
21140
  case 'monthAndDate':
20321
21141
  options = {
@@ -20345,7 +21165,7 @@ function format(value, formatString, locale) {
20345
21165
  timeZoneName: 'short'
20346
21166
  };
20347
21167
  }
20348
- return new Intl.DateTimeFormat(locale, options).format(date);
21168
+ return new Intl.DateTimeFormat(locale, options).format(date(value) ?? undefined);
20349
21169
  }
20350
21170
  function toISO(adapter, value) {
20351
21171
  const date = adapter.toJsDate(value);
@@ -20645,7 +21465,7 @@ function createVuetify$1() {
20645
21465
  date
20646
21466
  };
20647
21467
  }
20648
- const version$1 = "3.4.0-alpha.1-dev.2023-10-21";
21468
+ const version$1 = "3.4.0-alpha.1-dev.2023-10-28";
20649
21469
  createVuetify$1.version = version$1;
20650
21470
 
20651
21471
  // Vue's inject() can only be used in setup
@@ -20670,7 +21490,7 @@ const createVuetify = function () {
20670
21490
  ...options
20671
21491
  });
20672
21492
  };
20673
- const version = "3.4.0-alpha.1-dev.2023-10-21";
21493
+ const version = "3.4.0-alpha.1-dev.2023-10-28";
20674
21494
  createVuetify.version = version;
20675
21495
 
20676
21496
  export { components, createVuetify, directives, useDefaults, useDisplay, useLayout, useLocale, useRtl, useTheme, version };