vuetify 3.3.14 → 3.3.16

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 (113) hide show
  1. package/dist/json/attributes.json +427 -403
  2. package/dist/json/importMap-labs.json +4 -4
  3. package/dist/json/importMap.json +4 -4
  4. package/dist/json/tags.json +1 -0
  5. package/dist/json/web-types.json +1002 -924
  6. package/dist/vuetify-labs.css +159 -134
  7. package/dist/vuetify-labs.d.ts +609 -370
  8. package/dist/vuetify-labs.esm.js +165 -150
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +165 -150
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +129 -105
  13. package/dist/vuetify.d.ts +547 -308
  14. package/dist/vuetify.esm.js +157 -144
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +157 -144
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +234 -234
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/blueprints/index.d.mts +2 -0
  22. package/lib/blueprints/md1.d.mts +2 -0
  23. package/lib/blueprints/md2.d.mts +2 -0
  24. package/lib/blueprints/md3.d.mts +2 -0
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs +16 -26
  26. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  27. package/lib/components/VAutocomplete/index.d.mts +40 -38
  28. package/lib/components/VBtnToggle/VBtnToggle.css +13 -2
  29. package/lib/components/VBtnToggle/VBtnToggle.sass +3 -3
  30. package/lib/components/VBtnToggle/_variables.scss +2 -1
  31. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  32. package/lib/components/VCheckbox/index.d.mts +203 -87
  33. package/lib/components/VColorPicker/VColorPickerCanvas.css +1 -0
  34. package/lib/components/VColorPicker/VColorPickerCanvas.mjs +28 -34
  35. package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
  36. package/lib/components/VColorPicker/VColorPickerCanvas.sass +1 -0
  37. package/lib/components/VCombobox/VCombobox.mjs +15 -25
  38. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  39. package/lib/components/VCombobox/index.d.mts +40 -38
  40. package/lib/components/VField/VField.css +16 -12
  41. package/lib/components/VField/VField.sass +16 -8
  42. package/lib/components/VField/_variables.scss +0 -1
  43. package/lib/components/VIcon/VIcon.css +1 -0
  44. package/lib/components/VIcon/VIcon.sass +1 -0
  45. package/lib/components/VLabel/VLabel.css +1 -0
  46. package/lib/components/VLabel/VLabel.sass +1 -0
  47. package/lib/components/VLabel/_variables.scss +1 -1
  48. package/lib/components/VList/index.d.mts +21 -3
  49. package/lib/components/VOverlay/useActivator.mjs +1 -1
  50. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  51. package/lib/components/VRadio/index.d.mts +82 -23
  52. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  53. package/lib/components/VRadioGroup/index.d.mts +75 -109
  54. package/lib/components/VSelect/VSelect.mjs +9 -23
  55. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  56. package/lib/components/VSelect/index.d.mts +14 -11
  57. package/lib/components/VSelectionControl/VSelectionControl.css +1 -1
  58. package/lib/components/VSelectionControl/VSelectionControl.mjs +17 -2
  59. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  60. package/lib/components/VSelectionControl/VSelectionControl.sass +1 -1
  61. package/lib/components/VSelectionControl/index.d.mts +19 -5
  62. package/lib/components/VSwitch/VSwitch.css +7 -5
  63. package/lib/components/VSwitch/VSwitch.mjs +18 -8
  64. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  65. package/lib/components/VSwitch/VSwitch.sass +6 -4
  66. package/lib/components/VSwitch/_variables.scss +5 -3
  67. package/lib/components/VSwitch/index.d.mts +82 -23
  68. package/lib/components/VTable/VTable.css +3 -0
  69. package/lib/components/VTable/VTable.sass +4 -0
  70. package/lib/components/VTable/_variables.scss +3 -0
  71. package/lib/components/VTabs/VTab.css +1 -0
  72. package/lib/components/VTabs/VTab.mjs +4 -5
  73. package/lib/components/VTabs/VTab.mjs.map +1 -1
  74. package/lib/components/VTabs/VTab.sass +1 -0
  75. package/lib/components/VTabs/_variables.scss +1 -0
  76. package/lib/components/VTextarea/VTextarea.mjs +1 -0
  77. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  78. package/lib/components/index.d.mts +544 -307
  79. package/lib/composables/filter.mjs +4 -4
  80. package/lib/composables/filter.mjs.map +1 -1
  81. package/lib/composables/list-items.mjs +26 -15
  82. package/lib/composables/list-items.mjs.map +1 -1
  83. package/lib/composables/theme.mjs +6 -2
  84. package/lib/composables/theme.mjs.map +1 -1
  85. package/lib/entry-bundler.mjs +1 -1
  86. package/lib/framework.mjs +1 -1
  87. package/lib/index.d.mts +4 -2
  88. package/lib/labs/VBottomSheet/VBottomSheet.css +1 -0
  89. package/lib/labs/VBottomSheet/VBottomSheet.sass +2 -0
  90. package/lib/labs/VBottomSheet/_variables.scss +1 -0
  91. package/lib/labs/VDataIterator/index.d.mts +30 -26
  92. package/lib/labs/VDataTable/index.d.mts +43 -39
  93. package/lib/labs/VDataTable/types.mjs.map +1 -1
  94. package/lib/labs/VDatePicker/VDatePicker.mjs +4 -2
  95. package/lib/labs/VDatePicker/VDatePicker.mjs.map +1 -1
  96. package/lib/labs/VDatePicker/VDatePickerControls.mjs +4 -4
  97. package/lib/labs/VDatePicker/VDatePickerControls.mjs.map +1 -1
  98. package/lib/labs/VDatePicker/VDatePickerYears.css +1 -1
  99. package/lib/labs/VDatePicker/VDatePickerYears.sass +1 -1
  100. package/lib/labs/VDatePicker/index.d.mts +24 -24
  101. package/lib/labs/VDateRangePicker/index.d.mts +8 -8
  102. package/lib/labs/components.d.mts +80 -76
  103. package/lib/labs/date/DateAdapter.mjs.map +1 -1
  104. package/lib/labs/date/adapters/vuetify.d.mts +4 -0
  105. package/lib/labs/date/adapters/vuetify.mjs +13 -0
  106. package/lib/labs/date/adapters/vuetify.mjs.map +1 -1
  107. package/lib/labs/date/index.d.mts +4 -0
  108. package/lib/locale/bg.mjs +23 -23
  109. package/lib/locale/bg.mjs.map +1 -1
  110. package/lib/locale/fa.mjs +16 -16
  111. package/lib/locale/fa.mjs.map +1 -1
  112. package/lib/styles/tools/_states.sass +5 -5
  113. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.3.14
2
+ * Vuetify v3.3.16
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -2115,6 +2115,7 @@ const defaultThemeOptions = {
2115
2115
  colors: {
2116
2116
  background: '#FFFFFF',
2117
2117
  surface: '#FFFFFF',
2118
+ 'surface-bright': '#FFFFFF',
2118
2119
  'surface-variant': '#424242',
2119
2120
  'on-surface-variant': '#EEEEEE',
2120
2121
  primary: '#6200EE',
@@ -2150,7 +2151,8 @@ const defaultThemeOptions = {
2150
2151
  colors: {
2151
2152
  background: '#121212',
2152
2153
  surface: '#212121',
2153
- 'surface-variant': '#BDBDBD',
2154
+ 'surface-bright': '#ccbfd6',
2155
+ 'surface-variant': '#a3a3a3',
2154
2156
  'on-surface-variant': '#424242',
2155
2157
  primary: '#BB86FC',
2156
2158
  'primary-darken-1': '#3700B3',
@@ -2341,12 +2343,14 @@ function provideTheme(props) {
2341
2343
  const theme = inject$1(ThemeSymbol, null);
2342
2344
  if (!theme) throw new Error('Could not find Vuetify theme injection');
2343
2345
  const name = computed(() => {
2344
- return props.theme ?? theme?.name.value;
2346
+ return props.theme ?? theme.name.value;
2345
2347
  });
2348
+ const current = computed(() => theme.themes.value[name.value]);
2346
2349
  const themeClasses = computed(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
2347
2350
  const newTheme = {
2348
2351
  ...theme,
2349
2352
  name,
2353
+ current,
2350
2354
  themeClasses
2351
2355
  };
2352
2356
  provide(ThemeSymbol, newTheme);
@@ -5803,6 +5807,12 @@ function useSelectionControl(props) {
5803
5807
  } = useTextColor(computed(() => {
5804
5808
  return model.value && !props.error && !props.disabled ? props.color : undefined;
5805
5809
  }));
5810
+ const {
5811
+ backgroundColorClasses,
5812
+ backgroundColorStyles
5813
+ } = useBackgroundColor(computed(() => {
5814
+ return model.value && !props.error && !props.disabled ? props.color : undefined;
5815
+ }));
5806
5816
  const icon = computed(() => model.value ? props.trueIcon : props.falseIcon);
5807
5817
  return {
5808
5818
  group,
@@ -5812,6 +5822,8 @@ function useSelectionControl(props) {
5812
5822
  model,
5813
5823
  textColorClasses,
5814
5824
  textColorStyles,
5825
+ backgroundColorClasses,
5826
+ backgroundColorStyles,
5815
5827
  icon
5816
5828
  };
5817
5829
  }
@@ -5837,6 +5849,8 @@ const VSelectionControl = genericComponent()({
5837
5849
  model,
5838
5850
  textColorClasses,
5839
5851
  textColorStyles,
5852
+ backgroundColorClasses,
5853
+ backgroundColorStyles,
5840
5854
  trueValue
5841
5855
  } = useSelectionControl(props);
5842
5856
  const uid = getUid();
@@ -5901,12 +5915,17 @@ const VSelectionControl = genericComponent()({
5901
5915
  }), [createVNode("div", {
5902
5916
  "class": ['v-selection-control__wrapper', textColorClasses.value],
5903
5917
  "style": textColorStyles.value
5904
- }, [slots.default?.(), withDirectives(createVNode("div", {
5918
+ }, [slots.default?.({
5919
+ backgroundColorClasses,
5920
+ backgroundColorStyles
5921
+ }), withDirectives(createVNode("div", {
5905
5922
  "class": ['v-selection-control__input']
5906
5923
  }, [slots.input?.({
5907
5924
  model,
5908
5925
  textColorClasses,
5909
5926
  textColorStyles,
5927
+ backgroundColorClasses,
5928
+ backgroundColorStyles,
5910
5929
  inputNode,
5911
5930
  icon: icon.value,
5912
5931
  props: {
@@ -7962,11 +7981,15 @@ const makeItemsProps = propsFactory({
7962
7981
  type: [Boolean, String, Array, Function],
7963
7982
  default: 'props'
7964
7983
  },
7965
- returnObject: Boolean
7984
+ returnObject: Boolean,
7985
+ valueComparator: {
7986
+ type: Function,
7987
+ default: deepEqual
7988
+ }
7966
7989
  }, 'list-items');
7967
7990
  function transformItem$3(props, item) {
7968
7991
  const title = getPropertyFromItem(item, props.itemTitle, item);
7969
- const value = props.returnObject ? item : getPropertyFromItem(item, props.itemValue, title);
7992
+ const value = getPropertyFromItem(item, props.itemValue, title);
7970
7993
  const children = getPropertyFromItem(item, props.itemChildren);
7971
7994
  const itemProps = props.itemProps === true ? typeof item === 'object' && item != null && !Array.isArray(item) ? 'children' in item ? pick(item, ['children'])[1] : item : undefined : getPropertyFromItem(item, props.itemProps);
7972
7995
  const _props = {
@@ -7991,25 +8014,32 @@ function transformItems$3(props, items) {
7991
8014
  }
7992
8015
  function useItems(props) {
7993
8016
  const items = computed(() => transformItems$3(props, props.items));
7994
- return useTransformItems(items, value => transformItem$3(props, value));
7995
- }
7996
- function useTransformItems(items, transform) {
8017
+ const hasNullItem = computed(() => items.value.some(item => item.value === null));
7997
8018
  function transformIn(value) {
7998
- return value
7999
- // When the model value is null, returns an InternalItem based on null
8000
- // only if null is one of the items
8001
- .filter(v => v !== null || items.value.some(item => item.value === null)).map(v => {
8002
- const existingItem = items.value.find(item => deepEqual(v, item.value));
8003
- // Nullish existingItem means value is a custom input value from combobox
8004
- // In this case, use transformItem to create an InternalItem based on value
8005
- return existingItem ?? transform(v);
8019
+ if (!hasNullItem.value) {
8020
+ // When the model value is null, return an InternalItem
8021
+ // based on null only if null is one of the items
8022
+ value = value.filter(v => v !== null);
8023
+ }
8024
+ return value.map(v => {
8025
+ if (props.returnObject && typeof v === 'string') {
8026
+ // String model value means value is a custom input value from combobox
8027
+ // Don't look up existing items if the model value is a string
8028
+ return transformItem$3(props, v);
8029
+ }
8030
+ return items.value.find(item => props.valueComparator(v, item.value)) || transformItem$3(props, v);
8006
8031
  });
8007
8032
  }
8008
8033
  function transformOut(value) {
8009
- return value.map(_ref => {
8034
+ return props.returnObject ? value.map(_ref => {
8010
8035
  let {
8011
- value
8036
+ raw
8012
8037
  } = _ref;
8038
+ return raw;
8039
+ }) : value.map(_ref2 => {
8040
+ let {
8041
+ value
8042
+ } = _ref2;
8013
8043
  return value;
8014
8044
  });
8015
8045
  }
@@ -9117,7 +9147,7 @@ function _useActivator(props, vm, _ref2) {
9117
9147
  if (selector) {
9118
9148
  if (selector === 'parent') {
9119
9149
  let el = vm?.proxy?.$el?.parentNode;
9120
- while (el.hasAttribute('data-no-activator')) {
9150
+ while (el?.hasAttribute('data-no-activator')) {
9121
9151
  el = el.parentNode;
9122
9152
  }
9123
9153
  activator = el;
@@ -10840,10 +10870,6 @@ const makeSelectProps = propsFactory({
10840
10870
  default: '$vuetify.noDataText'
10841
10871
  },
10842
10872
  openOnClear: Boolean,
10843
- valueComparator: {
10844
- type: Function,
10845
- default: deepEqual
10846
- },
10847
10873
  itemColor: String,
10848
10874
  ...makeItemsProps({
10849
10875
  itemChildren: false
@@ -10897,24 +10923,14 @@ const VSelect = genericComponent()({
10897
10923
  return props.multiple ? transformed : transformed[0] ?? null;
10898
10924
  });
10899
10925
  const form = useForm();
10900
- const selections = computed(() => {
10901
- return model.value.map(v => {
10902
- return items.value.find(item => {
10903
- const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
10904
- const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
10905
- if (itemRawValue === undefined || modelRawValue === undefined) return false;
10906
- return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
10907
- }) || v;
10908
- });
10909
- });
10910
- const selected = computed(() => selections.value.map(selection => selection.props.value));
10926
+ const selectedValues = computed(() => model.value.map(selection => selection.value));
10911
10927
  const isFocused = shallowRef(false);
10912
10928
  const label = computed(() => menu.value ? props.closeText : props.openText);
10913
10929
  let keyboardLookupPrefix = '';
10914
10930
  let keyboardLookupLastTime;
10915
10931
  const displayItems = computed(() => {
10916
10932
  if (props.hideSelected) {
10917
- return items.value.filter(item => !selections.value.some(s => s === item));
10933
+ return items.value.filter(item => !model.value.some(s => s === item));
10918
10934
  }
10919
10935
  return items.value;
10920
10936
  });
@@ -10972,7 +10988,7 @@ const VSelect = genericComponent()({
10972
10988
  }
10973
10989
  function select(item) {
10974
10990
  if (props.multiple) {
10975
- const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
10991
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
10976
10992
  if (index === -1) {
10977
10993
  model.value = [...model.value, item];
10978
10994
  } else {
@@ -11009,8 +11025,8 @@ const VSelect = genericComponent()({
11009
11025
  }
11010
11026
  }
11011
11027
  watch(menu, () => {
11012
- if (!props.hideSelected && menu.value && selections.value.length) {
11013
- const index = displayItems.value.findIndex(item => selections.value.some(s => item.value === s.value));
11028
+ if (!props.hideSelected && menu.value && model.value.length) {
11029
+ const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
11014
11030
  IN_BROWSER && window.requestAnimationFrame(() => {
11015
11031
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
11016
11032
  });
@@ -11065,7 +11081,7 @@ const VSelect = genericComponent()({
11065
11081
  }, props.menuProps), {
11066
11082
  default: () => [hasList && createVNode(VList, {
11067
11083
  "ref": listRef,
11068
- "selected": selected.value,
11084
+ "selected": selectedValues.value,
11069
11085
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
11070
11086
  "onMousedown": e => e.preventDefault(),
11071
11087
  "onKeydown": onListKeydown,
@@ -11114,7 +11130,7 @@ const VSelect = genericComponent()({
11114
11130
  }
11115
11131
  }), slots['append-item']?.()]
11116
11132
  })]
11117
- }), selections.value.map((item, index) => {
11133
+ }), model.value.map((item, index) => {
11118
11134
  function onChipClose(e) {
11119
11135
  e.stopPropagation();
11120
11136
  e.preventDefault();
@@ -11157,7 +11173,7 @@ const VSelect = genericComponent()({
11157
11173
  index
11158
11174
  }) ?? createVNode("span", {
11159
11175
  "class": "v-select__selection-text"
11160
- }, [item.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
11176
+ }, [item.title, props.multiple && index < model.value.length - 1 && createVNode("span", {
11161
11177
  "class": "v-select__selection-comma"
11162
11178
  }, [createTextVNode(",")])])]);
11163
11179
  })]),
@@ -11209,15 +11225,15 @@ function filterItems(items, query, options) {
11209
11225
  const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length;
11210
11226
  if (!items?.length) return array;
11211
11227
  loop: for (let i = 0; i < items.length; i++) {
11212
- const item = items[i];
11228
+ const [item, transformed = item] = wrapInArray(items[i]);
11213
11229
  const customMatches = {};
11214
11230
  const defaultMatches = {};
11215
11231
  let match = -1;
11216
11232
  if (query && !options?.noFilter) {
11217
11233
  if (typeof item === 'object') {
11218
- const filterKeys = keys || Object.keys(item);
11234
+ const filterKeys = keys || Object.keys(transformed);
11219
11235
  for (const key of filterKeys) {
11220
- const value = getPropertyFromItem(item, key, item);
11236
+ const value = getPropertyFromItem(transformed, key, transformed);
11221
11237
  const keyFilter = options?.customKeyFilter?.[key];
11222
11238
  match = keyFilter ? keyFilter(value, query, item) : filter(value, query, item);
11223
11239
  if (match !== -1 && match !== false) {
@@ -11251,7 +11267,7 @@ function filterItems(items, query, options) {
11251
11267
  function useFilter(props, items, query, options) {
11252
11268
  const filteredItems = ref([]);
11253
11269
  const filteredMatches = ref(new Map());
11254
- const transformedItems = computed(() => options?.transform ? unref(items).map(options?.transform) : unref(items));
11270
+ const transformedItems = computed(() => options?.transform ? unref(items).map(item => [item, options.transform(item)]) : unref(items));
11255
11271
  watchEffect(() => {
11256
11272
  const _query = typeof query === 'function' ? query() : unref(query);
11257
11273
  const strQuery = typeof _query !== 'string' && typeof _query !== 'number' ? '' : String(_query);
@@ -11369,24 +11385,13 @@ const VAutocomplete = genericComponent()({
11369
11385
  filteredItems,
11370
11386
  getMatches
11371
11387
  } = useFilter(props, items, () => isPristine.value ? '' : search.value);
11372
- const selections = computed(() => {
11373
- return model.value.map(v => {
11374
- return items.value.find(item => {
11375
- const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
11376
- const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
11377
- if (itemRawValue === undefined || modelRawValue === undefined) return false;
11378
- return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
11379
- }) || v;
11380
- });
11381
- });
11382
11388
  const displayItems = computed(() => {
11383
11389
  if (props.hideSelected) {
11384
- return filteredItems.value.filter(filteredItem => !selections.value.some(s => s.value === filteredItem.value));
11390
+ return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
11385
11391
  }
11386
11392
  return filteredItems.value;
11387
11393
  });
11388
- const selected = computed(() => selections.value.map(selection => selection.props.value));
11389
- const selection = computed(() => selections.value[selectionIndex.value]);
11394
+ const selectedValues = computed(() => model.value.map(selection => selection.props.value));
11390
11395
  const highlightFirst = computed(() => {
11391
11396
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
11392
11397
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
@@ -11418,7 +11423,7 @@ const VAutocomplete = genericComponent()({
11418
11423
  function onKeydown(e) {
11419
11424
  if (props.readonly || form?.isReadonly.value) return;
11420
11425
  const selectionStart = vTextFieldRef.value.selectionStart;
11421
- const length = selected.value.length;
11426
+ const length = model.value.length;
11422
11427
  if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
11423
11428
  e.preventDefault();
11424
11429
  }
@@ -11443,13 +11448,14 @@ const VAutocomplete = genericComponent()({
11443
11448
  return;
11444
11449
  }
11445
11450
  const originalSelectionIndex = selectionIndex.value;
11446
- if (selection.value) select(selection.value);
11451
+ const selectedItem = model.value[selectionIndex.value];
11452
+ if (selectedItem) select(selectedItem);
11447
11453
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
11448
11454
  }
11449
11455
  if (e.key === 'ArrowLeft') {
11450
11456
  if (selectionIndex.value < 0 && selectionStart > 0) return;
11451
11457
  const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
11452
- if (selections.value[prev]) {
11458
+ if (model.value[prev]) {
11453
11459
  selectionIndex.value = prev;
11454
11460
  } else {
11455
11461
  selectionIndex.value = -1;
@@ -11459,7 +11465,7 @@ const VAutocomplete = genericComponent()({
11459
11465
  if (e.key === 'ArrowRight') {
11460
11466
  if (selectionIndex.value < 0) return;
11461
11467
  const next = selectionIndex.value + 1;
11462
- if (selections.value[next]) {
11468
+ if (model.value[next]) {
11463
11469
  selectionIndex.value = next;
11464
11470
  } else {
11465
11471
  selectionIndex.value = -1;
@@ -11499,7 +11505,7 @@ const VAutocomplete = genericComponent()({
11499
11505
  const isSelecting = shallowRef(false);
11500
11506
  function select(item) {
11501
11507
  if (props.multiple) {
11502
- const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
11508
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
11503
11509
  if (index === -1) {
11504
11510
  model.value = [...model.value, item];
11505
11511
  } else {
@@ -11520,11 +11526,11 @@ const VAutocomplete = genericComponent()({
11520
11526
  if (val === oldVal) return;
11521
11527
  if (val) {
11522
11528
  isSelecting.value = true;
11523
- search.value = props.multiple ? '' : String(selections.value.at(-1)?.props.title ?? '');
11529
+ search.value = props.multiple ? '' : String(model.value.at(-1)?.props.title ?? '');
11524
11530
  isPristine.value = true;
11525
11531
  nextTick(() => isSelecting.value = false);
11526
11532
  } else {
11527
- if (!props.multiple && !search.value) model.value = [];else if (highlightFirst.value && !listHasFocus.value && !selections.value.some(_ref2 => {
11533
+ if (!props.multiple && !search.value) model.value = [];else if (highlightFirst.value && !listHasFocus.value && !model.value.some(_ref2 => {
11528
11534
  let {
11529
11535
  value
11530
11536
  } = _ref2;
@@ -11543,8 +11549,8 @@ const VAutocomplete = genericComponent()({
11543
11549
  isPristine.value = !val;
11544
11550
  });
11545
11551
  watch(menu, () => {
11546
- if (!props.hideSelected && menu.value && selections.value.length) {
11547
- const index = displayItems.value.findIndex(item => selections.value.some(s => item.value === s.value));
11552
+ if (!props.hideSelected && menu.value && model.value.length) {
11553
+ const index = displayItems.value.findIndex(item => model.value.some(s => item.value === s.value));
11548
11554
  IN_BROWSER && window.requestAnimationFrame(() => {
11549
11555
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
11550
11556
  });
@@ -11596,7 +11602,7 @@ const VAutocomplete = genericComponent()({
11596
11602
  }, props.menuProps), {
11597
11603
  default: () => [hasList && createVNode(VList, {
11598
11604
  "ref": listRef,
11599
- "selected": selected.value,
11605
+ "selected": selectedValues.value,
11600
11606
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
11601
11607
  "onMousedown": e => e.preventDefault(),
11602
11608
  "onKeydown": onListKeydown,
@@ -11650,7 +11656,7 @@ const VAutocomplete = genericComponent()({
11650
11656
  }
11651
11657
  }), slots['append-item']?.()]
11652
11658
  })]
11653
- }), selections.value.map((item, index) => {
11659
+ }), model.value.map((item, index) => {
11654
11660
  function onChipClose(e) {
11655
11661
  e.stopPropagation();
11656
11662
  e.preventDefault();
@@ -11694,7 +11700,7 @@ const VAutocomplete = genericComponent()({
11694
11700
  index
11695
11701
  }) ?? createVNode("span", {
11696
11702
  "class": "v-autocomplete__selection-text"
11697
- }, [item.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
11703
+ }, [item.title, props.multiple && index < model.value.length - 1 && createVNode("span", {
11698
11704
  "class": "v-autocomplete__selection-comma"
11699
11705
  }, [createTextVNode(",")])])]);
11700
11706
  })]),
@@ -13092,11 +13098,29 @@ const VColorPickerCanvas = defineComponent({
13092
13098
  emit
13093
13099
  } = _ref;
13094
13100
  const isInteracting = shallowRef(false);
13095
- const isOutsideUpdate = shallowRef(false);
13096
- const dotPosition = ref({
13101
+ const canvasRef = ref();
13102
+ const canvasWidth = shallowRef(parseFloat(props.width));
13103
+ const canvasHeight = shallowRef(parseFloat(props.height));
13104
+ const _dotPosition = ref({
13097
13105
  x: 0,
13098
13106
  y: 0
13099
13107
  });
13108
+ const dotPosition = computed({
13109
+ get: () => _dotPosition.value,
13110
+ set(val) {
13111
+ if (!canvasRef.value) return;
13112
+ const {
13113
+ x,
13114
+ y
13115
+ } = val;
13116
+ emit('update:color', {
13117
+ h: props.color?.h ?? 0,
13118
+ s: clamp(x, 0, canvasWidth.value) / canvasWidth.value,
13119
+ v: 1 - clamp(y, 0, canvasHeight.value) / canvasHeight.value,
13120
+ a: props.color?.a ?? 1
13121
+ });
13122
+ }
13123
+ });
13100
13124
  const dotStyles = computed(() => {
13101
13125
  const {
13102
13126
  x,
@@ -13109,9 +13133,6 @@ const VColorPickerCanvas = defineComponent({
13109
13133
  transform: `translate(${convertToUnit(x - radius)}, ${convertToUnit(y - radius)})`
13110
13134
  };
13111
13135
  });
13112
- const canvasRef = ref();
13113
- const canvasWidth = shallowRef(parseFloat(props.width));
13114
- const canvasHeight = shallowRef(parseFloat(props.height));
13115
13136
  const {
13116
13137
  resizeRef
13117
13138
  } = useResizeObserver(entries => {
@@ -13135,15 +13156,13 @@ const VColorPickerCanvas = defineComponent({
13135
13156
  y: clamp(y - top, 0, height)
13136
13157
  };
13137
13158
  }
13138
- function handleClick(e) {
13139
- if (props.disabled || !canvasRef.value) return;
13140
- updateDotPosition(e.clientX, e.clientY, canvasRef.value.getBoundingClientRect());
13141
- }
13142
13159
  function handleMouseDown(e) {
13143
- // To prevent selection while moving cursor
13144
- e.preventDefault();
13160
+ if (e.type === 'mousedown') {
13161
+ // Prevent text selection while dragging
13162
+ e.preventDefault();
13163
+ }
13145
13164
  if (props.disabled) return;
13146
- isInteracting.value = true;
13165
+ handleMouseMove(e);
13147
13166
  window.addEventListener('mousemove', handleMouseMove);
13148
13167
  window.addEventListener('mouseup', handleMouseUp);
13149
13168
  window.addEventListener('touchmove', handleMouseMove);
@@ -13161,23 +13180,6 @@ const VColorPickerCanvas = defineComponent({
13161
13180
  window.removeEventListener('touchmove', handleMouseMove);
13162
13181
  window.removeEventListener('touchend', handleMouseUp);
13163
13182
  }
13164
- watch(dotPosition, () => {
13165
- if (isOutsideUpdate.value) {
13166
- isOutsideUpdate.value = false;
13167
- return;
13168
- }
13169
- if (!canvasRef.value) return;
13170
- const {
13171
- x,
13172
- y
13173
- } = dotPosition.value;
13174
- emit('update:color', {
13175
- h: props.color?.h ?? 0,
13176
- s: clamp(x, 0, canvasWidth.value) / canvasWidth.value,
13177
- v: 1 - clamp(y, 0, canvasHeight.value) / canvasHeight.value,
13178
- a: props.color?.a ?? 1
13179
- });
13180
- });
13181
13183
  function updateCanvas() {
13182
13184
  if (!canvasRef.value) return;
13183
13185
  const canvas = canvasRef.value;
@@ -13199,7 +13201,7 @@ const VColorPickerCanvas = defineComponent({
13199
13201
  });
13200
13202
  watch(() => [canvasWidth.value, canvasHeight.value], (newVal, oldVal) => {
13201
13203
  updateCanvas();
13202
- dotPosition.value = {
13204
+ _dotPosition.value = {
13203
13205
  x: dotPosition.value.x * newVal[0] / oldVal[0],
13204
13206
  y: dotPosition.value.y * newVal[1] / oldVal[1]
13205
13207
  };
@@ -13211,8 +13213,7 @@ const VColorPickerCanvas = defineComponent({
13211
13213
  isInteracting.value = false;
13212
13214
  return;
13213
13215
  }
13214
- isOutsideUpdate.value = true;
13215
- dotPosition.value = props.color ? {
13216
+ _dotPosition.value = props.color ? {
13216
13217
  x: props.color.s * canvasWidth.value,
13217
13218
  y: (1 - props.color.v) * canvasHeight.value
13218
13219
  } : {
@@ -13228,9 +13229,8 @@ const VColorPickerCanvas = defineComponent({
13228
13229
  "ref": resizeRef,
13229
13230
  "class": ['v-color-picker-canvas', props.class],
13230
13231
  "style": props.style,
13231
- "onClick": handleClick,
13232
13232
  "onMousedown": handleMouseDown,
13233
- "onTouchstart": handleMouseDown
13233
+ "onTouchstartPassive": handleMouseDown
13234
13234
  }, [createVNode("canvas", {
13235
13235
  "ref": canvasRef,
13236
13236
  "width": canvasWidth.value,
@@ -14951,24 +14951,13 @@ const VCombobox = genericComponent()({
14951
14951
  filteredItems,
14952
14952
  getMatches
14953
14953
  } = useFilter(props, items, () => isPristine.value ? '' : search.value);
14954
- const selections = computed(() => {
14955
- return model.value.map(v => {
14956
- return items.value.find(item => {
14957
- const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
14958
- const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
14959
- if (itemRawValue === undefined || modelRawValue === undefined) return false;
14960
- return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
14961
- }) || v;
14962
- });
14963
- });
14964
14954
  const displayItems = computed(() => {
14965
14955
  if (props.hideSelected) {
14966
- return filteredItems.value.filter(filteredItem => !selections.value.some(s => s.value === filteredItem.value));
14956
+ return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
14967
14957
  }
14968
14958
  return filteredItems.value;
14969
14959
  });
14970
- const selected = computed(() => selections.value.map(selection => selection.props.value));
14971
- const selection = computed(() => selections.value[selectionIndex.value]);
14960
+ const selectedValues = computed(() => model.value.map(selection => selection.value));
14972
14961
  const highlightFirst = computed(() => {
14973
14962
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
14974
14963
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
@@ -15000,7 +14989,7 @@ const VCombobox = genericComponent()({
15000
14989
  function onKeydown(e) {
15001
14990
  if (props.readonly || form?.isReadonly.value) return;
15002
14991
  const selectionStart = vTextFieldRef.value.selectionStart;
15003
- const length = selected.value.length;
14992
+ const length = model.value.length;
15004
14993
  if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
15005
14994
  e.preventDefault();
15006
14995
  }
@@ -15028,13 +15017,14 @@ const VCombobox = genericComponent()({
15028
15017
  return;
15029
15018
  }
15030
15019
  const originalSelectionIndex = selectionIndex.value;
15031
- if (selection.value) select(selection.value);
15020
+ const selectedItem = model.value[selectionIndex.value];
15021
+ if (selectedItem) select(selectedItem);
15032
15022
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
15033
15023
  }
15034
15024
  if (e.key === 'ArrowLeft') {
15035
15025
  if (selectionIndex.value < 0 && selectionStart > 0) return;
15036
15026
  const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
15037
- if (selections.value[prev]) {
15027
+ if (model.value[prev]) {
15038
15028
  selectionIndex.value = prev;
15039
15029
  } else {
15040
15030
  selectionIndex.value = -1;
@@ -15044,7 +15034,7 @@ const VCombobox = genericComponent()({
15044
15034
  if (e.key === 'ArrowRight') {
15045
15035
  if (selectionIndex.value < 0) return;
15046
15036
  const next = selectionIndex.value + 1;
15047
- if (selections.value[next]) {
15037
+ if (model.value[next]) {
15048
15038
  selectionIndex.value = next;
15049
15039
  } else {
15050
15040
  selectionIndex.value = -1;
@@ -15064,7 +15054,7 @@ const VCombobox = genericComponent()({
15064
15054
  }
15065
15055
  function select(item) {
15066
15056
  if (props.multiple) {
15067
- const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
15057
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
15068
15058
  if (index === -1) {
15069
15059
  model.value = [...model.value, item];
15070
15060
  } else {
@@ -15103,7 +15093,7 @@ const VCombobox = genericComponent()({
15103
15093
  if (val || val === oldVal) return;
15104
15094
  selectionIndex.value = -1;
15105
15095
  menu.value = false;
15106
- if (highlightFirst.value && !listHasFocus.value && !selections.value.some(_ref2 => {
15096
+ if (highlightFirst.value && !listHasFocus.value && !model.value.some(_ref2 => {
15107
15097
  let {
15108
15098
  value
15109
15099
  } = _ref2;
@@ -15116,8 +15106,8 @@ const VCombobox = genericComponent()({
15116
15106
  }
15117
15107
  });
15118
15108
  watch(menu, () => {
15119
- if (!props.hideSelected && menu.value && selections.value.length) {
15120
- const index = displayItems.value.findIndex(item => selections.value.some(s => item.value === s.value));
15109
+ if (!props.hideSelected && menu.value && model.value.length) {
15110
+ const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
15121
15111
  IN_BROWSER && window.requestAnimationFrame(() => {
15122
15112
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
15123
15113
  });
@@ -15168,7 +15158,7 @@ const VCombobox = genericComponent()({
15168
15158
  }, props.menuProps), {
15169
15159
  default: () => [hasList && createVNode(VList, {
15170
15160
  "ref": listRef,
15171
- "selected": selected.value,
15161
+ "selected": selectedValues.value,
15172
15162
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
15173
15163
  "onMousedown": e => e.preventDefault(),
15174
15164
  "onKeydown": onListKeydown,
@@ -15222,7 +15212,7 @@ const VCombobox = genericComponent()({
15222
15212
  }
15223
15213
  }), slots['append-item']?.()]
15224
15214
  })]
15225
- }), selections.value.map((item, index) => {
15215
+ }), model.value.map((item, index) => {
15226
15216
  function onChipClose(e) {
15227
15217
  e.stopPropagation();
15228
15218
  e.preventDefault();
@@ -15266,7 +15256,7 @@ const VCombobox = genericComponent()({
15266
15256
  index
15267
15257
  }) ?? createVNode("span", {
15268
15258
  "class": "v-combobox__selection-text"
15269
- }, [item.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
15259
+ }, [item.title, props.multiple && index < model.value.length - 1 && createVNode("span", {
15270
15260
  "class": "v-combobox__selection-comma"
15271
15261
  }, [createTextVNode(",")])])]);
15272
15262
  })]),
@@ -18617,19 +18607,29 @@ const VSwitch = genericComponent()({
18617
18607
  "onBlur": blur
18618
18608
  }, controlAttrs), {
18619
18609
  ...slots,
18620
- default: () => createVNode("div", {
18621
- "class": "v-switch__track",
18622
- "onClick": onTrackClick
18623
- }, null),
18624
- input: _ref3 => {
18610
+ default: _ref3 => {
18625
18611
  let {
18626
- inputNode,
18627
- icon
18612
+ backgroundColorClasses,
18613
+ backgroundColorStyles
18628
18614
  } = _ref3;
18615
+ return createVNode("div", {
18616
+ "class": ['v-switch__track', ...backgroundColorClasses.value],
18617
+ "style": backgroundColorStyles.value,
18618
+ "onClick": onTrackClick
18619
+ }, null);
18620
+ },
18621
+ input: _ref4 => {
18622
+ let {
18623
+ inputNode,
18624
+ icon,
18625
+ backgroundColorClasses,
18626
+ backgroundColorStyles
18627
+ } = _ref4;
18629
18628
  return createVNode(Fragment, null, [inputNode, createVNode("div", {
18630
18629
  "class": ['v-switch__thumb', {
18631
18630
  'v-switch__thumb--filled': icon || props.loading
18632
- }]
18631
+ }, props.inset ? undefined : backgroundColorClasses.value],
18632
+ "style": props.inset ? undefined : backgroundColorStyles.value
18633
18633
  }, [createVNode(VScaleTransition, null, {
18634
18634
  default: () => [!props.loading ? icon && createVNode(VIcon, {
18635
18635
  "key": icon,
@@ -18770,8 +18770,8 @@ const VTab = genericComponent()({
18770
18770
  const delta = prevPos > nextPos ? prevBox[rightBottom] - nextBox[rightBottom] : prevBox[xy] - nextBox[xy];
18771
18771
  const origin = Math.sign(delta) > 0 ? isHorizontal.value ? 'right' : 'bottom' : Math.sign(delta) < 0 ? isHorizontal.value ? 'left' : 'top' : 'center';
18772
18772
  const size = Math.abs(delta) + (Math.sign(delta) < 0 ? prevBox[widthHeight] : nextBox[widthHeight]);
18773
- const scale = size / Math.max(prevBox[widthHeight], nextBox[widthHeight]);
18774
- const initialScale = prevBox[widthHeight] / nextBox[widthHeight];
18773
+ const scale = size / Math.max(prevBox[widthHeight], nextBox[widthHeight]) || 0;
18774
+ const initialScale = prevBox[widthHeight] / nextBox[widthHeight] || 0;
18775
18775
  const sigma = 1.5;
18776
18776
  animate(nextEl, {
18777
18777
  backgroundColor: [color, 'currentcolor'],
@@ -18793,11 +18793,10 @@ const VTab = genericComponent()({
18793
18793
  "tabindex": isSelected.value ? 0 : -1,
18794
18794
  "role": "tab",
18795
18795
  "aria-selected": String(isSelected.value),
18796
- "active": false,
18796
+ "active": false
18797
+ }, btnProps, attrs, {
18797
18798
  "block": props.fixed,
18798
18799
  "maxWidth": props.fixed ? 300 : undefined,
18799
- "rounded": 0
18800
- }, btnProps, attrs, {
18801
18800
  "onGroup:selected": updateSlider
18802
18801
  }), {
18803
18802
  default: () => [slots.default?.() ?? props.text, !props.hideSlider && createVNode("div", {
@@ -19167,6 +19166,7 @@ const VTextarea = genericComponent()({
19167
19166
  once: true
19168
19167
  }]]), props.autoGrow && withDirectives(createVNode("textarea", {
19169
19168
  "class": [fieldClass, 'v-textarea__sizer'],
19169
+ "id": `${slotProps.id}-sizer`,
19170
19170
  "onUpdate:modelValue": $event => model.value = $event,
19171
19171
  "ref": sizerRef,
19172
19172
  "readonly": true,
@@ -21776,7 +21776,7 @@ const VDataTableServer = genericComponent()({
21776
21776
  const makeVDatePickerControlsProps = propsFactory({
21777
21777
  displayDate: String,
21778
21778
  disabled: {
21779
- type: [Boolean, String],
21779
+ type: [Boolean, String, Array],
21780
21780
  default: false
21781
21781
  },
21782
21782
  nextIcon: {
@@ -21816,13 +21816,13 @@ const VDatePickerControls = genericComponent()({
21816
21816
  return props.viewMode === 'month' ? props.expandIcon : props.collapseIcon;
21817
21817
  });
21818
21818
  const disableMode = computed(() => {
21819
- return Array.isArray(props.disabled) ? props.disabled.includes('mode') : props.disabled;
21819
+ return Array.isArray(props.disabled) ? props.disabled.includes('mode') : !!props.disabled;
21820
21820
  });
21821
21821
  const disablePrev = computed(() => {
21822
- return Array.isArray(props.disabled) ? props.disabled.includes('prev') : props.disabled;
21822
+ return Array.isArray(props.disabled) ? props.disabled.includes('prev') : !!props.disabled;
21823
21823
  });
21824
21824
  const disableNext = computed(() => {
21825
- return Array.isArray(props.disabled) ? props.disabled.includes('next') : props.disabled;
21825
+ return Array.isArray(props.disabled) ? props.disabled.includes('next') : !!props.disabled;
21826
21826
  });
21827
21827
  function onClickPrev() {
21828
21828
  emit('click:prev');
@@ -22163,6 +22163,7 @@ function isWithinRange(date, range) {
22163
22163
  return isAfter(date, range[0]) && isBefore(date, range[1]);
22164
22164
  }
22165
22165
  function isValid(date) {
22166
+ if (!date || date == null) return false;
22166
22167
  const d = new Date(date);
22167
22168
  return d instanceof Date && !isNaN(d.getTime());
22168
22169
  }
@@ -22194,6 +22195,12 @@ function setYear(date, year) {
22194
22195
  d.setFullYear(year);
22195
22196
  return d;
22196
22197
  }
22198
+ function startOfDay(date) {
22199
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate());
22200
+ }
22201
+ function endOfDay(date) {
22202
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);
22203
+ }
22197
22204
  class VuetifyDateAdapter {
22198
22205
  constructor(options) {
22199
22206
  this.locale = options.locale;
@@ -22258,6 +22265,12 @@ class VuetifyDateAdapter {
22258
22265
  getMonth(date) {
22259
22266
  return getMonth(date);
22260
22267
  }
22268
+ startOfDay(date) {
22269
+ return startOfDay(date);
22270
+ }
22271
+ endOfDay(date) {
22272
+ return endOfDay(date);
22273
+ }
22261
22274
  startOfYear(date) {
22262
22275
  return startOfYear(date);
22263
22276
  }
@@ -23126,9 +23139,11 @@ const VDatePicker = genericComponent()({
23126
23139
  function updateFromInput(input, index) {
23127
23140
  const {
23128
23141
  isValid,
23129
- date
23142
+ date,
23143
+ isAfter
23130
23144
  } = adapter;
23131
- if (isValid(input)) {
23145
+ const inputDate = date(input);
23146
+ if (isValid(input) && (!minDate.value || !isAfter(minDate.value, inputDate)) && (!maxDate.value || !isAfter(inputDate, maxDate.value))) {
23132
23147
  const newModel = model.value.slice();
23133
23148
  newModel[index] = date(input);
23134
23149
  if (props.hideActions) {
@@ -24544,7 +24559,7 @@ function createVuetify$1() {
24544
24559
  date
24545
24560
  };
24546
24561
  }
24547
- const version$1 = "3.3.14";
24562
+ const version$1 = "3.3.16";
24548
24563
  createVuetify$1.version = version$1;
24549
24564
 
24550
24565
  // Vue's inject() can only be used in setup
@@ -24558,7 +24573,7 @@ function inject(key) {
24558
24573
 
24559
24574
  /* eslint-disable local-rules/sort-imports */
24560
24575
 
24561
- const version = "3.3.14";
24576
+ const version = "3.3.16";
24562
24577
 
24563
24578
  /* eslint-disable local-rules/sort-imports */
24564
24579