@vuetify/nightly 3.10.5-dev.2025-10-07 → 3.10.5-dev.2025-10-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 (78) hide show
  1. package/CHANGELOG.md +21 -3
  2. package/dist/json/attributes.json +2024 -2040
  3. package/dist/json/importMap-labs.json +12 -12
  4. package/dist/json/importMap.json +180 -180
  5. package/dist/json/tags.json +5 -9
  6. package/dist/json/web-types.json +3964 -3985
  7. package/dist/vuetify-labs.cjs +233 -169
  8. package/dist/vuetify-labs.css +4520 -4520
  9. package/dist/vuetify-labs.d.ts +1444 -1390
  10. package/dist/vuetify-labs.esm.js +233 -169
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +233 -169
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +156 -92
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +3385 -3385
  17. package/dist/vuetify.d.ts +2289 -2200
  18. package/dist/vuetify.esm.js +156 -92
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +156 -92
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +959 -955
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VAutocomplete/VAutocomplete.d.ts +0 -61
  26. package/lib/components/VAutocomplete/VAutocomplete.js +13 -11
  27. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  28. package/lib/components/VCombobox/VCombobox.d.ts +6 -67
  29. package/lib/components/VCombobox/VCombobox.js +22 -23
  30. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  31. package/lib/components/VDataTable/VDataTable.d.ts +7 -7
  32. package/lib/components/VDataTable/VDataTableFooter.d.ts +16 -3
  33. package/lib/components/VDataTable/VDataTableFooter.js +4 -2
  34. package/lib/components/VDataTable/VDataTableFooter.js.map +1 -1
  35. package/lib/components/VDataTable/VDataTableHeaders.js +10 -7
  36. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  37. package/lib/components/VDataTable/VDataTableRow.d.ts +10 -0
  38. package/lib/components/VDataTable/VDataTableRow.js +3 -0
  39. package/lib/components/VDataTable/VDataTableRow.js.map +1 -1
  40. package/lib/components/VDataTable/VDataTableRows.d.ts +10 -0
  41. package/lib/components/VDataTable/VDataTableRows.js +2 -0
  42. package/lib/components/VDataTable/VDataTableRows.js.map +1 -1
  43. package/lib/components/VDataTable/VDataTableServer.d.ts +7 -7
  44. package/lib/components/VNumberInput/VNumberInput.js +23 -8
  45. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  46. package/lib/components/VSlideGroup/VSlideGroup.d.ts +1 -1
  47. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  48. package/lib/components/VTabs/VTabs.d.ts +16 -2
  49. package/lib/components/VTabs/VTabs.js +4 -2
  50. package/lib/components/VTabs/VTabs.js.map +1 -1
  51. package/lib/components/VTextarea/VTextarea.css +2 -2
  52. package/lib/components/VTextarea/VTextarea.js +20 -1
  53. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  54. package/lib/components/VTextarea/VTextarea.sass +4 -2
  55. package/lib/components/VTreeview/VTreeview.d.ts +192 -5
  56. package/lib/components/VTreeview/VTreeview.js +16 -3
  57. package/lib/components/VTreeview/VTreeview.js.map +1 -1
  58. package/lib/composables/icons.d.ts +0 -2
  59. package/lib/composables/icons.js +3 -36
  60. package/lib/composables/icons.js.map +1 -1
  61. package/lib/composables/virtual.js +2 -2
  62. package/lib/composables/virtual.js.map +1 -1
  63. package/lib/entry-bundler.js +1 -1
  64. package/lib/framework.d.ts +65 -65
  65. package/lib/framework.js +3 -2
  66. package/lib/framework.js.map +1 -1
  67. package/lib/icons.d.ts +3 -0
  68. package/lib/icons.js +34 -0
  69. package/lib/icons.js.map +1 -0
  70. package/lib/labs/VColorInput/VColorInput.d.ts +0 -40
  71. package/lib/labs/VColorInput/VColorInput.js +2 -2
  72. package/lib/labs/VColorInput/VColorInput.js.map +1 -1
  73. package/lib/labs/VDateInput/VDateInput.d.ts +0 -30
  74. package/lib/labs/VDateInput/VDateInput.js +2 -2
  75. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  76. package/lib/labs/VMaskInput/VMaskInput.js +1 -1
  77. package/lib/labs/VMaskInput/VMaskInput.js.map +1 -1
  78. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.10.5-dev.2025-10-07
2
+ * Vuetify v3.10.5-dev.2025-10-10
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -1682,6 +1682,8 @@ function useRender(render) {
1682
1682
  vm.render = render;
1683
1683
  }
1684
1684
 
1685
+ // Utilities
1686
+
1685
1687
  // Types
1686
1688
 
1687
1689
  const IconValue = [String, Function, Object, Array];
@@ -1763,37 +1765,6 @@ const VClassIcon = defineComponent({
1763
1765
  };
1764
1766
  }
1765
1767
  });
1766
- function genDefaults$3() {
1767
- return {
1768
- svg: {
1769
- component: VSvgIcon
1770
- },
1771
- class: {
1772
- component: VClassIcon
1773
- }
1774
- };
1775
- }
1776
-
1777
- // Composables
1778
- function createIcons(options) {
1779
- const sets = genDefaults$3();
1780
- const defaultSet = options?.defaultSet ?? 'mdi';
1781
- if (defaultSet === 'mdi' && !sets.mdi) {
1782
- sets.mdi = mdi;
1783
- }
1784
- return mergeDeep({
1785
- defaultSet,
1786
- sets,
1787
- aliases: {
1788
- ...aliases,
1789
- /* eslint-disable max-len */
1790
- vuetify: ['M8.2241 14.2009L12 21L22 3H14.4459L8.2241 14.2009Z', ['M7.26303 12.4733L7.00113 12L2 3H12.5261C12.5261 3 12.5261 3 12.5261 3L7.26303 12.4733Z', 0.6]],
1791
- 'vuetify-outline': 'svg:M7.26 12.47 12.53 3H2L7.26 12.47ZM14.45 3 8.22 14.2 12 21 22 3H14.45ZM18.6 5 12 16.88 10.51 14.2 15.62 5ZM7.26 8.35 5.4 5H9.13L7.26 8.35Z',
1792
- 'vuetify-play': ['m6.376 13.184-4.11-7.192C1.505 4.66 2.467 3 4.003 3h8.532l-.953 1.576-.006.01-.396.677c-.429.732-.214 1.507.194 2.015.404.503 1.092.878 1.869.806a3.72 3.72 0 0 1 1.005.022c.276.053.434.143.523.237.138.146.38.635-.25 2.09-.893 1.63-1.553 1.722-1.847 1.677-.213-.033-.468-.158-.756-.406a4.95 4.95 0 0 1-.8-.927c-.39-.564-1.04-.84-1.66-.846-.625-.006-1.316.27-1.693.921l-.478.826-.911 1.506Z', ['M9.093 11.552c.046-.079.144-.15.32-.148a.53.53 0 0 1 .43.207c.285.414.636.847 1.046 1.2.405.35.914.662 1.516.754 1.334.205 2.502-.698 3.48-2.495l.014-.028.013-.03c.687-1.574.774-2.852-.005-3.675-.37-.391-.861-.586-1.333-.676a5.243 5.243 0 0 0-1.447-.044c-.173.016-.393-.073-.54-.257-.145-.18-.127-.316-.082-.392l.393-.672L14.287 3h5.71c1.536 0 2.499 1.659 1.737 2.992l-7.997 13.996c-.768 1.344-2.706 1.344-3.473 0l-3.037-5.314 1.377-2.278.004-.006.004-.007.481-.831Z', 0.6]]
1793
- /* eslint-enable max-len */
1794
- }
1795
- }, options);
1796
- }
1797
1768
  const useIcon = props => {
1798
1769
  const icons = inject$1(IconSymbol);
1799
1770
  if (!icons) throw new Error('Missing Vuetify Icons provide!');
@@ -2891,7 +2862,7 @@ function provideLocale(props) {
2891
2862
  provide(LocaleSymbol, data);
2892
2863
  return data;
2893
2864
  }
2894
- function genDefaults$2() {
2865
+ function genDefaults$3() {
2895
2866
  return {
2896
2867
  af: false,
2897
2868
  ar: true,
@@ -2938,7 +2909,7 @@ function genDefaults$2() {
2938
2909
  };
2939
2910
  }
2940
2911
  function createRtl(i18n, options) {
2941
- const rtl = ref(options?.rtl ?? genDefaults$2());
2912
+ const rtl = ref(options?.rtl ?? genDefaults$3());
2942
2913
  const isRtl = computed(() => rtl.value[i18n.current.value] ?? false);
2943
2914
  return {
2944
2915
  isRtl,
@@ -2971,7 +2942,7 @@ const ThemeSymbol = Symbol.for('vuetify:theme');
2971
2942
  const makeThemeProps = propsFactory({
2972
2943
  theme: String
2973
2944
  }, 'theme');
2974
- function genDefaults$1() {
2945
+ function genDefaults$2() {
2975
2946
  return {
2976
2947
  defaultTheme: 'light',
2977
2948
  prefix: 'v-',
@@ -3063,8 +3034,8 @@ function genDefaults$1() {
3063
3034
  };
3064
3035
  }
3065
3036
  function parseThemeOptions() {
3066
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : genDefaults$1();
3067
- const defaults = genDefaults$1();
3037
+ let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : genDefaults$2();
3038
+ const defaults = genDefaults$2();
3068
3039
  if (!options) return {
3069
3040
  ...defaults,
3070
3041
  isDisabled: true
@@ -8164,7 +8135,7 @@ function useDisplay() {
8164
8135
  // Types
8165
8136
 
8166
8137
  const GoToSymbol = Symbol.for('vuetify:goto');
8167
- function genDefaults() {
8138
+ function genDefaults$1() {
8168
8139
  return {
8169
8140
  container: undefined,
8170
8141
  duration: 300,
@@ -8193,12 +8164,12 @@ function getOffset$2(target, horizontal, rtl) {
8193
8164
  function createGoTo(options, locale) {
8194
8165
  return {
8195
8166
  rtl: locale.isRtl,
8196
- options: mergeDeep(genDefaults(), options)
8167
+ options: mergeDeep(genDefaults$1(), options)
8197
8168
  };
8198
8169
  }
8199
8170
  async function scrollTo(_target, _options, horizontal, goTo) {
8200
8171
  const property = horizontal ? 'scrollLeft' : 'scrollTop';
8201
- const options = mergeDeep(goTo?.options ?? genDefaults(), _options);
8172
+ const options = mergeDeep(goTo?.options ?? genDefaults$1(), _options);
8202
8173
  const rtl = goTo?.rtl.value;
8203
8174
  const target = (typeof _target === 'number' ? _target : getTarget$1(_target)) ?? 0;
8204
8175
  const container = options.container === 'parent' && target instanceof HTMLElement ? target.parentElement : getContainer(options.container);
@@ -13188,7 +13159,7 @@ function useVirtual(props, items) {
13188
13159
  const start = performance.now();
13189
13160
  offsets[0] = 0;
13190
13161
  const length = items.value.length;
13191
- for (let i = 1; i <= length - 1; i++) {
13162
+ for (let i = 1; i <= length; i++) {
13192
13163
  offsets[i] = (offsets[i - 1] || 0) + getSize(i - 1);
13193
13164
  }
13194
13165
  updateTime.value = Math.max(updateTime.value, performance.now() - start);
@@ -13223,7 +13194,7 @@ function useVirtual(props, items) {
13223
13194
  }
13224
13195
  }
13225
13196
  function calculateOffset(index) {
13226
- index = clamp(index, 0, items.value.length - 1);
13197
+ index = clamp(index, 0, items.value.length);
13227
13198
  const whole = Math.floor(index);
13228
13199
  const fraction = index % 1;
13229
13200
  const next = whole + 1;
@@ -14228,10 +14199,7 @@ const makeVAutocompleteProps = propsFactory({
14228
14199
  ...omit(makeVTextFieldProps({
14229
14200
  modelValue: null,
14230
14201
  role: 'combobox'
14231
- }), ['validationValue', 'dirty', 'appendInnerIcon']),
14232
- ...makeTransitionProps({
14233
- transition: false
14234
- })
14202
+ }), ['validationValue', 'dirty', 'appendInnerIcon'])
14235
14203
  }, 'VAutocomplete');
14236
14204
  const VAutocomplete = genericComponent()({
14237
14205
  name: 'VAutocomplete',
@@ -14256,6 +14224,7 @@ const VAutocomplete = genericComponent()({
14256
14224
  const vMenuRef = ref();
14257
14225
  const vVirtualScrollRef = ref();
14258
14226
  const selectionIndex = shallowRef(-1);
14227
+ const _searchLock = shallowRef(null);
14259
14228
  const {
14260
14229
  items,
14261
14230
  transformIn,
@@ -14277,9 +14246,9 @@ const VAutocomplete = genericComponent()({
14277
14246
  const {
14278
14247
  filteredItems,
14279
14248
  getMatches
14280
- } = useFilter(props, items, () => isPristine.value ? '' : search.value);
14249
+ } = useFilter(props, items, () => _searchLock.value ?? (isPristine.value ? '' : search.value));
14281
14250
  const displayItems = computed(() => {
14282
- if (props.hideSelected) {
14251
+ if (props.hideSelected && _searchLock.value === null) {
14283
14252
  return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
14284
14253
  }
14285
14254
  return filteredItems.value;
@@ -14410,6 +14379,7 @@ const VAutocomplete = genericComponent()({
14410
14379
  isPristine.value = true;
14411
14380
  vTextFieldRef.value?.focus();
14412
14381
  }
14382
+ _searchLock.value = null;
14413
14383
  }
14414
14384
  function onFocusin(e) {
14415
14385
  isFocused.value = true;
@@ -14445,6 +14415,7 @@ const VAutocomplete = genericComponent()({
14445
14415
  } else {
14446
14416
  const add = set !== false;
14447
14417
  model.value = add ? [item] : [];
14418
+ _searchLock.value = isPristine.value ? '' : search.value ?? '';
14448
14419
  search.value = add && !hasSelectionSlot.value ? item.title : '';
14449
14420
 
14450
14421
  // watch for search watcher to trigger
@@ -14464,6 +14435,9 @@ const VAutocomplete = genericComponent()({
14464
14435
  } else {
14465
14436
  if (!props.multiple && search.value == null) model.value = [];
14466
14437
  menu.value = false;
14438
+ if (!isPristine.value && search.value) {
14439
+ _searchLock.value = search.value;
14440
+ }
14467
14441
  search.value = '';
14468
14442
  selectionIndex.value = -1;
14469
14443
  }
@@ -14473,13 +14447,14 @@ const VAutocomplete = genericComponent()({
14473
14447
  if (val) menu.value = true;
14474
14448
  isPristine.value = !val;
14475
14449
  });
14476
- watch(menu, () => {
14477
- if (!props.hideSelected && menu.value && model.value.length) {
14450
+ watch(menu, val => {
14451
+ if (!props.hideSelected && val && model.value.length && isPristine.value) {
14478
14452
  const index = displayItems.value.findIndex(item => model.value.some(s => item.value === s.value));
14479
14453
  IN_BROWSER && window.requestAnimationFrame(() => {
14480
14454
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
14481
14455
  });
14482
14456
  }
14457
+ if (val) _searchLock.value = null;
14483
14458
  });
14484
14459
  watch(items, (newVal, oldVal) => {
14485
14460
  if (menu.value) return;
@@ -14530,7 +14505,6 @@ const VAutocomplete = genericComponent()({
14530
14505
  "maxHeight": 310,
14531
14506
  "openOnClick": false,
14532
14507
  "closeOnContentClick": false,
14533
- "transition": props.transition,
14534
14508
  "onAfterEnter": onAfterEnter,
14535
14509
  "onAfterLeave": onAfterLeave
14536
14510
  }, props.menuProps), {
@@ -19549,10 +19523,7 @@ const makeVComboboxProps = propsFactory({
19549
19523
  ...omit(makeVTextFieldProps({
19550
19524
  modelValue: null,
19551
19525
  role: 'combobox'
19552
- }), ['validationValue', 'dirty', 'appendInnerIcon']),
19553
- ...makeTransitionProps({
19554
- transition: false
19555
- })
19526
+ }), ['validationValue', 'dirty', 'appendInnerIcon'])
19556
19527
  }, 'VCombobox');
19557
19528
  const VCombobox = genericComponent()({
19558
19529
  name: 'VCombobox',
@@ -19596,6 +19567,7 @@ const VCombobox = genericComponent()({
19596
19567
  const hasChips = computed(() => !!(props.chips || slots.chip));
19597
19568
  const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection);
19598
19569
  const _search = shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
19570
+ const _searchLock = shallowRef(null);
19599
19571
  const search = computed({
19600
19572
  get: () => {
19601
19573
  return _search.value;
@@ -19630,9 +19602,9 @@ const VCombobox = genericComponent()({
19630
19602
  const {
19631
19603
  filteredItems,
19632
19604
  getMatches
19633
- } = useFilter(props, items, () => props.alwaysFilter || !isPristine.value ? search.value : '');
19605
+ } = useFilter(props, items, () => _searchLock.value ?? (props.alwaysFilter || !isPristine.value ? search.value : ''));
19634
19606
  const displayItems = computed(() => {
19635
- if (props.hideSelected) {
19607
+ if (props.hideSelected && _searchLock.value === null) {
19636
19608
  return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
19637
19609
  }
19638
19610
  return filteredItems.value;
@@ -19713,22 +19685,19 @@ const VCombobox = genericComponent()({
19713
19685
  if (['Escape'].includes(e.key)) {
19714
19686
  menu.value = false;
19715
19687
  }
19716
- if (['Enter', 'Escape', 'Tab'].includes(e.key)) {
19717
- if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key) && !model.value.some(_ref2 => {
19718
- let {
19719
- value
19720
- } = _ref2;
19721
- return value === displayItems.value[0].value;
19722
- })) {
19723
- select(filteredItems.value[0]);
19724
- }
19725
- isPristine.value = true;
19688
+ if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key) && !model.value.some(_ref2 => {
19689
+ let {
19690
+ value
19691
+ } = _ref2;
19692
+ return value === displayItems.value[0].value;
19693
+ })) {
19694
+ select(filteredItems.value[0]);
19726
19695
  }
19727
19696
  if (e.key === 'ArrowDown' && highlightFirst.value) {
19728
19697
  listRef.value?.focus('next');
19729
19698
  }
19730
19699
  if (e.key === 'Enter' && search.value) {
19731
- select(transformItem$3(props, search.value));
19700
+ select(transformItem$3(props, search.value), true, true);
19732
19701
  if (hasSelectionSlot.value) _search.value = '';
19733
19702
  }
19734
19703
  if (['Backspace', 'Delete'].includes(e.key)) {
@@ -19776,10 +19745,12 @@ const VCombobox = genericComponent()({
19776
19745
  isPristine.value = true;
19777
19746
  vTextFieldRef.value?.focus();
19778
19747
  }
19748
+ _searchLock.value = null;
19779
19749
  }
19780
19750
  /** @param set - null means toggle */
19781
19751
  function select(item) {
19782
19752
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
19753
+ let keepMenu = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
19783
19754
  if (!item || item.props.disabled) return;
19784
19755
  if (props.multiple) {
19785
19756
  const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
@@ -19797,11 +19768,14 @@ const VCombobox = genericComponent()({
19797
19768
  } else {
19798
19769
  const add = set !== false;
19799
19770
  model.value = add ? [item] : [];
19771
+ if ((!isPristine.value || props.alwaysFilter) && _search.value) {
19772
+ _searchLock.value = _search.value;
19773
+ }
19800
19774
  _search.value = add && !hasSelectionSlot.value ? item.title : '';
19801
19775
 
19802
19776
  // watch for search watcher to trigger
19803
19777
  nextTick(() => {
19804
- menu.value = false;
19778
+ menu.value = keepMenu;
19805
19779
  isPristine.value = true;
19806
19780
  });
19807
19781
  }
@@ -19840,13 +19814,14 @@ const VCombobox = genericComponent()({
19840
19814
  }
19841
19815
  }
19842
19816
  });
19843
- watch(menu, () => {
19844
- if (!props.hideSelected && menu.value && model.value.length) {
19817
+ watch(menu, val => {
19818
+ if (!props.hideSelected && val && model.value.length && isPristine.value) {
19845
19819
  const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
19846
19820
  IN_BROWSER && window.requestAnimationFrame(() => {
19847
19821
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
19848
19822
  });
19849
19823
  }
19824
+ if (val) _searchLock.value = null;
19850
19825
  });
19851
19826
  watch(items, (newVal, oldVal) => {
19852
19827
  if (menu.value) return;
@@ -19897,7 +19872,6 @@ const VCombobox = genericComponent()({
19897
19872
  "maxHeight": 310,
19898
19873
  "openOnClick": false,
19899
19874
  "closeOnContentClick": false,
19900
- "transition": props.transition,
19901
19875
  "onAfterEnter": onAfterEnter,
19902
19876
  "onAfterLeave": onAfterLeave
19903
19877
  }, props.menuProps), {
@@ -21444,6 +21418,7 @@ const VPagination = genericComponent()({
21444
21418
  // Types
21445
21419
 
21446
21420
  const makeVDataTableFooterProps = propsFactory({
21421
+ color: String,
21447
21422
  prevIcon: {
21448
21423
  type: IconValue,
21449
21424
  default: '$prev'
@@ -21546,6 +21521,7 @@ const VDataTableFooter = genericComponent()({
21546
21521
  "aria-label": t(props.itemsPerPageText)
21547
21522
  }, [t(props.itemsPerPageText)]), createVNode(VSelect, {
21548
21523
  "items": itemsPerPageOptions.value,
21524
+ "itemColor": props.color,
21549
21525
  "modelValue": itemsPerPage.value,
21550
21526
  "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
21551
21527
  "density": "compact",
@@ -21568,7 +21544,7 @@ const VDataTableFooter = genericComponent()({
21568
21544
  "showFirstLastPage": true,
21569
21545
  "totalVisible": props.showCurrentPage ? 1 : 0,
21570
21546
  "variant": "plain"
21571
- }, paginationProps), null)])]);
21547
+ }, omit(paginationProps, ['color'])), null)])]);
21572
21548
  });
21573
21549
  return {};
21574
21550
  }
@@ -22079,6 +22055,7 @@ const VDataTableHeaders = genericComponent()({
22079
22055
  if (isEmpty) return '';
22080
22056
  if (column.key === 'data-table-select') {
22081
22057
  return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && createVNode(VCheckboxBtn, {
22058
+ "color": props.color,
22082
22059
  "density": props.density,
22083
22060
  "modelValue": allSelected.value,
22084
22061
  "indeterminate": someSelected.value && !allSelected.value,
@@ -22103,11 +22080,6 @@ const VDataTableHeaders = genericComponent()({
22103
22080
  const displayItems = computed(() => {
22104
22081
  return columns.value.filter(column => column?.sortable && !props.disableSort);
22105
22082
  });
22106
- const appendIcon = computed(() => {
22107
- const showSelectColumn = columns.value.find(column => column.key === 'data-table-select');
22108
- if (showSelectColumn == null) return;
22109
- return allSelected.value ? '$checkboxOn' : someSelected.value ? '$checkboxIndeterminate' : '$checkboxOff';
22110
- });
22111
22083
  return createVNode(VDataTableColumn, mergeProps({
22112
22084
  "tag": "th",
22113
22085
  "class": [...headerCellClasses.value],
@@ -22117,6 +22089,7 @@ const VDataTableHeaders = genericComponent()({
22117
22089
  "class": "v-data-table-header__content"
22118
22090
  }, [createVNode(VSelect, {
22119
22091
  "chips": true,
22092
+ "color": props.color,
22120
22093
  "class": "v-data-table__td-sort-select",
22121
22094
  "clearable": true,
22122
22095
  "density": "default",
@@ -22125,9 +22098,15 @@ const VDataTableHeaders = genericComponent()({
22125
22098
  "multiple": props.multiSort,
22126
22099
  "variant": "underlined",
22127
22100
  "onClick:clear": () => sortBy.value = [],
22128
- "appendIcon": appendIcon.value,
22129
22101
  "onClick:append": () => selectAll(!allSelected.value)
22130
22102
  }, {
22103
+ append: () => createVNode(VCheckboxBtn, {
22104
+ "color": props.color,
22105
+ "density": "compact",
22106
+ "modelValue": allSelected.value,
22107
+ "indeterminate": someSelected.value && !allSelected.value,
22108
+ "onUpdate:modelValue": selectAll
22109
+ }, null),
22131
22110
  chip: props => createVNode(VChip, {
22132
22111
  "onClick": props.item.raw?.sortable ? () => toggleSort(props.item.raw) : undefined,
22133
22112
  "onMousedown": e => {
@@ -22157,7 +22136,7 @@ const VDataTableHeaders = genericComponent()({
22157
22136
  "name": "v-data-table-progress",
22158
22137
  "absolute": true,
22159
22138
  "active": true,
22160
- "color": typeof props.loading === 'boolean' ? undefined : props.loading,
22139
+ "color": typeof props.loading === 'boolean' || props.loading === 'true' ? props.color : props.loading,
22161
22140
  "indeterminate": true
22162
22141
  }, {
22163
22142
  default: slots.loader
@@ -22264,6 +22243,7 @@ const VDataTableGroupHeaderRow = genericComponent()({
22264
22243
  // Types
22265
22244
 
22266
22245
  const makeVDataTableRowProps = propsFactory({
22246
+ color: String,
22267
22247
  index: Number,
22268
22248
  item: Object,
22269
22249
  cellProps: [Object, Function],
@@ -22381,11 +22361,13 @@ const VDataTableRow = genericComponent()({
22381
22361
  return slots['item.data-table-select']?.({
22382
22362
  ...slotProps,
22383
22363
  props: {
22364
+ color: props.color,
22384
22365
  disabled: !item.selectable,
22385
22366
  modelValue: isSelected([item]),
22386
22367
  onClick: withModifiers(() => toggleSelect(item), ['stop'])
22387
22368
  }
22388
22369
  }) ?? createVNode(VCheckboxBtn, {
22370
+ "color": props.color,
22389
22371
  "disabled": !item.selectable,
22390
22372
  "density": props.density,
22391
22373
  "modelValue": isSelected([item]),
@@ -22424,6 +22406,7 @@ const VDataTableRow = genericComponent()({
22424
22406
  // Types
22425
22407
 
22426
22408
  const makeVDataTableRowsProps = propsFactory({
22409
+ color: String,
22427
22410
  loading: [Boolean, String],
22428
22411
  loadingText: {
22429
22412
  type: String,
@@ -22539,6 +22522,7 @@ const VDataTableRows = genericComponent()({
22539
22522
  } : undefined,
22540
22523
  index,
22541
22524
  item,
22525
+ color: props.color,
22542
22526
  cellProps: props.cellProps,
22543
22527
  collapseIcon: props.collapseIcon,
22544
22528
  expandIcon: props.expandIcon,
@@ -26934,12 +26918,17 @@ const VNumberInput = genericComponent()({
26934
26918
  }
26935
26919
  const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
26936
26920
  const _inputText = shallowRef(null);
26937
- watchEffect(() => {
26938
- if (isFocused.value && !controlsDisabled.value && Number(_inputText.value) === model.value) ; else if (model.value == null) {
26921
+ const _lastParsedValue = shallowRef(null);
26922
+ watch(model, val => {
26923
+ if (isFocused.value && !controlsDisabled.value && Number(_inputText.value) === val) ; else if (val == null) {
26939
26924
  _inputText.value = null;
26940
- } else if (!isNaN(model.value)) {
26941
- _inputText.value = correctPrecision(model.value);
26925
+ _lastParsedValue.value = null;
26926
+ } else if (!isNaN(val)) {
26927
+ _inputText.value = correctPrecision(val);
26928
+ _lastParsedValue.value = Number(_inputText.value.replace(decimalSeparator.value, '.'));
26942
26929
  }
26930
+ }, {
26931
+ immediate: true
26943
26932
  });
26944
26933
  const inputText = computed({
26945
26934
  get: () => _inputText.value,
@@ -26947,15 +26936,24 @@ const VNumberInput = genericComponent()({
26947
26936
  if (val === null || val === '') {
26948
26937
  model.value = null;
26949
26938
  _inputText.value = null;
26939
+ _lastParsedValue.value = null;
26950
26940
  return;
26951
26941
  }
26952
26942
  const parsedValue = Number(val.replace(decimalSeparator.value, '.'));
26953
- if (!isNaN(parsedValue) && parsedValue <= props.max && parsedValue >= props.min) {
26954
- model.value = parsedValue;
26943
+ if (!isNaN(parsedValue)) {
26955
26944
  _inputText.value = val;
26945
+ _lastParsedValue.value = parsedValue;
26946
+ if (parsedValue <= props.max && parsedValue >= props.min) {
26947
+ model.value = parsedValue;
26948
+ }
26956
26949
  }
26957
26950
  }
26958
26951
  });
26952
+ const isOutOfRange = computed(() => {
26953
+ if (_lastParsedValue.value === null) return false;
26954
+ const numberFromText = Number(_inputText.value);
26955
+ return numberFromText !== clamp(numberFromText, props.min, props.max);
26956
+ });
26959
26957
  const canIncrease = computed(() => {
26960
26958
  if (controlsDisabled.value) return false;
26961
26959
  return (model.value ?? 0) + props.step <= props.max;
@@ -27211,6 +27209,7 @@ const VNumberInput = genericComponent()({
27211
27209
  "focused": isFocused.value,
27212
27210
  "onUpdate:focused": $event => isFocused.value = $event,
27213
27211
  "validationValue": model.value,
27212
+ "error": isOutOfRange.value || undefined,
27214
27213
  "onBeforeinput": onBeforeinput,
27215
27214
  "onFocus": onFocus,
27216
27215
  "onBlur": onBlur,
@@ -30010,7 +30009,7 @@ const VTabs = genericComponent()({
30010
30009
  "role": "tablist",
30011
30010
  "symbol": VTabsSymbol
30012
30011
  }, scopeId, attrs), {
30013
- default: () => [slots.default?.() ?? items.value.map(item => slots.tab?.({
30012
+ default: slots.default ?? (() => items.value.map(item => slots.tab?.({
30014
30013
  item
30015
30014
  }) ?? createVNode(VTab, mergeProps(item, {
30016
30015
  "key": item.text,
@@ -30020,7 +30019,9 @@ const VTabs = genericComponent()({
30020
30019
  default: slots[`tab.${item.value}`] ? () => slots[`tab.${item.value}`]?.({
30021
30020
  item
30022
30021
  }) : undefined
30023
- }))]
30022
+ }))),
30023
+ prev: slots.prev,
30024
+ next: slots.next
30024
30025
  }), hasWindow && createVNode(VTabsWindow, mergeProps({
30025
30026
  "modelValue": model.value,
30026
30027
  "onUpdate:modelValue": $event => model.value = $event,
@@ -30109,6 +30110,10 @@ const VTextarea = genericComponent()({
30109
30110
  const vFieldRef = ref();
30110
30111
  const controlHeight = shallowRef('');
30111
30112
  const textareaRef = ref();
30113
+ const scrollbarWidth = ref(0);
30114
+ const {
30115
+ platform
30116
+ } = useDisplay();
30112
30117
  const autocomplete = useAutocomplete(props);
30113
30118
  const isActive = computed(() => props.persistentPlaceholder || isFocused.value || props.active);
30114
30119
  function onFocus() {
@@ -30153,6 +30158,18 @@ const VTextarea = genericComponent()({
30153
30158
  if (!props.autoGrow) rows.value = Number(props.rows);
30154
30159
  });
30155
30160
  function calculateInputHeight() {
30161
+ nextTick(() => {
30162
+ if (!textareaRef.value) return;
30163
+ if (platform.value.firefox) {
30164
+ scrollbarWidth.value = 12;
30165
+ return;
30166
+ }
30167
+ const {
30168
+ offsetWidth,
30169
+ clientWidth
30170
+ } = textareaRef.value;
30171
+ scrollbarWidth.value = Math.max(0, offsetWidth - clientWidth);
30172
+ });
30156
30173
  if (!props.autoGrow) return;
30157
30174
  nextTick(() => {
30158
30175
  if (!sizerRef.value || !vFieldRef.value) return;
@@ -30213,7 +30230,9 @@ const VTextarea = genericComponent()({
30213
30230
  'v-textarea--no-resize': props.noResize || props.autoGrow,
30214
30231
  'v-input--plain-underlined': isPlainOrUnderlined.value
30215
30232
  }, props.class],
30216
- "style": props.style
30233
+ "style": [{
30234
+ '--v-textarea-scroll-bar-width': convertToUnit(scrollbarWidth.value)
30235
+ }, props.style]
30217
30236
  }, rootAttrs, inputProps, {
30218
30237
  "centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
30219
30238
  "focused": isFocused.value
@@ -31732,6 +31751,11 @@ const makeVTreeviewProps = propsFactory({
31732
31751
  openAll: Boolean,
31733
31752
  indentLines: [Boolean, String],
31734
31753
  search: String,
31754
+ hideNoData: Boolean,
31755
+ noDataText: {
31756
+ type: String,
31757
+ default: '$vuetify.noDataText'
31758
+ },
31735
31759
  ...makeFilterProps({
31736
31760
  filterKeys: ['title']
31737
31761
  }),
@@ -31759,6 +31783,9 @@ const VTreeview = genericComponent()({
31759
31783
  slots,
31760
31784
  emit
31761
31785
  } = _ref;
31786
+ const {
31787
+ t
31788
+ } = useLocale();
31762
31789
  const {
31763
31790
  items
31764
31791
  } = useListItems(props);
@@ -31852,7 +31879,10 @@ const VTreeview = genericComponent()({
31852
31879
  "selected": selected.value,
31853
31880
  "onUpdate:selected": $event => selected.value = $event
31854
31881
  }), {
31855
- default: () => [createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
31882
+ default: () => [visibleIds.value?.size === 0 && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
31883
+ "key": "no-data",
31884
+ "title": t(props.noDataText)
31885
+ }, null)), createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
31856
31886
  "density": props.density,
31857
31887
  "returnObject": props.returnObject,
31858
31888
  "items": items.value,
@@ -32278,6 +32308,40 @@ var directives = /*#__PURE__*/Object.freeze({
32278
32308
  Touch: Touch
32279
32309
  });
32280
32310
 
32311
+ // Composables
32312
+
32313
+ // Types
32314
+
32315
+ function genDefaults() {
32316
+ return {
32317
+ svg: {
32318
+ component: VSvgIcon
32319
+ },
32320
+ class: {
32321
+ component: VClassIcon
32322
+ }
32323
+ };
32324
+ }
32325
+ function createIcons(options) {
32326
+ const sets = genDefaults();
32327
+ const defaultSet = options?.defaultSet ?? 'mdi';
32328
+ if (defaultSet === 'mdi' && !sets.mdi) {
32329
+ sets.mdi = mdi;
32330
+ }
32331
+ return mergeDeep({
32332
+ defaultSet,
32333
+ sets,
32334
+ aliases: {
32335
+ ...aliases,
32336
+ /* eslint-disable max-len */
32337
+ vuetify: ['M8.2241 14.2009L12 21L22 3H14.4459L8.2241 14.2009Z', ['M7.26303 12.4733L7.00113 12L2 3H12.5261C12.5261 3 12.5261 3 12.5261 3L7.26303 12.4733Z', 0.6]],
32338
+ 'vuetify-outline': 'svg:M7.26 12.47 12.53 3H2L7.26 12.47ZM14.45 3 8.22 14.2 12 21 22 3H14.45ZM18.6 5 12 16.88 10.51 14.2 15.62 5ZM7.26 8.35 5.4 5H9.13L7.26 8.35Z',
32339
+ 'vuetify-play': ['m6.376 13.184-4.11-7.192C1.505 4.66 2.467 3 4.003 3h8.532l-.953 1.576-.006.01-.396.677c-.429.732-.214 1.507.194 2.015.404.503 1.092.878 1.869.806a3.72 3.72 0 0 1 1.005.022c.276.053.434.143.523.237.138.146.38.635-.25 2.09-.893 1.63-1.553 1.722-1.847 1.677-.213-.033-.468-.158-.756-.406a4.95 4.95 0 0 1-.8-.927c-.39-.564-1.04-.84-1.66-.846-.625-.006-1.316.27-1.693.921l-.478.826-.911 1.506Z', ['M9.093 11.552c.046-.079.144-.15.32-.148a.53.53 0 0 1 .43.207c.285.414.636.847 1.046 1.2.405.35.914.662 1.516.754 1.334.205 2.502-.698 3.48-2.495l.014-.028.013-.03c.687-1.574.774-2.852-.005-3.675-.37-.391-.861-.586-1.333-.676a5.243 5.243 0 0 0-1.447-.044c-.173.016-.393-.073-.54-.257-.145-.18-.127-.316-.082-.392l.393-.672L14.287 3h5.71c1.536 0 2.499 1.659 1.737 2.992l-7.997 13.996c-.768 1.344-2.706 1.344-3.473 0l-3.037-5.314 1.377-2.278.004-.006.004-.007.481-.831Z', 0.6]]
32340
+ /* eslint-enable max-len */
32341
+ }
32342
+ }, options);
32343
+ }
32344
+
32281
32345
  // Composables
32282
32346
  function createVuetify$1() {
32283
32347
  let vuetify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -32377,7 +32441,7 @@ function createVuetify$1() {
32377
32441
  };
32378
32442
  });
32379
32443
  }
32380
- const version$1 = "3.10.5-dev.2025-10-07";
32444
+ const version$1 = "3.10.5-dev.2025-10-10";
32381
32445
  createVuetify$1.version = version$1;
32382
32446
 
32383
32447
  // Vue's inject() can only be used in setup
@@ -32402,7 +32466,7 @@ const createVuetify = function () {
32402
32466
  ...options
32403
32467
  });
32404
32468
  };
32405
- const version = "3.10.5-dev.2025-10-07";
32469
+ const version = "3.10.5-dev.2025-10-10";
32406
32470
  createVuetify.version = version;
32407
32471
 
32408
32472
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useHotkey, useLayout, useLocale, useMask, useRtl, useTheme, version };