@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
@@ -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
  */
@@ -8605,6 +8605,68 @@ const VChip = genericComponent()({
8605
8605
  }
8606
8606
  });
8607
8607
 
8608
+ const makeVDividerProps = propsFactory({
8609
+ color: String,
8610
+ inset: Boolean,
8611
+ length: [Number, String],
8612
+ opacity: [Number, String],
8613
+ thickness: [Number, String],
8614
+ vertical: Boolean,
8615
+ ...makeComponentProps(),
8616
+ ...makeThemeProps()
8617
+ }, 'VDivider');
8618
+ const VDivider = genericComponent()({
8619
+ name: 'VDivider',
8620
+ props: makeVDividerProps(),
8621
+ setup(props, _ref) {
8622
+ let {
8623
+ attrs,
8624
+ slots
8625
+ } = _ref;
8626
+ const {
8627
+ themeClasses
8628
+ } = provideTheme(props);
8629
+ const {
8630
+ textColorClasses,
8631
+ textColorStyles
8632
+ } = useTextColor(() => props.color);
8633
+ const dividerStyles = computed(() => {
8634
+ const styles = {};
8635
+ if (props.length) {
8636
+ styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
8637
+ }
8638
+ if (props.thickness) {
8639
+ styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
8640
+ }
8641
+ return styles;
8642
+ });
8643
+ useRender(() => {
8644
+ const divider = createVNode("hr", {
8645
+ "class": [{
8646
+ 'v-divider': true,
8647
+ 'v-divider--inset': props.inset,
8648
+ 'v-divider--vertical': props.vertical
8649
+ }, themeClasses.value, textColorClasses.value, props.class],
8650
+ "style": [dividerStyles.value, textColorStyles.value, {
8651
+ '--v-border-opacity': props.opacity
8652
+ }, props.style],
8653
+ "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
8654
+ "role": `${attrs.role || 'separator'}`
8655
+ }, null);
8656
+ if (!slots.default) return divider;
8657
+ return createVNode("div", {
8658
+ "class": ['v-divider__wrapper', {
8659
+ 'v-divider__wrapper--vertical': props.vertical,
8660
+ 'v-divider__wrapper--inset': props.inset
8661
+ }]
8662
+ }, [divider, createVNode("div", {
8663
+ "class": "v-divider__content"
8664
+ }, [slots.default()]), divider]);
8665
+ });
8666
+ return {};
8667
+ }
8668
+ });
8669
+
8608
8670
  // Utilities
8609
8671
 
8610
8672
  // List
@@ -9756,68 +9818,6 @@ const VListSubheader = genericComponent()({
9756
9818
  }
9757
9819
  });
9758
9820
 
9759
- const makeVDividerProps = propsFactory({
9760
- color: String,
9761
- inset: Boolean,
9762
- length: [Number, String],
9763
- opacity: [Number, String],
9764
- thickness: [Number, String],
9765
- vertical: Boolean,
9766
- ...makeComponentProps(),
9767
- ...makeThemeProps()
9768
- }, 'VDivider');
9769
- const VDivider = genericComponent()({
9770
- name: 'VDivider',
9771
- props: makeVDividerProps(),
9772
- setup(props, _ref) {
9773
- let {
9774
- attrs,
9775
- slots
9776
- } = _ref;
9777
- const {
9778
- themeClasses
9779
- } = provideTheme(props);
9780
- const {
9781
- textColorClasses,
9782
- textColorStyles
9783
- } = useTextColor(() => props.color);
9784
- const dividerStyles = computed(() => {
9785
- const styles = {};
9786
- if (props.length) {
9787
- styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
9788
- }
9789
- if (props.thickness) {
9790
- styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
9791
- }
9792
- return styles;
9793
- });
9794
- useRender(() => {
9795
- const divider = createVNode("hr", {
9796
- "class": [{
9797
- 'v-divider': true,
9798
- 'v-divider--inset': props.inset,
9799
- 'v-divider--vertical': props.vertical
9800
- }, themeClasses.value, textColorClasses.value, props.class],
9801
- "style": [dividerStyles.value, textColorStyles.value, {
9802
- '--v-border-opacity': props.opacity
9803
- }, props.style],
9804
- "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
9805
- "role": `${attrs.role || 'separator'}`
9806
- }, null);
9807
- if (!slots.default) return divider;
9808
- return createVNode("div", {
9809
- "class": ['v-divider__wrapper', {
9810
- 'v-divider__wrapper--vertical': props.vertical,
9811
- 'v-divider__wrapper--inset': props.inset
9812
- }]
9813
- }, [divider, createVNode("div", {
9814
- "class": "v-divider__content"
9815
- }, [slots.default()]), divider]);
9816
- });
9817
- return {};
9818
- }
9819
- });
9820
-
9821
9821
  // Types
9822
9822
 
9823
9823
  const makeVListChildrenProps = propsFactory({
@@ -13369,6 +13369,22 @@ const VSelect = genericComponent()({
13369
13369
  key: item.value,
13370
13370
  onClick: () => select(item, null)
13371
13371
  });
13372
+ if (item.raw.type === 'divider') {
13373
+ return slots.divider?.({
13374
+ props: item.raw,
13375
+ index
13376
+ }) ?? createVNode(VDivider, mergeProps(item.props, {
13377
+ "key": `divider-${index}`
13378
+ }), null);
13379
+ }
13380
+ if (item.raw.type === 'subheader') {
13381
+ return slots.subheader?.({
13382
+ props: item.raw,
13383
+ index
13384
+ }) ?? createVNode(VListSubheader, mergeProps(item.props, {
13385
+ "key": `subheader-${index}`
13386
+ }), null);
13387
+ }
13372
13388
  return slots.item?.({
13373
13389
  item,
13374
13390
  index,
@@ -13529,6 +13545,9 @@ function filterItems(items, query, options) {
13529
13545
  let match = -1;
13530
13546
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13531
13547
  if (typeof item === 'object') {
13548
+ if (['divider', 'subheader'].includes(item.raw?.type)) {
13549
+ continue;
13550
+ }
13532
13551
  const filterKeys = keys || Object.keys(transformed);
13533
13552
  for (const key of filterKeys) {
13534
13553
  const value = getPropertyFromItem(transformed, key);
@@ -13967,6 +13986,22 @@ const VAutocomplete = genericComponent()({
13967
13986
  active: highlightFirst.value && index === 0 ? true : undefined,
13968
13987
  onClick: () => select(item, null)
13969
13988
  });
13989
+ if (item.raw.type === 'divider') {
13990
+ return slots.divider?.({
13991
+ props: item.raw,
13992
+ index
13993
+ }) ?? createVNode(VDivider, mergeProps(item.props, {
13994
+ "key": `divider-${index}`
13995
+ }), null);
13996
+ }
13997
+ if (item.raw.type === 'subheader') {
13998
+ return slots.subheader?.({
13999
+ props: item.raw,
14000
+ index
14001
+ }) ?? createVNode(VListSubheader, mergeProps(item.props, {
14002
+ "key": `subheader-${index}`
14003
+ }), null);
14004
+ }
13970
14005
  return slots.item?.({
13971
14006
  item,
13972
14007
  index,
@@ -18377,6 +18412,7 @@ const VCombobox = genericComponent()({
18377
18412
  _search.value = val ?? '';
18378
18413
  if (!props.multiple && !hasSelectionSlot.value) {
18379
18414
  model.value = [transformItem$3(props, val)];
18415
+ nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
18380
18416
  }
18381
18417
  if (val && props.multiple && props.delimiters?.length) {
18382
18418
  const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
@@ -18693,6 +18729,22 @@ const VCombobox = genericComponent()({
18693
18729
  active: highlightFirst.value && index === 0 ? true : undefined,
18694
18730
  onClick: () => select(item, null)
18695
18731
  });
18732
+ if (item.raw.type === 'divider') {
18733
+ return slots.divider?.({
18734
+ props: item.raw,
18735
+ index
18736
+ }) ?? createVNode(VDivider, mergeProps(item.props, {
18737
+ "key": `divider-${index}`
18738
+ }), null);
18739
+ }
18740
+ if (item.raw.type === 'subheader') {
18741
+ return slots.subheader?.({
18742
+ props: item.raw,
18743
+ index
18744
+ }) ?? createVNode(VListSubheader, mergeProps(item.props, {
18745
+ "key": `subheader-${index}`
18746
+ }), null);
18747
+ }
18696
18748
  return slots.item?.({
18697
18749
  item,
18698
18750
  index,
@@ -25115,6 +25167,10 @@ const makeVNumberInputProps = propsFactory({
25115
25167
  type: Number,
25116
25168
  default: 0
25117
25169
  },
25170
+ minFractionDigits: {
25171
+ type: Number,
25172
+ default: null
25173
+ },
25118
25174
  ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
25119
25175
  }, 'VNumberInput');
25120
25176
  const VNumberInput = genericComponent()({
@@ -25145,9 +25201,19 @@ const VNumberInput = genericComponent()({
25145
25201
  } = useFocus(props);
25146
25202
  function correctPrecision(val) {
25147
25203
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
25148
- const fixed = precision == null ? String(val) : val.toFixed(precision);
25149
- return isFocused.value ? Number(fixed).toString() // trim zeros
25150
- : fixed;
25204
+ if (precision == null) {
25205
+ return String(val);
25206
+ }
25207
+ let fixed = val.toFixed(precision);
25208
+ if (isFocused.value) {
25209
+ return Number(fixed).toString(); // trim zeros
25210
+ }
25211
+ if ((props.minFractionDigits ?? precision) < precision) {
25212
+ const trimLimit = precision - props.minFractionDigits;
25213
+ const [baseDigits, fractionDigits] = fixed.split('.');
25214
+ fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
25215
+ }
25216
+ return fixed;
25151
25217
  }
25152
25218
  const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
25153
25219
  const _inputText = shallowRef(null);
@@ -25200,6 +25266,7 @@ const VNumberInput = genericComponent()({
25200
25266
  }
25201
25267
  };
25202
25268
  watch(() => props.precision, () => formatInputValue());
25269
+ watch(() => props.minFractionDigits, () => formatInputValue());
25203
25270
  onMounted(() => {
25204
25271
  clampModel();
25205
25272
  });
@@ -25301,7 +25368,7 @@ const VNumberInput = genericComponent()({
25301
25368
  inputText.value = null;
25302
25369
  return;
25303
25370
  }
25304
- inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
25371
+ inputText.value = correctPrecision(model.value);
25305
25372
  }
25306
25373
  function trimDecimalZeros() {
25307
25374
  if (controlsDisabled.value) return;
@@ -29343,7 +29410,7 @@ function createVuetify$1() {
29343
29410
  };
29344
29411
  });
29345
29412
  }
29346
- const version$1 = "3.8.5-dev.2025-05-17";
29413
+ const version$1 = "3.8.5-dev.2025-05-20";
29347
29414
  createVuetify$1.version = version$1;
29348
29415
 
29349
29416
  // Vue's inject() can only be used in setup
@@ -29368,7 +29435,7 @@ const createVuetify = function () {
29368
29435
  ...options
29369
29436
  });
29370
29437
  };
29371
- const version = "3.8.5-dev.2025-05-17";
29438
+ const version = "3.8.5-dev.2025-05-20";
29372
29439
  createVuetify.version = version;
29373
29440
 
29374
29441
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };