vuetify 3.1.14 → 3.1.15

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 (97) hide show
  1. package/dist/json/attributes.json +149 -97
  2. package/dist/json/importMap.json +70 -70
  3. package/dist/json/tags.json +13 -0
  4. package/dist/json/web-types.json +440 -209
  5. package/dist/vuetify-labs.css +161 -152
  6. package/dist/vuetify-labs.d.ts +518 -160
  7. package/dist/vuetify-labs.esm.js +176 -116
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +176 -116
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +11 -2
  12. package/dist/vuetify.d.ts +486 -161
  13. package/dist/vuetify.esm.js +118 -68
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +118 -68
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +728 -717
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAutocomplete/VAutocomplete.css +9 -0
  21. package/lib/components/VAutocomplete/VAutocomplete.mjs +50 -6
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  23. package/lib/components/VAutocomplete/VAutocomplete.sass +10 -0
  24. package/lib/components/VAutocomplete/index.d.ts +29 -17
  25. package/lib/components/VCard/VCard.mjs.map +1 -1
  26. package/lib/components/VCard/index.d.ts +21 -16
  27. package/lib/components/VCheckbox/VCheckbox.mjs +2 -2
  28. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  29. package/lib/components/VCheckbox/index.d.ts +22 -1
  30. package/lib/components/VCombobox/VCombobox.css +1 -1
  31. package/lib/components/VCombobox/VCombobox.mjs +6 -4
  32. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  33. package/lib/components/VCombobox/VCombobox.sass +1 -1
  34. package/lib/components/VCombobox/index.d.ts +29 -17
  35. package/lib/components/VField/index.d.ts +6 -0
  36. package/lib/components/VFileInput/VFileInput.mjs +13 -17
  37. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  38. package/lib/components/VFileInput/index.d.ts +68 -23
  39. package/lib/components/VInput/VInput.mjs +14 -7
  40. package/lib/components/VInput/VInput.mjs.map +1 -1
  41. package/lib/components/VInput/index.d.ts +22 -1
  42. package/lib/components/VOverlay/locationStrategies.mjs +9 -4
  43. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  44. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -2
  45. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  46. package/lib/components/VRadioGroup/index.d.ts +22 -1
  47. package/lib/components/VRangeSlider/VRangeSlider.mjs +2 -2
  48. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  49. package/lib/components/VRangeSlider/index.d.ts +22 -1
  50. package/lib/components/VSelect/VSelect.mjs +6 -0
  51. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  52. package/lib/components/VSelect/index.d.ts +32 -17
  53. package/lib/components/VSlider/VSlider.mjs +2 -2
  54. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  55. package/lib/components/VSlider/index.d.ts +22 -1
  56. package/lib/components/VSwitch/VSwitch.mjs +5 -3
  57. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  58. package/lib/components/VSwitch/index.d.ts +43 -1
  59. package/lib/components/VTextField/VTextField.mjs +4 -12
  60. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  61. package/lib/components/VTextField/index.d.ts +70 -22
  62. package/lib/components/VTextarea/VTextarea.mjs +4 -12
  63. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  64. package/lib/components/VTextarea/index.d.ts +61 -22
  65. package/lib/components/VTreeview/_mixins.sass +0 -0
  66. package/lib/components/VTreeview/util/filterTreeItems.mjs +0 -0
  67. package/lib/components/VValidation/index.d.ts +10 -1
  68. package/lib/components/index.d.ts +465 -140
  69. package/lib/composables/focus.mjs +3 -2
  70. package/lib/composables/focus.mjs.map +1 -1
  71. package/lib/composables/items.mjs +7 -2
  72. package/lib/composables/items.mjs.map +1 -1
  73. package/lib/entry-bundler.mjs +1 -1
  74. package/lib/framework.mjs +1 -1
  75. package/lib/iconsets/mdi-svg.mjs +2 -2
  76. package/lib/iconsets/mdi-svg.mjs.map +1 -1
  77. package/lib/index.d.ts +21 -21
  78. package/lib/labs/VDataTable/VDataTable.mjs +2 -2
  79. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  80. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
  81. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
  82. package/lib/labs/VDataTable/VDataTableRows.mjs +52 -44
  83. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  84. package/lib/labs/VDataTable/VDataTableServer.mjs +2 -1
  85. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  86. package/lib/labs/VDataTable/VDataTableVirtual.mjs +0 -1
  87. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  88. package/lib/labs/VDataTable/composables/options.mjs +2 -1
  89. package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
  90. package/lib/labs/VDataTable/index.d.ts +44 -11
  91. package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs +1 -0
  92. package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs.map +1 -1
  93. package/lib/labs/VSkeletonLoader/index.d.ts +9 -9
  94. package/lib/labs/components.d.ts +53 -20
  95. package/lib/locale/el.mjs +0 -0
  96. package/lib/locale/index.mjs +0 -0
  97. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.1.14
2
+ * Vuetify v3.1.15
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -5293,7 +5293,8 @@ const VFieldLabel = genericComponent()({
5293
5293
 
5294
5294
  // Composables
5295
5295
  const makeFocusProps = propsFactory({
5296
- focused: Boolean
5296
+ focused: Boolean,
5297
+ 'onUpdate:focused': EventProp()
5297
5298
  }, 'focus');
5298
5299
  function useFocus(props) {
5299
5300
  let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
@@ -5882,6 +5883,8 @@ const makeVInputProps = propsFactory({
5882
5883
  appendIcon: IconValue,
5883
5884
  prependIcon: IconValue,
5884
5885
  hideDetails: [Boolean, String],
5886
+ hint: String,
5887
+ persistentHint: Boolean,
5885
5888
  messages: {
5886
5889
  type: [Array, String],
5887
5890
  default: () => []
@@ -5945,10 +5948,19 @@ const VInput = genericComponent()({
5945
5948
  resetValidation,
5946
5949
  validate
5947
5950
  }));
5951
+ const messages = computed(() => {
5952
+ if (errorMessages.value.length > 0) {
5953
+ return errorMessages.value;
5954
+ } else if (props.hint && (props.persistentHint || props.focused)) {
5955
+ return props.hint;
5956
+ } else {
5957
+ return props.messages;
5958
+ }
5959
+ });
5948
5960
  useRender(() => {
5949
5961
  const hasPrepend = !!(slots.prepend || props.prependIcon);
5950
5962
  const hasAppend = !!(slots.append || props.appendIcon);
5951
- const hasMessages = !!(props.messages?.length || errorMessages.value.length);
5963
+ const hasMessages = messages.value.length > 0;
5952
5964
  const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
5953
5965
  return createVNode("div", {
5954
5966
  "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value]
@@ -5971,7 +5983,7 @@ const VInput = genericComponent()({
5971
5983
  }, [createVNode(VMessages, {
5972
5984
  "id": messagesId.value,
5973
5985
  "active": hasMessages,
5974
- "messages": errorMessages.value.length > 0 ? errorMessages.value : props.messages
5986
+ "messages": messages.value
5975
5987
  }, {
5976
5988
  message: slots.message
5977
5989
  }), slots.details?.(slotProps.value)])]);
@@ -5983,10 +5995,6 @@ const VInput = genericComponent()({
5983
5995
  };
5984
5996
  }
5985
5997
  });
5986
- function filterInputProps(props) {
5987
- const keys = Object.keys(VInput.props).filter(k => !isOn(k));
5988
- return pick(props, keys);
5989
- }
5990
5998
 
5991
5999
  const VCounter = genericComponent()({
5992
6000
  name: 'VCounter',
@@ -6112,8 +6120,6 @@ const makeVTextFieldProps = propsFactory({
6112
6120
  autofocus: Boolean,
6113
6121
  counter: [Boolean, Number, String],
6114
6122
  counterValue: Function,
6115
- hint: String,
6116
- persistentHint: Boolean,
6117
6123
  prefix: String,
6118
6124
  placeholder: String,
6119
6125
  persistentPlaceholder: Boolean,
@@ -6168,9 +6174,6 @@ const VTextField = genericComponent()({
6168
6174
  const vFieldRef = ref();
6169
6175
  const inputRef = ref();
6170
6176
  const isActive = computed(() => activeTypes.includes(props.type) || props.persistentPlaceholder || isFocused.value);
6171
- const messages = computed(() => {
6172
- return props.messages.length ? props.messages : isFocused.value || props.persistentHint ? props.hint : '';
6173
- });
6174
6177
  function onFocus() {
6175
6178
  if (inputRef.value !== document.activeElement) {
6176
6179
  inputRef.value?.focus();
@@ -6213,7 +6216,7 @@ const VTextField = genericComponent()({
6213
6216
  const [{
6214
6217
  modelValue: _,
6215
6218
  ...inputProps
6216
- }] = filterInputProps(props);
6219
+ }] = VInput.filterProps(props);
6217
6220
  const [fieldProps] = filterFieldProps(props);
6218
6221
  return createVNode(VInput, mergeProps({
6219
6222
  "ref": vInputRef,
@@ -6223,12 +6226,9 @@ const VTextField = genericComponent()({
6223
6226
  'v-text-field--prefixed': props.prefix,
6224
6227
  'v-text-field--suffixed': props.suffix,
6225
6228
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
6226
- }],
6227
- "onClick:prepend": props['onClick:prepend'],
6228
- "onClick:append": props['onClick:append']
6229
+ }]
6229
6230
  }, rootAttrs, inputProps, {
6230
- "focused": isFocused.value,
6231
- "messages": messages.value
6231
+ "focused": isFocused.value
6232
6232
  }), {
6233
6233
  ...slots,
6234
6234
  default: _ref2 => {
@@ -6637,7 +6637,7 @@ const VCheckbox = genericComponent()({
6637
6637
  const id = computed(() => props.id || `checkbox-${uid}`);
6638
6638
  useRender(() => {
6639
6639
  const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
6640
- const [inputProps, _1] = filterInputProps(props);
6640
+ const [inputProps, _1] = VInput.filterProps(props);
6641
6641
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6642
6642
  return createVNode(VInput, mergeProps({
6643
6643
  "class": "v-checkbox"
@@ -8049,7 +8049,12 @@ function transformItems$1(props, items) {
8049
8049
  function useItems(props) {
8050
8050
  const items = computed(() => transformItems$1(props, props.items));
8051
8051
  function transformIn(value) {
8052
- return value.map(item => transformItem$1(props, item));
8052
+ return value.map(v => {
8053
+ const existingItem = items.value.find(item => deepEqual(v, item.value));
8054
+ // Nullish existingItem means value is a custom input value from combobox
8055
+ // In this case, use transformItem to create an InternalItem based on value
8056
+ return existingItem ?? transformItem$1(props, v);
8057
+ });
8053
8058
  }
8054
8059
  function transformOut(value) {
8055
8060
  return value.map(_ref => {
@@ -8727,7 +8732,7 @@ function staticLocationStrategy() {
8727
8732
  }
8728
8733
 
8729
8734
  /** Get size of element ignoring max-width/max-height */
8730
- function getIntrinsicSize(el) {
8735
+ function getIntrinsicSize(el, isRtl) {
8731
8736
  // const scrollables = new Map<Element, [number, number]>()
8732
8737
  // el.querySelectorAll('*').forEach(el => {
8733
8738
  // const x = el.scrollLeft
@@ -8744,7 +8749,11 @@ function getIntrinsicSize(el) {
8744
8749
 
8745
8750
  /* eslint-disable-next-line sonarjs/prefer-immediate-return */
8746
8751
  const contentBox = nullifyTransforms(el);
8747
- contentBox.x -= parseFloat(el.style.left || 0);
8752
+ if (isRtl) {
8753
+ contentBox.x += parseFloat(el.style.right || 0);
8754
+ } else {
8755
+ contentBox.x -= parseFloat(el.style.left || 0);
8756
+ }
8748
8757
  contentBox.y -= parseFloat(el.style.top || 0);
8749
8758
 
8750
8759
  // el.style.maxWidth = initialMaxWidth
@@ -8825,7 +8834,7 @@ function connectedLocationStrategy(data, props, contentStyles) {
8825
8834
  });
8826
8835
  if (!data.activatorEl.value || !data.contentEl.value) return;
8827
8836
  const targetBox = data.activatorEl.value.getBoundingClientRect();
8828
- const contentBox = getIntrinsicSize(data.contentEl.value);
8837
+ const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value);
8829
8838
  const scrollParents = getScrollParents(data.contentEl.value);
8830
8839
  const viewportMargin = 12;
8831
8840
  if (!scrollParents.length) {
@@ -9001,7 +9010,8 @@ function connectedLocationStrategy(data, props, contentStyles) {
9001
9010
  transformOrigin: `${placement.origin.side} ${placement.origin.align}`,
9002
9011
  // transform: `translate(${pixelRound(x)}px, ${pixelRound(y)}px)`,
9003
9012
  top: convertToUnit(pixelRound(y)),
9004
- left: convertToUnit(pixelRound(x)),
9013
+ left: data.isRtl.value ? undefined : convertToUnit(pixelRound(x)),
9014
+ right: data.isRtl.value ? convertToUnit(pixelRound(-x)) : undefined,
9005
9015
  minWidth: convertToUnit(axis === 'y' ? Math.min(minWidth.value, targetBox.width) : minWidth.value),
9006
9016
  maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth.value === Infinity ? 0 : minWidth.value, maxWidth.value))),
9007
9017
  maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight.value === Infinity ? 0 : minHeight.value, maxHeight.value)))
@@ -9896,6 +9906,7 @@ const VSelect = genericComponent()({
9896
9906
  })
9897
9907
  },
9898
9908
  emits: {
9909
+ 'update:focused': focused => true,
9899
9910
  'update:modelValue': val => true,
9900
9911
  'update:menu': val => true
9901
9912
  },
@@ -10012,6 +10023,9 @@ const VSelect = genericComponent()({
10012
10023
  menu.value = false;
10013
10024
  }
10014
10025
  }
10026
+ function onFocusin(e) {
10027
+ isFocused.value = true;
10028
+ }
10015
10029
  function onFocusout(e) {
10016
10030
  if (e.relatedTarget == null) {
10017
10031
  vTextFieldRef.value?.focus();
@@ -10066,6 +10080,7 @@ const VSelect = genericComponent()({
10066
10080
  "selected": selected.value,
10067
10081
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
10068
10082
  "onMousedown": e => e.preventDefault(),
10083
+ "onFocusin": onFocusin,
10069
10084
  "onFocusout": onFocusout
10070
10085
  }, {
10071
10086
  default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
@@ -10144,6 +10159,7 @@ const VSelect = genericComponent()({
10144
10159
  });
10145
10160
  });
10146
10161
  return forwardRefs({
10162
+ isFocused,
10147
10163
  menu,
10148
10164
  select
10149
10165
  }, vTextFieldRef);
@@ -10282,6 +10298,7 @@ const VAutocomplete = genericComponent()({
10282
10298
  })
10283
10299
  },
10284
10300
  emits: {
10301
+ 'update:focused': focused => true,
10285
10302
  'update:search': val => true,
10286
10303
  'update:modelValue': val => true,
10287
10304
  'update:menu': val => true
@@ -10305,11 +10322,17 @@ const VAutocomplete = genericComponent()({
10305
10322
  _menu.value = v;
10306
10323
  }
10307
10324
  });
10325
+ const selectionIndex = ref(-1);
10326
+ const color = computed(() => vTextFieldRef.value?.color);
10308
10327
  const {
10309
10328
  items,
10310
10329
  transformIn,
10311
10330
  transformOut
10312
10331
  } = useItems(props);
10332
+ const {
10333
+ textColorClasses,
10334
+ textColorStyles
10335
+ } = useTextColor(color);
10313
10336
  const search = useProxiedModel(props, 'search', '');
10314
10337
  const model = useProxiedModel(props, 'modelValue', [], v => transformIn(wrapInArray(v)), v => {
10315
10338
  const transformed = transformOut(v);
@@ -10332,6 +10355,7 @@ const VAutocomplete = genericComponent()({
10332
10355
  return filteredItems.value;
10333
10356
  });
10334
10357
  const selected = computed(() => selections.value.map(selection => selection.props.value));
10358
+ const selection = computed(() => selections.value[selectionIndex.value]);
10335
10359
  const listRef = ref();
10336
10360
  function onClear(e) {
10337
10361
  if (props.openOnClear) {
@@ -10345,7 +10369,9 @@ const VAutocomplete = genericComponent()({
10345
10369
  }
10346
10370
  function onKeydown(e) {
10347
10371
  if (props.readonly || form?.isReadonly.value) return;
10348
- if (['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
10372
+ const selectionStart = vTextFieldRef.value.selectionStart;
10373
+ const length = selected.value.length;
10374
+ if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
10349
10375
  e.preventDefault();
10350
10376
  }
10351
10377
  if (['Enter', 'ArrowDown'].includes(e.key)) {
@@ -10362,6 +10388,38 @@ const VAutocomplete = genericComponent()({
10362
10388
  } else if (e.key === 'ArrowUp') {
10363
10389
  listRef.value?.focus('prev');
10364
10390
  }
10391
+ if (!props.multiple) return;
10392
+ if (['Backspace', 'Delete'].includes(e.key)) {
10393
+ if (selectionIndex.value < 0) {
10394
+ if (e.key === 'Backspace' && !search.value) {
10395
+ selectionIndex.value = length - 1;
10396
+ }
10397
+ return;
10398
+ }
10399
+ const originalSelectionIndex = selectionIndex.value;
10400
+ if (selection.value) select(selection.value);
10401
+ selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
10402
+ }
10403
+ if (e.key === 'ArrowLeft') {
10404
+ if (selectionIndex.value < 0 && selectionStart > 0) return;
10405
+ const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
10406
+ if (selections.value[prev]) {
10407
+ selectionIndex.value = prev;
10408
+ } else {
10409
+ selectionIndex.value = -1;
10410
+ vTextFieldRef.value.setSelectionRange(search.value?.length, search.value?.length);
10411
+ }
10412
+ }
10413
+ if (e.key === 'ArrowRight') {
10414
+ if (selectionIndex.value < 0) return;
10415
+ const next = selectionIndex.value + 1;
10416
+ if (selections.value[next]) {
10417
+ selectionIndex.value = next;
10418
+ } else {
10419
+ selectionIndex.value = -1;
10420
+ vTextFieldRef.value.setSelectionRange(0, 0);
10421
+ }
10422
+ }
10365
10423
  }
10366
10424
  function onInput(e) {
10367
10425
  search.value = e.target.value;
@@ -10383,7 +10441,6 @@ const VAutocomplete = genericComponent()({
10383
10441
  const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
10384
10442
  if (index === -1) {
10385
10443
  model.value = [...model.value, item];
10386
- search.value = '';
10387
10444
  } else {
10388
10445
  const value = [...model.value];
10389
10446
  value.splice(index, 1);
@@ -10428,12 +10485,15 @@ const VAutocomplete = genericComponent()({
10428
10485
  "onUpdate:modelValue": v => {
10429
10486
  if (v == null) model.value = [];
10430
10487
  },
10488
+ "focused": isFocused.value,
10489
+ "onUpdate:focused": $event => isFocused.value = $event,
10431
10490
  "validationValue": model.externalValue,
10432
10491
  "dirty": isDirty,
10433
10492
  "onInput": onInput,
10434
10493
  "class": ['v-autocomplete', {
10435
10494
  'v-autocomplete--active-menu': menu.value,
10436
10495
  'v-autocomplete--chips': !!props.chips,
10496
+ 'v-autocomplete--selecting-index': selectionIndex.value > -1,
10437
10497
  [`v-autocomplete--${props.multiple ? 'multiple' : 'single'}`]: true,
10438
10498
  'v-autocomplete--selection-slot': !!slots.selection
10439
10499
  }],
@@ -10442,8 +10502,6 @@ const VAutocomplete = genericComponent()({
10442
10502
  "placeholder": isDirty ? undefined : props.placeholder,
10443
10503
  "onClick:clear": onClear,
10444
10504
  "onMousedown:control": onMousedownControl,
10445
- "onFocus": () => isFocused.value = true,
10446
- "onBlur": () => isFocused.value = false,
10447
10505
  "onKeydown": onKeydown
10448
10506
  }), {
10449
10507
  ...slots,
@@ -10508,7 +10566,8 @@ const VAutocomplete = genericComponent()({
10508
10566
  };
10509
10567
  return createVNode("div", {
10510
10568
  "key": item.value,
10511
- "class": "v-autocomplete__selection"
10569
+ "class": ['v-autocomplete__selection', index === selectionIndex.value && ['v-autocomplete__selection--selected', textColorClasses.value]],
10570
+ "style": index === selectionIndex.value ? textColorStyles.value : {}
10512
10571
  }, [hasChips ? !slots.chip ? createVNode(VChip, mergeProps({
10513
10572
  "key": "chip",
10514
10573
  "closable": props.closableChips,
@@ -12903,7 +12962,7 @@ const VSlider = genericComponent()({
12903
12962
  } = useFocus(props);
12904
12963
  const trackStop = computed(() => position(model.value));
12905
12964
  useRender(() => {
12906
- const [inputProps, _] = filterInputProps(props);
12965
+ const [inputProps, _] = VInput.filterProps(props);
12907
12966
  const hasPrepend = !!(props.label || slots.label || slots.prepend);
12908
12967
  return createVNode(VInput, mergeProps({
12909
12968
  "class": ['v-slider', {
@@ -13567,6 +13626,7 @@ const VCombobox = genericComponent()({
13567
13626
  })
13568
13627
  },
13569
13628
  emits: {
13629
+ 'update:focused': focused => true,
13570
13630
  'update:modelValue': val => true,
13571
13631
  'update:search': val => true,
13572
13632
  'update:menu': val => true
@@ -13704,8 +13764,9 @@ const VCombobox = genericComponent()({
13704
13764
  }
13705
13765
  return;
13706
13766
  }
13707
- select(selection.value);
13708
- nextTick(() => !selection.value && (selectionIndex.value = length - 2));
13767
+ const originalSelectionIndex = selectionIndex.value;
13768
+ if (selection.value) select(selection.value);
13769
+ selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
13709
13770
  }
13710
13771
  if (e.key === 'ArrowLeft') {
13711
13772
  if (selectionIndex.value < 0 && selectionStart > 0) return;
@@ -13790,6 +13851,8 @@ const VCombobox = genericComponent()({
13790
13851
  "onUpdate:modelValue": [$event => search.value = $event, v => {
13791
13852
  if (v == null) model.value = [];
13792
13853
  }],
13854
+ "focused": isFocused.value,
13855
+ "onUpdate:focused": $event => isFocused.value = $event,
13793
13856
  "validationValue": model.externalValue,
13794
13857
  "dirty": isDirty,
13795
13858
  "class": ['v-combobox', {
@@ -13803,8 +13866,6 @@ const VCombobox = genericComponent()({
13803
13866
  "placeholder": isDirty ? undefined : props.placeholder,
13804
13867
  "onClick:clear": onClear,
13805
13868
  "onMousedown:control": onMousedownControl,
13806
- "onFocus": () => isFocused.value = true,
13807
- "onBlur": () => isFocused.value = false,
13808
13869
  "onKeydown": onKeydown
13809
13870
  }), {
13810
13871
  ...slots,
@@ -14256,8 +14317,6 @@ const VFileInput = genericComponent()({
14256
14317
  default: '$vuetify.fileInput.counter'
14257
14318
  },
14258
14319
  multiple: Boolean,
14259
- hint: String,
14260
- persistentHint: Boolean,
14261
14320
  showSize: {
14262
14321
  type: [Boolean, Number],
14263
14322
  default: false,
@@ -14282,6 +14341,7 @@ const VFileInput = genericComponent()({
14282
14341
  emits: {
14283
14342
  'click:control': e => true,
14284
14343
  'mousedown:control': e => true,
14344
+ 'update:focused': focused => true,
14285
14345
  'update:modelValue': files => true
14286
14346
  },
14287
14347
  setup(props, _ref) {
@@ -14294,6 +14354,11 @@ const VFileInput = genericComponent()({
14294
14354
  t
14295
14355
  } = useLocale();
14296
14356
  const model = useProxiedModel(props, 'modelValue');
14357
+ const {
14358
+ isFocused,
14359
+ focus,
14360
+ blur
14361
+ } = useFocus(props);
14297
14362
  const base = computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined);
14298
14363
  const totalBytes = computed(() => (model.value ?? []).reduce((bytes, _ref2) => {
14299
14364
  let {
@@ -14315,21 +14380,14 @@ const VFileInput = genericComponent()({
14315
14380
  });
14316
14381
  const vInputRef = ref();
14317
14382
  const vFieldRef = ref();
14318
- const isFocused = ref(false);
14319
14383
  const inputRef = ref();
14320
- const messages = computed(() => {
14321
- return props.messages.length ? props.messages : props.persistentHint ? props.hint : '';
14322
- });
14323
14384
  function onFocus() {
14324
14385
  if (inputRef.value !== document.activeElement) {
14325
14386
  inputRef.value?.focus();
14326
14387
  }
14327
- if (!isFocused.value) {
14328
- isFocused.value = true;
14329
- }
14388
+ if (!isFocused.value) focus();
14330
14389
  }
14331
14390
  function onClickPrepend(e) {
14332
- callEvent(props['onClick:prepend'], e);
14333
14391
  onControlClick(e);
14334
14392
  }
14335
14393
  function onControlMousedown(e) {
@@ -14360,18 +14418,16 @@ const VFileInput = genericComponent()({
14360
14418
  const [{
14361
14419
  modelValue: _,
14362
14420
  ...inputProps
14363
- }] = filterInputProps(props);
14421
+ }] = VInput.filterProps(props);
14364
14422
  const [fieldProps] = filterFieldProps(props);
14365
14423
  return createVNode(VInput, mergeProps({
14366
14424
  "ref": vInputRef,
14367
14425
  "modelValue": model.value,
14368
14426
  "onUpdate:modelValue": $event => model.value = $event,
14369
14427
  "class": "v-file-input",
14370
- "onClick:prepend": onClickPrepend,
14371
- "onClick:append": props['onClick:append']
14428
+ "onClick:prepend": onClickPrepend
14372
14429
  }, rootAttrs, inputProps, {
14373
- "focused": isFocused.value,
14374
- "messages": messages.value
14430
+ "focused": isFocused.value
14375
14431
  }), {
14376
14432
  ...slots,
14377
14433
  default: _ref3 => {
@@ -14423,7 +14479,7 @@ const VFileInput = genericComponent()({
14423
14479
  model.value = [...(target.files ?? [])];
14424
14480
  },
14425
14481
  "onFocus": onFocus,
14426
- "onBlur": () => isFocused.value = false
14482
+ "onBlur": blur
14427
14483
  }, slotProps, inputAttrs), null), createVNode("div", {
14428
14484
  "class": fieldClass
14429
14485
  }, [!!model.value?.length && (slots.selection ? slots.selection({
@@ -16118,7 +16174,7 @@ const VRadioGroup = genericComponent()({
16118
16174
  const model = useProxiedModel(props, 'modelValue');
16119
16175
  useRender(() => {
16120
16176
  const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
16121
- const [inputProps, _1] = filterInputProps(props);
16177
+ const [inputProps, _1] = VInput.filterProps(props);
16122
16178
  const [controlProps, _2] = VSelectionControl.filterProps(props);
16123
16179
  const label = slots.label ? slots.label({
16124
16180
  label: props.label,
@@ -16246,7 +16302,7 @@ const VRangeSlider = genericComponent()({
16246
16302
  const trackStart = computed(() => position(model.value[0]));
16247
16303
  const trackStop = computed(() => position(model.value[1]));
16248
16304
  useRender(() => {
16249
- const [inputProps, _] = filterInputProps(props);
16305
+ const [inputProps, _] = VInput.filterProps(props);
16250
16306
  const hasPrepend = !!(props.label || slots.label || slots.prepend);
16251
16307
  return createVNode(VInput, mergeProps({
16252
16308
  "class": ['v-slider', 'v-range-slider', {
@@ -17120,10 +17176,12 @@ const VSwitch = genericComponent()({
17120
17176
  }
17121
17177
  useRender(() => {
17122
17178
  const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
17123
- const [inputProps, _1] = filterInputProps(props);
17179
+ const [inputProps, _1] = VInput.filterProps(props);
17124
17180
  const [controlProps, _2] = VSelectionControl.filterProps(props);
17125
17181
  const control = ref();
17126
- function onClick() {
17182
+ function onClick(e) {
17183
+ e.stopPropagation();
17184
+ e.preventDefault();
17127
17185
  control.value?.input?.click();
17128
17186
  }
17129
17187
  return createVNode(VInput, mergeProps({
@@ -17485,8 +17543,6 @@ const VTextarea = genericComponent()({
17485
17543
  autofocus: Boolean,
17486
17544
  counter: [Boolean, Number, String],
17487
17545
  counterValue: Function,
17488
- hint: String,
17489
- persistentHint: Boolean,
17490
17546
  prefix: String,
17491
17547
  placeholder: String,
17492
17548
  persistentPlaceholder: Boolean,
@@ -17541,9 +17597,6 @@ const VTextarea = genericComponent()({
17541
17597
  const controlHeight = ref('');
17542
17598
  const textareaRef = ref();
17543
17599
  const isActive = computed(() => isFocused.value || props.persistentPlaceholder);
17544
- const messages = computed(() => {
17545
- return props.messages.length ? props.messages : isFocused.value || props.persistentHint ? props.hint : '';
17546
- });
17547
17600
  function onFocus() {
17548
17601
  if (textareaRef.value !== document.activeElement) {
17549
17602
  textareaRef.value?.focus();
@@ -17615,7 +17668,7 @@ const VTextarea = genericComponent()({
17615
17668
  const [{
17616
17669
  modelValue: _,
17617
17670
  ...inputProps
17618
- }] = filterInputProps(props);
17671
+ }] = VInput.filterProps(props);
17619
17672
  const [fieldProps] = filterFieldProps(props);
17620
17673
  return createVNode(VInput, mergeProps({
17621
17674
  "ref": vInputRef,
@@ -17629,12 +17682,9 @@ const VTextarea = genericComponent()({
17629
17682
  'v-textarea--auto-grow': props.autoGrow,
17630
17683
  'v-textarea--no-resize': props.noResize || props.autoGrow,
17631
17684
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
17632
- }],
17633
- "onClick:prepend": props['onClick:prepend'],
17634
- "onClick:append": props['onClick:append']
17685
+ }]
17635
17686
  }, rootAttrs, inputProps, {
17636
- "focused": isFocused.value,
17637
- "messages": messages.value
17687
+ "focused": isFocused.value
17638
17688
  }), {
17639
17689
  ...slots,
17640
17690
  default: _ref2 => {
@@ -18945,56 +18995,64 @@ const VDataTableRows = genericComponent()({
18945
18995
  const {
18946
18996
  t
18947
18997
  } = useLocale();
18948
- useRender(() => createVNode(Fragment, null, [props.loading ? slots.loading?.() ?? createVNode(VDataTableRow, {
18949
- "class": "v-data-table-rows-no-data",
18950
- "key": "loading"
18951
- }, {
18952
- default: () => [t(props.loadingText)]
18953
- }) : undefined, !props.loading && !props.items.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VDataTableRow, {
18954
- "class": "v-data-table-rows-no-data",
18955
- "key": "no-data"
18956
- }, {
18957
- default: () => [t(props.noDataText)]
18958
- })), props.items.map((item, index) => {
18959
- if (item.type === 'group-header') {
18960
- return slots['group-header'] ? slots['group-header']({
18998
+ useRender(() => {
18999
+ if (props.loading && slots.loading) {
19000
+ return createVNode("tr", {
19001
+ "class": "v-data-table-rows-no-data",
19002
+ "key": "loading"
19003
+ }, [createVNode("td", {
19004
+ "colspan": columns.value.length
19005
+ }, [slots.loading()])]);
19006
+ }
19007
+ if (!props.loading && !props.items.length && !props.hideNoData && slots['no-data']) {
19008
+ return createVNode("tr", {
19009
+ "class": "v-data-table-rows-no-data",
19010
+ "key": "no-data"
19011
+ }, [createVNode("td", {
19012
+ "colspan": columns.value.length
19013
+ }, [slots['no-data']?.() ?? t(props.noDataText)])]);
19014
+ }
19015
+ return createVNode(Fragment, null, [props.items.map((item, index) => {
19016
+ if (item.type === 'group-header') {
19017
+ return slots['group-header'] ? slots['group-header']({
19018
+ index,
19019
+ item,
19020
+ columns: columns.value,
19021
+ isExpanded,
19022
+ toggleExpand,
19023
+ isSelected,
19024
+ toggleSelect,
19025
+ toggleGroup,
19026
+ isGroupOpen
19027
+ }) : createVNode(VDataTableGroupHeaderRow, {
19028
+ "key": `group-header_${item.id}`,
19029
+ "item": item
19030
+ }, slots);
19031
+ }
19032
+ const slotProps = {
18961
19033
  index,
18962
19034
  item,
18963
19035
  columns: columns.value,
18964
19036
  isExpanded,
18965
19037
  toggleExpand,
18966
19038
  isSelected,
18967
- toggleSelect,
18968
- toggleGroup,
18969
- isGroupOpen
18970
- }) : createVNode(VDataTableGroupHeaderRow, {
18971
- "key": `group-header_${item.id}`,
19039
+ toggleSelect
19040
+ };
19041
+ return createVNode(Fragment, null, [slots.item ? slots.item(slotProps) : createVNode(VDataTableRow, {
19042
+ "key": `item_${item.value}`,
19043
+ "onClick": expandOnClick.value || props['onClick:row'] ? event => {
19044
+ if (expandOnClick.value) {
19045
+ toggleExpand(item);
19046
+ }
19047
+ props['onClick:row']?.(event, {
19048
+ item
19049
+ });
19050
+ } : undefined,
19051
+ "index": index,
18972
19052
  "item": item
18973
- }, slots);
18974
- }
18975
- const slotProps = {
18976
- index,
18977
- item,
18978
- columns: columns.value,
18979
- isExpanded,
18980
- toggleExpand,
18981
- isSelected,
18982
- toggleSelect
18983
- };
18984
- return createVNode(Fragment, null, [slots.item ? slots.item(slotProps) : createVNode(VDataTableRow, {
18985
- "key": `item_${item.value}`,
18986
- "onClick": expandOnClick.value || props['onClick:row'] ? event => {
18987
- if (expandOnClick.value) {
18988
- toggleExpand(item);
18989
- }
18990
- props['onClick:row']?.(event, {
18991
- item
18992
- });
18993
- } : undefined,
18994
- "index": index,
18995
- "item": item
18996
- }, slots), isExpanded(item) && slots['expanded-row']?.(slotProps)]);
18997
- })]));
19053
+ }, slots), isExpanded(item) && slots['expanded-row']?.(slotProps)]);
19054
+ })]);
19055
+ });
18998
19056
  return {};
18999
19057
  }
19000
19058
  });
@@ -19269,7 +19327,8 @@ function useOptions(_ref) {
19269
19327
  page: page.value,
19270
19328
  itemsPerPage: itemsPerPage.value,
19271
19329
  sortBy: sortBy.value,
19272
- groupBy: groupBy.value
19330
+ groupBy: groupBy.value,
19331
+ search: search.value
19273
19332
  }));
19274
19333
 
19275
19334
  // Reset page when searching
@@ -19302,12 +19361,12 @@ const makeVDataTableProps = propsFactory({
19302
19361
  width: [String, Number],
19303
19362
  fixedHeader: Boolean,
19304
19363
  fixedFooter: Boolean,
19305
- 'onClick:row': Function
19364
+ 'onClick:row': Function,
19365
+ search: String
19306
19366
  }, 'v-data-table');
19307
19367
  const VDataTable = genericComponent()({
19308
19368
  name: 'VDataTable',
19309
19369
  props: {
19310
- search: String,
19311
19370
  ...makeVDataTableProps(),
19312
19371
  ...makeDataTableExpandProps(),
19313
19372
  ...makeDataTableGroupProps(),
@@ -19522,7 +19581,6 @@ function useVirtual(props, items) {
19522
19581
  const VDataTableVirtual = genericComponent()({
19523
19582
  name: 'VDataTableVirtual',
19524
19583
  props: {
19525
- search: String,
19526
19584
  ...makeVDataTableProps(),
19527
19585
  ...makeVDataTableProps(),
19528
19586
  ...makeDataTableGroupProps(),
@@ -19761,7 +19819,8 @@ const VDataTableServer = genericComponent()({
19761
19819
  page,
19762
19820
  itemsPerPage,
19763
19821
  sortBy,
19764
- groupBy
19822
+ groupBy,
19823
+ search: toRef(props, 'search')
19765
19824
  });
19766
19825
  provide('v-data-table', {
19767
19826
  toggleSort,
@@ -19821,6 +19880,7 @@ const rootTypes = {
19821
19880
  'date-picker': 'list-item, heading, divider, date-picker-options, date-picker-days, actions',
19822
19881
  'date-picker-options': 'text, avatar@2',
19823
19882
  'date-picker-days': 'avatar@28',
19883
+ divider: 'divider',
19824
19884
  heading: 'heading',
19825
19885
  image: 'image',
19826
19886
  'list-item': 'text',
@@ -20462,7 +20522,7 @@ function createVuetify$1() {
20462
20522
  locale
20463
20523
  };
20464
20524
  }
20465
- const version$1 = "3.1.14";
20525
+ const version$1 = "3.1.15";
20466
20526
  createVuetify$1.version = version$1;
20467
20527
 
20468
20528
  // Vue's inject() can only be used in setup
@@ -20474,7 +20534,7 @@ function inject(key) {
20474
20534
  }
20475
20535
  }
20476
20536
 
20477
- const version = "3.1.14";
20537
+ const version = "3.1.15";
20478
20538
 
20479
20539
  const createVuetify = function () {
20480
20540
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};