@vuetify/nightly 3.8.5-dev.2025-05-17 → 3.8.5-dev.2025-05-20

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 (44) hide show
  1. package/CHANGELOG.md +6 -3
  2. package/dist/json/attributes.json +2855 -2851
  3. package/dist/json/importMap-labs.json +18 -18
  4. package/dist/json/importMap.json +154 -154
  5. package/dist/json/tags.json +1 -0
  6. package/dist/json/web-types.json +5580 -5480
  7. package/dist/vuetify-labs.cjs +136 -69
  8. package/dist/vuetify-labs.css +5215 -5215
  9. package/dist/vuetify-labs.d.ts +151 -65
  10. package/dist/vuetify-labs.esm.js +136 -69
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +136 -69
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +136 -69
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +5450 -5450
  17. package/dist/vuetify.d.ts +148 -62
  18. package/dist/vuetify.esm.js +136 -69
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +136 -69
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +73 -71
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VAutocomplete/VAutocomplete.d.ts +26 -2
  26. package/lib/components/VAutocomplete/VAutocomplete.js +18 -1
  27. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  28. package/lib/components/VCombobox/VCombobox.d.ts +26 -2
  29. package/lib/components/VCombobox/VCombobox.js +19 -1
  30. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  31. package/lib/components/VList/VListChildren.js.map +1 -1
  32. package/lib/components/VNumberInput/VNumberInput.d.ts +14 -0
  33. package/lib/components/VNumberInput/VNumberInput.js +19 -4
  34. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  35. package/lib/components/VSelect/VSelect.d.ts +26 -2
  36. package/lib/components/VSelect/VSelect.js +18 -1
  37. package/lib/components/VSelect/VSelect.js.map +1 -1
  38. package/lib/composables/filter.js +3 -0
  39. package/lib/composables/filter.js.map +1 -1
  40. package/lib/entry-bundler.js +1 -1
  41. package/lib/framework.d.ts +56 -56
  42. package/lib/framework.js +1 -1
  43. package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
  44. package/package.json +1 -1
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.5-dev.2025-05-17
2
+ * Vuetify v3.8.5-dev.2025-05-20
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -8609,6 +8609,68 @@
8609
8609
  }
8610
8610
  });
8611
8611
 
8612
+ const makeVDividerProps = propsFactory({
8613
+ color: String,
8614
+ inset: Boolean,
8615
+ length: [Number, String],
8616
+ opacity: [Number, String],
8617
+ thickness: [Number, String],
8618
+ vertical: Boolean,
8619
+ ...makeComponentProps(),
8620
+ ...makeThemeProps()
8621
+ }, 'VDivider');
8622
+ const VDivider = genericComponent()({
8623
+ name: 'VDivider',
8624
+ props: makeVDividerProps(),
8625
+ setup(props, _ref) {
8626
+ let {
8627
+ attrs,
8628
+ slots
8629
+ } = _ref;
8630
+ const {
8631
+ themeClasses
8632
+ } = provideTheme(props);
8633
+ const {
8634
+ textColorClasses,
8635
+ textColorStyles
8636
+ } = useTextColor(() => props.color);
8637
+ const dividerStyles = vue.computed(() => {
8638
+ const styles = {};
8639
+ if (props.length) {
8640
+ styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
8641
+ }
8642
+ if (props.thickness) {
8643
+ styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
8644
+ }
8645
+ return styles;
8646
+ });
8647
+ useRender(() => {
8648
+ const divider = vue.createVNode("hr", {
8649
+ "class": [{
8650
+ 'v-divider': true,
8651
+ 'v-divider--inset': props.inset,
8652
+ 'v-divider--vertical': props.vertical
8653
+ }, themeClasses.value, textColorClasses.value, props.class],
8654
+ "style": [dividerStyles.value, textColorStyles.value, {
8655
+ '--v-border-opacity': props.opacity
8656
+ }, props.style],
8657
+ "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
8658
+ "role": `${attrs.role || 'separator'}`
8659
+ }, null);
8660
+ if (!slots.default) return divider;
8661
+ return vue.createVNode("div", {
8662
+ "class": ['v-divider__wrapper', {
8663
+ 'v-divider__wrapper--vertical': props.vertical,
8664
+ 'v-divider__wrapper--inset': props.inset
8665
+ }]
8666
+ }, [divider, vue.createVNode("div", {
8667
+ "class": "v-divider__content"
8668
+ }, [slots.default()]), divider]);
8669
+ });
8670
+ return {};
8671
+ }
8672
+ });
8673
+
8612
8674
  // Utilities
8613
8675
 
8614
8676
  // List
@@ -9760,68 +9822,6 @@
9760
9822
  }
9761
9823
  });
9762
9824
 
9763
- const makeVDividerProps = propsFactory({
9764
- color: String,
9765
- inset: Boolean,
9766
- length: [Number, String],
9767
- opacity: [Number, String],
9768
- thickness: [Number, String],
9769
- vertical: Boolean,
9770
- ...makeComponentProps(),
9771
- ...makeThemeProps()
9772
- }, 'VDivider');
9773
- const VDivider = genericComponent()({
9774
- name: 'VDivider',
9775
- props: makeVDividerProps(),
9776
- setup(props, _ref) {
9777
- let {
9778
- attrs,
9779
- slots
9780
- } = _ref;
9781
- const {
9782
- themeClasses
9783
- } = provideTheme(props);
9784
- const {
9785
- textColorClasses,
9786
- textColorStyles
9787
- } = useTextColor(() => props.color);
9788
- const dividerStyles = vue.computed(() => {
9789
- const styles = {};
9790
- if (props.length) {
9791
- styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
9792
- }
9793
- if (props.thickness) {
9794
- styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
9795
- }
9796
- return styles;
9797
- });
9798
- useRender(() => {
9799
- const divider = vue.createVNode("hr", {
9800
- "class": [{
9801
- 'v-divider': true,
9802
- 'v-divider--inset': props.inset,
9803
- 'v-divider--vertical': props.vertical
9804
- }, themeClasses.value, textColorClasses.value, props.class],
9805
- "style": [dividerStyles.value, textColorStyles.value, {
9806
- '--v-border-opacity': props.opacity
9807
- }, props.style],
9808
- "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
9809
- "role": `${attrs.role || 'separator'}`
9810
- }, null);
9811
- if (!slots.default) return divider;
9812
- return vue.createVNode("div", {
9813
- "class": ['v-divider__wrapper', {
9814
- 'v-divider__wrapper--vertical': props.vertical,
9815
- 'v-divider__wrapper--inset': props.inset
9816
- }]
9817
- }, [divider, vue.createVNode("div", {
9818
- "class": "v-divider__content"
9819
- }, [slots.default()]), divider]);
9820
- });
9821
- return {};
9822
- }
9823
- });
9824
-
9825
9825
  // Types
9826
9826
 
9827
9827
  const makeVListChildrenProps = propsFactory({
@@ -13373,6 +13373,22 @@
13373
13373
  key: item.value,
13374
13374
  onClick: () => select(item, null)
13375
13375
  });
13376
+ if (item.raw.type === 'divider') {
13377
+ return slots.divider?.({
13378
+ props: item.raw,
13379
+ index
13380
+ }) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
13381
+ "key": `divider-${index}`
13382
+ }), null);
13383
+ }
13384
+ if (item.raw.type === 'subheader') {
13385
+ return slots.subheader?.({
13386
+ props: item.raw,
13387
+ index
13388
+ }) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
13389
+ "key": `subheader-${index}`
13390
+ }), null);
13391
+ }
13376
13392
  return slots.item?.({
13377
13393
  item,
13378
13394
  index,
@@ -13533,6 +13549,9 @@
13533
13549
  let match = -1;
13534
13550
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13535
13551
  if (typeof item === 'object') {
13552
+ if (['divider', 'subheader'].includes(item.raw?.type)) {
13553
+ continue;
13554
+ }
13536
13555
  const filterKeys = keys || Object.keys(transformed);
13537
13556
  for (const key of filterKeys) {
13538
13557
  const value = getPropertyFromItem(transformed, key);
@@ -13971,6 +13990,22 @@
13971
13990
  active: highlightFirst.value && index === 0 ? true : undefined,
13972
13991
  onClick: () => select(item, null)
13973
13992
  });
13993
+ if (item.raw.type === 'divider') {
13994
+ return slots.divider?.({
13995
+ props: item.raw,
13996
+ index
13997
+ }) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
13998
+ "key": `divider-${index}`
13999
+ }), null);
14000
+ }
14001
+ if (item.raw.type === 'subheader') {
14002
+ return slots.subheader?.({
14003
+ props: item.raw,
14004
+ index
14005
+ }) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
14006
+ "key": `subheader-${index}`
14007
+ }), null);
14008
+ }
13974
14009
  return slots.item?.({
13975
14010
  item,
13976
14011
  index,
@@ -18381,6 +18416,7 @@
18381
18416
  _search.value = val ?? '';
18382
18417
  if (!props.multiple && !hasSelectionSlot.value) {
18383
18418
  model.value = [transformItem$3(props, val)];
18419
+ vue.nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
18384
18420
  }
18385
18421
  if (val && props.multiple && props.delimiters?.length) {
18386
18422
  const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
@@ -18697,6 +18733,22 @@
18697
18733
  active: highlightFirst.value && index === 0 ? true : undefined,
18698
18734
  onClick: () => select(item, null)
18699
18735
  });
18736
+ if (item.raw.type === 'divider') {
18737
+ return slots.divider?.({
18738
+ props: item.raw,
18739
+ index
18740
+ }) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
18741
+ "key": `divider-${index}`
18742
+ }), null);
18743
+ }
18744
+ if (item.raw.type === 'subheader') {
18745
+ return slots.subheader?.({
18746
+ props: item.raw,
18747
+ index
18748
+ }) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
18749
+ "key": `subheader-${index}`
18750
+ }), null);
18751
+ }
18700
18752
  return slots.item?.({
18701
18753
  item,
18702
18754
  index,
@@ -25119,6 +25171,10 @@
25119
25171
  type: Number,
25120
25172
  default: 0
25121
25173
  },
25174
+ minFractionDigits: {
25175
+ type: Number,
25176
+ default: null
25177
+ },
25122
25178
  ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
25123
25179
  }, 'VNumberInput');
25124
25180
  const VNumberInput = genericComponent()({
@@ -25149,9 +25205,19 @@
25149
25205
  } = useFocus(props);
25150
25206
  function correctPrecision(val) {
25151
25207
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
25152
- const fixed = precision == null ? String(val) : val.toFixed(precision);
25153
- return isFocused.value ? Number(fixed).toString() // trim zeros
25154
- : fixed;
25208
+ if (precision == null) {
25209
+ return String(val);
25210
+ }
25211
+ let fixed = val.toFixed(precision);
25212
+ if (isFocused.value) {
25213
+ return Number(fixed).toString(); // trim zeros
25214
+ }
25215
+ if ((props.minFractionDigits ?? precision) < precision) {
25216
+ const trimLimit = precision - props.minFractionDigits;
25217
+ const [baseDigits, fractionDigits] = fixed.split('.');
25218
+ fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
25219
+ }
25220
+ return fixed;
25155
25221
  }
25156
25222
  const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
25157
25223
  const _inputText = vue.shallowRef(null);
@@ -25204,6 +25270,7 @@
25204
25270
  }
25205
25271
  };
25206
25272
  vue.watch(() => props.precision, () => formatInputValue());
25273
+ vue.watch(() => props.minFractionDigits, () => formatInputValue());
25207
25274
  vue.onMounted(() => {
25208
25275
  clampModel();
25209
25276
  });
@@ -25305,7 +25372,7 @@
25305
25372
  inputText.value = null;
25306
25373
  return;
25307
25374
  }
25308
- inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
25375
+ inputText.value = correctPrecision(model.value);
25309
25376
  }
25310
25377
  function trimDecimalZeros() {
25311
25378
  if (controlsDisabled.value) return;
@@ -29347,7 +29414,7 @@
29347
29414
  };
29348
29415
  });
29349
29416
  }
29350
- const version$1 = "3.8.5-dev.2025-05-17";
29417
+ const version$1 = "3.8.5-dev.2025-05-20";
29351
29418
  createVuetify$1.version = version$1;
29352
29419
 
29353
29420
  // Vue's inject() can only be used in setup
@@ -29372,7 +29439,7 @@
29372
29439
  ...options
29373
29440
  });
29374
29441
  };
29375
- const version = "3.8.5-dev.2025-05-17";
29442
+ const version = "3.8.5-dev.2025-05-20";
29376
29443
  createVuetify.version = version;
29377
29444
 
29378
29445
  exports.blueprints = index;