vuetify 3.3.15 → 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 (78) hide show
  1. package/dist/json/attributes.json +427 -403
  2. package/dist/json/importMap.json +4 -4
  3. package/dist/json/tags.json +1 -0
  4. package/dist/json/web-types.json +908 -879
  5. package/dist/vuetify-labs.css +245 -240
  6. package/dist/vuetify-labs.d.ts +162 -144
  7. package/dist/vuetify-labs.esm.js +121 -136
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +121 -136
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +92 -88
  12. package/dist/vuetify.d.ts +99 -81
  13. package/dist/vuetify.esm.js +113 -130
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +113 -130
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +223 -224
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/blueprints/index.d.mts +2 -0
  21. package/lib/blueprints/md1.d.mts +2 -0
  22. package/lib/blueprints/md2.d.mts +2 -0
  23. package/lib/blueprints/md3.d.mts +2 -0
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs +16 -26
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  26. package/lib/components/VAutocomplete/index.d.mts +40 -38
  27. package/lib/components/VColorPicker/VColorPickerCanvas.css +1 -0
  28. package/lib/components/VColorPicker/VColorPickerCanvas.mjs +28 -34
  29. package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
  30. package/lib/components/VColorPicker/VColorPickerCanvas.sass +1 -0
  31. package/lib/components/VCombobox/VCombobox.mjs +15 -25
  32. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  33. package/lib/components/VCombobox/index.d.mts +40 -38
  34. package/lib/components/VField/VField.css +3 -2
  35. package/lib/components/VField/VField.sass +3 -2
  36. package/lib/components/VLabel/VLabel.css +1 -0
  37. package/lib/components/VLabel/VLabel.sass +1 -0
  38. package/lib/components/VLabel/_variables.scss +1 -1
  39. package/lib/components/VList/index.d.mts +21 -3
  40. package/lib/components/VSelect/VSelect.mjs +9 -23
  41. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  42. package/lib/components/VSelect/index.d.mts +14 -11
  43. package/lib/components/VSelectionControl/VSelectionControl.css +1 -1
  44. package/lib/components/VSelectionControl/VSelectionControl.sass +1 -1
  45. package/lib/components/VTabs/VTab.css +1 -0
  46. package/lib/components/VTabs/VTab.mjs +2 -3
  47. package/lib/components/VTabs/VTab.mjs.map +1 -1
  48. package/lib/components/VTabs/VTab.sass +1 -0
  49. package/lib/components/VTabs/_variables.scss +1 -0
  50. package/lib/components/index.d.mts +96 -80
  51. package/lib/composables/filter.mjs +4 -4
  52. package/lib/composables/filter.mjs.map +1 -1
  53. package/lib/composables/list-items.mjs +26 -15
  54. package/lib/composables/list-items.mjs.map +1 -1
  55. package/lib/entry-bundler.mjs +1 -1
  56. package/lib/framework.mjs +1 -1
  57. package/lib/index.d.mts +3 -1
  58. package/lib/labs/VBottomSheet/VBottomSheet.css +1 -0
  59. package/lib/labs/VBottomSheet/VBottomSheet.sass +2 -0
  60. package/lib/labs/VBottomSheet/_variables.scss +1 -0
  61. package/lib/labs/VDataIterator/index.d.mts +30 -26
  62. package/lib/labs/VDataTable/index.d.mts +43 -39
  63. package/lib/labs/VDataTable/types.mjs.map +1 -1
  64. package/lib/labs/VDatePicker/VDatePicker.mjs +4 -2
  65. package/lib/labs/VDatePicker/VDatePicker.mjs.map +1 -1
  66. package/lib/labs/VDatePicker/VDatePickerControls.mjs +4 -4
  67. package/lib/labs/VDatePicker/VDatePickerControls.mjs.map +1 -1
  68. package/lib/labs/VDatePicker/VDatePickerYears.css +1 -1
  69. package/lib/labs/VDatePicker/VDatePickerYears.sass +1 -1
  70. package/lib/labs/VDatePicker/index.d.mts +24 -24
  71. package/lib/labs/VDateRangePicker/index.d.mts +8 -8
  72. package/lib/labs/components.d.mts +80 -76
  73. package/lib/labs/date/DateAdapter.mjs.map +1 -1
  74. package/lib/labs/date/adapters/vuetify.d.mts +4 -0
  75. package/lib/labs/date/adapters/vuetify.mjs +13 -0
  76. package/lib/labs/date/adapters/vuetify.mjs.map +1 -1
  77. package/lib/labs/date/index.d.mts +4 -0
  78. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.3.15
2
+ * Vuetify v3.3.16
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -7969,11 +7969,15 @@ const makeItemsProps = propsFactory({
7969
7969
  type: [Boolean, String, Array, Function],
7970
7970
  default: 'props'
7971
7971
  },
7972
- returnObject: Boolean
7972
+ returnObject: Boolean,
7973
+ valueComparator: {
7974
+ type: Function,
7975
+ default: deepEqual
7976
+ }
7973
7977
  }, 'list-items');
7974
7978
  function transformItem$1(props, item) {
7975
7979
  const title = getPropertyFromItem(item, props.itemTitle, item);
7976
- const value = props.returnObject ? item : getPropertyFromItem(item, props.itemValue, title);
7980
+ const value = getPropertyFromItem(item, props.itemValue, title);
7977
7981
  const children = getPropertyFromItem(item, props.itemChildren);
7978
7982
  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);
7979
7983
  const _props = {
@@ -7998,25 +8002,32 @@ function transformItems$1(props, items) {
7998
8002
  }
7999
8003
  function useItems(props) {
8000
8004
  const items = computed(() => transformItems$1(props, props.items));
8001
- return useTransformItems(items, value => transformItem$1(props, value));
8002
- }
8003
- function useTransformItems(items, transform) {
8005
+ const hasNullItem = computed(() => items.value.some(item => item.value === null));
8004
8006
  function transformIn(value) {
8005
- return value
8006
- // When the model value is null, returns an InternalItem based on null
8007
- // only if null is one of the items
8008
- .filter(v => v !== null || items.value.some(item => item.value === null)).map(v => {
8009
- const existingItem = items.value.find(item => deepEqual(v, item.value));
8010
- // Nullish existingItem means value is a custom input value from combobox
8011
- // In this case, use transformItem to create an InternalItem based on value
8012
- return existingItem ?? transform(v);
8007
+ if (!hasNullItem.value) {
8008
+ // When the model value is null, return an InternalItem
8009
+ // based on null only if null is one of the items
8010
+ value = value.filter(v => v !== null);
8011
+ }
8012
+ return value.map(v => {
8013
+ if (props.returnObject && typeof v === 'string') {
8014
+ // String model value means value is a custom input value from combobox
8015
+ // Don't look up existing items if the model value is a string
8016
+ return transformItem$1(props, v);
8017
+ }
8018
+ return items.value.find(item => props.valueComparator(v, item.value)) || transformItem$1(props, v);
8013
8019
  });
8014
8020
  }
8015
8021
  function transformOut(value) {
8016
- return value.map(_ref => {
8022
+ return props.returnObject ? value.map(_ref => {
8017
8023
  let {
8018
- value
8024
+ raw
8019
8025
  } = _ref;
8026
+ return raw;
8027
+ }) : value.map(_ref2 => {
8028
+ let {
8029
+ value
8030
+ } = _ref2;
8020
8031
  return value;
8021
8032
  });
8022
8033
  }
@@ -10847,10 +10858,6 @@ const makeSelectProps = propsFactory({
10847
10858
  default: '$vuetify.noDataText'
10848
10859
  },
10849
10860
  openOnClear: Boolean,
10850
- valueComparator: {
10851
- type: Function,
10852
- default: deepEqual
10853
- },
10854
10861
  itemColor: String,
10855
10862
  ...makeItemsProps({
10856
10863
  itemChildren: false
@@ -10904,24 +10911,14 @@ const VSelect = genericComponent()({
10904
10911
  return props.multiple ? transformed : transformed[0] ?? null;
10905
10912
  });
10906
10913
  const form = useForm();
10907
- const selections = computed(() => {
10908
- return model.value.map(v => {
10909
- return items.value.find(item => {
10910
- const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
10911
- const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
10912
- if (itemRawValue === undefined || modelRawValue === undefined) return false;
10913
- return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
10914
- }) || v;
10915
- });
10916
- });
10917
- const selected = computed(() => selections.value.map(selection => selection.props.value));
10914
+ const selectedValues = computed(() => model.value.map(selection => selection.value));
10918
10915
  const isFocused = shallowRef(false);
10919
10916
  const label = computed(() => menu.value ? props.closeText : props.openText);
10920
10917
  let keyboardLookupPrefix = '';
10921
10918
  let keyboardLookupLastTime;
10922
10919
  const displayItems = computed(() => {
10923
10920
  if (props.hideSelected) {
10924
- return items.value.filter(item => !selections.value.some(s => s === item));
10921
+ return items.value.filter(item => !model.value.some(s => s === item));
10925
10922
  }
10926
10923
  return items.value;
10927
10924
  });
@@ -10979,7 +10976,7 @@ const VSelect = genericComponent()({
10979
10976
  }
10980
10977
  function select(item) {
10981
10978
  if (props.multiple) {
10982
- const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
10979
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
10983
10980
  if (index === -1) {
10984
10981
  model.value = [...model.value, item];
10985
10982
  } else {
@@ -11016,8 +11013,8 @@ const VSelect = genericComponent()({
11016
11013
  }
11017
11014
  }
11018
11015
  watch(menu, () => {
11019
- if (!props.hideSelected && menu.value && selections.value.length) {
11020
- const index = displayItems.value.findIndex(item => selections.value.some(s => item.value === s.value));
11016
+ if (!props.hideSelected && menu.value && model.value.length) {
11017
+ const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
11021
11018
  IN_BROWSER && window.requestAnimationFrame(() => {
11022
11019
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
11023
11020
  });
@@ -11072,7 +11069,7 @@ const VSelect = genericComponent()({
11072
11069
  }, props.menuProps), {
11073
11070
  default: () => [hasList && createVNode(VList, {
11074
11071
  "ref": listRef,
11075
- "selected": selected.value,
11072
+ "selected": selectedValues.value,
11076
11073
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
11077
11074
  "onMousedown": e => e.preventDefault(),
11078
11075
  "onKeydown": onListKeydown,
@@ -11121,7 +11118,7 @@ const VSelect = genericComponent()({
11121
11118
  }
11122
11119
  }), slots['append-item']?.()]
11123
11120
  })]
11124
- }), selections.value.map((item, index) => {
11121
+ }), model.value.map((item, index) => {
11125
11122
  function onChipClose(e) {
11126
11123
  e.stopPropagation();
11127
11124
  e.preventDefault();
@@ -11164,7 +11161,7 @@ const VSelect = genericComponent()({
11164
11161
  index
11165
11162
  }) ?? createVNode("span", {
11166
11163
  "class": "v-select__selection-text"
11167
- }, [item.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
11164
+ }, [item.title, props.multiple && index < model.value.length - 1 && createVNode("span", {
11168
11165
  "class": "v-select__selection-comma"
11169
11166
  }, [createTextVNode(",")])])]);
11170
11167
  })]),
@@ -11216,15 +11213,15 @@ function filterItems(items, query, options) {
11216
11213
  const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length;
11217
11214
  if (!items?.length) return array;
11218
11215
  loop: for (let i = 0; i < items.length; i++) {
11219
- const item = items[i];
11216
+ const [item, transformed = item] = wrapInArray(items[i]);
11220
11217
  const customMatches = {};
11221
11218
  const defaultMatches = {};
11222
11219
  let match = -1;
11223
11220
  if (query && !options?.noFilter) {
11224
11221
  if (typeof item === 'object') {
11225
- const filterKeys = keys || Object.keys(item);
11222
+ const filterKeys = keys || Object.keys(transformed);
11226
11223
  for (const key of filterKeys) {
11227
- const value = getPropertyFromItem(item, key, item);
11224
+ const value = getPropertyFromItem(transformed, key, transformed);
11228
11225
  const keyFilter = options?.customKeyFilter?.[key];
11229
11226
  match = keyFilter ? keyFilter(value, query, item) : filter(value, query, item);
11230
11227
  if (match !== -1 && match !== false) {
@@ -11258,7 +11255,7 @@ function filterItems(items, query, options) {
11258
11255
  function useFilter(props, items, query, options) {
11259
11256
  const filteredItems = ref([]);
11260
11257
  const filteredMatches = ref(new Map());
11261
- const transformedItems = computed(() => options?.transform ? unref(items).map(options?.transform) : unref(items));
11258
+ const transformedItems = computed(() => options?.transform ? unref(items).map(item => [item, options.transform(item)]) : unref(items));
11262
11259
  watchEffect(() => {
11263
11260
  const _query = typeof query === 'function' ? query() : unref(query);
11264
11261
  const strQuery = typeof _query !== 'string' && typeof _query !== 'number' ? '' : String(_query);
@@ -11376,24 +11373,13 @@ const VAutocomplete = genericComponent()({
11376
11373
  filteredItems,
11377
11374
  getMatches
11378
11375
  } = useFilter(props, items, () => isPristine.value ? '' : search.value);
11379
- const selections = computed(() => {
11380
- return model.value.map(v => {
11381
- return items.value.find(item => {
11382
- const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
11383
- const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
11384
- if (itemRawValue === undefined || modelRawValue === undefined) return false;
11385
- return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
11386
- }) || v;
11387
- });
11388
- });
11389
11376
  const displayItems = computed(() => {
11390
11377
  if (props.hideSelected) {
11391
- return filteredItems.value.filter(filteredItem => !selections.value.some(s => s.value === filteredItem.value));
11378
+ return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
11392
11379
  }
11393
11380
  return filteredItems.value;
11394
11381
  });
11395
- const selected = computed(() => selections.value.map(selection => selection.props.value));
11396
- const selection = computed(() => selections.value[selectionIndex.value]);
11382
+ const selectedValues = computed(() => model.value.map(selection => selection.props.value));
11397
11383
  const highlightFirst = computed(() => {
11398
11384
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
11399
11385
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
@@ -11425,7 +11411,7 @@ const VAutocomplete = genericComponent()({
11425
11411
  function onKeydown(e) {
11426
11412
  if (props.readonly || form?.isReadonly.value) return;
11427
11413
  const selectionStart = vTextFieldRef.value.selectionStart;
11428
- const length = selected.value.length;
11414
+ const length = model.value.length;
11429
11415
  if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
11430
11416
  e.preventDefault();
11431
11417
  }
@@ -11450,13 +11436,14 @@ const VAutocomplete = genericComponent()({
11450
11436
  return;
11451
11437
  }
11452
11438
  const originalSelectionIndex = selectionIndex.value;
11453
- if (selection.value) select(selection.value);
11439
+ const selectedItem = model.value[selectionIndex.value];
11440
+ if (selectedItem) select(selectedItem);
11454
11441
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
11455
11442
  }
11456
11443
  if (e.key === 'ArrowLeft') {
11457
11444
  if (selectionIndex.value < 0 && selectionStart > 0) return;
11458
11445
  const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
11459
- if (selections.value[prev]) {
11446
+ if (model.value[prev]) {
11460
11447
  selectionIndex.value = prev;
11461
11448
  } else {
11462
11449
  selectionIndex.value = -1;
@@ -11466,7 +11453,7 @@ const VAutocomplete = genericComponent()({
11466
11453
  if (e.key === 'ArrowRight') {
11467
11454
  if (selectionIndex.value < 0) return;
11468
11455
  const next = selectionIndex.value + 1;
11469
- if (selections.value[next]) {
11456
+ if (model.value[next]) {
11470
11457
  selectionIndex.value = next;
11471
11458
  } else {
11472
11459
  selectionIndex.value = -1;
@@ -11506,7 +11493,7 @@ const VAutocomplete = genericComponent()({
11506
11493
  const isSelecting = shallowRef(false);
11507
11494
  function select(item) {
11508
11495
  if (props.multiple) {
11509
- const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
11496
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
11510
11497
  if (index === -1) {
11511
11498
  model.value = [...model.value, item];
11512
11499
  } else {
@@ -11527,11 +11514,11 @@ const VAutocomplete = genericComponent()({
11527
11514
  if (val === oldVal) return;
11528
11515
  if (val) {
11529
11516
  isSelecting.value = true;
11530
- search.value = props.multiple ? '' : String(selections.value.at(-1)?.props.title ?? '');
11517
+ search.value = props.multiple ? '' : String(model.value.at(-1)?.props.title ?? '');
11531
11518
  isPristine.value = true;
11532
11519
  nextTick(() => isSelecting.value = false);
11533
11520
  } else {
11534
- if (!props.multiple && !search.value) model.value = [];else if (highlightFirst.value && !listHasFocus.value && !selections.value.some(_ref2 => {
11521
+ if (!props.multiple && !search.value) model.value = [];else if (highlightFirst.value && !listHasFocus.value && !model.value.some(_ref2 => {
11535
11522
  let {
11536
11523
  value
11537
11524
  } = _ref2;
@@ -11550,8 +11537,8 @@ const VAutocomplete = genericComponent()({
11550
11537
  isPristine.value = !val;
11551
11538
  });
11552
11539
  watch(menu, () => {
11553
- if (!props.hideSelected && menu.value && selections.value.length) {
11554
- const index = displayItems.value.findIndex(item => selections.value.some(s => item.value === s.value));
11540
+ if (!props.hideSelected && menu.value && model.value.length) {
11541
+ const index = displayItems.value.findIndex(item => model.value.some(s => item.value === s.value));
11555
11542
  IN_BROWSER && window.requestAnimationFrame(() => {
11556
11543
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
11557
11544
  });
@@ -11603,7 +11590,7 @@ const VAutocomplete = genericComponent()({
11603
11590
  }, props.menuProps), {
11604
11591
  default: () => [hasList && createVNode(VList, {
11605
11592
  "ref": listRef,
11606
- "selected": selected.value,
11593
+ "selected": selectedValues.value,
11607
11594
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
11608
11595
  "onMousedown": e => e.preventDefault(),
11609
11596
  "onKeydown": onListKeydown,
@@ -11657,7 +11644,7 @@ const VAutocomplete = genericComponent()({
11657
11644
  }
11658
11645
  }), slots['append-item']?.()]
11659
11646
  })]
11660
- }), selections.value.map((item, index) => {
11647
+ }), model.value.map((item, index) => {
11661
11648
  function onChipClose(e) {
11662
11649
  e.stopPropagation();
11663
11650
  e.preventDefault();
@@ -11701,7 +11688,7 @@ const VAutocomplete = genericComponent()({
11701
11688
  index
11702
11689
  }) ?? createVNode("span", {
11703
11690
  "class": "v-autocomplete__selection-text"
11704
- }, [item.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
11691
+ }, [item.title, props.multiple && index < model.value.length - 1 && createVNode("span", {
11705
11692
  "class": "v-autocomplete__selection-comma"
11706
11693
  }, [createTextVNode(",")])])]);
11707
11694
  })]),
@@ -13099,11 +13086,29 @@ const VColorPickerCanvas = defineComponent({
13099
13086
  emit
13100
13087
  } = _ref;
13101
13088
  const isInteracting = shallowRef(false);
13102
- const isOutsideUpdate = shallowRef(false);
13103
- const dotPosition = ref({
13089
+ const canvasRef = ref();
13090
+ const canvasWidth = shallowRef(parseFloat(props.width));
13091
+ const canvasHeight = shallowRef(parseFloat(props.height));
13092
+ const _dotPosition = ref({
13104
13093
  x: 0,
13105
13094
  y: 0
13106
13095
  });
13096
+ const dotPosition = computed({
13097
+ get: () => _dotPosition.value,
13098
+ set(val) {
13099
+ if (!canvasRef.value) return;
13100
+ const {
13101
+ x,
13102
+ y
13103
+ } = val;
13104
+ emit('update:color', {
13105
+ h: props.color?.h ?? 0,
13106
+ s: clamp(x, 0, canvasWidth.value) / canvasWidth.value,
13107
+ v: 1 - clamp(y, 0, canvasHeight.value) / canvasHeight.value,
13108
+ a: props.color?.a ?? 1
13109
+ });
13110
+ }
13111
+ });
13107
13112
  const dotStyles = computed(() => {
13108
13113
  const {
13109
13114
  x,
@@ -13116,9 +13121,6 @@ const VColorPickerCanvas = defineComponent({
13116
13121
  transform: `translate(${convertToUnit(x - radius)}, ${convertToUnit(y - radius)})`
13117
13122
  };
13118
13123
  });
13119
- const canvasRef = ref();
13120
- const canvasWidth = shallowRef(parseFloat(props.width));
13121
- const canvasHeight = shallowRef(parseFloat(props.height));
13122
13124
  const {
13123
13125
  resizeRef
13124
13126
  } = useResizeObserver(entries => {
@@ -13142,15 +13144,13 @@ const VColorPickerCanvas = defineComponent({
13142
13144
  y: clamp(y - top, 0, height)
13143
13145
  };
13144
13146
  }
13145
- function handleClick(e) {
13146
- if (props.disabled || !canvasRef.value) return;
13147
- updateDotPosition(e.clientX, e.clientY, canvasRef.value.getBoundingClientRect());
13148
- }
13149
13147
  function handleMouseDown(e) {
13150
- // To prevent selection while moving cursor
13151
- e.preventDefault();
13148
+ if (e.type === 'mousedown') {
13149
+ // Prevent text selection while dragging
13150
+ e.preventDefault();
13151
+ }
13152
13152
  if (props.disabled) return;
13153
- isInteracting.value = true;
13153
+ handleMouseMove(e);
13154
13154
  window.addEventListener('mousemove', handleMouseMove);
13155
13155
  window.addEventListener('mouseup', handleMouseUp);
13156
13156
  window.addEventListener('touchmove', handleMouseMove);
@@ -13168,23 +13168,6 @@ const VColorPickerCanvas = defineComponent({
13168
13168
  window.removeEventListener('touchmove', handleMouseMove);
13169
13169
  window.removeEventListener('touchend', handleMouseUp);
13170
13170
  }
13171
- watch(dotPosition, () => {
13172
- if (isOutsideUpdate.value) {
13173
- isOutsideUpdate.value = false;
13174
- return;
13175
- }
13176
- if (!canvasRef.value) return;
13177
- const {
13178
- x,
13179
- y
13180
- } = dotPosition.value;
13181
- emit('update:color', {
13182
- h: props.color?.h ?? 0,
13183
- s: clamp(x, 0, canvasWidth.value) / canvasWidth.value,
13184
- v: 1 - clamp(y, 0, canvasHeight.value) / canvasHeight.value,
13185
- a: props.color?.a ?? 1
13186
- });
13187
- });
13188
13171
  function updateCanvas() {
13189
13172
  if (!canvasRef.value) return;
13190
13173
  const canvas = canvasRef.value;
@@ -13206,7 +13189,7 @@ const VColorPickerCanvas = defineComponent({
13206
13189
  });
13207
13190
  watch(() => [canvasWidth.value, canvasHeight.value], (newVal, oldVal) => {
13208
13191
  updateCanvas();
13209
- dotPosition.value = {
13192
+ _dotPosition.value = {
13210
13193
  x: dotPosition.value.x * newVal[0] / oldVal[0],
13211
13194
  y: dotPosition.value.y * newVal[1] / oldVal[1]
13212
13195
  };
@@ -13218,8 +13201,7 @@ const VColorPickerCanvas = defineComponent({
13218
13201
  isInteracting.value = false;
13219
13202
  return;
13220
13203
  }
13221
- isOutsideUpdate.value = true;
13222
- dotPosition.value = props.color ? {
13204
+ _dotPosition.value = props.color ? {
13223
13205
  x: props.color.s * canvasWidth.value,
13224
13206
  y: (1 - props.color.v) * canvasHeight.value
13225
13207
  } : {
@@ -13235,9 +13217,8 @@ const VColorPickerCanvas = defineComponent({
13235
13217
  "ref": resizeRef,
13236
13218
  "class": ['v-color-picker-canvas', props.class],
13237
13219
  "style": props.style,
13238
- "onClick": handleClick,
13239
13220
  "onMousedown": handleMouseDown,
13240
- "onTouchstart": handleMouseDown
13221
+ "onTouchstartPassive": handleMouseDown
13241
13222
  }, [createVNode("canvas", {
13242
13223
  "ref": canvasRef,
13243
13224
  "width": canvasWidth.value,
@@ -14958,24 +14939,13 @@ const VCombobox = genericComponent()({
14958
14939
  filteredItems,
14959
14940
  getMatches
14960
14941
  } = useFilter(props, items, () => isPristine.value ? '' : search.value);
14961
- const selections = computed(() => {
14962
- return model.value.map(v => {
14963
- return items.value.find(item => {
14964
- const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
14965
- const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
14966
- if (itemRawValue === undefined || modelRawValue === undefined) return false;
14967
- return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
14968
- }) || v;
14969
- });
14970
- });
14971
14942
  const displayItems = computed(() => {
14972
14943
  if (props.hideSelected) {
14973
- return filteredItems.value.filter(filteredItem => !selections.value.some(s => s.value === filteredItem.value));
14944
+ return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
14974
14945
  }
14975
14946
  return filteredItems.value;
14976
14947
  });
14977
- const selected = computed(() => selections.value.map(selection => selection.props.value));
14978
- const selection = computed(() => selections.value[selectionIndex.value]);
14948
+ const selectedValues = computed(() => model.value.map(selection => selection.value));
14979
14949
  const highlightFirst = computed(() => {
14980
14950
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
14981
14951
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
@@ -15007,7 +14977,7 @@ const VCombobox = genericComponent()({
15007
14977
  function onKeydown(e) {
15008
14978
  if (props.readonly || form?.isReadonly.value) return;
15009
14979
  const selectionStart = vTextFieldRef.value.selectionStart;
15010
- const length = selected.value.length;
14980
+ const length = model.value.length;
15011
14981
  if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
15012
14982
  e.preventDefault();
15013
14983
  }
@@ -15035,13 +15005,14 @@ const VCombobox = genericComponent()({
15035
15005
  return;
15036
15006
  }
15037
15007
  const originalSelectionIndex = selectionIndex.value;
15038
- if (selection.value) select(selection.value);
15008
+ const selectedItem = model.value[selectionIndex.value];
15009
+ if (selectedItem) select(selectedItem);
15039
15010
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
15040
15011
  }
15041
15012
  if (e.key === 'ArrowLeft') {
15042
15013
  if (selectionIndex.value < 0 && selectionStart > 0) return;
15043
15014
  const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
15044
- if (selections.value[prev]) {
15015
+ if (model.value[prev]) {
15045
15016
  selectionIndex.value = prev;
15046
15017
  } else {
15047
15018
  selectionIndex.value = -1;
@@ -15051,7 +15022,7 @@ const VCombobox = genericComponent()({
15051
15022
  if (e.key === 'ArrowRight') {
15052
15023
  if (selectionIndex.value < 0) return;
15053
15024
  const next = selectionIndex.value + 1;
15054
- if (selections.value[next]) {
15025
+ if (model.value[next]) {
15055
15026
  selectionIndex.value = next;
15056
15027
  } else {
15057
15028
  selectionIndex.value = -1;
@@ -15071,7 +15042,7 @@ const VCombobox = genericComponent()({
15071
15042
  }
15072
15043
  function select(item) {
15073
15044
  if (props.multiple) {
15074
- const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
15045
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
15075
15046
  if (index === -1) {
15076
15047
  model.value = [...model.value, item];
15077
15048
  } else {
@@ -15110,7 +15081,7 @@ const VCombobox = genericComponent()({
15110
15081
  if (val || val === oldVal) return;
15111
15082
  selectionIndex.value = -1;
15112
15083
  menu.value = false;
15113
- if (highlightFirst.value && !listHasFocus.value && !selections.value.some(_ref2 => {
15084
+ if (highlightFirst.value && !listHasFocus.value && !model.value.some(_ref2 => {
15114
15085
  let {
15115
15086
  value
15116
15087
  } = _ref2;
@@ -15123,8 +15094,8 @@ const VCombobox = genericComponent()({
15123
15094
  }
15124
15095
  });
15125
15096
  watch(menu, () => {
15126
- if (!props.hideSelected && menu.value && selections.value.length) {
15127
- const index = displayItems.value.findIndex(item => selections.value.some(s => item.value === s.value));
15097
+ if (!props.hideSelected && menu.value && model.value.length) {
15098
+ const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
15128
15099
  IN_BROWSER && window.requestAnimationFrame(() => {
15129
15100
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
15130
15101
  });
@@ -15175,7 +15146,7 @@ const VCombobox = genericComponent()({
15175
15146
  }, props.menuProps), {
15176
15147
  default: () => [hasList && createVNode(VList, {
15177
15148
  "ref": listRef,
15178
- "selected": selected.value,
15149
+ "selected": selectedValues.value,
15179
15150
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
15180
15151
  "onMousedown": e => e.preventDefault(),
15181
15152
  "onKeydown": onListKeydown,
@@ -15229,7 +15200,7 @@ const VCombobox = genericComponent()({
15229
15200
  }
15230
15201
  }), slots['append-item']?.()]
15231
15202
  })]
15232
- }), selections.value.map((item, index) => {
15203
+ }), model.value.map((item, index) => {
15233
15204
  function onChipClose(e) {
15234
15205
  e.stopPropagation();
15235
15206
  e.preventDefault();
@@ -15273,7 +15244,7 @@ const VCombobox = genericComponent()({
15273
15244
  index
15274
15245
  }) ?? createVNode("span", {
15275
15246
  "class": "v-combobox__selection-text"
15276
- }, [item.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
15247
+ }, [item.title, props.multiple && index < model.value.length - 1 && createVNode("span", {
15277
15248
  "class": "v-combobox__selection-comma"
15278
15249
  }, [createTextVNode(",")])])]);
15279
15250
  })]),
@@ -18810,11 +18781,10 @@ const VTab = genericComponent()({
18810
18781
  "tabindex": isSelected.value ? 0 : -1,
18811
18782
  "role": "tab",
18812
18783
  "aria-selected": String(isSelected.value),
18813
- "active": false,
18784
+ "active": false
18785
+ }, btnProps, attrs, {
18814
18786
  "block": props.fixed,
18815
18787
  "maxWidth": props.fixed ? 300 : undefined,
18816
- "rounded": 0
18817
- }, btnProps, attrs, {
18818
18788
  "onGroup:selected": updateSlider
18819
18789
  }), {
18820
18790
  default: () => [slots.default?.() ?? props.text, !props.hideSlider && createVNode("div", {
@@ -20166,6 +20136,7 @@ function isWithinRange(date, range) {
20166
20136
  return isAfter(date, range[0]) && isBefore(date, range[1]);
20167
20137
  }
20168
20138
  function isValid(date) {
20139
+ if (!date || date == null) return false;
20169
20140
  const d = new Date(date);
20170
20141
  return d instanceof Date && !isNaN(d.getTime());
20171
20142
  }
@@ -20197,6 +20168,12 @@ function setYear(date, year) {
20197
20168
  d.setFullYear(year);
20198
20169
  return d;
20199
20170
  }
20171
+ function startOfDay(date) {
20172
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate());
20173
+ }
20174
+ function endOfDay(date) {
20175
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);
20176
+ }
20200
20177
  class VuetifyDateAdapter {
20201
20178
  constructor(options) {
20202
20179
  this.locale = options.locale;
@@ -20261,6 +20238,12 @@ class VuetifyDateAdapter {
20261
20238
  getMonth(date) {
20262
20239
  return getMonth(date);
20263
20240
  }
20241
+ startOfDay(date) {
20242
+ return startOfDay(date);
20243
+ }
20244
+ endOfDay(date) {
20245
+ return endOfDay(date);
20246
+ }
20264
20247
  startOfYear(date) {
20265
20248
  return startOfYear(date);
20266
20249
  }
@@ -20408,7 +20391,7 @@ function createVuetify$1() {
20408
20391
  date
20409
20392
  };
20410
20393
  }
20411
- const version$1 = "3.3.15";
20394
+ const version$1 = "3.3.16";
20412
20395
  createVuetify$1.version = version$1;
20413
20396
 
20414
20397
  // Vue's inject() can only be used in setup
@@ -20433,7 +20416,7 @@ const createVuetify = function () {
20433
20416
  ...options
20434
20417
  });
20435
20418
  };
20436
- const version = "3.3.15";
20419
+ const version = "3.3.16";
20437
20420
  createVuetify.version = version;
20438
20421
 
20439
20422
  export { components, createVuetify, directives, useDefaults, useDisplay, useLayout, useLocale, useRtl, useTheme, version };