vuetify 3.5.9 → 3.5.10

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 (147) hide show
  1. package/dist/_component-variables-labs.sass +1 -0
  2. package/dist/json/attributes.json +106 -6
  3. package/dist/json/importMap-labs.json +8 -4
  4. package/dist/json/importMap.json +122 -122
  5. package/dist/json/tags.json +30 -0
  6. package/dist/json/web-types.json +582 -15
  7. package/dist/vuetify-labs.css +2456 -2414
  8. package/dist/vuetify-labs.d.ts +2711 -1996
  9. package/dist/vuetify-labs.esm.js +518 -40
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +518 -39
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +681 -676
  14. package/dist/vuetify.d.ts +2356 -2303
  15. package/dist/vuetify.esm.js +605 -330
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +604 -328
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +1106 -1098
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/components/VAlert/index.d.mts +15 -15
  23. package/lib/components/VApp/index.d.mts +8 -8
  24. package/lib/components/VAppBar/index.d.mts +7 -7
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs +4 -4
  26. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  27. package/lib/components/VAutocomplete/index.d.mts +94 -94
  28. package/lib/components/VAvatar/index.d.mts +8 -8
  29. package/lib/components/VBadge/index.d.mts +7 -7
  30. package/lib/components/VBanner/index.d.mts +20 -20
  31. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  32. package/lib/components/VBreadcrumbs/index.d.mts +27 -26
  33. package/lib/components/VBtnGroup/index.d.mts +8 -8
  34. package/lib/components/VCard/index.d.mts +32 -32
  35. package/lib/components/VCarousel/index.d.mts +6 -6
  36. package/lib/components/VCheckbox/index.d.mts +44 -44
  37. package/lib/components/VChip/index.d.mts +7 -7
  38. package/lib/components/VCode/index.d.mts +8 -8
  39. package/lib/components/VCombobox/VCombobox.mjs +5 -4
  40. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  41. package/lib/components/VCombobox/index.d.mts +94 -94
  42. package/lib/components/VDataTable/index.d.mts +6 -6
  43. package/lib/components/VDatePicker/VDatePickerMonth.mjs +10 -4
  44. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  45. package/lib/components/VDatePicker/index.d.mts +10 -10
  46. package/lib/components/VDefaultsProvider/index.d.mts +8 -8
  47. package/lib/components/VDialog/index.d.mts +12 -6
  48. package/lib/components/VDivider/index.d.mts +8 -8
  49. package/lib/components/VExpansionPanel/index.d.mts +19 -19
  50. package/lib/components/VField/VField.css +2 -0
  51. package/lib/components/VField/VField.mjs +1 -1
  52. package/lib/components/VField/VField.mjs.map +1 -1
  53. package/lib/components/VField/VField.sass +2 -0
  54. package/lib/components/VField/index.d.mts +28 -28
  55. package/lib/components/VFileInput/index.d.mts +133 -133
  56. package/lib/components/VFooter/index.d.mts +8 -8
  57. package/lib/components/VGrid/index.d.mts +32 -32
  58. package/lib/components/VIcon/VIcon.css +4 -0
  59. package/lib/components/VIcon/VIcon.mjs +7 -3
  60. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  61. package/lib/components/VIcon/VIcon.sass +4 -0
  62. package/lib/components/VIcon/_variables.scss +1 -0
  63. package/lib/components/VIcon/index.d.mts +25 -16
  64. package/lib/components/VImg/index.d.mts +4 -4
  65. package/lib/components/VInput/index.d.mts +21 -21
  66. package/lib/components/VKbd/index.d.mts +8 -8
  67. package/lib/components/VLabel/index.d.mts +8 -8
  68. package/lib/components/VLayout/index.d.mts +16 -16
  69. package/lib/components/VLazy/index.d.mts +8 -8
  70. package/lib/components/VList/VListItem.mjs +2 -2
  71. package/lib/components/VList/VListItem.mjs.map +1 -1
  72. package/lib/components/VList/index.d.mts +48 -48
  73. package/lib/components/VLocaleProvider/index.d.mts +12 -12
  74. package/lib/components/VMain/index.d.mts +8 -8
  75. package/lib/components/VMenu/VMenu.mjs +3 -0
  76. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  77. package/lib/components/VMenu/index.d.mts +14 -8
  78. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +1 -1
  79. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +22 -8
  80. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  81. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +2 -1
  82. package/lib/components/VNavigationDrawer/index.d.mts +11 -11
  83. package/lib/components/VOtpInput/VOtpInput.mjs +7 -2
  84. package/lib/components/VOtpInput/VOtpInput.mjs.map +1 -1
  85. package/lib/components/VOtpInput/index.d.mts +31 -31
  86. package/lib/components/VOverlay/VOverlay.mjs +8 -3
  87. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  88. package/lib/components/VOverlay/index.d.mts +3 -0
  89. package/lib/components/VOverlay/scrollStrategies.mjs +2 -2
  90. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  91. package/lib/components/VPagination/index.d.mts +7 -7
  92. package/lib/components/VProgressLinear/VProgressLinear.css +0 -1
  93. package/lib/components/VProgressLinear/VProgressLinear.sass +0 -1
  94. package/lib/components/VProgressLinear/index.d.mts +7 -7
  95. package/lib/components/VRadioGroup/index.d.mts +44 -44
  96. package/lib/components/VRangeSlider/index.d.mts +47 -47
  97. package/lib/components/VRating/index.d.mts +7 -7
  98. package/lib/components/VResponsive/index.d.mts +8 -8
  99. package/lib/components/VSelect/index.d.mts +94 -94
  100. package/lib/components/VSheet/index.d.mts +8 -8
  101. package/lib/components/VSkeletonLoader/index.d.mts +8 -8
  102. package/lib/components/VSlider/index.d.mts +47 -47
  103. package/lib/components/VSnackbar/index.d.mts +25 -19
  104. package/lib/components/VStepper/index.d.mts +41 -41
  105. package/lib/components/VSwitch/index.d.mts +39 -39
  106. package/lib/components/VSystemBar/index.d.mts +8 -8
  107. package/lib/components/VTabs/index.d.mts +15 -15
  108. package/lib/components/VTextField/index.d.mts +173 -173
  109. package/lib/components/VTextarea/index.d.mts +119 -119
  110. package/lib/components/VThemeProvider/index.d.mts +8 -8
  111. package/lib/components/VTimeline/index.d.mts +8 -8
  112. package/lib/components/VToolbar/index.d.mts +8 -8
  113. package/lib/components/VTooltip/index.d.mts +14 -8
  114. package/lib/components/VWindow/index.d.mts +10 -10
  115. package/lib/components/index.d.mts +1869 -1832
  116. package/lib/components/transitions/index.d.mts +128 -128
  117. package/lib/composables/date/adapters/vuetify.mjs +1 -1
  118. package/lib/composables/date/adapters/vuetify.mjs.map +1 -1
  119. package/lib/composables/theme.mjs +1 -1
  120. package/lib/composables/theme.mjs.map +1 -1
  121. package/lib/entry-bundler.mjs +3 -2
  122. package/lib/entry-bundler.mjs.map +1 -1
  123. package/lib/framework.mjs +1 -1
  124. package/lib/framework.mjs.map +1 -1
  125. package/lib/index.d.mts +37 -36
  126. package/lib/labs/VCalendar/index.d.mts +32 -32
  127. package/lib/labs/VFab/index.d.mts +15 -15
  128. package/lib/labs/VNumberInput/VNumberInput.css +38 -0
  129. package/lib/labs/VNumberInput/VNumberInput.mjs +209 -0
  130. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -0
  131. package/lib/labs/VNumberInput/VNumberInput.sass +47 -0
  132. package/lib/labs/VNumberInput/_variables.scss +1 -0
  133. package/lib/labs/VNumberInput/index.d.mts +607 -0
  134. package/lib/labs/VNumberInput/index.mjs +2 -0
  135. package/lib/labs/VNumberInput/index.mjs.map +1 -0
  136. package/lib/labs/VPicker/index.d.mts +8 -8
  137. package/lib/labs/VSparkline/index.d.mts +7 -7
  138. package/lib/labs/VSpeedDial/VSpeedDial.mjs +9 -5
  139. package/lib/labs/VSpeedDial/VSpeedDial.mjs.map +1 -1
  140. package/lib/labs/VSpeedDial/index.d.mts +120 -24
  141. package/lib/labs/VTreeview/index.d.mts +8 -8
  142. package/lib/labs/components.d.mts +788 -95
  143. package/lib/labs/components.mjs +1 -0
  144. package/lib/labs/components.mjs.map +1 -1
  145. package/lib/locale/no.mjs +1 -1
  146. package/lib/locale/no.mjs.map +1 -1
  147. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.5.9
2
+ * Vuetify v3.5.10
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -2392,7 +2392,7 @@
2392
2392
  const current = vue.computed(() => computedThemes.value[name.value]);
2393
2393
  const styles = vue.computed(() => {
2394
2394
  const lines = [];
2395
- if (current.value.dark) {
2395
+ if (current.value?.dark) {
2396
2396
  createCssClass(lines, ':root', ['color-scheme: dark']);
2397
2397
  }
2398
2398
  createCssClass(lines, ':root', genCssVariables(current.value));
@@ -4572,6 +4572,7 @@
4572
4572
 
4573
4573
  const makeVIconProps = propsFactory({
4574
4574
  color: String,
4575
+ disabled: Boolean,
4575
4576
  start: Boolean,
4576
4577
  end: Boolean,
4577
4578
  icon: IconValue,
@@ -4609,11 +4610,13 @@
4609
4610
  if (slotValue) {
4610
4611
  slotIcon.value = flattenFragments(slotValue).filter(node => node.type === vue.Text && node.children && typeof node.children === 'string')[0]?.children;
4611
4612
  }
4613
+ const hasClick = !!(attrs.onClick || attrs.onClickOnce);
4612
4614
  return vue.createVNode(iconData.value.component, {
4613
4615
  "tag": props.tag,
4614
4616
  "icon": iconData.value.icon,
4615
4617
  "class": ['v-icon', 'notranslate', themeClasses.value, sizeClasses.value, textColorClasses.value, {
4616
- 'v-icon--clickable': !!attrs.onClick,
4618
+ 'v-icon--clickable': hasClick,
4619
+ 'v-icon--disabled': props.disabled,
4617
4620
  'v-icon--start': props.start,
4618
4621
  'v-icon--end': props.end
4619
4622
  }, props.class],
@@ -4622,8 +4625,9 @@
4622
4625
  height: convertToUnit(props.size),
4623
4626
  width: convertToUnit(props.size)
4624
4627
  } : undefined, textColorStyles.value, props.style],
4625
- "role": attrs.onClick ? 'button' : undefined,
4626
- "aria-hidden": !attrs.onClick
4628
+ "role": hasClick ? 'button' : undefined,
4629
+ "aria-hidden": !hasClick,
4630
+ "tabindex": hasClick ? props.disabled ? -1 : 0 : undefined
4627
4631
  }, {
4628
4632
  default: () => [slotValue]
4629
4633
  });
@@ -8620,9 +8624,9 @@
8620
8624
  emit('click', e);
8621
8625
  if (isGroupActivator || !isClickable.value) return;
8622
8626
  link.navigate?.(e);
8623
- if (root.activatable) {
8627
+ if (root.activatable.value) {
8624
8628
  activate(!isActivated.value, e);
8625
- } else if (root.selectable) {
8629
+ } else if (root.selectable.value) {
8626
8630
  select(!isSelected.value, e);
8627
8631
  } else if (props.value != null) {
8628
8632
  select(!isSelected.value, e);
@@ -9761,7 +9765,7 @@
9761
9765
  scope?.stop();
9762
9766
  if (!(data.isActive.value && props.scrollStrategy)) return;
9763
9767
  scope = vue.effectScope();
9764
- await vue.nextTick();
9768
+ await new Promise(resolve => setTimeout(resolve));
9765
9769
  scope.active && scope.run(() => {
9766
9770
  if (typeof props.scrollStrategy === 'function') {
9767
9771
  props.scrollStrategy(data, props, scope);
@@ -10510,6 +10514,7 @@
10510
10514
  if (v) isActive.value = false;
10511
10515
  });
10512
10516
  const root = vue.ref();
10517
+ const scrimEl = vue.ref();
10513
10518
  const contentEl = vue.ref();
10514
10519
  const {
10515
10520
  contentStyles,
@@ -10531,8 +10536,10 @@
10531
10536
  emit('click:outside', e);
10532
10537
  if (!props.persistent) isActive.value = false;else animateClick();
10533
10538
  }
10534
- function closeConditional() {
10535
- return isActive.value && globalTop.value;
10539
+ function closeConditional(e) {
10540
+ return isActive.value && globalTop.value && (
10541
+ // If using scrim, only close if clicking on it rather than anything opened on top
10542
+ !props.scrim || e.target === scrimEl.value);
10536
10543
  }
10537
10544
  IN_BROWSER && vue.watch(isActive, val => {
10538
10545
  if (val) {
@@ -10619,7 +10626,8 @@
10619
10626
  "ref": root
10620
10627
  }, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
10621
10628
  "color": scrimColor,
10622
- "modelValue": isActive.value && !!props.scrim
10629
+ "modelValue": isActive.value && !!props.scrim,
10630
+ "ref": scrimEl
10623
10631
  }, scrimEvents.value), null), vue.createVNode(MaybeTransition, {
10624
10632
  "appear": true,
10625
10633
  "persisted": true,
@@ -10642,6 +10650,7 @@
10642
10650
  })]));
10643
10651
  return {
10644
10652
  activatorEl,
10653
+ scrimEl,
10645
10654
  target,
10646
10655
  animateClick,
10647
10656
  contentEl,
@@ -10837,6 +10846,9 @@
10837
10846
  isActive.value = false;
10838
10847
  overlay.value?.activatorEl?.focus();
10839
10848
  }
10849
+ } else if (['Enter', ' '].includes(e.key) && props.closeOnContentClick) {
10850
+ isActive.value = false;
10851
+ parent?.closeParents();
10840
10852
  }
10841
10853
  }
10842
10854
  function onActivatorKeydown(e) {
@@ -11114,7 +11126,7 @@
11114
11126
  }
11115
11127
  useRender(() => {
11116
11128
  const isOutlined = props.variant === 'outlined';
11117
- const hasPrepend = slots['prepend-inner'] || props.prependInnerIcon;
11129
+ const hasPrepend = !!(slots['prepend-inner'] || props.prependInnerIcon);
11118
11130
  const hasClear = !!(props.clearable || slots.clear);
11119
11131
  const hasAppend = !!(slots['append-inner'] || props.appendInnerIcon || hasClear);
11120
11132
  const label = () => slots.label ? slots.label({
@@ -12538,8 +12550,8 @@
12538
12550
  if (e.key === 'ArrowDown' && highlightFirst.value) {
12539
12551
  listRef.value?.focus('next');
12540
12552
  }
12541
- if (!props.multiple) return;
12542
12553
  if (['Backspace', 'Delete'].includes(e.key)) {
12554
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
12543
12555
  if (selectionIndex.value < 0) {
12544
12556
  if (e.key === 'Backspace' && !search.value) {
12545
12557
  selectionIndex.value = length - 1;
@@ -12547,10 +12559,10 @@
12547
12559
  return;
12548
12560
  }
12549
12561
  const originalSelectionIndex = selectionIndex.value;
12550
- const selectedItem = model.value[selectionIndex.value];
12551
- if (selectedItem && !selectedItem.props.disabled) select(selectedItem, false);
12562
+ select(model.value[selectionIndex.value], false);
12552
12563
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12553
12564
  }
12565
+ if (!props.multiple) return;
12554
12566
  if (e.key === 'ArrowLeft') {
12555
12567
  if (selectionIndex.value < 0 && selectionStart > 0) return;
12556
12568
  const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
@@ -12603,7 +12615,7 @@
12603
12615
  /** @param set - null means toggle */
12604
12616
  function select(item) {
12605
12617
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12606
- if (item.props.disabled) return;
12618
+ if (!item || item.props.disabled) return;
12607
12619
  if (props.multiple) {
12608
12620
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12609
12621
  const add = set == null ? !~index : set;
@@ -16324,6 +16336,7 @@
16324
16336
  }
16325
16337
  menu.value = !menu.value;
16326
16338
  }
16339
+ // eslint-disable-next-line complexity
16327
16340
  function onKeydown(e) {
16328
16341
  if (isComposingIgnoreKey(e) || props.readonly || form?.isReadonly.value) return;
16329
16342
  const selectionStart = vTextFieldRef.value.selectionStart;
@@ -16350,8 +16363,8 @@
16350
16363
  select(transformItem$3(props, search.value));
16351
16364
  if (hasSelectionSlot.value) _search.value = '';
16352
16365
  }
16353
- if (!props.multiple) return;
16354
16366
  if (['Backspace', 'Delete'].includes(e.key)) {
16367
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
16355
16368
  if (selectionIndex.value < 0) {
16356
16369
  if (e.key === 'Backspace' && !search.value) {
16357
16370
  selectionIndex.value = length - 1;
@@ -16359,10 +16372,10 @@
16359
16372
  return;
16360
16373
  }
16361
16374
  const originalSelectionIndex = selectionIndex.value;
16362
- const selectedItem = model.value[selectionIndex.value];
16363
- if (selectedItem && !selectedItem.props.disabled) select(selectedItem, false);
16375
+ select(model.value[selectionIndex.value], false);
16364
16376
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
16365
16377
  }
16378
+ if (!props.multiple) return;
16366
16379
  if (e.key === 'ArrowLeft') {
16367
16380
  if (selectionIndex.value < 0 && selectionStart > 0) return;
16368
16381
  const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
@@ -16393,7 +16406,7 @@
16393
16406
  /** @param set - null means toggle */
16394
16407
  function select(item) {
16395
16408
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
16396
- if (item.props.disabled) return;
16409
+ if (!item || item.props.disabled) return;
16397
16410
  if (props.multiple) {
16398
16411
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
16399
16412
  const add = set == null ? !~index : set;
@@ -17621,7 +17634,7 @@
17621
17634
  return d;
17622
17635
  }
17623
17636
  function startOfDay(date) {
17624
- return new Date(date.getFullYear(), date.getMonth(), date.getDate());
17637
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);
17625
17638
  }
17626
17639
  function endOfDay(date) {
17627
17640
  return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);
@@ -20774,6 +20787,12 @@
20774
20787
  const adapter = useDate();
20775
20788
  const rangeStart = vue.shallowRef();
20776
20789
  const rangeStop = vue.shallowRef();
20790
+ if (props.multiple === 'range' && model.value.length > 0) {
20791
+ rangeStart.value = model.value[0];
20792
+ if (model.value.length > 1) {
20793
+ rangeStop.value = model.value[model.value.length - 1];
20794
+ }
20795
+ }
20777
20796
  const atMax = vue.computed(() => {
20778
20797
  const max = ['number', 'string'].includes(typeof props.multiple) ? Number(props.multiple) : Infinity;
20779
20798
  return model.value.length >= max;
@@ -20784,15 +20803,15 @@
20784
20803
  rangeStart.value = _value;
20785
20804
  model.value = [rangeStart.value];
20786
20805
  } else if (!rangeStop.value) {
20787
- if (adapter.isSameDay(value, rangeStart.value)) {
20806
+ if (adapter.isSameDay(_value, rangeStart.value)) {
20788
20807
  rangeStart.value = undefined;
20789
20808
  model.value = [];
20790
20809
  return;
20791
- } else if (adapter.isBefore(value, rangeStart.value)) {
20792
- rangeStop.value = rangeStart.value;
20810
+ } else if (adapter.isBefore(_value, rangeStart.value)) {
20811
+ rangeStop.value = adapter.endOfDay(rangeStart.value);
20793
20812
  rangeStart.value = _value;
20794
20813
  } else {
20795
- rangeStop.value = _value;
20814
+ rangeStop.value = adapter.endOfDay(_value);
20796
20815
  }
20797
20816
  const diff = adapter.getDiff(rangeStop.value, rangeStart.value, 'days');
20798
20817
  const datesInRange = [rangeStart.value];
@@ -22959,12 +22978,24 @@
22959
22978
  default: () => [hasImage && vue.createVNode("div", {
22960
22979
  "key": "image",
22961
22980
  "class": "v-navigation-drawer__img"
22962
- }, [slots.image ? slots.image?.({
22963
- image: props.image
22964
- }) : vue.createVNode("img", {
22965
- "src": props.image,
22966
- "alt": ""
22967
- }, null)]), slots.prepend && vue.createVNode("div", {
22981
+ }, [!slots.image ? vue.createVNode(VImg, {
22982
+ "key": "image-img",
22983
+ "alt": "",
22984
+ "cover": true,
22985
+ "height": "inherit",
22986
+ "src": props.image
22987
+ }, null) : vue.createVNode(VDefaultsProvider, {
22988
+ "key": "image-defaults",
22989
+ "disabled": !props.image,
22990
+ "defaults": {
22991
+ VImg: {
22992
+ alt: '',
22993
+ cover: true,
22994
+ height: 'inherit',
22995
+ src: props.image
22996
+ }
22997
+ }
22998
+ }, slots.image)]), slots.prepend && vue.createVNode("div", {
22968
22999
  "class": "v-navigation-drawer__prepend"
22969
23000
  }, [slots.prepend?.()]), vue.createVNode("div", {
22970
23001
  "class": "v-navigation-drawer__content"
@@ -23065,7 +23096,7 @@
23065
23096
  function onInput() {
23066
23097
  // The maxlength attribute doesn't work for the number type input, so the text type is used.
23067
23098
  // The following logic simulates the behavior of a number input.
23068
- if (props.type === 'number' && /[^0-9]/g.test(current.value.value)) {
23099
+ if (isValidNumber(current.value.value)) {
23069
23100
  current.value.value = '';
23070
23101
  return;
23071
23102
  }
@@ -23111,7 +23142,9 @@
23111
23142
  function onPaste(index, e) {
23112
23143
  e.preventDefault();
23113
23144
  e.stopPropagation();
23114
- model.value = (e?.clipboardData?.getData('Text') ?? '').split('');
23145
+ const clipboardText = e?.clipboardData?.getData('Text') ?? '';
23146
+ if (!isValidNumber(clipboardText)) return;
23147
+ model.value = clipboardText.split('');
23115
23148
  inputRef.value?.[index].blur();
23116
23149
  }
23117
23150
  function reset() {
@@ -23125,6 +23158,9 @@
23125
23158
  blur();
23126
23159
  focusIndex.value = -1;
23127
23160
  }
23161
+ function isValidNumber(value) {
23162
+ return props.type === 'number' && !isNaN(Number(value));
23163
+ }
23128
23164
  provideDefaults({
23129
23165
  VField: {
23130
23166
  color: vue.computed(() => props.color),
@@ -26376,6 +26412,203 @@
26376
26412
  }
26377
26413
  });
26378
26414
 
26415
+ // Types
26416
+
26417
+ const makeVNumberInputProps = propsFactory({
26418
+ controlVariant: {
26419
+ type: String,
26420
+ default: 'default'
26421
+ },
26422
+ inset: Boolean,
26423
+ hideInput: Boolean,
26424
+ min: Number,
26425
+ max: Number,
26426
+ step: Number,
26427
+ ...only(makeVInputProps(), ['density', 'disabled', 'focused', 'hideDetails', 'hint', 'label', 'persistentHint', 'readonly']),
26428
+ ...only(makeVFieldProps(), ['baseColor', 'bgColor', 'class', 'color', 'disabled', 'error', 'loading', 'reverse', 'rounded', 'style', 'theme', 'variant']),
26429
+ ...makeFocusProps()
26430
+ }, 'VNumberInput');
26431
+ const VNumberInput = genericComponent()({
26432
+ name: 'VNumberInput',
26433
+ inheritAttrs: false,
26434
+ props: {
26435
+ ...makeVNumberInputProps(),
26436
+ modelValue: {
26437
+ type: [Number, String],
26438
+ default: 0
26439
+ }
26440
+ },
26441
+ emits: {
26442
+ 'update:modelValue': val => true
26443
+ },
26444
+ setup(props, _ref) {
26445
+ let {
26446
+ attrs,
26447
+ emit,
26448
+ slots
26449
+ } = _ref;
26450
+ const model = useProxiedModel(props, 'modelValue');
26451
+ const {
26452
+ isFocused,
26453
+ focus,
26454
+ blur
26455
+ } = useFocus(props);
26456
+ const inputRef = vue.ref();
26457
+ function onFocus() {
26458
+ if (!isFocused.value) focus();
26459
+ }
26460
+ const controlVariant = vue.computed(() => {
26461
+ return props.hideInput ? 'stacked' : props.controlVariant;
26462
+ });
26463
+ function toggleUpDown() {
26464
+ let increment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
26465
+ if (increment) {
26466
+ inputRef.value?.stepUp();
26467
+ } else {
26468
+ inputRef.value?.stepDown();
26469
+ }
26470
+ if (inputRef.value) model.value = parseInt(inputRef.value.value, 10);
26471
+ }
26472
+ function onClickUp() {
26473
+ toggleUpDown();
26474
+ }
26475
+ function onClickDown() {
26476
+ toggleUpDown(false);
26477
+ }
26478
+ const incrementSlotProps = vue.computed(() => ({
26479
+ click: onClickUp
26480
+ }));
26481
+ const decrementSlotProps = vue.computed(() => ({
26482
+ click: onClickDown
26483
+ }));
26484
+ useRender(() => {
26485
+ const fieldProps = filterFieldProps(props);
26486
+ const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
26487
+ const {
26488
+ modelValue: _,
26489
+ ...inputProps
26490
+ } = VInput.filterProps(props);
26491
+ function controlNode() {
26492
+ const defaultHeight = controlVariant.value === 'stacked' ? 'auto' : '100%';
26493
+ return vue.createVNode("div", {
26494
+ "class": "v-number-input__control"
26495
+ }, [!slots.decrement ? vue.createVNode(VBtn, {
26496
+ "flat": true,
26497
+ "key": "decrement-btn",
26498
+ "height": defaultHeight,
26499
+ "icon": "mdi-chevron-down",
26500
+ "rounded": "0",
26501
+ "size": "small",
26502
+ "onClick": onClickDown
26503
+ }, null) : vue.createVNode(VDefaultsProvider, {
26504
+ "key": "decrement-defaults",
26505
+ "defaults": {
26506
+ VBtn: {
26507
+ flat: true,
26508
+ rounded: '0',
26509
+ height: defaultHeight,
26510
+ size: 'small',
26511
+ icon: 'mdi-chevron-down'
26512
+ }
26513
+ }
26514
+ }, {
26515
+ default: () => [slots.decrement(decrementSlotProps.value)]
26516
+ }), vue.createVNode(VDivider, {
26517
+ "vertical": controlVariant.value !== 'stacked'
26518
+ }, null), !slots.increment ? vue.createVNode(VBtn, {
26519
+ "flat": true,
26520
+ "key": "increment-btn",
26521
+ "height": defaultHeight,
26522
+ "icon": "mdi-chevron-up",
26523
+ "onClick": onClickUp,
26524
+ "rounded": "0",
26525
+ "size": "small"
26526
+ }, null) : vue.createVNode(VDefaultsProvider, {
26527
+ "key": "increment-defaults",
26528
+ "defaults": {
26529
+ VBtn: {
26530
+ flat: true,
26531
+ height: defaultHeight,
26532
+ rounded: '0',
26533
+ size: 'small',
26534
+ icon: 'mdi-chevron-up'
26535
+ }
26536
+ }
26537
+ }, {
26538
+ default: () => [slots.increment(incrementSlotProps.value)]
26539
+ })]);
26540
+ }
26541
+ function dividerNode() {
26542
+ return !props.hideInput && !props.inset ? vue.createVNode(VDivider, {
26543
+ "vertical": true
26544
+ }, null) : undefined;
26545
+ }
26546
+ return vue.createVNode(VInput, vue.mergeProps({
26547
+ "class": ['v-number-input', {
26548
+ 'v-number-input--default': controlVariant.value === 'default',
26549
+ 'v-number-input--hide-input': props.hideInput,
26550
+ 'v-number-input--inset': props.inset,
26551
+ 'v-number-input--reverse': props.reverse,
26552
+ 'v-number-input--split': controlVariant.value === 'split',
26553
+ 'v-number-input--stacked': controlVariant.value === 'stacked'
26554
+ }, props.class]
26555
+ }, rootAttrs, inputProps, {
26556
+ "focused": isFocused.value,
26557
+ "style": props.style
26558
+ }), {
26559
+ ...slots,
26560
+ default: () => vue.createVNode(VField, vue.mergeProps(fieldProps, {
26561
+ "active": true,
26562
+ "focused": isFocused.value
26563
+ }), {
26564
+ ...slots,
26565
+ default: _ref2 => {
26566
+ let {
26567
+ props: {
26568
+ class: fieldClass,
26569
+ ...slotProps
26570
+ }
26571
+ } = _ref2;
26572
+ return vue.createVNode("input", vue.mergeProps({
26573
+ "ref": inputRef,
26574
+ "type": "number",
26575
+ "value": model.value,
26576
+ "class": fieldClass,
26577
+ "max": props.max,
26578
+ "min": props.min,
26579
+ "step": props.step,
26580
+ "onFocus": onFocus,
26581
+ "onBlur": blur
26582
+ }, inputAttrs), null);
26583
+ },
26584
+ 'append-inner': controlVariant.value === 'split' ? () => vue.createVNode("div", {
26585
+ "class": "v-number-input__control"
26586
+ }, [vue.createVNode(VDivider, {
26587
+ "vertical": true
26588
+ }, null), vue.createVNode(VBtn, {
26589
+ "flat": true,
26590
+ "height": "100%",
26591
+ "icon": "mdi-plus",
26592
+ "tile": true,
26593
+ "onClick": onClickUp
26594
+ }, null)]) : !props.reverse ? () => vue.createVNode(vue.Fragment, null, [dividerNode(), controlNode()]) : undefined,
26595
+ 'prepend-inner': controlVariant.value === 'split' ? () => vue.createVNode("div", {
26596
+ "class": "v-number-input__control"
26597
+ }, [vue.createVNode(VBtn, {
26598
+ "flat": true,
26599
+ "height": "100%",
26600
+ "icon": "mdi-minus",
26601
+ "tile": true,
26602
+ "onClick": onClickDown
26603
+ }, null), vue.createVNode(VDivider, {
26604
+ "vertical": true
26605
+ }, null)]) : props.reverse ? () => vue.createVNode(vue.Fragment, null, [controlNode(), dividerNode()]) : undefined
26606
+ })
26607
+ });
26608
+ });
26609
+ }
26610
+ });
26611
+
26379
26612
  // Utilities
26380
26613
 
26381
26614
  // Types
@@ -26823,6 +27056,8 @@
26823
27056
  }
26824
27057
  });
26825
27058
 
27059
+ // Types
27060
+
26826
27061
  const makeVSpeedDialProps = propsFactory({
26827
27062
  ...makeComponentProps(),
26828
27063
  ...makeVMenuProps({
@@ -26841,14 +27076,17 @@
26841
27076
  let {
26842
27077
  slots
26843
27078
  } = _ref;
27079
+ const menuRef = vue.ref();
26844
27080
  useRender(() => {
26845
27081
  const menuProps = VMenu.filterProps(props);
26846
27082
  return vue.createVNode(VMenu, vue.mergeProps(menuProps, {
26847
27083
  "class": props.class,
26848
27084
  "style": props.style,
26849
- "contentClass": "v-speed-dial__content"
27085
+ "contentClass": "v-speed-dial__content",
27086
+ "ref": menuRef
26850
27087
  }), {
26851
- default: () => [vue.createVNode(VDefaultsProvider, {
27088
+ ...slots,
27089
+ default: slotProps => vue.createVNode(VDefaultsProvider, {
26852
27090
  "defaults": {
26853
27091
  VBtn: {
26854
27092
  size: 'small'
@@ -26860,9 +27098,9 @@
26860
27098
  "group": true,
26861
27099
  "transition": props.transition
26862
27100
  }, {
26863
- default: () => [slots.default?.()]
27101
+ default: () => [slots.default?.(slotProps)]
26864
27102
  })]
26865
- })]
27103
+ })
26866
27104
  });
26867
27105
  });
26868
27106
  return {};
@@ -27338,6 +27576,7 @@
27338
27576
  VMessages: VMessages,
27339
27577
  VNavigationDrawer: VNavigationDrawer,
27340
27578
  VNoSsr: VNoSsr,
27579
+ VNumberInput: VNumberInput,
27341
27580
  VOtpInput: VOtpInput,
27342
27581
  VOverlay: VOverlay,
27343
27582
  VPagination: VPagination,
@@ -27623,7 +27862,7 @@
27623
27862
  goTo
27624
27863
  };
27625
27864
  }
27626
- const version$1 = "3.5.9";
27865
+ const version$1 = "3.5.10";
27627
27866
  createVuetify$1.version = version$1;
27628
27867
 
27629
27868
  // Vue's inject() can only be used in setup
@@ -27635,9 +27874,248 @@
27635
27874
  }
27636
27875
  }
27637
27876
 
27877
+ // Icons
27878
+
27879
+ // Types
27880
+
27881
+ const md1 = {
27882
+ defaults: {
27883
+ global: {
27884
+ rounded: 'sm'
27885
+ },
27886
+ VAvatar: {
27887
+ rounded: 'circle'
27888
+ },
27889
+ VAutocomplete: {
27890
+ variant: 'underlined'
27891
+ },
27892
+ VBanner: {
27893
+ color: 'primary'
27894
+ },
27895
+ VBtn: {
27896
+ color: 'primary',
27897
+ rounded: 0
27898
+ },
27899
+ VCheckbox: {
27900
+ color: 'secondary'
27901
+ },
27902
+ VCombobox: {
27903
+ variant: 'underlined'
27904
+ },
27905
+ VSelect: {
27906
+ variant: 'underlined'
27907
+ },
27908
+ VSlider: {
27909
+ color: 'primary'
27910
+ },
27911
+ VTabs: {
27912
+ color: 'primary'
27913
+ },
27914
+ VTextarea: {
27915
+ variant: 'underlined'
27916
+ },
27917
+ VTextField: {
27918
+ variant: 'underlined'
27919
+ },
27920
+ VToolbar: {
27921
+ VBtn: {
27922
+ color: null
27923
+ }
27924
+ }
27925
+ },
27926
+ icons: {
27927
+ defaultSet: 'mdi',
27928
+ sets: {
27929
+ mdi
27930
+ }
27931
+ },
27932
+ theme: {
27933
+ themes: {
27934
+ light: {
27935
+ colors: {
27936
+ primary: '#3F51B5',
27937
+ 'primary-darken-1': '#303F9F',
27938
+ 'primary-lighten-1': '#C5CAE9',
27939
+ secondary: '#FF4081',
27940
+ 'secondary-darken-1': '#F50057',
27941
+ 'secondary-lighten-1': '#FF80AB',
27942
+ accent: '#009688'
27943
+ }
27944
+ }
27945
+ }
27946
+ }
27947
+ };
27948
+
27949
+ // Icons
27950
+
27951
+ // Types
27952
+
27953
+ const md2 = {
27954
+ defaults: {
27955
+ global: {
27956
+ rounded: 'md'
27957
+ },
27958
+ VAvatar: {
27959
+ rounded: 'circle'
27960
+ },
27961
+ VAutocomplete: {
27962
+ variant: 'filled'
27963
+ },
27964
+ VBanner: {
27965
+ color: 'primary'
27966
+ },
27967
+ VBtn: {
27968
+ color: 'primary'
27969
+ },
27970
+ VCheckbox: {
27971
+ color: 'secondary'
27972
+ },
27973
+ VCombobox: {
27974
+ variant: 'filled'
27975
+ },
27976
+ VSelect: {
27977
+ variant: 'filled'
27978
+ },
27979
+ VSlider: {
27980
+ color: 'primary'
27981
+ },
27982
+ VTabs: {
27983
+ color: 'primary'
27984
+ },
27985
+ VTextarea: {
27986
+ variant: 'filled'
27987
+ },
27988
+ VTextField: {
27989
+ variant: 'filled'
27990
+ },
27991
+ VToolbar: {
27992
+ VBtn: {
27993
+ color: null
27994
+ }
27995
+ }
27996
+ },
27997
+ icons: {
27998
+ defaultSet: 'mdi',
27999
+ sets: {
28000
+ mdi
28001
+ }
28002
+ },
28003
+ theme: {
28004
+ themes: {
28005
+ light: {
28006
+ colors: {
28007
+ primary: '#6200EE',
28008
+ 'primary-darken-1': '#3700B3',
28009
+ secondary: '#03DAC6',
28010
+ 'secondary-darken-1': '#018786',
28011
+ error: '#B00020'
28012
+ }
28013
+ }
28014
+ }
28015
+ }
28016
+ };
28017
+
28018
+ // Icons
28019
+
28020
+ // Types
28021
+
28022
+ const md3 = {
28023
+ defaults: {
28024
+ VAppBar: {
28025
+ flat: true
28026
+ },
28027
+ VAutocomplete: {
28028
+ variant: 'filled'
28029
+ },
28030
+ VBanner: {
28031
+ color: 'primary'
28032
+ },
28033
+ VBottomSheet: {
28034
+ contentClass: 'rounded-t-xl overflow-hidden'
28035
+ },
28036
+ VBtn: {
28037
+ color: 'primary',
28038
+ rounded: 'xl'
28039
+ },
28040
+ VBtnGroup: {
28041
+ rounded: 'xl',
28042
+ VBtn: {
28043
+ rounded: null
28044
+ }
28045
+ },
28046
+ VCard: {
28047
+ rounded: 'lg'
28048
+ },
28049
+ VCheckbox: {
28050
+ color: 'secondary',
28051
+ inset: true
28052
+ },
28053
+ VChip: {
28054
+ rounded: 'sm'
28055
+ },
28056
+ VCombobox: {
28057
+ variant: 'filled'
28058
+ },
28059
+ VNavigationDrawer: {
28060
+ // VList: {
28061
+ // nav: true,
28062
+ // VListItem: {
28063
+ // rounded: 'xl',
28064
+ // },
28065
+ // },
28066
+ },
28067
+ VSelect: {
28068
+ variant: 'filled'
28069
+ },
28070
+ VSlider: {
28071
+ color: 'primary'
28072
+ },
28073
+ VTabs: {
28074
+ color: 'primary'
28075
+ },
28076
+ VTextarea: {
28077
+ variant: 'filled'
28078
+ },
28079
+ VTextField: {
28080
+ variant: 'filled'
28081
+ },
28082
+ VToolbar: {
28083
+ VBtn: {
28084
+ color: null
28085
+ }
28086
+ }
28087
+ },
28088
+ icons: {
28089
+ defaultSet: 'mdi',
28090
+ sets: {
28091
+ mdi
28092
+ }
28093
+ },
28094
+ theme: {
28095
+ themes: {
28096
+ light: {
28097
+ colors: {
28098
+ primary: '#6750a4',
28099
+ secondary: '#b4b0bb',
28100
+ tertiary: '#7d5260',
28101
+ error: '#b3261e',
28102
+ surface: '#fffbfe'
28103
+ }
28104
+ }
28105
+ }
28106
+ }
28107
+ };
28108
+
28109
+ var index = /*#__PURE__*/Object.freeze({
28110
+ __proto__: null,
28111
+ md1: md1,
28112
+ md2: md2,
28113
+ md3: md3
28114
+ });
28115
+
27638
28116
  /* eslint-disable local-rules/sort-imports */
27639
28117
 
27640
- const version = "3.5.9";
28118
+ const version = "3.5.10";
27641
28119
 
27642
28120
  /* eslint-disable local-rules/sort-imports */
27643
28121
 
@@ -27650,6 +28128,7 @@
27650
28128
  });
27651
28129
  };
27652
28130
 
28131
+ exports.blueprints = index;
27653
28132
  exports.components = components;
27654
28133
  exports.createVuetify = createVuetify;
27655
28134
  exports.directives = directives;