@vuetify/nightly 3.10.5-dev.2025-10-07 → 3.10.5-dev.2025-10-09

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 (73) hide show
  1. package/CHANGELOG.md +16 -3
  2. package/dist/json/attributes.json +3521 -3521
  3. package/dist/json/importMap-labs.json +14 -14
  4. package/dist/json/importMap.json +180 -180
  5. package/dist/json/tags.json +5 -5
  6. package/dist/json/web-types.json +6459 -6444
  7. package/dist/vuetify-labs.cjs +230 -166
  8. package/dist/vuetify-labs.css +3872 -3872
  9. package/dist/vuetify-labs.d.ts +1520 -1446
  10. package/dist/vuetify-labs.esm.js +230 -166
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +230 -166
  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 +3682 -3682
  17. package/dist/vuetify.d.ts +2284 -2195
  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 +60 -60
  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/VDateInput/VDateInput.d.ts +0 -30
  71. package/lib/labs/VDateInput/VDateInput.js +2 -2
  72. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  73. 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-09
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -4779,83 +4779,7 @@ const VBtnToggle = genericComponent()({
4779
4779
  }
4780
4780
  });
4781
4781
 
4782
- // Composables
4783
-
4784
- // Types
4785
-
4786
- const aliases = {
4787
- collapse: 'mdi-chevron-up',
4788
- complete: 'mdi-check',
4789
- cancel: 'mdi-close-circle',
4790
- close: 'mdi-close',
4791
- delete: 'mdi-close-circle',
4792
- // delete (e.g. v-chip close)
4793
- clear: 'mdi-close-circle',
4794
- success: 'mdi-check-circle',
4795
- info: 'mdi-information',
4796
- warning: 'mdi-alert-circle',
4797
- error: 'mdi-close-circle',
4798
- prev: 'mdi-chevron-left',
4799
- next: 'mdi-chevron-right',
4800
- checkboxOn: 'mdi-checkbox-marked',
4801
- checkboxOff: 'mdi-checkbox-blank-outline',
4802
- checkboxIndeterminate: 'mdi-minus-box',
4803
- delimiter: 'mdi-circle',
4804
- // for carousel
4805
- sortAsc: 'mdi-arrow-up',
4806
- sortDesc: 'mdi-arrow-down',
4807
- expand: 'mdi-chevron-down',
4808
- menu: 'mdi-menu',
4809
- subgroup: 'mdi-menu-down',
4810
- dropdown: 'mdi-menu-down',
4811
- radioOn: 'mdi-radiobox-marked',
4812
- radioOff: 'mdi-radiobox-blank',
4813
- edit: 'mdi-pencil',
4814
- ratingEmpty: 'mdi-star-outline',
4815
- ratingFull: 'mdi-star',
4816
- ratingHalf: 'mdi-star-half-full',
4817
- loading: 'mdi-cached',
4818
- first: 'mdi-page-first',
4819
- last: 'mdi-page-last',
4820
- unfold: 'mdi-unfold-more-horizontal',
4821
- file: 'mdi-paperclip',
4822
- plus: 'mdi-plus',
4823
- minus: 'mdi-minus',
4824
- calendar: 'mdi-calendar',
4825
- treeviewCollapse: 'mdi-menu-down',
4826
- treeviewExpand: 'mdi-menu-right',
4827
- tableGroupCollapse: 'mdi-chevron-down',
4828
- tableGroupExpand: 'mdi-chevron-right',
4829
- eyeDropper: 'mdi-eyedropper',
4830
- upload: 'mdi-cloud-upload',
4831
- color: 'mdi-palette',
4832
- command: 'mdi-apple-keyboard-command',
4833
- ctrl: 'mdi-apple-keyboard-control',
4834
- space: 'mdi-keyboard-space',
4835
- shift: 'mdi-apple-keyboard-shift',
4836
- alt: 'mdi-apple-keyboard-option',
4837
- enter: 'mdi-keyboard-return',
4838
- arrowup: 'mdi-arrow-up',
4839
- arrowdown: 'mdi-arrow-down',
4840
- arrowleft: 'mdi-arrow-left',
4841
- arrowright: 'mdi-arrow-right',
4842
- backspace: 'mdi-backspace',
4843
- play: 'mdi-play',
4844
- pause: 'mdi-pause',
4845
- fullscreen: 'mdi-fullscreen',
4846
- fullscreenExit: 'mdi-fullscreen-exit',
4847
- volumeHigh: 'mdi-volume-high',
4848
- volumeMedium: 'mdi-volume-medium',
4849
- volumeLow: 'mdi-volume-low',
4850
- volumeOff: 'mdi-volume-variant-off'
4851
- };
4852
- const mdi = {
4853
- // Not using mergeProps here, functional components merge props by default (?)
4854
- component: props => h(VClassIcon, {
4855
- ...props,
4856
- class: 'mdi'
4857
- })
4858
- };
4782
+ // Utilities
4859
4783
 
4860
4784
  // Types
4861
4785
 
@@ -4938,37 +4862,6 @@ const VClassIcon = defineComponent({
4938
4862
  };
4939
4863
  }
4940
4864
  });
4941
- function genDefaults$1() {
4942
- return {
4943
- svg: {
4944
- component: VSvgIcon
4945
- },
4946
- class: {
4947
- component: VClassIcon
4948
- }
4949
- };
4950
- }
4951
-
4952
- // Composables
4953
- function createIcons(options) {
4954
- const sets = genDefaults$1();
4955
- const defaultSet = options?.defaultSet ?? 'mdi';
4956
- if (defaultSet === 'mdi' && !sets.mdi) {
4957
- sets.mdi = mdi;
4958
- }
4959
- return mergeDeep({
4960
- defaultSet,
4961
- sets,
4962
- aliases: {
4963
- ...aliases,
4964
- /* eslint-disable max-len */
4965
- 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]],
4966
- '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',
4967
- '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]]
4968
- /* eslint-enable max-len */
4969
- }
4970
- }, options);
4971
- }
4972
4865
  const useIcon = props => {
4973
4866
  const icons = inject$1(IconSymbol);
4974
4867
  if (!icons) throw new Error('Missing Vuetify Icons provide!');
@@ -7918,7 +7811,7 @@ function useDisplay() {
7918
7811
  // Types
7919
7812
 
7920
7813
  const GoToSymbol = Symbol.for('vuetify:goto');
7921
- function genDefaults() {
7814
+ function genDefaults$1() {
7922
7815
  return {
7923
7816
  container: undefined,
7924
7817
  duration: 300,
@@ -7947,12 +7840,12 @@ function getOffset$2(target, horizontal, rtl) {
7947
7840
  function createGoTo(options, locale) {
7948
7841
  return {
7949
7842
  rtl: locale.isRtl,
7950
- options: mergeDeep(genDefaults(), options)
7843
+ options: mergeDeep(genDefaults$1(), options)
7951
7844
  };
7952
7845
  }
7953
7846
  async function scrollTo(_target, _options, horizontal, goTo) {
7954
7847
  const property = horizontal ? 'scrollLeft' : 'scrollTop';
7955
- const options = mergeDeep(goTo?.options ?? genDefaults(), _options);
7848
+ const options = mergeDeep(goTo?.options ?? genDefaults$1(), _options);
7956
7849
  const rtl = goTo?.rtl.value;
7957
7850
  const target = (typeof _target === 'number' ? _target : getTarget$1(_target)) ?? 0;
7958
7851
  const container = options.container === 'parent' && target instanceof HTMLElement ? target.parentElement : getContainer(options.container);
@@ -12942,7 +12835,7 @@ function useVirtual(props, items) {
12942
12835
  const start = performance.now();
12943
12836
  offsets[0] = 0;
12944
12837
  const length = items.value.length;
12945
- for (let i = 1; i <= length - 1; i++) {
12838
+ for (let i = 1; i <= length; i++) {
12946
12839
  offsets[i] = (offsets[i - 1] || 0) + getSize(i - 1);
12947
12840
  }
12948
12841
  updateTime.value = Math.max(updateTime.value, performance.now() - start);
@@ -12977,7 +12870,7 @@ function useVirtual(props, items) {
12977
12870
  }
12978
12871
  }
12979
12872
  function calculateOffset(index) {
12980
- index = clamp(index, 0, items.value.length - 1);
12873
+ index = clamp(index, 0, items.value.length);
12981
12874
  const whole = Math.floor(index);
12982
12875
  const fraction = index % 1;
12983
12876
  const next = whole + 1;
@@ -13982,10 +13875,7 @@ const makeVAutocompleteProps = propsFactory({
13982
13875
  ...omit(makeVTextFieldProps({
13983
13876
  modelValue: null,
13984
13877
  role: 'combobox'
13985
- }), ['validationValue', 'dirty', 'appendInnerIcon']),
13986
- ...makeTransitionProps({
13987
- transition: false
13988
- })
13878
+ }), ['validationValue', 'dirty', 'appendInnerIcon'])
13989
13879
  }, 'VAutocomplete');
13990
13880
  const VAutocomplete = genericComponent()({
13991
13881
  name: 'VAutocomplete',
@@ -14010,6 +13900,7 @@ const VAutocomplete = genericComponent()({
14010
13900
  const vMenuRef = ref();
14011
13901
  const vVirtualScrollRef = ref();
14012
13902
  const selectionIndex = shallowRef(-1);
13903
+ const _searchLock = shallowRef(null);
14013
13904
  const {
14014
13905
  items,
14015
13906
  transformIn,
@@ -14031,9 +13922,9 @@ const VAutocomplete = genericComponent()({
14031
13922
  const {
14032
13923
  filteredItems,
14033
13924
  getMatches
14034
- } = useFilter(props, items, () => isPristine.value ? '' : search.value);
13925
+ } = useFilter(props, items, () => _searchLock.value ?? (isPristine.value ? '' : search.value));
14035
13926
  const displayItems = computed(() => {
14036
- if (props.hideSelected) {
13927
+ if (props.hideSelected && _searchLock.value === null) {
14037
13928
  return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
14038
13929
  }
14039
13930
  return filteredItems.value;
@@ -14164,6 +14055,7 @@ const VAutocomplete = genericComponent()({
14164
14055
  isPristine.value = true;
14165
14056
  vTextFieldRef.value?.focus();
14166
14057
  }
14058
+ _searchLock.value = null;
14167
14059
  }
14168
14060
  function onFocusin(e) {
14169
14061
  isFocused.value = true;
@@ -14199,6 +14091,7 @@ const VAutocomplete = genericComponent()({
14199
14091
  } else {
14200
14092
  const add = set !== false;
14201
14093
  model.value = add ? [item] : [];
14094
+ _searchLock.value = isPristine.value ? '' : search.value ?? '';
14202
14095
  search.value = add && !hasSelectionSlot.value ? item.title : '';
14203
14096
 
14204
14097
  // watch for search watcher to trigger
@@ -14218,6 +14111,9 @@ const VAutocomplete = genericComponent()({
14218
14111
  } else {
14219
14112
  if (!props.multiple && search.value == null) model.value = [];
14220
14113
  menu.value = false;
14114
+ if (!isPristine.value && search.value) {
14115
+ _searchLock.value = search.value;
14116
+ }
14221
14117
  search.value = '';
14222
14118
  selectionIndex.value = -1;
14223
14119
  }
@@ -14227,13 +14123,14 @@ const VAutocomplete = genericComponent()({
14227
14123
  if (val) menu.value = true;
14228
14124
  isPristine.value = !val;
14229
14125
  });
14230
- watch(menu, () => {
14231
- if (!props.hideSelected && menu.value && model.value.length) {
14126
+ watch(menu, val => {
14127
+ if (!props.hideSelected && val && model.value.length && isPristine.value) {
14232
14128
  const index = displayItems.value.findIndex(item => model.value.some(s => item.value === s.value));
14233
14129
  IN_BROWSER && window.requestAnimationFrame(() => {
14234
14130
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
14235
14131
  });
14236
14132
  }
14133
+ if (val) _searchLock.value = null;
14237
14134
  });
14238
14135
  watch(items, (newVal, oldVal) => {
14239
14136
  if (menu.value) return;
@@ -14284,7 +14181,6 @@ const VAutocomplete = genericComponent()({
14284
14181
  "maxHeight": 310,
14285
14182
  "openOnClick": false,
14286
14183
  "closeOnContentClick": false,
14287
- "transition": props.transition,
14288
14184
  "onAfterEnter": onAfterEnter,
14289
14185
  "onAfterLeave": onAfterLeave
14290
14186
  }, props.menuProps), {
@@ -19312,10 +19208,7 @@ const makeVComboboxProps = propsFactory({
19312
19208
  ...omit(makeVTextFieldProps({
19313
19209
  modelValue: null,
19314
19210
  role: 'combobox'
19315
- }), ['validationValue', 'dirty', 'appendInnerIcon']),
19316
- ...makeTransitionProps({
19317
- transition: false
19318
- })
19211
+ }), ['validationValue', 'dirty', 'appendInnerIcon'])
19319
19212
  }, 'VCombobox');
19320
19213
  const VCombobox = genericComponent()({
19321
19214
  name: 'VCombobox',
@@ -19359,6 +19252,7 @@ const VCombobox = genericComponent()({
19359
19252
  const hasChips = computed(() => !!(props.chips || slots.chip));
19360
19253
  const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection);
19361
19254
  const _search = shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
19255
+ const _searchLock = shallowRef(null);
19362
19256
  const search = computed({
19363
19257
  get: () => {
19364
19258
  return _search.value;
@@ -19393,9 +19287,9 @@ const VCombobox = genericComponent()({
19393
19287
  const {
19394
19288
  filteredItems,
19395
19289
  getMatches
19396
- } = useFilter(props, items, () => props.alwaysFilter || !isPristine.value ? search.value : '');
19290
+ } = useFilter(props, items, () => _searchLock.value ?? (props.alwaysFilter || !isPristine.value ? search.value : ''));
19397
19291
  const displayItems = computed(() => {
19398
- if (props.hideSelected) {
19292
+ if (props.hideSelected && _searchLock.value === null) {
19399
19293
  return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
19400
19294
  }
19401
19295
  return filteredItems.value;
@@ -19476,22 +19370,19 @@ const VCombobox = genericComponent()({
19476
19370
  if (['Escape'].includes(e.key)) {
19477
19371
  menu.value = false;
19478
19372
  }
19479
- if (['Enter', 'Escape', 'Tab'].includes(e.key)) {
19480
- if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key) && !model.value.some(_ref2 => {
19481
- let {
19482
- value
19483
- } = _ref2;
19484
- return value === displayItems.value[0].value;
19485
- })) {
19486
- select(filteredItems.value[0]);
19487
- }
19488
- isPristine.value = true;
19373
+ if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key) && !model.value.some(_ref2 => {
19374
+ let {
19375
+ value
19376
+ } = _ref2;
19377
+ return value === displayItems.value[0].value;
19378
+ })) {
19379
+ select(filteredItems.value[0]);
19489
19380
  }
19490
19381
  if (e.key === 'ArrowDown' && highlightFirst.value) {
19491
19382
  listRef.value?.focus('next');
19492
19383
  }
19493
19384
  if (e.key === 'Enter' && search.value) {
19494
- select(transformItem$3(props, search.value));
19385
+ select(transformItem$3(props, search.value), true, true);
19495
19386
  if (hasSelectionSlot.value) _search.value = '';
19496
19387
  }
19497
19388
  if (['Backspace', 'Delete'].includes(e.key)) {
@@ -19539,10 +19430,12 @@ const VCombobox = genericComponent()({
19539
19430
  isPristine.value = true;
19540
19431
  vTextFieldRef.value?.focus();
19541
19432
  }
19433
+ _searchLock.value = null;
19542
19434
  }
19543
19435
  /** @param set - null means toggle */
19544
19436
  function select(item) {
19545
19437
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
19438
+ let keepMenu = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
19546
19439
  if (!item || item.props.disabled) return;
19547
19440
  if (props.multiple) {
19548
19441
  const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
@@ -19560,11 +19453,14 @@ const VCombobox = genericComponent()({
19560
19453
  } else {
19561
19454
  const add = set !== false;
19562
19455
  model.value = add ? [item] : [];
19456
+ if ((!isPristine.value || props.alwaysFilter) && _search.value) {
19457
+ _searchLock.value = _search.value;
19458
+ }
19563
19459
  _search.value = add && !hasSelectionSlot.value ? item.title : '';
19564
19460
 
19565
19461
  // watch for search watcher to trigger
19566
19462
  nextTick(() => {
19567
- menu.value = false;
19463
+ menu.value = keepMenu;
19568
19464
  isPristine.value = true;
19569
19465
  });
19570
19466
  }
@@ -19603,13 +19499,14 @@ const VCombobox = genericComponent()({
19603
19499
  }
19604
19500
  }
19605
19501
  });
19606
- watch(menu, () => {
19607
- if (!props.hideSelected && menu.value && model.value.length) {
19502
+ watch(menu, val => {
19503
+ if (!props.hideSelected && val && model.value.length && isPristine.value) {
19608
19504
  const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
19609
19505
  IN_BROWSER && window.requestAnimationFrame(() => {
19610
19506
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
19611
19507
  });
19612
19508
  }
19509
+ if (val) _searchLock.value = null;
19613
19510
  });
19614
19511
  watch(items, (newVal, oldVal) => {
19615
19512
  if (menu.value) return;
@@ -19660,7 +19557,6 @@ const VCombobox = genericComponent()({
19660
19557
  "maxHeight": 310,
19661
19558
  "openOnClick": false,
19662
19559
  "closeOnContentClick": false,
19663
- "transition": props.transition,
19664
19560
  "onAfterEnter": onAfterEnter,
19665
19561
  "onAfterLeave": onAfterLeave
19666
19562
  }, props.menuProps), {
@@ -21207,6 +21103,7 @@ const VPagination = genericComponent()({
21207
21103
  // Types
21208
21104
 
21209
21105
  const makeVDataTableFooterProps = propsFactory({
21106
+ color: String,
21210
21107
  prevIcon: {
21211
21108
  type: IconValue,
21212
21109
  default: '$prev'
@@ -21309,6 +21206,7 @@ const VDataTableFooter = genericComponent()({
21309
21206
  "aria-label": t(props.itemsPerPageText)
21310
21207
  }, [t(props.itemsPerPageText)]), createVNode(VSelect, {
21311
21208
  "items": itemsPerPageOptions.value,
21209
+ "itemColor": props.color,
21312
21210
  "modelValue": itemsPerPage.value,
21313
21211
  "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
21314
21212
  "density": "compact",
@@ -21331,7 +21229,7 @@ const VDataTableFooter = genericComponent()({
21331
21229
  "showFirstLastPage": true,
21332
21230
  "totalVisible": props.showCurrentPage ? 1 : 0,
21333
21231
  "variant": "plain"
21334
- }, paginationProps), null)])]);
21232
+ }, omit(paginationProps, ['color'])), null)])]);
21335
21233
  });
21336
21234
  return {};
21337
21235
  }
@@ -21842,6 +21740,7 @@ const VDataTableHeaders = genericComponent()({
21842
21740
  if (isEmpty) return '';
21843
21741
  if (column.key === 'data-table-select') {
21844
21742
  return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && createVNode(VCheckboxBtn, {
21743
+ "color": props.color,
21845
21744
  "density": props.density,
21846
21745
  "modelValue": allSelected.value,
21847
21746
  "indeterminate": someSelected.value && !allSelected.value,
@@ -21866,11 +21765,6 @@ const VDataTableHeaders = genericComponent()({
21866
21765
  const displayItems = computed(() => {
21867
21766
  return columns.value.filter(column => column?.sortable && !props.disableSort);
21868
21767
  });
21869
- const appendIcon = computed(() => {
21870
- const showSelectColumn = columns.value.find(column => column.key === 'data-table-select');
21871
- if (showSelectColumn == null) return;
21872
- return allSelected.value ? '$checkboxOn' : someSelected.value ? '$checkboxIndeterminate' : '$checkboxOff';
21873
- });
21874
21768
  return createVNode(VDataTableColumn, mergeProps({
21875
21769
  "tag": "th",
21876
21770
  "class": [...headerCellClasses.value],
@@ -21880,6 +21774,7 @@ const VDataTableHeaders = genericComponent()({
21880
21774
  "class": "v-data-table-header__content"
21881
21775
  }, [createVNode(VSelect, {
21882
21776
  "chips": true,
21777
+ "color": props.color,
21883
21778
  "class": "v-data-table__td-sort-select",
21884
21779
  "clearable": true,
21885
21780
  "density": "default",
@@ -21888,9 +21783,15 @@ const VDataTableHeaders = genericComponent()({
21888
21783
  "multiple": props.multiSort,
21889
21784
  "variant": "underlined",
21890
21785
  "onClick:clear": () => sortBy.value = [],
21891
- "appendIcon": appendIcon.value,
21892
21786
  "onClick:append": () => selectAll(!allSelected.value)
21893
21787
  }, {
21788
+ append: () => createVNode(VCheckboxBtn, {
21789
+ "color": props.color,
21790
+ "density": "compact",
21791
+ "modelValue": allSelected.value,
21792
+ "indeterminate": someSelected.value && !allSelected.value,
21793
+ "onUpdate:modelValue": selectAll
21794
+ }, null),
21894
21795
  chip: props => createVNode(VChip, {
21895
21796
  "onClick": props.item.raw?.sortable ? () => toggleSort(props.item.raw) : undefined,
21896
21797
  "onMousedown": e => {
@@ -21920,7 +21821,7 @@ const VDataTableHeaders = genericComponent()({
21920
21821
  "name": "v-data-table-progress",
21921
21822
  "absolute": true,
21922
21823
  "active": true,
21923
- "color": typeof props.loading === 'boolean' ? undefined : props.loading,
21824
+ "color": typeof props.loading === 'boolean' || props.loading === 'true' ? props.color : props.loading,
21924
21825
  "indeterminate": true
21925
21826
  }, {
21926
21827
  default: slots.loader
@@ -22027,6 +21928,7 @@ const VDataTableGroupHeaderRow = genericComponent()({
22027
21928
  // Types
22028
21929
 
22029
21930
  const makeVDataTableRowProps = propsFactory({
21931
+ color: String,
22030
21932
  index: Number,
22031
21933
  item: Object,
22032
21934
  cellProps: [Object, Function],
@@ -22144,11 +22046,13 @@ const VDataTableRow = genericComponent()({
22144
22046
  return slots['item.data-table-select']?.({
22145
22047
  ...slotProps,
22146
22048
  props: {
22049
+ color: props.color,
22147
22050
  disabled: !item.selectable,
22148
22051
  modelValue: isSelected([item]),
22149
22052
  onClick: withModifiers(() => toggleSelect(item), ['stop'])
22150
22053
  }
22151
22054
  }) ?? createVNode(VCheckboxBtn, {
22055
+ "color": props.color,
22152
22056
  "disabled": !item.selectable,
22153
22057
  "density": props.density,
22154
22058
  "modelValue": isSelected([item]),
@@ -22187,6 +22091,7 @@ const VDataTableRow = genericComponent()({
22187
22091
  // Types
22188
22092
 
22189
22093
  const makeVDataTableRowsProps = propsFactory({
22094
+ color: String,
22190
22095
  loading: [Boolean, String],
22191
22096
  loadingText: {
22192
22097
  type: String,
@@ -22302,6 +22207,7 @@ const VDataTableRows = genericComponent()({
22302
22207
  } : undefined,
22303
22208
  index,
22304
22209
  item,
22210
+ color: props.color,
22305
22211
  cellProps: props.cellProps,
22306
22212
  collapseIcon: props.collapseIcon,
22307
22213
  expandIcon: props.expandIcon,
@@ -26697,12 +26603,17 @@ const VNumberInput = genericComponent()({
26697
26603
  }
26698
26604
  const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
26699
26605
  const _inputText = shallowRef(null);
26700
- watchEffect(() => {
26701
- if (isFocused.value && !controlsDisabled.value && Number(_inputText.value) === model.value) ; else if (model.value == null) {
26606
+ const _lastParsedValue = shallowRef(null);
26607
+ watch(model, val => {
26608
+ if (isFocused.value && !controlsDisabled.value && Number(_inputText.value) === val) ; else if (val == null) {
26702
26609
  _inputText.value = null;
26703
- } else if (!isNaN(model.value)) {
26704
- _inputText.value = correctPrecision(model.value);
26610
+ _lastParsedValue.value = null;
26611
+ } else if (!isNaN(val)) {
26612
+ _inputText.value = correctPrecision(val);
26613
+ _lastParsedValue.value = Number(_inputText.value.replace(decimalSeparator.value, '.'));
26705
26614
  }
26615
+ }, {
26616
+ immediate: true
26706
26617
  });
26707
26618
  const inputText = computed({
26708
26619
  get: () => _inputText.value,
@@ -26710,15 +26621,24 @@ const VNumberInput = genericComponent()({
26710
26621
  if (val === null || val === '') {
26711
26622
  model.value = null;
26712
26623
  _inputText.value = null;
26624
+ _lastParsedValue.value = null;
26713
26625
  return;
26714
26626
  }
26715
26627
  const parsedValue = Number(val.replace(decimalSeparator.value, '.'));
26716
- if (!isNaN(parsedValue) && parsedValue <= props.max && parsedValue >= props.min) {
26717
- model.value = parsedValue;
26628
+ if (!isNaN(parsedValue)) {
26718
26629
  _inputText.value = val;
26630
+ _lastParsedValue.value = parsedValue;
26631
+ if (parsedValue <= props.max && parsedValue >= props.min) {
26632
+ model.value = parsedValue;
26633
+ }
26719
26634
  }
26720
26635
  }
26721
26636
  });
26637
+ const isOutOfRange = computed(() => {
26638
+ if (_lastParsedValue.value === null) return false;
26639
+ const numberFromText = Number(_inputText.value);
26640
+ return numberFromText !== clamp(numberFromText, props.min, props.max);
26641
+ });
26722
26642
  const canIncrease = computed(() => {
26723
26643
  if (controlsDisabled.value) return false;
26724
26644
  return (model.value ?? 0) + props.step <= props.max;
@@ -26974,6 +26894,7 @@ const VNumberInput = genericComponent()({
26974
26894
  "focused": isFocused.value,
26975
26895
  "onUpdate:focused": $event => isFocused.value = $event,
26976
26896
  "validationValue": model.value,
26897
+ "error": isOutOfRange.value || undefined,
26977
26898
  "onBeforeinput": onBeforeinput,
26978
26899
  "onFocus": onFocus,
26979
26900
  "onBlur": onBlur,
@@ -29773,7 +29694,7 @@ const VTabs = genericComponent()({
29773
29694
  "role": "tablist",
29774
29695
  "symbol": VTabsSymbol
29775
29696
  }, scopeId, attrs), {
29776
- default: () => [slots.default?.() ?? items.value.map(item => slots.tab?.({
29697
+ default: slots.default ?? (() => items.value.map(item => slots.tab?.({
29777
29698
  item
29778
29699
  }) ?? createVNode(VTab, mergeProps(item, {
29779
29700
  "key": item.text,
@@ -29783,7 +29704,9 @@ const VTabs = genericComponent()({
29783
29704
  default: slots[`tab.${item.value}`] ? () => slots[`tab.${item.value}`]?.({
29784
29705
  item
29785
29706
  }) : undefined
29786
- }))]
29707
+ }))),
29708
+ prev: slots.prev,
29709
+ next: slots.next
29787
29710
  }), hasWindow && createVNode(VTabsWindow, mergeProps({
29788
29711
  "modelValue": model.value,
29789
29712
  "onUpdate:modelValue": $event => model.value = $event,
@@ -29872,6 +29795,10 @@ const VTextarea = genericComponent()({
29872
29795
  const vFieldRef = ref();
29873
29796
  const controlHeight = shallowRef('');
29874
29797
  const textareaRef = ref();
29798
+ const scrollbarWidth = ref(0);
29799
+ const {
29800
+ platform
29801
+ } = useDisplay();
29875
29802
  const autocomplete = useAutocomplete(props);
29876
29803
  const isActive = computed(() => props.persistentPlaceholder || isFocused.value || props.active);
29877
29804
  function onFocus() {
@@ -29916,6 +29843,18 @@ const VTextarea = genericComponent()({
29916
29843
  if (!props.autoGrow) rows.value = Number(props.rows);
29917
29844
  });
29918
29845
  function calculateInputHeight() {
29846
+ nextTick(() => {
29847
+ if (!textareaRef.value) return;
29848
+ if (platform.value.firefox) {
29849
+ scrollbarWidth.value = 12;
29850
+ return;
29851
+ }
29852
+ const {
29853
+ offsetWidth,
29854
+ clientWidth
29855
+ } = textareaRef.value;
29856
+ scrollbarWidth.value = Math.max(0, offsetWidth - clientWidth);
29857
+ });
29919
29858
  if (!props.autoGrow) return;
29920
29859
  nextTick(() => {
29921
29860
  if (!sizerRef.value || !vFieldRef.value) return;
@@ -29976,7 +29915,9 @@ const VTextarea = genericComponent()({
29976
29915
  'v-textarea--no-resize': props.noResize || props.autoGrow,
29977
29916
  'v-input--plain-underlined': isPlainOrUnderlined.value
29978
29917
  }, props.class],
29979
- "style": props.style
29918
+ "style": [{
29919
+ '--v-textarea-scroll-bar-width': convertToUnit(scrollbarWidth.value)
29920
+ }, props.style]
29980
29921
  }, rootAttrs, inputProps, {
29981
29922
  "centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
29982
29923
  "focused": isFocused.value
@@ -31495,6 +31436,11 @@ const makeVTreeviewProps = propsFactory({
31495
31436
  openAll: Boolean,
31496
31437
  indentLines: [Boolean, String],
31497
31438
  search: String,
31439
+ hideNoData: Boolean,
31440
+ noDataText: {
31441
+ type: String,
31442
+ default: '$vuetify.noDataText'
31443
+ },
31498
31444
  ...makeFilterProps({
31499
31445
  filterKeys: ['title']
31500
31446
  }),
@@ -31522,6 +31468,9 @@ const VTreeview = genericComponent()({
31522
31468
  slots,
31523
31469
  emit
31524
31470
  } = _ref;
31471
+ const {
31472
+ t
31473
+ } = useLocale();
31525
31474
  const {
31526
31475
  items
31527
31476
  } = useListItems(props);
@@ -31615,7 +31564,10 @@ const VTreeview = genericComponent()({
31615
31564
  "selected": selected.value,
31616
31565
  "onUpdate:selected": $event => selected.value = $event
31617
31566
  }), {
31618
- default: () => [createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
31567
+ default: () => [visibleIds.value?.size === 0 && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
31568
+ "key": "no-data",
31569
+ "title": t(props.noDataText)
31570
+ }, null)), createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
31619
31571
  "density": props.density,
31620
31572
  "returnObject": props.returnObject,
31621
31573
  "items": items.value,
@@ -34670,7 +34622,7 @@ const makeVDateInputProps = propsFactory({
34670
34622
  ...omit(makeVDatePickerProps({
34671
34623
  hideHeader: true,
34672
34624
  showAdjacentMonths: true
34673
- }), ['active', 'location', 'rounded'])
34625
+ }), ['active', 'location', 'rounded', 'height', 'minHeight', 'maxHeight'])
34674
34626
  }, 'VDateInput');
34675
34627
  const VDateInput = genericComponent()({
34676
34628
  name: 'VDateInput',
@@ -34812,7 +34764,7 @@ const VDateInput = genericComponent()({
34812
34764
  }
34813
34765
  useRender(() => {
34814
34766
  const confirmEditProps = VConfirmEdit.filterProps(props);
34815
- const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']));
34767
+ const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'bgColor', 'location', 'rounded', 'maxWidth', 'minWidth', 'width']));
34816
34768
  const datePickerSlots = pick(slots, ['title', 'header', 'day', 'month', 'year']);
34817
34769
  const textFieldProps = VTextField.filterProps(omit(props, ['placeholder']));
34818
34770
  return createVNode(VTextField, mergeProps({
@@ -37904,6 +37856,118 @@ var directives = /*#__PURE__*/Object.freeze({
37904
37856
  Touch: Touch
37905
37857
  });
37906
37858
 
37859
+ // Composables
37860
+
37861
+ // Types
37862
+
37863
+ const aliases = {
37864
+ collapse: 'mdi-chevron-up',
37865
+ complete: 'mdi-check',
37866
+ cancel: 'mdi-close-circle',
37867
+ close: 'mdi-close',
37868
+ delete: 'mdi-close-circle',
37869
+ // delete (e.g. v-chip close)
37870
+ clear: 'mdi-close-circle',
37871
+ success: 'mdi-check-circle',
37872
+ info: 'mdi-information',
37873
+ warning: 'mdi-alert-circle',
37874
+ error: 'mdi-close-circle',
37875
+ prev: 'mdi-chevron-left',
37876
+ next: 'mdi-chevron-right',
37877
+ checkboxOn: 'mdi-checkbox-marked',
37878
+ checkboxOff: 'mdi-checkbox-blank-outline',
37879
+ checkboxIndeterminate: 'mdi-minus-box',
37880
+ delimiter: 'mdi-circle',
37881
+ // for carousel
37882
+ sortAsc: 'mdi-arrow-up',
37883
+ sortDesc: 'mdi-arrow-down',
37884
+ expand: 'mdi-chevron-down',
37885
+ menu: 'mdi-menu',
37886
+ subgroup: 'mdi-menu-down',
37887
+ dropdown: 'mdi-menu-down',
37888
+ radioOn: 'mdi-radiobox-marked',
37889
+ radioOff: 'mdi-radiobox-blank',
37890
+ edit: 'mdi-pencil',
37891
+ ratingEmpty: 'mdi-star-outline',
37892
+ ratingFull: 'mdi-star',
37893
+ ratingHalf: 'mdi-star-half-full',
37894
+ loading: 'mdi-cached',
37895
+ first: 'mdi-page-first',
37896
+ last: 'mdi-page-last',
37897
+ unfold: 'mdi-unfold-more-horizontal',
37898
+ file: 'mdi-paperclip',
37899
+ plus: 'mdi-plus',
37900
+ minus: 'mdi-minus',
37901
+ calendar: 'mdi-calendar',
37902
+ treeviewCollapse: 'mdi-menu-down',
37903
+ treeviewExpand: 'mdi-menu-right',
37904
+ tableGroupCollapse: 'mdi-chevron-down',
37905
+ tableGroupExpand: 'mdi-chevron-right',
37906
+ eyeDropper: 'mdi-eyedropper',
37907
+ upload: 'mdi-cloud-upload',
37908
+ color: 'mdi-palette',
37909
+ command: 'mdi-apple-keyboard-command',
37910
+ ctrl: 'mdi-apple-keyboard-control',
37911
+ space: 'mdi-keyboard-space',
37912
+ shift: 'mdi-apple-keyboard-shift',
37913
+ alt: 'mdi-apple-keyboard-option',
37914
+ enter: 'mdi-keyboard-return',
37915
+ arrowup: 'mdi-arrow-up',
37916
+ arrowdown: 'mdi-arrow-down',
37917
+ arrowleft: 'mdi-arrow-left',
37918
+ arrowright: 'mdi-arrow-right',
37919
+ backspace: 'mdi-backspace',
37920
+ play: 'mdi-play',
37921
+ pause: 'mdi-pause',
37922
+ fullscreen: 'mdi-fullscreen',
37923
+ fullscreenExit: 'mdi-fullscreen-exit',
37924
+ volumeHigh: 'mdi-volume-high',
37925
+ volumeMedium: 'mdi-volume-medium',
37926
+ volumeLow: 'mdi-volume-low',
37927
+ volumeOff: 'mdi-volume-variant-off'
37928
+ };
37929
+ const mdi = {
37930
+ // Not using mergeProps here, functional components merge props by default (?)
37931
+ component: props => h(VClassIcon, {
37932
+ ...props,
37933
+ class: 'mdi'
37934
+ })
37935
+ };
37936
+
37937
+ // Composables
37938
+
37939
+ // Types
37940
+
37941
+ function genDefaults() {
37942
+ return {
37943
+ svg: {
37944
+ component: VSvgIcon
37945
+ },
37946
+ class: {
37947
+ component: VClassIcon
37948
+ }
37949
+ };
37950
+ }
37951
+ function createIcons(options) {
37952
+ const sets = genDefaults();
37953
+ const defaultSet = options?.defaultSet ?? 'mdi';
37954
+ if (defaultSet === 'mdi' && !sets.mdi) {
37955
+ sets.mdi = mdi;
37956
+ }
37957
+ return mergeDeep({
37958
+ defaultSet,
37959
+ sets,
37960
+ aliases: {
37961
+ ...aliases,
37962
+ /* eslint-disable max-len */
37963
+ 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]],
37964
+ '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',
37965
+ '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]]
37966
+ /* eslint-enable max-len */
37967
+ }
37968
+ }, options);
37969
+ }
37970
+
37907
37971
  // Composables
37908
37972
  function createVuetify$1() {
37909
37973
  let vuetify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -38003,7 +38067,7 @@ function createVuetify$1() {
38003
38067
  };
38004
38068
  });
38005
38069
  }
38006
- const version$1 = "3.10.5-dev.2025-10-07";
38070
+ const version$1 = "3.10.5-dev.2025-10-09";
38007
38071
  createVuetify$1.version = version$1;
38008
38072
 
38009
38073
  // Vue's inject() can only be used in setup
@@ -38301,7 +38365,7 @@ var index = /*#__PURE__*/Object.freeze({
38301
38365
 
38302
38366
  /* eslint-disable local-rules/sort-imports */
38303
38367
 
38304
- const version = "3.10.5-dev.2025-10-07";
38368
+ const version = "3.10.5-dev.2025-10-09";
38305
38369
 
38306
38370
  /* eslint-disable local-rules/sort-imports */
38307
38371