vuetify 3.1.13 → 3.1.14

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 (92) hide show
  1. package/dist/json/attributes.json +24 -8
  2. package/dist/json/importMap.json +4 -4
  3. package/dist/json/tags.json +5 -1
  4. package/dist/json/web-types.json +83 -47
  5. package/dist/vuetify-labs.css +439 -420
  6. package/dist/vuetify-labs.d.ts +548 -498
  7. package/dist/vuetify-labs.esm.js +92 -50
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +92 -50
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +53 -34
  12. package/dist/vuetify.d.ts +427 -403
  13. package/dist/vuetify.esm.js +74 -33
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +74 -33
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +46 -36
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAutocomplete/VAutocomplete.mjs +5 -2
  21. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  22. package/lib/components/VAutocomplete/index.d.ts +38 -32
  23. package/lib/components/VCheckbox/index.d.ts +14 -14
  24. package/lib/components/VChip/VChip.mjs +2 -2
  25. package/lib/components/VChip/VChip.mjs.map +1 -1
  26. package/lib/components/VChip/index.d.ts +14 -14
  27. package/lib/components/VCombobox/VCombobox.mjs +6 -3
  28. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  29. package/lib/components/VCombobox/index.d.ts +38 -32
  30. package/lib/components/VField/VField.mjs +3 -3
  31. package/lib/components/VField/VField.mjs.map +1 -1
  32. package/lib/components/VField/index.d.ts +20 -20
  33. package/lib/components/VFileInput/VFileInput.mjs +0 -1
  34. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  35. package/lib/components/VFileInput/index.d.ts +50 -56
  36. package/lib/components/VImg/VImg.mjs +3 -3
  37. package/lib/components/VImg/VImg.mjs.map +1 -1
  38. package/lib/components/VImg/index.d.ts +19 -19
  39. package/lib/components/VInput/VInput.mjs +2 -2
  40. package/lib/components/VInput/VInput.mjs.map +1 -1
  41. package/lib/components/VInput/index.d.ts +14 -14
  42. package/lib/components/VList/VList.mjs +2 -1
  43. package/lib/components/VList/VList.mjs.map +1 -1
  44. package/lib/components/VList/VListItem.css +12 -0
  45. package/lib/components/VList/VListItem.mjs +2 -2
  46. package/lib/components/VList/VListItem.mjs.map +1 -1
  47. package/lib/components/VList/VListItem.sass +5 -0
  48. package/lib/components/VList/index.d.ts +14 -14
  49. package/lib/components/VOverlay/useActivator.mjs +1 -0
  50. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  51. package/lib/components/VProgressCircular/VProgressCircular.css +3 -1
  52. package/lib/components/VProgressCircular/VProgressCircular.sass +3 -1
  53. package/lib/components/VProgressCircular/_variables.scss +1 -0
  54. package/lib/components/VProgressLinear/VProgressLinear.css +5 -2
  55. package/lib/components/VProgressLinear/VProgressLinear.sass +3 -0
  56. package/lib/components/VProgressLinear/_variables.scss +1 -1
  57. package/lib/components/VRadioGroup/index.d.ts +14 -14
  58. package/lib/components/VRangeSlider/index.d.ts +14 -14
  59. package/lib/components/VSelect/VSelect.mjs +31 -2
  60. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  61. package/lib/components/VSelect/index.d.ts +38 -32
  62. package/lib/components/VSlider/index.d.ts +14 -14
  63. package/lib/components/VSwitch/index.d.ts +14 -14
  64. package/lib/components/VTextField/VTextField.mjs +2 -2
  65. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  66. package/lib/components/VTextField/index.d.ts +83 -77
  67. package/lib/components/VTextarea/VTextarea.mjs +8 -5
  68. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  69. package/lib/components/VTextarea/index.d.ts +56 -50
  70. package/lib/components/VToolbar/VToolbar.css +2 -0
  71. package/lib/components/VToolbar/VToolbar.sass +2 -0
  72. package/lib/components/index.d.ts +426 -402
  73. package/lib/composables/proxiedModel.mjs +2 -1
  74. package/lib/composables/proxiedModel.mjs.map +1 -1
  75. package/lib/composables/theme.mjs +1 -1
  76. package/lib/composables/theme.mjs.map +1 -1
  77. package/lib/entry-bundler.mjs +1 -1
  78. package/lib/framework.mjs +1 -1
  79. package/lib/index.d.ts +1 -1
  80. package/lib/labs/VDataTable/VDataTable.mjs +4 -4
  81. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  82. package/lib/labs/VDataTable/VDataTableRows.mjs +5 -7
  83. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  84. package/lib/labs/VDataTable/VDataTableServer.mjs +4 -3
  85. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  86. package/lib/labs/VDataTable/VDataTableVirtual.mjs +5 -3
  87. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  88. package/lib/labs/VDataTable/index.d.ts +122 -96
  89. package/lib/labs/components.d.ts +122 -96
  90. package/lib/util/helpers.mjs +1 -1
  91. package/lib/util/helpers.mjs.map +1 -1
  92. package/package.json +3 -3
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.1.13
2
+ * Vuetify v3.1.14
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -343,7 +343,7 @@
343
343
  }
344
344
  const onRE = /^on[^a-z]/;
345
345
  const isOn = key => onRE.test(key);
346
- const EventProp = [Function, Array];
346
+ const EventProp = () => [Function, Array];
347
347
  function hasEvent(props, name) {
348
348
  name = 'on' + vue.capitalize(name);
349
349
  return !!(props[name] || props[`${name}Once`] || props[`${name}Capture`] || props[`${name}OnceCapture`] || props[`${name}CaptureOnce`]);
@@ -1703,7 +1703,7 @@
1703
1703
  if (/^on-[a-z]/.test(key)) {
1704
1704
  createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`]);
1705
1705
  } else {
1706
- createCssClass(bgLines, `.bg-${key}`, [`--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`, `background: rgb(var(--v-theme-${key})) !important`, `color: rgb(var(--v-theme-on-${key})) !important`]);
1706
+ createCssClass(bgLines, `.bg-${key}`, [`--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`, `background-color: rgb(var(--v-theme-${key})) !important`, `color: rgb(var(--v-theme-on-${key})) !important`]);
1707
1707
  createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`]);
1708
1708
  createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`]);
1709
1709
  }
@@ -1841,7 +1841,8 @@
1841
1841
  });
1842
1842
  const model = vue.computed({
1843
1843
  get() {
1844
- return transformIn(isControlled.value ? props[prop] : internal.value);
1844
+ const externalValue = props[prop];
1845
+ return transformIn(isControlled.value ? externalValue : internal.value);
1845
1846
  },
1846
1847
  set(internalValue) {
1847
1848
  const newValue = transformOut(internalValue);
@@ -2715,9 +2716,9 @@
2715
2716
  ...makeTransitionProps()
2716
2717
  },
2717
2718
  emits: {
2718
- loadstart: event => true,
2719
- load: event => true,
2720
- error: event => true
2719
+ loadstart: value => true,
2720
+ load: value => true,
2721
+ error: value => true
2721
2722
  },
2722
2723
  setup(props, _ref) {
2723
2724
  let {
@@ -5342,9 +5343,9 @@
5342
5343
  default: 'filled',
5343
5344
  validator: v => allowedVariants$1.includes(v)
5344
5345
  },
5345
- 'onClick:clear': EventProp,
5346
- 'onClick:appendInner': EventProp,
5347
- 'onClick:prependInner': EventProp,
5346
+ 'onClick:clear': EventProp(),
5347
+ 'onClick:appendInner': EventProp(),
5348
+ 'onClick:prependInner': EventProp(),
5348
5349
  ...makeThemeProps(),
5349
5350
  ...makeLoaderProps()
5350
5351
  }, 'v-field');
@@ -5890,8 +5891,8 @@
5890
5891
  default: 'horizontal',
5891
5892
  validator: v => ['horizontal', 'vertical'].includes(v)
5892
5893
  },
5893
- 'onClick:prepend': EventProp,
5894
- 'onClick:append': EventProp,
5894
+ 'onClick:prepend': EventProp(),
5895
+ 'onClick:append': EventProp(),
5895
5896
  ...makeDensityProps(),
5896
5897
  ...makeValidationProps()
5897
5898
  }, 'v-input');
@@ -6122,6 +6123,7 @@
6122
6123
  type: String,
6123
6124
  default: 'text'
6124
6125
  },
6126
+ modelModifiers: Object,
6125
6127
  ...makeVInputProps(),
6126
6128
  ...makeVFieldProps()
6127
6129
  }, 'v-text-field');
@@ -6196,7 +6198,7 @@
6196
6198
  function onInput(e) {
6197
6199
  const el = e.target;
6198
6200
  model.value = el.value;
6199
- if (['text', 'search', 'password', 'tel', 'url'].includes(props.type)) {
6201
+ if (props.modelModifiers?.trim && ['text', 'search', 'password', 'tel', 'url'].includes(props.type)) {
6200
6202
  const caretPosition = [el.selectionStart, el.selectionEnd];
6201
6203
  vue.nextTick(() => {
6202
6204
  el.selectionStart = caretPosition[0];
@@ -6833,8 +6835,8 @@
6833
6835
  type: Boolean,
6834
6836
  default: true
6835
6837
  },
6836
- onClick: EventProp,
6837
- onClickOnce: EventProp,
6838
+ onClick: EventProp(),
6839
+ onClickOnce: EventProp(),
6838
6840
  ...makeBorderProps(),
6839
6841
  ...makeDensityProps(),
6840
6842
  ...makeElevationProps(),
@@ -7678,8 +7680,8 @@
7678
7680
  subtitle: [String, Number, Boolean],
7679
7681
  title: [String, Number, Boolean],
7680
7682
  value: null,
7681
- onClick: EventProp,
7682
- onClickOnce: EventProp,
7683
+ onClick: EventProp(),
7684
+ onClickOnce: EventProp(),
7683
7685
  ...makeBorderProps(),
7684
7686
  ...makeDensityProps(),
7685
7687
  ...makeDimensionProps(),
@@ -8221,7 +8223,8 @@
8221
8223
  }
8222
8224
  function focus(location) {
8223
8225
  if (!contentRef.value) return;
8224
- const focusable = [...contentRef.value.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')].filter(el => !el.hasAttribute('disabled'));
8226
+ const targets = ['button', '[href]', 'input', 'select', 'textarea', '[tabindex]'].map(s => `${s}:not([tabindex="-1"])`).join(', ');
8227
+ const focusable = [...contentRef.value.querySelectorAll(targets)].filter(el => !el.hasAttribute('disabled'));
8225
8228
  const idx = focusable.indexOf(document.activeElement);
8226
8229
  if (!location) {
8227
8230
  if (!contentRef.value.contains(document.activeElement)) {
@@ -8402,6 +8405,7 @@
8402
8405
  isActive.value = !isActive.value;
8403
8406
  },
8404
8407
  mouseenter: e => {
8408
+ if (e.sourceCapabilities?.firesTouchEvents) return;
8405
8409
  isHovered = true;
8406
8410
  activatorEl.value = e.currentTarget || e.target;
8407
8411
  runOpenDelay();
@@ -9928,6 +9932,9 @@
9928
9932
  });
9929
9933
  });
9930
9934
  const selected = vue.computed(() => selections.value.map(selection => selection.props.value));
9935
+ const isFocused = vue.ref(false);
9936
+ let keyboardLookupPrefix = '';
9937
+ let keyboardLookupLastTime;
9931
9938
  const displayItems = vue.computed(() => {
9932
9939
  if (props.hideSelected) {
9933
9940
  return items.value.filter(item => !selections.value.some(s => s === item));
@@ -9964,6 +9971,26 @@
9964
9971
  } else if (e.key === 'End') {
9965
9972
  listRef.value?.focus('last');
9966
9973
  }
9974
+
9975
+ // html select hotkeys
9976
+ const KEYBOARD_LOOKUP_THRESHOLD = 1000; // milliseconds
9977
+
9978
+ function checkPrintable(e) {
9979
+ const isPrintableChar = e.key.length === 1;
9980
+ const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
9981
+ return isPrintableChar && noModifier;
9982
+ }
9983
+ if (props.multiple || !checkPrintable(e)) return;
9984
+ const now = performance.now();
9985
+ if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {
9986
+ keyboardLookupPrefix = '';
9987
+ }
9988
+ keyboardLookupPrefix += e.key.toLowerCase();
9989
+ keyboardLookupLastTime = now;
9990
+ const item = items.value.find(item => item.title.toLowerCase().startsWith(keyboardLookupPrefix));
9991
+ if (item !== undefined) {
9992
+ model.value = [item];
9993
+ }
9967
9994
  }
9968
9995
  function select(item) {
9969
9996
  if (props.multiple) {
@@ -9993,7 +10020,9 @@
9993
10020
  useRender(() => {
9994
10021
  const hasChips = !!(props.chips || slots.chip);
9995
10022
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
10023
+ const isDirty = model.value.length > 0;
9996
10024
  const [textFieldProps] = VTextField.filterProps(props);
10025
+ const placeholder = isDirty || !isFocused.value && props.label && !props.persistentPlaceholder ? undefined : props.placeholder;
9997
10026
  return vue.createVNode(VTextField, vue.mergeProps({
9998
10027
  "ref": vTextFieldRef
9999
10028
  }, textFieldProps, {
@@ -10001,8 +10030,10 @@
10001
10030
  "onUpdate:modelValue": v => {
10002
10031
  if (v == null) model.value = [];
10003
10032
  },
10033
+ "focused": isFocused.value,
10034
+ "onUpdate:focused": $event => isFocused.value = $event,
10004
10035
  "validationValue": model.externalValue,
10005
- "dirty": model.value.length > 0,
10036
+ "dirty": isDirty,
10006
10037
  "class": ['v-select', {
10007
10038
  'v-select--active-menu': menu.value,
10008
10039
  'v-select--chips': !!props.chips,
@@ -10011,6 +10042,7 @@
10011
10042
  }],
10012
10043
  "appendInnerIcon": props.menuIcon,
10013
10044
  "readonly": true,
10045
+ "placeholder": placeholder,
10014
10046
  "onClick:clear": onClear,
10015
10047
  "onMousedown:control": onMousedownControl,
10016
10048
  "onBlur": onBlur,
@@ -10059,7 +10091,8 @@
10059
10091
  } = _ref2;
10060
10092
  return props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
10061
10093
  "modelValue": isSelected,
10062
- "ripple": false
10094
+ "ripple": false,
10095
+ "tabindex": "-1"
10063
10096
  }, null) : undefined;
10064
10097
  }
10065
10098
  });
@@ -10386,6 +10419,7 @@
10386
10419
  useRender(() => {
10387
10420
  const hasChips = !!(props.chips || slots.chip);
10388
10421
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
10422
+ const isDirty = model.value.length > 0;
10389
10423
  const [textFieldProps] = VTextField.filterProps(props);
10390
10424
  return vue.createVNode(VTextField, vue.mergeProps({
10391
10425
  "ref": vTextFieldRef
@@ -10395,7 +10429,7 @@
10395
10429
  if (v == null) model.value = [];
10396
10430
  },
10397
10431
  "validationValue": model.externalValue,
10398
- "dirty": model.value.length > 0,
10432
+ "dirty": isDirty,
10399
10433
  "onInput": onInput,
10400
10434
  "class": ['v-autocomplete', {
10401
10435
  'v-autocomplete--active-menu': menu.value,
@@ -10405,6 +10439,7 @@
10405
10439
  }],
10406
10440
  "appendInnerIcon": props.menuIcon,
10407
10441
  "readonly": props.readonly,
10442
+ "placeholder": isDirty ? undefined : props.placeholder,
10408
10443
  "onClick:clear": onClear,
10409
10444
  "onMousedown:control": onMousedownControl,
10410
10445
  "onFocus": () => isFocused.value = true,
@@ -10451,7 +10486,8 @@
10451
10486
  } = _ref2;
10452
10487
  return props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
10453
10488
  "modelValue": isSelected,
10454
- "ripple": false
10489
+ "ripple": false,
10490
+ "tabindex": "-1"
10455
10491
  }, null) : undefined;
10456
10492
  },
10457
10493
  title: () => {
@@ -13567,7 +13603,7 @@
13567
13603
  textColorClasses,
13568
13604
  textColorStyles
13569
13605
  } = useTextColor(color);
13570
- const model = useProxiedModel(props, 'modelValue', [], v => transformIn(wrapInArray(v || [])), v => {
13606
+ const model = useProxiedModel(props, 'modelValue', [], v => transformIn(wrapInArray(v)), v => {
13571
13607
  const transformed = transformOut(v);
13572
13608
  return props.multiple ? transformed : transformed[0] ?? null;
13573
13609
  });
@@ -13745,6 +13781,7 @@
13745
13781
  useRender(() => {
13746
13782
  const hasChips = !!(props.chips || slots.chip);
13747
13783
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
13784
+ const isDirty = model.value.length > 0;
13748
13785
  const [textFieldProps] = VTextField.filterProps(props);
13749
13786
  return vue.createVNode(VTextField, vue.mergeProps({
13750
13787
  "ref": vTextFieldRef
@@ -13754,7 +13791,7 @@
13754
13791
  if (v == null) model.value = [];
13755
13792
  }],
13756
13793
  "validationValue": model.externalValue,
13757
- "dirty": model.value.length > 0,
13794
+ "dirty": isDirty,
13758
13795
  "class": ['v-combobox', {
13759
13796
  'v-combobox--active-menu': menu.value,
13760
13797
  'v-combobox--chips': !!props.chips,
@@ -13763,6 +13800,7 @@
13763
13800
  }],
13764
13801
  "appendInnerIcon": props.items.length ? props.menuIcon : undefined,
13765
13802
  "readonly": props.readonly,
13803
+ "placeholder": isDirty ? undefined : props.placeholder,
13766
13804
  "onClick:clear": onClear,
13767
13805
  "onMousedown:control": onMousedownControl,
13768
13806
  "onFocus": () => isFocused.value = true,
@@ -13809,7 +13847,8 @@
13809
13847
  } = _ref2;
13810
13848
  return props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
13811
13849
  "modelValue": isSelected,
13812
- "ripple": false
13850
+ "ripple": false,
13851
+ "tabindex": "-1"
13813
13852
  }, null) : undefined;
13814
13853
  },
13815
13854
  title: () => {
@@ -14219,7 +14258,6 @@
14219
14258
  multiple: Boolean,
14220
14259
  hint: String,
14221
14260
  persistentHint: Boolean,
14222
- placeholder: String,
14223
14261
  showSize: {
14224
14262
  type: [Boolean, Number],
14225
14263
  default: false,
@@ -17464,6 +17502,7 @@
17464
17502
  validator: v => !isNaN(parseFloat(v))
17465
17503
  },
17466
17504
  suffix: String,
17505
+ modelModifiers: Object,
17467
17506
  ...makeVInputProps(),
17468
17507
  ...makeVFieldProps()
17469
17508
  },
@@ -17528,12 +17567,14 @@
17528
17567
  }
17529
17568
  function onInput(e) {
17530
17569
  const el = e.target;
17531
- const caretPosition = [el.selectionStart, el.selectionEnd];
17532
17570
  model.value = el.value;
17533
- vue.nextTick(() => {
17534
- el.selectionStart = caretPosition[0];
17535
- el.selectionEnd = caretPosition[1];
17536
- });
17571
+ if (props.modelModifiers?.trim) {
17572
+ const caretPosition = [el.selectionStart, el.selectionEnd];
17573
+ vue.nextTick(() => {
17574
+ el.selectionStart = caretPosition[0];
17575
+ el.selectionEnd = caretPosition[1];
17576
+ });
17577
+ }
17537
17578
  }
17538
17579
  const sizerRef = vue.ref();
17539
17580
  function calculateInputHeight() {
@@ -18366,7 +18407,7 @@
18366
18407
  locale
18367
18408
  };
18368
18409
  }
18369
- const version$1 = "3.1.13";
18410
+ const version$1 = "3.1.14";
18370
18411
  createVuetify$1.version = version$1;
18371
18412
 
18372
18413
  // Vue's inject() can only be used in setup
@@ -18386,7 +18427,7 @@
18386
18427
  ...options
18387
18428
  });
18388
18429
  };
18389
- const version = "3.1.13";
18430
+ const version = "3.1.14";
18390
18431
  createVuetify.version = version;
18391
18432
 
18392
18433
  exports.components = components;