vuetify 3.8.7 → 3.8.8

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 (106) hide show
  1. package/dist/json/attributes.json +3165 -3141
  2. package/dist/json/importMap-labs.json +32 -32
  3. package/dist/json/importMap.json +136 -136
  4. package/dist/json/tags.json +6 -0
  5. package/dist/json/web-types.json +5935 -5881
  6. package/dist/vuetify-labs.cjs +192 -112
  7. package/dist/vuetify-labs.css +3773 -3767
  8. package/dist/vuetify-labs.d.ts +89 -55
  9. package/dist/vuetify-labs.esm.js +193 -113
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +192 -112
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +184 -100
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +3192 -3186
  16. package/dist/vuetify.d.ts +79 -55
  17. package/dist/vuetify.esm.js +185 -101
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +184 -100
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +1077 -1064
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VAutocomplete/VAutocomplete.css +6 -6
  25. package/lib/components/VAutocomplete/VAutocomplete.sass +3 -9
  26. package/lib/components/VCarousel/VCarousel.js +3 -3
  27. package/lib/components/VCarousel/VCarousel.js.map +1 -1
  28. package/lib/components/VChip/VChip.js +1 -0
  29. package/lib/components/VChip/VChip.js.map +1 -1
  30. package/lib/components/VColorPicker/VColorPickerPreview.js +3 -3
  31. package/lib/components/VColorPicker/VColorPickerPreview.js.map +1 -1
  32. package/lib/components/VColorPicker/VColorPickerSwatches.js +3 -3
  33. package/lib/components/VColorPicker/VColorPickerSwatches.js.map +1 -1
  34. package/lib/components/VCombobox/VCombobox.css +6 -6
  35. package/lib/components/VCombobox/VCombobox.sass +3 -9
  36. package/lib/components/VDataTable/VDataTableColumn.js +3 -3
  37. package/lib/components/VDataTable/VDataTableColumn.js.map +1 -1
  38. package/lib/components/VDataTable/VDataTableGroupHeaderRow.js +3 -3
  39. package/lib/components/VDataTable/VDataTableGroupHeaderRow.js.map +1 -1
  40. package/lib/components/VDataTable/VDataTableVirtual.js +7 -7
  41. package/lib/components/VDataTable/VDataTableVirtual.js.map +1 -1
  42. package/lib/components/VDatePicker/VDatePicker.d.ts +20 -0
  43. package/lib/components/VDatePicker/VDatePicker.js +39 -2
  44. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  45. package/lib/components/VDatePicker/VDatePickerControls.js +4 -4
  46. package/lib/components/VDatePicker/VDatePickerControls.js.map +1 -1
  47. package/lib/components/VDatePicker/VDatePickerMonth.js +4 -11
  48. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  49. package/lib/components/VDatePicker/VDatePickerMonths.d.ts +10 -0
  50. package/lib/components/VDatePicker/VDatePickerMonths.js +15 -5
  51. package/lib/components/VDatePicker/VDatePickerMonths.js.map +1 -1
  52. package/lib/components/VDatePicker/VDatePickerYears.d.ts +10 -0
  53. package/lib/components/VDatePicker/VDatePickerYears.js +17 -5
  54. package/lib/components/VDatePicker/VDatePickerYears.js.map +1 -1
  55. package/lib/components/VEmptyState/VEmptyState.js +3 -3
  56. package/lib/components/VEmptyState/VEmptyState.js.map +1 -1
  57. package/lib/components/VImg/VImg.js +7 -7
  58. package/lib/components/VImg/VImg.js.map +1 -1
  59. package/lib/components/VInfiniteScroll/VInfiniteScroll.js +3 -3
  60. package/lib/components/VInfiniteScroll/VInfiniteScroll.js.map +1 -1
  61. package/lib/components/VNumberInput/VNumberInput.js +11 -10
  62. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  63. package/lib/components/VOtpInput/VOtpInput.js +2 -2
  64. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  65. package/lib/components/VProgressCircular/VProgressCircular.js +2 -2
  66. package/lib/components/VProgressCircular/VProgressCircular.js.map +1 -1
  67. package/lib/components/VProgressLinear/VProgressLinear.js +3 -3
  68. package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
  69. package/lib/components/VSelect/VSelect.css +6 -0
  70. package/lib/components/VSelect/VSelect.sass +3 -0
  71. package/lib/components/VSelect/_mixins.scss +14 -0
  72. package/lib/components/VSelectionControl/VSelectionControl.js +2 -2
  73. package/lib/components/VSelectionControl/VSelectionControl.js.map +1 -1
  74. package/lib/components/VSlider/VSliderThumb.js +16 -10
  75. package/lib/components/VSlider/VSliderThumb.js.map +1 -1
  76. package/lib/components/VSlider/VSliderTrack.js +6 -6
  77. package/lib/components/VSlider/VSliderTrack.js.map +1 -1
  78. package/lib/components/VSlider/slider.js +4 -1
  79. package/lib/components/VSlider/slider.js.map +1 -1
  80. package/lib/components/VTable/VTable.js +3 -3
  81. package/lib/components/VTable/VTable.js.map +1 -1
  82. package/lib/components/VToolbar/VToolbar.js +5 -5
  83. package/lib/components/VToolbar/VToolbar.js.map +1 -1
  84. package/lib/components/VVirtualScroll/VVirtualScroll.js +7 -7
  85. package/lib/components/VVirtualScroll/VVirtualScroll.js.map +1 -1
  86. package/lib/components/VWindow/VWindow.js +3 -3
  87. package/lib/components/VWindow/VWindow.js.map +1 -1
  88. package/lib/composables/date/date.d.ts +4 -0
  89. package/lib/composables/date/date.js +14 -1
  90. package/lib/composables/date/date.js.map +1 -1
  91. package/lib/composables/list-items.js +2 -2
  92. package/lib/composables/list-items.js.map +1 -1
  93. package/lib/entry-bundler.d.ts +3 -0
  94. package/lib/entry-bundler.js +1 -1
  95. package/lib/framework.d.ts +59 -55
  96. package/lib/framework.js +1 -1
  97. package/lib/labs/VDateInput/VDateInput.d.ts +20 -0
  98. package/lib/labs/VDateInput/VDateInput.js +3 -7
  99. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  100. package/lib/labs/VPullToRefresh/VPullToRefresh.js +7 -7
  101. package/lib/labs/VPullToRefresh/VPullToRefresh.js.map +1 -1
  102. package/lib/labs/entry-bundler.d.ts +3 -0
  103. package/lib/util/helpers.d.ts +1 -0
  104. package/lib/util/helpers.js +9 -1
  105. package/lib/util/helpers.js.map +1 -1
  106. package/package.json +3 -3
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.8.7
2
+ * Vuetify v3.8.8
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, createVNode, mergeProps, createElementVNode, normalizeClass, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, normalizeStyle, TransitionGroup, Transition, toRefs, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
7
+ import { shallowRef, reactive, watchEffect, toRef, capitalize, camelize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, createVNode, mergeProps, createElementVNode, normalizeClass, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, normalizeStyle, TransitionGroup, Transition, toRefs, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
8
8
 
9
9
  const IN_BROWSER = typeof window !== 'undefined';
10
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
@@ -525,6 +525,14 @@ function extractNumber(text, decimalDigitsLimit) {
525
525
  }
526
526
  return cleanText;
527
527
  }
528
+ function camelizeProps(props) {
529
+ if (!props) return;
530
+ const out = {};
531
+ for (const prop in props) {
532
+ out[camelize(prop)] = props[prop];
533
+ }
534
+ return out;
535
+ }
528
536
 
529
537
  // Utilities
530
538
  const block = ['top', 'bottom'];
@@ -4035,9 +4043,9 @@ const VImg = genericComponent()({
4035
4043
  if (!normalisedSrc.value.src || state.value === 'idle') return null;
4036
4044
  const img = createElementVNode("img", {
4037
4045
  "class": normalizeClass(['v-img__img', containClasses.value]),
4038
- "style": normalizeStyle({
4046
+ "style": {
4039
4047
  objectPosition: props.position
4040
- }),
4048
+ },
4041
4049
  "crossorigin": props.crossorigin,
4042
4050
  "src": normalisedSrc.value.src,
4043
4051
  "srcset": normalisedSrc.value.srcset,
@@ -4064,9 +4072,9 @@ const VImg = genericComponent()({
4064
4072
  }, {
4065
4073
  default: () => [normalisedSrc.value.lazySrc && state.value !== 'loaded' && createElementVNode("img", {
4066
4074
  "class": normalizeClass(['v-img__img', 'v-img__img--preload', containClasses.value]),
4067
- "style": normalizeStyle({
4075
+ "style": {
4068
4076
  objectPosition: props.position
4069
- }),
4077
+ },
4070
4078
  "crossorigin": props.crossorigin,
4071
4079
  "src": normalisedSrc.value.lazySrc,
4072
4080
  "alt": props.alt,
@@ -4100,9 +4108,9 @@ const VImg = genericComponent()({
4100
4108
  if (!props.gradient) return null;
4101
4109
  return createElementVNode("div", {
4102
4110
  "class": "v-img__gradient",
4103
- "style": normalizeStyle({
4111
+ "style": {
4104
4112
  backgroundImage: `linear-gradient(${props.gradient})`
4105
- })
4113
+ }
4106
4114
  }, null);
4107
4115
  };
4108
4116
  const isBooted = shallowRef(false);
@@ -4313,9 +4321,9 @@ const VToolbar = genericComponent()({
4313
4321
  }, {
4314
4322
  default: () => [createElementVNode("div", {
4315
4323
  "class": "v-toolbar__content",
4316
- "style": normalizeStyle({
4324
+ "style": {
4317
4325
  height: convertToUnit(contentHeight.value)
4318
- })
4326
+ }
4319
4327
  }, [slots.prepend && createElementVNode("div", {
4320
4328
  "class": "v-toolbar__prepend"
4321
4329
  }, [slots.prepend?.()]), hasTitle && createVNode(VToolbarTitle, {
@@ -4336,9 +4344,9 @@ const VToolbar = genericComponent()({
4336
4344
  default: () => [createVNode(VExpandTransition, null, {
4337
4345
  default: () => [isExtended.value && createElementVNode("div", {
4338
4346
  "class": "v-toolbar__extension",
4339
- "style": normalizeStyle({
4347
+ "style": {
4340
4348
  height: convertToUnit(extensionHeight.value)
4341
- })
4349
+ }
4342
4350
  }, [extension])]
4343
4351
  })]
4344
4352
  })]
@@ -5202,9 +5210,9 @@ const VProgressCircular = genericComponent()({
5202
5210
  "aria-valuenow": props.indeterminate ? undefined : normalizedValue.value
5203
5211
  }, {
5204
5212
  default: () => [createElementVNode("svg", {
5205
- "style": normalizeStyle({
5213
+ "style": {
5206
5214
  transform: `rotate(calc(-90deg + ${Number(props.rotate)}deg))`
5207
- }),
5215
+ },
5208
5216
  "xmlns": "http://www.w3.org/2000/svg",
5209
5217
  "viewBox": `0 0 ${diameter.value} ${diameter.value}`
5210
5218
  }, [createElementVNode("circle", {
@@ -5425,7 +5433,7 @@ const VProgressLinear = genericComponent()({
5425
5433
  default: () => [props.stream && createElementVNode("div", {
5426
5434
  "key": "stream",
5427
5435
  "class": normalizeClass(['v-progress-linear__stream', textColorClasses.value]),
5428
- "style": normalizeStyle({
5436
+ "style": {
5429
5437
  ...textColorStyles.value,
5430
5438
  [isReversed.value ? 'left' : 'right']: convertToUnit(-height.value),
5431
5439
  borderTop: `${convertToUnit(height.value / 2)} dotted`,
@@ -5433,7 +5441,7 @@ const VProgressLinear = genericComponent()({
5433
5441
  top: `calc(50% - ${convertToUnit(height.value / 4)})`,
5434
5442
  width: convertToUnit(100 - normalizedBuffer.value, '%'),
5435
5443
  '--v-progress-linear-stream-to': convertToUnit(height.value * (isReversed.value ? 1 : -1))
5436
- })
5444
+ }
5437
5445
  }, null), createElementVNode("div", {
5438
5446
  "class": normalizeClass(['v-progress-linear__background', !isForcedColorsModeActive ? backgroundColorClasses.value : undefined]),
5439
5447
  "style": normalizeStyle([backgroundColorStyles.value, {
@@ -6741,7 +6749,7 @@ const VSelectionControl = genericComponent()({
6741
6749
  backgroundColorClasses,
6742
6750
  backgroundColorStyles
6743
6751
  }), withDirectives(createElementVNode("div", {
6744
- "class": ['v-selection-control__input']
6752
+ "class": normalizeClass(['v-selection-control__input'])
6745
6753
  }, [slots.input?.({
6746
6754
  model,
6747
6755
  textColorClasses,
@@ -8374,6 +8382,7 @@ const VChip = genericComponent()({
8374
8382
  const isClickable = computed(() => !props.disabled && props.link !== false && (!!group || props.link || link.isClickable.value));
8375
8383
  const closeProps = toRef(() => ({
8376
8384
  'aria-label': t(props.closeLabel),
8385
+ disabled: props.disabled,
8377
8386
  onClick(e) {
8378
8387
  e.preventDefault();
8379
8388
  e.stopPropagation();
@@ -9855,7 +9864,7 @@ function transformItem$3(props, item) {
9855
9864
  const _props = {
9856
9865
  title,
9857
9866
  value,
9858
- ...itemProps
9867
+ ...camelizeProps(itemProps)
9859
9868
  };
9860
9869
  return {
9861
9870
  title: String(_props.title ?? ''),
@@ -12888,14 +12897,14 @@ const VVirtualScroll = genericComponent()({
12888
12897
  return props.renderless ? createElementVNode(Fragment, null, [createElementVNode("div", {
12889
12898
  "ref": markerRef,
12890
12899
  "class": "v-virtual-scroll__spacer",
12891
- "style": normalizeStyle({
12900
+ "style": {
12892
12901
  paddingTop: convertToUnit(paddingTop.value)
12893
- })
12902
+ }
12894
12903
  }, null), children, createElementVNode("div", {
12895
12904
  "class": "v-virtual-scroll__spacer",
12896
- "style": normalizeStyle({
12905
+ "style": {
12897
12906
  paddingBottom: convertToUnit(paddingBottom.value)
12898
- })
12907
+ }
12899
12908
  }, null)]) : createElementVNode("div", {
12900
12909
  "ref": containerRef,
12901
12910
  "class": normalizeClass(['v-virtual-scroll', props.class]),
@@ -12905,10 +12914,10 @@ const VVirtualScroll = genericComponent()({
12905
12914
  }, [createElementVNode("div", {
12906
12915
  "ref": markerRef,
12907
12916
  "class": "v-virtual-scroll__container",
12908
- "style": normalizeStyle({
12917
+ "style": {
12909
12918
  paddingTop: convertToUnit(paddingTop.value),
12910
12919
  paddingBottom: convertToUnit(paddingBottom.value)
12911
- })
12920
+ }
12912
12921
  }, [children])]);
12913
12922
  });
12914
12923
  return {
@@ -15342,9 +15351,9 @@ const VWindow = genericComponent()({
15342
15351
  }, {
15343
15352
  default: () => [createElementVNode("div", {
15344
15353
  "class": "v-window__container",
15345
- "style": normalizeStyle({
15354
+ "style": {
15346
15355
  height: transitionHeight.value
15347
- })
15356
+ }
15348
15357
  }, [slots.default?.({
15349
15358
  group
15350
15359
  }), props.showArrows !== false && createElementVNode("div", {
@@ -15439,10 +15448,10 @@ const VCarousel = genericComponent()({
15439
15448
  } = _ref2;
15440
15449
  return createElementVNode(Fragment, null, [!props.hideDelimiters && createElementVNode("div", {
15441
15450
  "class": "v-carousel__controls",
15442
- "style": normalizeStyle({
15451
+ "style": {
15443
15452
  left: props.verticalDelimiters === 'left' && props.verticalDelimiters ? 0 : 'auto',
15444
15453
  right: props.verticalDelimiters === 'right' ? 0 : 'auto'
15445
- })
15454
+ }
15446
15455
  }, [group.items.value.length > 0 && createVNode(VDefaultsProvider, {
15447
15456
  "defaults": {
15448
15457
  VBtn: {
@@ -16162,7 +16171,10 @@ const useSteps = props => {
16162
16171
  if (step.value <= 0) return value;
16163
16172
  const clamped = clamp(value, min.value, max.value);
16164
16173
  const offset = min.value % step.value;
16165
- const newValue = Math.round((clamped - offset) / step.value) * step.value + offset;
16174
+ let newValue = Math.round((clamped - offset) / step.value) * step.value + offset;
16175
+ if (clamped > newValue && newValue + step.value > max.value) {
16176
+ newValue = max.value;
16177
+ }
16166
16178
  return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value));
16167
16179
  }
16168
16180
  return {
@@ -16418,6 +16430,8 @@ const VSliderThumb = genericComponent()({
16418
16430
  } = useRtl();
16419
16431
  if (!slider) throw new Error('[Vuetify] v-slider-thumb must be used inside v-slider or v-range-slider');
16420
16432
  const {
16433
+ min,
16434
+ max,
16421
16435
  thumbColor,
16422
16436
  step,
16423
16437
  disabled,
@@ -16458,16 +16472,20 @@ const VSliderThumb = genericComponent()({
16458
16472
  if (!relevantKeys.includes(e.key)) return;
16459
16473
  e.preventDefault();
16460
16474
  const _step = step.value || 0.1;
16461
- const steps = (props.max - props.min) / _step;
16475
+ const steps = (max.value - min.value) / _step;
16462
16476
  if ([left, right, down, up].includes(e.key)) {
16463
16477
  const increase = vertical.value ? [isRtl.value ? left : right, isReversed.value ? down : up] : indexFromEnd.value !== isRtl.value ? [left, up] : [right, up];
16464
16478
  const direction = increase.includes(e.key) ? 1 : -1;
16465
16479
  const multiplier = e.shiftKey ? 2 : e.ctrlKey ? 1 : 0;
16466
- value = value + direction * _step * multipliers.value[multiplier];
16480
+ if (direction === -1 && value === max.value && !multiplier && !Number.isInteger(steps)) {
16481
+ value = value - steps % 1 * _step;
16482
+ } else {
16483
+ value = value + direction * _step * multipliers.value[multiplier];
16484
+ }
16467
16485
  } else if (e.key === home) {
16468
- value = props.min;
16486
+ value = min.value;
16469
16487
  } else if (e.key === end) {
16470
- value = props.max;
16488
+ value = max.value;
16471
16489
  } else {
16472
16490
  const direction = e.key === pagedown ? 1 : -1;
16473
16491
  value = value - direction * _step * (steps > 100 ? steps / 10 : 10);
@@ -16492,17 +16510,17 @@ const VSliderThumb = genericComponent()({
16492
16510
  "role": "slider",
16493
16511
  "tabindex": disabled.value ? -1 : 0,
16494
16512
  "aria-label": props.name,
16495
- "aria-valuemin": props.min,
16496
- "aria-valuemax": props.max,
16513
+ "aria-valuemin": min.value,
16514
+ "aria-valuemax": max.value,
16497
16515
  "aria-valuenow": props.modelValue,
16498
16516
  "aria-readonly": !!readonly.value,
16499
16517
  "aria-orientation": direction.value,
16500
16518
  "onKeydown": !readonly.value ? onKeydown : undefined
16501
16519
  }, [createElementVNode("div", {
16502
16520
  "class": normalizeClass(['v-slider-thumb__surface', textColorClasses.value, elevationClasses.value]),
16503
- "style": normalizeStyle({
16521
+ "style": {
16504
16522
  ...textColorStyles.value
16505
- })
16523
+ }
16506
16524
  }, null), withDirectives(createElementVNode("div", {
16507
16525
  "class": normalizeClass(['v-slider-thumb__ripple', textColorClasses.value]),
16508
16526
  "style": normalizeStyle(textColorStyles.value)
@@ -16515,7 +16533,7 @@ const VSliderThumb = genericComponent()({
16515
16533
  default: () => [withDirectives(createElementVNode("div", {
16516
16534
  "class": "v-slider-thumb__label-container"
16517
16535
  }, [createElementVNode("div", {
16518
- "class": ['v-slider-thumb__label']
16536
+ "class": normalizeClass(['v-slider-thumb__label'])
16519
16537
  }, [createElementVNode("div", null, [slots['thumb-label']?.({
16520
16538
  modelValue: props.modelValue
16521
16539
  }) ?? props.modelValue.toFixed(step.value ? decimals.value : 1)])])]), [[vShow, thumbLabel.value && props.focused || thumbLabel.value === 'always']])]
@@ -16600,9 +16618,9 @@ const VSliderTrack = genericComponent()({
16600
16618
  'v-slider-track__tick--first': tick.value === min.value,
16601
16619
  'v-slider-track__tick--last': tick.value === max.value
16602
16620
  }]),
16603
- "style": normalizeStyle({
16621
+ "style": {
16604
16622
  [startDir.value]: directionValue
16605
- })
16623
+ }
16606
16624
  }, [(tick.label || slots['tick-label']) && createElementVNode("div", {
16607
16625
  "class": "v-slider-track__tick-label"
16608
16626
  }, [slots['tick-label']?.({
@@ -16622,16 +16640,16 @@ const VSliderTrack = genericComponent()({
16622
16640
  "class": normalizeClass(['v-slider-track__background', trackColorClasses.value, {
16623
16641
  'v-slider-track__background--opacity': !!color.value || !trackFillColor.value
16624
16642
  }]),
16625
- "style": normalizeStyle({
16643
+ "style": {
16626
16644
  ...backgroundStyles.value,
16627
16645
  ...trackColorStyles.value
16628
- })
16646
+ }
16629
16647
  }, null), createElementVNode("div", {
16630
16648
  "class": normalizeClass(['v-slider-track__fill', trackFillColorClasses.value]),
16631
- "style": normalizeStyle({
16649
+ "style": {
16632
16650
  ...trackFillStyles.value,
16633
16651
  ...trackFillColorStyles.value
16634
- })
16652
+ }
16635
16653
  }, null), showTicks.value && createElementVNode("div", {
16636
16654
  "class": normalizeClass(['v-slider-track__ticks', {
16637
16655
  'v-slider-track__ticks--always-show': showTicks.value === 'always'
@@ -16833,9 +16851,9 @@ const VColorPickerPreview = defineComponent({
16833
16851
  }, null)]), createElementVNode("div", {
16834
16852
  "class": "v-color-picker-preview__dot"
16835
16853
  }, [createElementVNode("div", {
16836
- "style": normalizeStyle({
16854
+ "style": {
16837
16855
  background: HSVtoCSS(props.color ?? nullColor)
16838
- })
16856
+ }
16839
16857
  }, null)]), createElementVNode("div", {
16840
16858
  "class": "v-color-picker-preview__sliders"
16841
16859
  }, [createVNode(VSlider, {
@@ -17236,9 +17254,9 @@ const VColorPickerSwatches = defineComponent({
17236
17254
  "class": "v-color-picker-swatches__color",
17237
17255
  "onClick": () => hsva && emit('update:color', hsva)
17238
17256
  }, [createElementVNode("div", {
17239
- "style": normalizeStyle({
17257
+ "style": {
17240
17258
  background
17241
- })
17259
+ }
17242
17260
  }, [props.color && deepEqual(props.color, hsva) ? createVNode(VIcon, {
17243
17261
  "size": "x-small",
17244
17262
  "icon": "$success",
@@ -18097,7 +18115,20 @@ function createInstance(options, locale) {
18097
18115
  watch(locale.current, value => {
18098
18116
  instance.locale = options.locale[value] ?? value ?? instance.locale;
18099
18117
  });
18100
- return instance;
18118
+ return Object.assign(instance, {
18119
+ createDateRange(start, stop) {
18120
+ const diff = instance.getDiff(stop ?? start, start, 'days');
18121
+ const datesInRange = [start];
18122
+ for (let i = 1; i < diff; i++) {
18123
+ const nextDate = instance.addDays(start, i);
18124
+ datesInRange.push(nextDate);
18125
+ }
18126
+ if (stop) {
18127
+ datesInRange.push(instance.endOfDay(stop));
18128
+ }
18129
+ return datesInRange;
18130
+ }
18131
+ });
18101
18132
  }
18102
18133
  function useDate() {
18103
18134
  const options = inject$1(DateOptionsSymbol);
@@ -20244,12 +20275,12 @@ const VDataTableColumn = defineFunctionalComponent({
20244
20275
  'v-data-table-column--no-padding': props.noPadding,
20245
20276
  'v-data-table-column--nowrap': props.nowrap
20246
20277
  }, `v-data-table-column--align-${props.align}`]),
20247
- "style": normalizeStyle({
20278
+ "style": {
20248
20279
  height: convertToUnit(props.height),
20249
20280
  width: convertToUnit(props.width),
20250
20281
  maxWidth: convertToUnit(props.maxWidth),
20251
20282
  left: convertToUnit(props.fixedOffset || null)
20252
- })
20283
+ }
20253
20284
  }, {
20254
20285
  default: () => [slots.default?.()]
20255
20286
  });
@@ -20774,9 +20805,9 @@ const VDataTableGroupHeaderRow = genericComponent()({
20774
20805
  });
20775
20806
  return () => createElementVNode("tr", {
20776
20807
  "class": "v-data-table-group-header-row",
20777
- "style": normalizeStyle({
20808
+ "style": {
20778
20809
  '--v-data-table-group-header-row-depth': props.item.depth
20779
- })
20810
+ }
20780
20811
  }, [columns.value.map(column => {
20781
20812
  if (column.key === 'data-table-group') {
20782
20813
  const icon = isGroupOpen(props.item) ? '$expand' : '$next';
@@ -21124,9 +21155,9 @@ const VTable = genericComponent()({
21124
21155
  }, {
21125
21156
  default: () => [slots.top?.(), slots.default ? createElementVNode("div", {
21126
21157
  "class": "v-table__wrapper",
21127
- "style": normalizeStyle({
21158
+ "style": {
21128
21159
  height: convertToUnit(props.height)
21129
- })
21160
+ }
21130
21161
  }, [createElementVNode("table", null, [slots.default()])]) : slots.wrapper?.(), slots.bottom?.()]
21131
21162
  }));
21132
21163
  return {};
@@ -21561,19 +21592,19 @@ const VDataTableVirtual = genericComponent()({
21561
21592
  "onScrollPassive": handleScroll,
21562
21593
  "onScrollend": handleScrollend,
21563
21594
  "class": "v-table__wrapper",
21564
- "style": normalizeStyle({
21595
+ "style": {
21565
21596
  height: convertToUnit(props.height)
21566
- })
21597
+ }
21567
21598
  }, [createElementVNode("table", null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && createElementVNode("thead", {
21568
21599
  "key": "thead"
21569
21600
  }, [createVNode(VDataTableHeaders, dataTableHeadersProps, slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && createElementVNode("tbody", {
21570
21601
  "key": "tbody"
21571
21602
  }, [createElementVNode("tr", {
21572
21603
  "ref": markerRef,
21573
- "style": normalizeStyle({
21604
+ "style": {
21574
21605
  height: convertToUnit(paddingTop.value),
21575
21606
  border: 0
21576
- })
21607
+ }
21577
21608
  }, [createElementVNode("td", {
21578
21609
  "colspan": columns.value.length,
21579
21610
  "style": {
@@ -21604,10 +21635,10 @@ const VDataTableVirtual = genericComponent()({
21604
21635
  }
21605
21636
  })
21606
21637
  }), slots['body.append']?.(slotProps.value), createElementVNode("tr", {
21607
- "style": normalizeStyle({
21638
+ "style": {
21608
21639
  height: convertToUnit(paddingBottom.value),
21609
21640
  border: 0
21610
- })
21641
+ }
21611
21642
  }, [createElementVNode("td", {
21612
21643
  "colspan": columns.value.length,
21613
21644
  "style": {
@@ -22145,10 +22176,10 @@ const VDatePickerControls = genericComponent()({
22145
22176
  useRender(() => {
22146
22177
  // TODO: add slot support and scope defaults
22147
22178
  return createElementVNode("div", {
22148
- "class": ['v-date-picker-controls'],
22149
- "style": normalizeStyle({
22179
+ "class": normalizeClass(['v-date-picker-controls']),
22180
+ "style": {
22150
22181
  '--v-date-picker-controls-height': convertToUnit(props.controlHeight)
22151
- })
22182
+ }
22152
22183
  }, [createVNode(VBtn, {
22153
22184
  "class": "v-date-picker-controls__month-btn",
22154
22185
  "data-testid": "month-btn",
@@ -22491,14 +22522,7 @@ const VDatePickerMonth = genericComponent()({
22491
22522
  } else {
22492
22523
  rangeStop.value = adapter.endOfDay(_value);
22493
22524
  }
22494
- const diff = adapter.getDiff(rangeStop.value, rangeStart.value, 'days');
22495
- const datesInRange = [rangeStart.value];
22496
- for (let i = 1; i < diff; i++) {
22497
- const nextDate = adapter.addDays(rangeStart.value, i);
22498
- datesInRange.push(nextDate);
22499
- }
22500
- datesInRange.push(rangeStop.value);
22501
- model.value = datesInRange;
22525
+ model.value = adapter.createDateRange(rangeStart.value, rangeStop.value);
22502
22526
  } else {
22503
22527
  rangeStart.value = value;
22504
22528
  rangeStop.value = undefined;
@@ -22533,7 +22557,7 @@ const VDatePickerMonth = genericComponent()({
22533
22557
  "key": "hide-week-days",
22534
22558
  "class": "v-date-picker-month__day"
22535
22559
  }, [createTextVNode("\xA0")]), weekNumbers.value.map(week => createElementVNode("div", {
22536
- "class": ['v-date-picker-month__day', 'v-date-picker-month__day--adjacent']
22560
+ "class": normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__day--adjacent'])
22537
22561
  }, [week]))]), createVNode(MaybeTransition, {
22538
22562
  "name": transition.value
22539
22563
  }, {
@@ -22542,7 +22566,7 @@ const VDatePickerMonth = genericComponent()({
22542
22566
  "key": daysInMonth.value[0].date?.toString(),
22543
22567
  "class": "v-date-picker-month__days"
22544
22568
  }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
22545
- "class": ['v-date-picker-month__day', 'v-date-picker-month__weekday']
22569
+ "class": normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
22546
22570
  }, [weekDay])), daysInMonth.value.map((item, i) => {
22547
22571
  const slotProps = {
22548
22572
  props: {
@@ -22584,7 +22608,8 @@ const makeVDatePickerMonthsProps = propsFactory({
22584
22608
  min: null,
22585
22609
  max: null,
22586
22610
  modelValue: Number,
22587
- year: Number
22611
+ year: Number,
22612
+ allowedMonths: [Array, Function]
22588
22613
  }, 'VDatePickerMonths');
22589
22614
  const VDatePickerMonths = genericComponent()({
22590
22615
  name: 'VDatePickerMonths',
@@ -22606,7 +22631,7 @@ const VDatePickerMonths = genericComponent()({
22606
22631
  }
22607
22632
  return createRange(12).map(i => {
22608
22633
  const text = adapter.format(date, 'monthShort');
22609
- const isDisabled = !!(props.min && adapter.isAfter(adapter.startOfMonth(adapter.date(props.min)), date) || props.max && adapter.isAfter(date, adapter.startOfMonth(adapter.date(props.max))));
22634
+ const isDisabled = !!(!isMonthAllowed(i) || props.min && adapter.isAfter(adapter.startOfMonth(adapter.date(props.min)), date) || props.max && adapter.isAfter(date, adapter.startOfMonth(adapter.date(props.max))));
22610
22635
  date = adapter.getNextMonth(date);
22611
22636
  return {
22612
22637
  isDisabled,
@@ -22618,11 +22643,20 @@ const VDatePickerMonths = genericComponent()({
22618
22643
  watchEffect(() => {
22619
22644
  model.value = model.value ?? adapter.getMonth(adapter.date());
22620
22645
  });
22646
+ function isMonthAllowed(month) {
22647
+ if (Array.isArray(props.allowedMonths) && props.allowedMonths.length) {
22648
+ return props.allowedMonths.includes(month);
22649
+ }
22650
+ if (typeof props.allowedMonths === 'function') {
22651
+ return props.allowedMonths(month);
22652
+ }
22653
+ return true;
22654
+ }
22621
22655
  useRender(() => createElementVNode("div", {
22622
22656
  "class": "v-date-picker-months",
22623
- "style": normalizeStyle({
22657
+ "style": {
22624
22658
  height: convertToUnit(props.height)
22625
- })
22659
+ }
22626
22660
  }, [createElementVNode("div", {
22627
22661
  "class": "v-date-picker-months__content"
22628
22662
  }, [months.value.map((month, i) => {
@@ -22663,7 +22697,8 @@ const makeVDatePickerYearsProps = propsFactory({
22663
22697
  height: [String, Number],
22664
22698
  min: null,
22665
22699
  max: null,
22666
- modelValue: Number
22700
+ modelValue: Number,
22701
+ allowedYears: [Array, Function]
22667
22702
  }, 'VDatePickerYears');
22668
22703
  const VDatePickerYears = genericComponent()({
22669
22704
  name: 'VDatePickerYears',
@@ -22695,7 +22730,8 @@ const VDatePickerYears = genericComponent()({
22695
22730
  date = adapter.setYear(date, adapter.getYear(date) + 1);
22696
22731
  return {
22697
22732
  text,
22698
- value: i
22733
+ value: i,
22734
+ isDisabled: !isYearAllowed(i)
22699
22735
  };
22700
22736
  });
22701
22737
  });
@@ -22709,11 +22745,20 @@ const VDatePickerYears = genericComponent()({
22709
22745
  block: 'center'
22710
22746
  });
22711
22747
  });
22748
+ function isYearAllowed(year) {
22749
+ if (Array.isArray(props.allowedYears) && props.allowedYears.length) {
22750
+ return props.allowedYears.includes(year);
22751
+ }
22752
+ if (typeof props.allowedYears === 'function') {
22753
+ return props.allowedYears(year);
22754
+ }
22755
+ return true;
22756
+ }
22712
22757
  useRender(() => createElementVNode("div", {
22713
22758
  "class": "v-date-picker-years",
22714
- "style": normalizeStyle({
22759
+ "style": {
22715
22760
  height: convertToUnit(props.height)
22716
- })
22761
+ }
22717
22762
  }, [createElementVNode("div", {
22718
22763
  "class": "v-date-picker-years__content"
22719
22764
  }, [years.value.map((year, i) => {
@@ -22723,6 +22768,7 @@ const VDatePickerYears = genericComponent()({
22723
22768
  color: model.value === year.value ? props.color : undefined,
22724
22769
  rounded: true,
22725
22770
  text: year.text,
22771
+ disabled: year.isDisabled,
22726
22772
  variant: model.value === year.value ? 'flat' : 'text',
22727
22773
  onClick: () => {
22728
22774
  if (model.value === year.value) {
@@ -22872,6 +22918,41 @@ const VDatePicker = genericComponent()({
22872
22918
  }
22873
22919
  return targets;
22874
22920
  });
22921
+ function isAllowedInRange(start, end) {
22922
+ const allowedDates = props.allowedDates;
22923
+ if (typeof allowedDates !== 'function') return true;
22924
+ const days = adapter.getDiff(end, start, 'days');
22925
+ for (let i = 0; i < days; i++) {
22926
+ if (allowedDates(adapter.addDays(start, i))) return true;
22927
+ }
22928
+ return false;
22929
+ }
22930
+ function allowedYears(year) {
22931
+ if (typeof props.allowedDates === 'function') {
22932
+ const startOfYear = adapter.parseISO(`${year}-01-01`);
22933
+ return isAllowedInRange(startOfYear, adapter.endOfYear(startOfYear));
22934
+ }
22935
+ if (Array.isArray(props.allowedDates) && props.allowedDates.length) {
22936
+ for (const date of props.allowedDates) {
22937
+ if (adapter.getYear(adapter.date(date)) === year) return true;
22938
+ }
22939
+ return false;
22940
+ }
22941
+ return true;
22942
+ }
22943
+ function allowedMonths(month) {
22944
+ if (typeof props.allowedDates === 'function') {
22945
+ const startOfMonth = adapter.parseISO(`${year.value}-${month + 1}-01`);
22946
+ return isAllowedInRange(startOfMonth, adapter.endOfMonth(startOfMonth));
22947
+ }
22948
+ if (Array.isArray(props.allowedDates) && props.allowedDates.length) {
22949
+ for (const date of props.allowedDates) {
22950
+ if (adapter.getYear(adapter.date(date)) === year.value && adapter.getMonth(adapter.date(date)) === month) return true;
22951
+ }
22952
+ return false;
22953
+ }
22954
+ return true;
22955
+ }
22875
22956
 
22876
22957
  // function onClickAppend () {
22877
22958
  // inputMode.value = inputMode.value === 'calendar' ? 'keyboard' : 'calendar'
@@ -22987,14 +23068,16 @@ const VDatePicker = genericComponent()({
22987
23068
  "onUpdate:modelValue": [$event => month.value = $event, onUpdateMonth],
22988
23069
  "min": minDate.value,
22989
23070
  "max": maxDate.value,
22990
- "year": year.value
23071
+ "year": year.value,
23072
+ "allowedMonths": allowedMonths
22991
23073
  }), null) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
22992
23074
  "key": "date-picker-years"
22993
23075
  }, datePickerYearsProps, {
22994
23076
  "modelValue": year.value,
22995
23077
  "onUpdate:modelValue": [$event => year.value = $event, onUpdateYear],
22996
23078
  "min": minDate.value,
22997
- "max": maxDate.value
23079
+ "max": maxDate.value,
23080
+ "allowedYears": allowedYears
22998
23081
  }), null) : createVNode(VDatePickerMonth, mergeProps({
22999
23082
  "key": "date-picker-month"
23000
23083
  }, datePickerMonthProps, {
@@ -23119,9 +23202,9 @@ const VEmptyState = genericComponent()({
23119
23202
  }, [slots.title?.() ?? props.title]), hasText && createElementVNode("div", {
23120
23203
  "key": "text",
23121
23204
  "class": "v-empty-state__text",
23122
- "style": normalizeStyle({
23205
+ "style": {
23123
23206
  maxWidth: convertToUnit(props.textWidth)
23124
- })
23207
+ }
23125
23208
  }, [slots.text?.() ?? props.text]), slots.default && createElementVNode("div", {
23126
23209
  "key": "content",
23127
23210
  "class": "v-empty-state__content"
@@ -23986,9 +24069,9 @@ const VInfiniteScrollIntersect = defineComponent({
23986
24069
  });
23987
24070
  useRender(() => createElementVNode("div", {
23988
24071
  "class": "v-infinite-scroll-intersect",
23989
- "style": normalizeStyle({
24072
+ "style": {
23990
24073
  '--v-infinite-margin-size': props.rootMargin
23991
- }),
24074
+ },
23992
24075
  "ref": intersectionRef
23993
24076
  }, [createTextVNode("\xA0")]));
23994
24077
  return {};
@@ -25144,22 +25227,18 @@ const VNumberInput = genericComponent()({
25144
25227
  const controlNodeDefaultHeight = toRef(() => controlVariant.value === 'stacked' ? 'auto' : '100%');
25145
25228
  const incrementSlotProps = {
25146
25229
  props: {
25147
- style: {
25148
- touchAction: 'none'
25149
- },
25150
25230
  onClick: onControlClick,
25151
25231
  onPointerup: onControlMouseup,
25152
- onPointerdown: onUpControlMousedown
25232
+ onPointerdown: onUpControlMousedown,
25233
+ onPointercancel: onControlPointerCancel
25153
25234
  }
25154
25235
  };
25155
25236
  const decrementSlotProps = {
25156
25237
  props: {
25157
- style: {
25158
- touchAction: 'none'
25159
- },
25160
25238
  onClick: onControlClick,
25161
25239
  onPointerup: onControlMouseup,
25162
- onPointerdown: onDownControlMousedown
25240
+ onPointerdown: onDownControlMousedown,
25241
+ onPointercancel: onControlPointerCancel
25163
25242
  }
25164
25243
  };
25165
25244
  watch(() => props.precision, () => formatInputValue());
@@ -25256,6 +25335,11 @@ const VNumberInput = genericComponent()({
25256
25335
  e.stopPropagation();
25257
25336
  holdStart('down');
25258
25337
  }
25338
+ function onControlPointerCancel(e) {
25339
+ const el = e.currentTarget;
25340
+ el?.releasePointerCapture(e.pointerId);
25341
+ holdStop();
25342
+ }
25259
25343
  function clampModel() {
25260
25344
  if (controlsDisabled.value) return;
25261
25345
  if (!vTextFieldRef.value) return;
@@ -25307,8 +25391,8 @@ const VNumberInput = genericComponent()({
25307
25391
  "onClick": onControlClick,
25308
25392
  "onPointerdown": onUpControlMousedown,
25309
25393
  "onPointerup": onControlMouseup,
25394
+ "onPointercancel": onControlPointerCancel,
25310
25395
  "size": controlNodeSize.value,
25311
- "style": "touch-action: none",
25312
25396
  "tabindex": "-1"
25313
25397
  }, null) : createVNode(VDefaultsProvider, {
25314
25398
  "key": "increment-defaults",
@@ -25337,8 +25421,8 @@ const VNumberInput = genericComponent()({
25337
25421
  "onClick": onControlClick,
25338
25422
  "onPointerdown": onDownControlMousedown,
25339
25423
  "onPointerup": onControlMouseup,
25424
+ "onPointercancel": onControlPointerCancel,
25340
25425
  "size": controlNodeSize.value,
25341
- "style": "touch-action: none",
25342
25426
  "tabindex": "-1"
25343
25427
  }, null) : createVNode(VDefaultsProvider, {
25344
25428
  "key": "decrement-defaults",
@@ -25598,7 +25682,7 @@ const VOtpInput = genericComponent()({
25598
25682
  "aria-label": t(props.label, i + 1),
25599
25683
  "autofocus": i === 0 && props.autofocus,
25600
25684
  "autocomplete": "one-time-code",
25601
- "class": ['v-otp-input__field'],
25685
+ "class": normalizeClass(['v-otp-input__field']),
25602
25686
  "disabled": props.disabled,
25603
25687
  "inputmode": props.type === 'number' ? 'numeric' : 'text',
25604
25688
  "min": props.type === 'number' ? 0 : undefined,
@@ -29316,7 +29400,7 @@ function createVuetify$1() {
29316
29400
  };
29317
29401
  });
29318
29402
  }
29319
- const version$1 = "3.8.7";
29403
+ const version$1 = "3.8.8";
29320
29404
  createVuetify$1.version = version$1;
29321
29405
 
29322
29406
  // Vue's inject() can only be used in setup
@@ -29341,7 +29425,7 @@ const createVuetify = function () {
29341
29425
  ...options
29342
29426
  });
29343
29427
  };
29344
- const version = "3.8.7";
29428
+ const version = "3.8.8";
29345
29429
  createVuetify.version = version;
29346
29430
 
29347
29431
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };