vuetify 3.5.5 → 3.5.7

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 (86) hide show
  1. package/dist/_component-variables-labs.sass +2 -0
  2. package/dist/json/attributes.json +352 -40
  3. package/dist/json/importMap-labs.json +16 -8
  4. package/dist/json/importMap.json +122 -118
  5. package/dist/json/tags.json +93 -0
  6. package/dist/json/web-types.json +1084 -52
  7. package/dist/vuetify-labs.css +2121 -1996
  8. package/dist/vuetify-labs.d.ts +1336 -128
  9. package/dist/vuetify-labs.esm.js +332 -81
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +332 -81
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +838 -839
  14. package/dist/vuetify.d.ts +320 -145
  15. package/dist/vuetify.esm.js +87 -75
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +87 -75
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +60 -58
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/components/VApp/index.d.mts +8 -6
  23. package/lib/components/VAutocomplete/VAutocomplete.css +4 -4
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs +33 -29
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  26. package/lib/components/VAutocomplete/VAutocomplete.sass +1 -1
  27. package/lib/components/VCheckbox/VCheckbox.mjs +3 -1
  28. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  29. package/lib/components/VCombobox/VCombobox.css +4 -4
  30. package/lib/components/VCombobox/VCombobox.mjs +22 -23
  31. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  32. package/lib/components/VCombobox/VCombobox.sass +1 -1
  33. package/lib/components/VDataIterator/VDataIterator.mjs.map +1 -1
  34. package/lib/components/VDataIterator/index.d.mts +50 -94
  35. package/lib/components/VDataTable/index.d.mts +214 -1
  36. package/lib/components/VDataTable/index.mjs +1 -0
  37. package/lib/components/VDataTable/index.mjs.map +1 -1
  38. package/lib/components/VExpansionPanel/VExpansionPanel.css +4 -7
  39. package/lib/components/VExpansionPanel/VExpansionPanel.sass +4 -3
  40. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +2 -0
  41. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  42. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +2 -0
  43. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  44. package/lib/components/VExpansionPanel/index.d.mts +27 -0
  45. package/lib/components/VLayout/index.d.mts +8 -6
  46. package/lib/components/VSelect/VSelect.mjs +20 -18
  47. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  48. package/lib/components/VToolbar/VToolbar.css +3 -1
  49. package/lib/components/VToolbar/VToolbar.sass +2 -1
  50. package/lib/components/index.d.mts +279 -106
  51. package/lib/composables/filter.mjs +1 -1
  52. package/lib/composables/filter.mjs.map +1 -1
  53. package/lib/composables/goto.mjs +2 -2
  54. package/lib/composables/goto.mjs.map +1 -1
  55. package/lib/composables/layout.mjs.map +1 -1
  56. package/lib/entry-bundler.mjs +1 -1
  57. package/lib/framework.mjs +1 -1
  58. package/lib/index.d.mts +42 -39
  59. package/lib/labs/VEmptyState/VEmptyState.css +59 -0
  60. package/lib/labs/VEmptyState/VEmptyState.mjs +145 -0
  61. package/lib/labs/VEmptyState/VEmptyState.mjs.map +1 -0
  62. package/lib/labs/VEmptyState/VEmptyState.sass +53 -0
  63. package/lib/labs/VEmptyState/_variables.scss +22 -0
  64. package/lib/labs/VEmptyState/index.d.mts +415 -0
  65. package/lib/labs/VEmptyState/index.mjs +2 -0
  66. package/lib/labs/VEmptyState/index.mjs.map +1 -0
  67. package/lib/labs/VFab/VFab.css +69 -0
  68. package/lib/labs/VFab/VFab.mjs +114 -0
  69. package/lib/labs/VFab/VFab.mjs.map +1 -0
  70. package/lib/labs/VFab/VFab.sass +82 -0
  71. package/lib/labs/VFab/_mixins.scss +22 -0
  72. package/lib/labs/VFab/_variables.scss +33 -0
  73. package/lib/labs/VFab/index.d.mts +656 -0
  74. package/lib/labs/VFab/index.mjs +2 -0
  75. package/lib/labs/VFab/index.mjs.map +1 -0
  76. package/lib/labs/VSparkline/VBarline.mjs +4 -4
  77. package/lib/labs/VSparkline/VBarline.mjs.map +1 -1
  78. package/lib/labs/VSparkline/VTrendline.mjs +6 -2
  79. package/lib/labs/VSparkline/VTrendline.mjs.map +1 -1
  80. package/lib/labs/VSparkline/index.d.mts +12 -0
  81. package/lib/labs/VSparkline/util/line.mjs +2 -0
  82. package/lib/labs/VSparkline/util/line.mjs.map +1 -1
  83. package/lib/labs/components.d.mts +1066 -2
  84. package/lib/labs/components.mjs +2 -0
  85. package/lib/labs/components.mjs.map +1 -1
  86. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.5.5
2
+ * Vuetify v3.5.7
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -6887,7 +6887,8 @@ const VCheckbox = genericComponent()({
6887
6887
  id,
6888
6888
  messagesId,
6889
6889
  isDisabled,
6890
- isReadonly
6890
+ isReadonly,
6891
+ isValid
6891
6892
  } = _ref2;
6892
6893
  return createVNode(VCheckboxBtn, mergeProps(checkboxProps, {
6893
6894
  "id": id.value,
@@ -6895,6 +6896,7 @@ const VCheckbox = genericComponent()({
6895
6896
  "disabled": isDisabled.value,
6896
6897
  "readonly": isReadonly.value
6897
6898
  }, controlAttrs, {
6899
+ "error": isValid.value === false,
6898
6900
  "modelValue": model.value,
6899
6901
  "onUpdate:modelValue": $event => model.value = $event,
6900
6902
  "onFocus": focus,
@@ -11844,20 +11846,27 @@ const VSelect = genericComponent()({
11844
11846
  model.value = [item];
11845
11847
  }
11846
11848
  }
11849
+
11850
+ /** @param set - null means toggle */
11847
11851
  function select(item) {
11848
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
11849
- const add = index === -1;
11852
+ let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
11853
+ if (item.props.disabled) return;
11850
11854
  if (props.multiple) {
11851
- if (add) {
11852
- model.value = [...model.value, item];
11853
- } else {
11854
- const value = [...model.value];
11855
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
11856
+ const add = set == null ? !~index : set;
11857
+ if (~index) {
11858
+ const value = add ? [...model.value, item] : [...model.value];
11855
11859
  value.splice(index, 1);
11856
11860
  model.value = value;
11861
+ } else if (add) {
11862
+ model.value = [...model.value, item];
11857
11863
  }
11858
11864
  } else {
11865
+ const add = set !== false;
11859
11866
  model.value = add ? [item] : [];
11860
- menu.value = false;
11867
+ nextTick(() => {
11868
+ menu.value = false;
11869
+ });
11861
11870
  }
11862
11871
  }
11863
11872
  function onBlur(e) {
@@ -11891,14 +11900,9 @@ const VSelect = genericComponent()({
11891
11900
  });
11892
11901
  }
11893
11902
  });
11894
- watch(displayItems, (val, oldVal) => {
11895
- if (!isFocused.value) return;
11896
- if (!val.length && props.hideNoData) {
11897
- menu.value = false;
11898
- }
11899
- if (!oldVal.length && val.length) {
11900
- menu.value = true;
11901
- }
11903
+ watch(() => props.items, val => {
11904
+ if (!isFocused.value || !val.length || menu.value) return;
11905
+ menu.value = true;
11902
11906
  });
11903
11907
  useRender(() => {
11904
11908
  const hasChips = !!(props.chips || slots.chip);
@@ -11976,7 +11980,7 @@ const VSelect = genericComponent()({
11976
11980
  const itemProps = mergeProps(item.props, {
11977
11981
  ref: itemRef,
11978
11982
  key: index,
11979
- onClick: () => select(item)
11983
+ onClick: () => select(item, null)
11980
11984
  });
11981
11985
  return slots.item?.({
11982
11986
  item,
@@ -12008,7 +12012,7 @@ const VSelect = genericComponent()({
12008
12012
  function onChipClose(e) {
12009
12013
  e.stopPropagation();
12010
12014
  e.preventDefault();
12011
- select(item);
12015
+ select(item, false);
12012
12016
  }
12013
12017
  const slotProps = {
12014
12018
  'onClick:close': onChipClose,
@@ -12118,7 +12122,7 @@ function filterItems(items, query, options) {
12118
12122
  if (typeof item === 'object') {
12119
12123
  const filterKeys = keys || Object.keys(transformed);
12120
12124
  for (const key of filterKeys) {
12121
- const value = getPropertyFromItem(transformed, key, transformed);
12125
+ const value = getPropertyFromItem(transformed, key);
12122
12126
  const keyFilter = options?.customKeyFilter?.[key];
12123
12127
  match = keyFilter ? keyFilter(value, query, item) : filter(value, query, item);
12124
12128
  if (match !== -1 && match !== false) {
@@ -12283,6 +12287,8 @@ const VAutocomplete = genericComponent()({
12283
12287
  }
12284
12288
  return filteredItems.value;
12285
12289
  });
12290
+ const hasChips = computed(() => !!(props.chips || slots.chip));
12291
+ const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection);
12286
12292
  const selectedValues = computed(() => model.value.map(selection => selection.props.value));
12287
12293
  const highlightFirst = computed(() => {
12288
12294
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
@@ -12341,7 +12347,7 @@ const VAutocomplete = genericComponent()({
12341
12347
  }
12342
12348
  const originalSelectionIndex = selectionIndex.value;
12343
12349
  const selectedItem = model.value[selectionIndex.value];
12344
- if (selectedItem && !selectedItem.props.disabled) select(selectedItem);
12350
+ if (selectedItem && !selectedItem.props.disabled) select(selectedItem, false);
12345
12351
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12346
12352
  }
12347
12353
  if (e.key === 'ArrowLeft') {
@@ -12392,35 +12398,41 @@ const VAutocomplete = genericComponent()({
12392
12398
  if (v == null || v === '' && !props.multiple) model.value = [];
12393
12399
  }
12394
12400
  const isSelecting = shallowRef(false);
12401
+
12402
+ /** @param set - null means toggle */
12395
12403
  function select(item) {
12404
+ let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12396
12405
  if (item.props.disabled) return;
12397
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12398
- const add = index === -1;
12399
12406
  if (props.multiple) {
12400
- if (add) {
12401
- model.value = [...model.value, item];
12402
- } else {
12403
- const value = [...model.value];
12407
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12408
+ const add = set == null ? !~index : set;
12409
+ if (~index) {
12410
+ const value = add ? [...model.value, item] : [...model.value];
12404
12411
  value.splice(index, 1);
12405
12412
  model.value = value;
12413
+ } else if (add) {
12414
+ model.value = [...model.value, item];
12406
12415
  }
12407
12416
  if (props.clearOnSelect) {
12408
12417
  search.value = '';
12409
12418
  }
12410
12419
  } else {
12420
+ const add = set !== false;
12411
12421
  model.value = add ? [item] : [];
12412
- isSelecting.value = true;
12413
- search.value = add ? item.title : '';
12414
- menu.value = false;
12415
- isPristine.value = true;
12416
- nextTick(() => isSelecting.value = false);
12422
+ search.value = add && !hasSelectionSlot.value ? item.title : '';
12423
+
12424
+ // watch for search watcher to trigger
12425
+ nextTick(() => {
12426
+ menu.value = false;
12427
+ isPristine.value = true;
12428
+ });
12417
12429
  }
12418
12430
  }
12419
12431
  watch(isFocused, (val, oldVal) => {
12420
12432
  if (val === oldVal) return;
12421
12433
  if (val) {
12422
12434
  isSelecting.value = true;
12423
- search.value = props.multiple ? '' : String(model.value.at(-1)?.props.title ?? '');
12435
+ search.value = props.multiple || hasSelectionSlot.value ? '' : String(model.value.at(-1)?.props.title ?? '');
12424
12436
  isPristine.value = true;
12425
12437
  nextTick(() => isSelecting.value = false);
12426
12438
  } else {
@@ -12450,17 +12462,11 @@ const VAutocomplete = genericComponent()({
12450
12462
  });
12451
12463
  }
12452
12464
  });
12453
- watch(displayItems, (val, oldVal) => {
12454
- if (!isFocused.value) return;
12455
- if (!val.length && props.hideNoData) {
12456
- menu.value = false;
12457
- }
12458
- if (!oldVal.length && val.length) {
12459
- menu.value = true;
12460
- }
12465
+ watch(() => props.items, val => {
12466
+ if (!isFocused.value || !val.length || menu.value) return;
12467
+ menu.value = true;
12461
12468
  });
12462
12469
  useRender(() => {
12463
- const hasChips = !!(props.chips || slots.chip);
12464
12470
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
12465
12471
  const isDirty = model.value.length > 0;
12466
12472
  const textFieldProps = VTextField.filterProps(props);
@@ -12478,7 +12484,7 @@ const VAutocomplete = genericComponent()({
12478
12484
  "class": ['v-autocomplete', `v-autocomplete--${props.multiple ? 'multiple' : 'single'}`, {
12479
12485
  'v-autocomplete--active-menu': menu.value,
12480
12486
  'v-autocomplete--chips': !!props.chips,
12481
- 'v-autocomplete--selection-slot': !!slots.selection,
12487
+ 'v-autocomplete--selection-slot': !!hasSelectionSlot.value,
12482
12488
  'v-autocomplete--selecting-index': selectionIndex.value > -1
12483
12489
  }, props.class],
12484
12490
  "style": props.style,
@@ -12533,13 +12539,15 @@ const VAutocomplete = genericComponent()({
12533
12539
  ref: itemRef,
12534
12540
  key: index,
12535
12541
  active: highlightFirst.value && index === 0 ? true : undefined,
12536
- onClick: () => select(item)
12542
+ onClick: () => select(item, null)
12537
12543
  });
12538
12544
  return slots.item?.({
12539
12545
  item,
12540
12546
  index,
12541
12547
  props: itemProps
12542
- }) ?? createVNode(VListItem, itemProps, {
12548
+ }) ?? createVNode(VListItem, mergeProps(itemProps, {
12549
+ "role": "option"
12550
+ }), {
12543
12551
  prepend: _ref4 => {
12544
12552
  let {
12545
12553
  isSelected
@@ -12566,7 +12574,7 @@ const VAutocomplete = genericComponent()({
12566
12574
  function onChipClose(e) {
12567
12575
  e.stopPropagation();
12568
12576
  e.preventDefault();
12569
- select(item);
12577
+ select(item, false);
12570
12578
  }
12571
12579
  const slotProps = {
12572
12580
  'onClick:close': onChipClose,
@@ -12577,8 +12585,8 @@ const VAutocomplete = genericComponent()({
12577
12585
  modelValue: true,
12578
12586
  'onUpdate:modelValue': undefined
12579
12587
  };
12580
- const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
12581
- const slotContent = hasSlot ? ensureValidVNode(hasChips ? slots.chip({
12588
+ const hasSlot = hasChips.value ? !!slots.chip : !!slots.selection;
12589
+ const slotContent = hasSlot ? ensureValidVNode(hasChips.value ? slots.chip({
12582
12590
  item,
12583
12591
  index,
12584
12592
  props: slotProps
@@ -12591,7 +12599,7 @@ const VAutocomplete = genericComponent()({
12591
12599
  "key": item.value,
12592
12600
  "class": ['v-autocomplete__selection', index === selectionIndex.value && ['v-autocomplete__selection--selected', textColorClasses.value]],
12593
12601
  "style": index === selectionIndex.value ? textColorStyles.value : {}
12594
- }, [hasChips ? !slots.chip ? createVNode(VChip, mergeProps({
12602
+ }, [hasChips.value ? !slots.chip ? createVNode(VChip, mergeProps({
12595
12603
  "key": "chip",
12596
12604
  "closable": props.closableChips,
12597
12605
  "size": "small",
@@ -16030,14 +16038,16 @@ const VCombobox = genericComponent()({
16030
16038
  return props.multiple ? transformed : transformed[0] ?? null;
16031
16039
  });
16032
16040
  const form = useForm();
16033
- const _search = shallowRef(!props.multiple ? model.value[0]?.title ?? '' : '');
16041
+ const hasChips = computed(() => !!(props.chips || slots.chip));
16042
+ const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection);
16043
+ const _search = shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
16034
16044
  const search = computed({
16035
16045
  get: () => {
16036
16046
  return _search.value;
16037
16047
  },
16038
16048
  set: val => {
16039
16049
  _search.value = val ?? '';
16040
- if (!props.multiple) {
16050
+ if (!props.multiple && !hasSelectionSlot.value) {
16041
16051
  model.value = [transformItem$3(props, val)];
16042
16052
  }
16043
16053
  if (val && props.multiple && props.delimiters?.length) {
@@ -16068,7 +16078,7 @@ const VCombobox = genericComponent()({
16068
16078
  emit('update:search', value);
16069
16079
  });
16070
16080
  watch(model, value => {
16071
- if (!props.multiple) {
16081
+ if (!props.multiple && !hasSelectionSlot.value) {
16072
16082
  _search.value = value[0]?.title ?? '';
16073
16083
  }
16074
16084
  });
@@ -16133,6 +16143,10 @@ const VCombobox = genericComponent()({
16133
16143
  if (e.key === 'ArrowDown' && highlightFirst.value) {
16134
16144
  listRef.value?.focus('next');
16135
16145
  }
16146
+ if (e.key === 'Enter' && search.value) {
16147
+ select(transformItem$3(props, search.value));
16148
+ if (hasSelectionSlot.value) search.value = '';
16149
+ }
16136
16150
  if (!props.multiple) return;
16137
16151
  if (['Backspace', 'Delete'].includes(e.key)) {
16138
16152
  if (selectionIndex.value < 0) {
@@ -16166,10 +16180,6 @@ const VCombobox = genericComponent()({
16166
16180
  vTextFieldRef.value.setSelectionRange(0, 0);
16167
16181
  }
16168
16182
  }
16169
- if (e.key === 'Enter' && search.value) {
16170
- select(transformItem$3(props, search.value));
16171
- search.value = '';
16172
- }
16173
16183
  }
16174
16184
  function onAfterLeave() {
16175
16185
  if (isFocused.value) {
@@ -16180,6 +16190,7 @@ const VCombobox = genericComponent()({
16180
16190
  /** @param set - null means toggle */
16181
16191
  function select(item) {
16182
16192
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
16193
+ if (item.props.disabled) return;
16183
16194
  if (props.multiple) {
16184
16195
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
16185
16196
  const add = set == null ? !~index : set;
@@ -16196,7 +16207,7 @@ const VCombobox = genericComponent()({
16196
16207
  } else {
16197
16208
  const add = set !== false;
16198
16209
  model.value = add ? [item] : [];
16199
- _search.value = add ? item.title : '';
16210
+ _search.value = add && !hasSelectionSlot.value ? item.title : '';
16200
16211
 
16201
16212
  // watch for search watcher to trigger
16202
16213
  nextTick(() => {
@@ -16228,7 +16239,7 @@ const VCombobox = genericComponent()({
16228
16239
  return value === displayItems.value[0].value;
16229
16240
  })) {
16230
16241
  select(displayItems.value[0]);
16231
- } else if (props.multiple && search.value) {
16242
+ } else if (search.value) {
16232
16243
  select(transformItem$3(props, search.value));
16233
16244
  }
16234
16245
  });
@@ -16240,17 +16251,11 @@ const VCombobox = genericComponent()({
16240
16251
  });
16241
16252
  }
16242
16253
  });
16243
- watch(displayItems, (val, oldVal) => {
16244
- if (!isFocused.value) return;
16245
- if (!val.length && props.hideNoData) {
16246
- menu.value = false;
16247
- }
16248
- if (!oldVal.length && val.length) {
16249
- menu.value = true;
16250
- }
16254
+ watch(() => props.items, val => {
16255
+ if (!isFocused.value || !val.length || menu.value) return;
16256
+ menu.value = true;
16251
16257
  });
16252
16258
  useRender(() => {
16253
- const hasChips = !!(props.chips || slots.chip);
16254
16259
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
16255
16260
  const isDirty = model.value.length > 0;
16256
16261
  const textFieldProps = VTextField.filterProps(props);
@@ -16267,7 +16272,7 @@ const VCombobox = genericComponent()({
16267
16272
  "class": ['v-combobox', {
16268
16273
  'v-combobox--active-menu': menu.value,
16269
16274
  'v-combobox--chips': !!props.chips,
16270
- 'v-combobox--selection-slot': !!slots.selection,
16275
+ 'v-combobox--selection-slot': !!hasSelectionSlot.value,
16271
16276
  'v-combobox--selecting-index': selectionIndex.value > -1,
16272
16277
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
16273
16278
  }, props.class],
@@ -16329,7 +16334,9 @@ const VCombobox = genericComponent()({
16329
16334
  item,
16330
16335
  index,
16331
16336
  props: itemProps
16332
- }) ?? createVNode(VListItem, itemProps, {
16337
+ }) ?? createVNode(VListItem, mergeProps(itemProps, {
16338
+ "role": "option"
16339
+ }), {
16333
16340
  prepend: _ref4 => {
16334
16341
  let {
16335
16342
  isSelected
@@ -16367,8 +16374,8 @@ const VCombobox = genericComponent()({
16367
16374
  modelValue: true,
16368
16375
  'onUpdate:modelValue': undefined
16369
16376
  };
16370
- const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
16371
- const slotContent = hasSlot ? ensureValidVNode(hasChips ? slots.chip({
16377
+ const hasSlot = hasChips.value ? !!slots.chip : !!slots.selection;
16378
+ const slotContent = hasSlot ? ensureValidVNode(hasChips.value ? slots.chip({
16372
16379
  item,
16373
16380
  index,
16374
16381
  props: slotProps
@@ -16381,7 +16388,7 @@ const VCombobox = genericComponent()({
16381
16388
  "key": item.value,
16382
16389
  "class": ['v-combobox__selection', index === selectionIndex.value && ['v-combobox__selection--selected', textColorClasses.value]],
16383
16390
  "style": index === selectionIndex.value ? textColorStyles.value : {}
16384
- }, [hasChips ? !slots.chip ? createVNode(VChip, mergeProps({
16391
+ }, [hasChips.value ? !slots.chip ? createVNode(VChip, mergeProps({
16385
16392
  "key": "chip",
16386
16393
  "closable": props.closableChips,
16387
16394
  "size": "small",
@@ -17672,7 +17679,7 @@ async function scrollTo(_target, _options, horizontal, goTo) {
17672
17679
  return new Promise(resolve => requestAnimationFrame(function step(currentTime) {
17673
17680
  const timeElapsed = currentTime - startTime;
17674
17681
  const progress = timeElapsed / options.duration;
17675
- const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(Math.max(progress, 1)));
17682
+ const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(clamp(progress, 0, 1)));
17676
17683
  container[property] = location;
17677
17684
 
17678
17685
  // Allow for some jitter if target time has elapsed
@@ -21096,6 +21103,7 @@ const allowedVariants = ['default', 'accordion', 'inset', 'popout'];
21096
21103
  const makeVExpansionPanelsProps = propsFactory({
21097
21104
  color: String,
21098
21105
  flat: Boolean,
21106
+ focusable: Boolean,
21099
21107
  static: Boolean,
21100
21108
  tile: Boolean,
21101
21109
  variant: {
@@ -21130,6 +21138,7 @@ const VExpansionPanels = genericComponent()({
21130
21138
  readonly: toRef(props, 'readonly')
21131
21139
  },
21132
21140
  VExpansionPanelTitle: {
21141
+ focusable: toRef(props, 'focusable'),
21133
21142
  static: toRef(props, 'static')
21134
21143
  }
21135
21144
  });
@@ -21188,6 +21197,7 @@ const makeVExpansionPanelTitleProps = propsFactory({
21188
21197
  default: '$collapse'
21189
21198
  },
21190
21199
  hideActions: Boolean,
21200
+ focusable: Boolean,
21191
21201
  static: Boolean,
21192
21202
  ripple: {
21193
21203
  type: [Boolean, Object],
@@ -21222,6 +21232,7 @@ const VExpansionPanelTitle = genericComponent()({
21222
21232
  useRender(() => withDirectives(createVNode("button", {
21223
21233
  "class": ['v-expansion-panel-title', {
21224
21234
  'v-expansion-panel-title--active': expansionPanel.isSelected.value,
21235
+ 'v-expansion-panel-title--focusable': props.focusable,
21225
21236
  'v-expansion-panel-title--static': props.static
21226
21237
  }, backgroundColorClasses.value, props.class],
21227
21238
  "style": [backgroundColorStyles.value, props.style],
@@ -25892,6 +25903,106 @@ const VCalendar = genericComponent()({
25892
25903
  }
25893
25904
  });
25894
25905
 
25906
+ const makeVFabProps = propsFactory({
25907
+ app: Boolean,
25908
+ appear: Boolean,
25909
+ extended: Boolean,
25910
+ location: {
25911
+ type: String,
25912
+ default: 'bottom end'
25913
+ },
25914
+ offset: Boolean,
25915
+ modelValue: {
25916
+ type: Boolean,
25917
+ default: true
25918
+ },
25919
+ ...omit(makeVBtnProps({
25920
+ active: true
25921
+ }), ['location']),
25922
+ ...makeLayoutItemProps(),
25923
+ ...makeTransitionProps({
25924
+ transition: 'fab-transition'
25925
+ })
25926
+ }, 'VFab');
25927
+ const VFab = genericComponent()({
25928
+ name: 'VFab',
25929
+ props: makeVFabProps(),
25930
+ emits: {
25931
+ 'update:modelValue': value => true
25932
+ },
25933
+ setup(props, _ref) {
25934
+ let {
25935
+ slots
25936
+ } = _ref;
25937
+ const model = useProxiedModel(props, 'modelValue');
25938
+ const height = shallowRef(56);
25939
+ const layoutItemStyles = ref();
25940
+ const {
25941
+ resizeRef
25942
+ } = useResizeObserver(entries => {
25943
+ if (!entries.length) return;
25944
+ height.value = entries[0].target.clientHeight;
25945
+ });
25946
+ const hasPosition = computed(() => props.app || props.absolute);
25947
+ const position = computed(() => {
25948
+ if (!hasPosition.value) return false;
25949
+ return props.location.split(' ').shift();
25950
+ });
25951
+ const orientation = computed(() => {
25952
+ if (!hasPosition.value) return false;
25953
+ return props.location.split(' ')[1] ?? 'end';
25954
+ });
25955
+ useToggleScope(() => props.app, () => {
25956
+ const layout = useLayoutItem({
25957
+ id: props.name,
25958
+ order: computed(() => parseInt(props.order, 10)),
25959
+ position,
25960
+ layoutSize: height,
25961
+ elementSize: computed(() => height.value + 32),
25962
+ active: computed(() => props.app && model.value),
25963
+ absolute: toRef(props, 'absolute')
25964
+ });
25965
+ watchEffect(() => {
25966
+ layoutItemStyles.value = layout.layoutItemStyles.value;
25967
+ });
25968
+ });
25969
+ const vFabRef = ref();
25970
+ useRender(() => {
25971
+ const btnProps = VBtn.filterProps(props);
25972
+ return createVNode("div", {
25973
+ "ref": vFabRef,
25974
+ "class": ['v-fab', {
25975
+ 'v-fab--absolute': props.absolute,
25976
+ 'v-fab--app': !!props.app,
25977
+ 'v-fab--extended': props.extended,
25978
+ 'v-fab--offset': props.offset,
25979
+ [`v-fab--${position.value}`]: hasPosition.value,
25980
+ [`v-fab--${orientation.value}`]: hasPosition.value
25981
+ }, props.class],
25982
+ "style": [props.app ? {
25983
+ ...layoutItemStyles.value
25984
+ } : {
25985
+ height: 'inherit',
25986
+ width: undefined
25987
+ }, props.style]
25988
+ }, [createVNode("div", {
25989
+ "class": "v-fab__container"
25990
+ }, [createVNode(MaybeTransition, {
25991
+ "appear": props.appear,
25992
+ "transition": props.transition
25993
+ }, {
25994
+ default: () => [withDirectives(createVNode(VBtn, mergeProps({
25995
+ "ref": resizeRef
25996
+ }, btnProps, {
25997
+ "active": undefined,
25998
+ "location": undefined
25999
+ }), slots), [[vShow, props.active]])]
26000
+ })])]);
26001
+ });
26002
+ return {};
26003
+ }
26004
+ });
26005
+
25895
26006
  // Utilities
25896
26007
 
25897
26008
  // Types
@@ -25934,6 +26045,8 @@ const makeLineProps = propsFactory({
25934
26045
  type: Array,
25935
26046
  default: () => []
25936
26047
  },
26048
+ min: [String, Number],
26049
+ max: [String, Number],
25937
26050
  padding: {
25938
26051
  type: [String, Number],
25939
26052
  default: 8
@@ -25983,10 +26096,10 @@ const VBarline = genericComponent()({
25983
26096
  maxY
25984
26097
  } = boundary;
25985
26098
  const totalValues = values.length;
25986
- let maxValue = Math.max(...values);
25987
- let minValue = Math.min(...values);
25988
- if (minValue > 0) minValue = 0;
25989
- if (maxValue < 0) maxValue = 0;
26099
+ let maxValue = props.max != null ? Number(props.max) : Math.max(...values);
26100
+ let minValue = props.min != null ? Number(props.min) : Math.min(...values);
26101
+ if (minValue > 0 && props.min == null) minValue = 0;
26102
+ if (maxValue < 0 && props.max == null) maxValue = 0;
25990
26103
  const gridX = maxX / totalValues;
25991
26104
  const gridY = (maxY - minY) / (maxValue - minValue || 1);
25992
26105
  const horizonY = maxY - Math.abs(minValue * gridY);
@@ -26167,8 +26280,8 @@ const VTrendline = genericComponent()({
26167
26280
  maxY
26168
26281
  } = boundary;
26169
26282
  const totalValues = values.length;
26170
- const maxValue = Math.max(...values);
26171
- const minValue = Math.min(...values);
26283
+ const maxValue = props.max != null ? Number(props.max) : Math.max(...values);
26284
+ const minValue = props.min != null ? Number(props.min) : Math.min(...values);
26172
26285
  const gridX = (maxX - minX) / (totalValues - 1);
26173
26286
  const gridY = (maxY - minY) / (maxValue - minValue || 1);
26174
26287
  return values.map((value, index) => {
@@ -26275,6 +26388,10 @@ const VTrendline = genericComponent()({
26275
26388
  "d": genPath(genPoints(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value), props.smooth ? 8 : Number(props.smooth), props.fill, parseInt(props.height, 10)),
26276
26389
  "fill": props.fill ? `url(#${id.value})` : 'none',
26277
26390
  "stroke": props.fill ? 'none' : `url(#${id.value})`
26391
+ }, null), props.fill && createVNode("path", {
26392
+ "d": genPath(genPoints(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value), props.smooth ? 8 : Number(props.smooth), false, parseInt(props.height, 10)),
26393
+ "fill": "none",
26394
+ "stroke": props.color ?? props.gradient?.[0]
26278
26395
  }, null)]);
26279
26396
  });
26280
26397
  }
@@ -26324,6 +26441,137 @@ const VSparkline = genericComponent()({
26324
26441
  }
26325
26442
  });
26326
26443
 
26444
+ // Types
26445
+
26446
+ // Types
26447
+
26448
+ const makeVEmptyStateProps = propsFactory({
26449
+ actionText: String,
26450
+ bgColor: String,
26451
+ color: String,
26452
+ icon: IconValue,
26453
+ image: String,
26454
+ justify: {
26455
+ type: String,
26456
+ default: 'center'
26457
+ },
26458
+ headline: String,
26459
+ title: String,
26460
+ text: String,
26461
+ textWidth: {
26462
+ type: [Number, String],
26463
+ default: 500
26464
+ },
26465
+ href: String,
26466
+ to: String,
26467
+ ...makeComponentProps(),
26468
+ ...makeDimensionProps(),
26469
+ ...makeSizeProps({
26470
+ size: undefined
26471
+ }),
26472
+ ...makeThemeProps()
26473
+ }, 'VEmptyState');
26474
+ const VEmptyState = genericComponent()({
26475
+ name: 'VEmptyState',
26476
+ props: makeVEmptyStateProps(),
26477
+ emits: {
26478
+ 'click:action': e => true
26479
+ },
26480
+ setup(props, _ref) {
26481
+ let {
26482
+ emit,
26483
+ slots
26484
+ } = _ref;
26485
+ const {
26486
+ themeClasses
26487
+ } = provideTheme(props);
26488
+ const {
26489
+ backgroundColorClasses,
26490
+ backgroundColorStyles
26491
+ } = useBackgroundColor(toRef(props, 'bgColor'));
26492
+ const {
26493
+ dimensionStyles
26494
+ } = useDimension(props);
26495
+ function onClickAction(e) {
26496
+ emit('click:action', e);
26497
+ }
26498
+ useRender(() => {
26499
+ const hasActions = !!(slots.actions || props.actionText);
26500
+ const hasHeadline = !!(slots.headline || props.headline);
26501
+ const hasTitle = !!(slots.title || props.title);
26502
+ const hasText = !!(slots.text || props.text);
26503
+ const hasMedia = !!(slots.media || props.image || props.icon);
26504
+ const size = props.size || (props.image ? 200 : 96);
26505
+ return createVNode("div", {
26506
+ "class": ['v-empty-state', {
26507
+ [`v-empty-state--${props.justify}`]: true
26508
+ }, themeClasses.value, backgroundColorClasses.value, props.class],
26509
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style]
26510
+ }, [hasMedia && createVNode("div", {
26511
+ "key": "media",
26512
+ "class": "v-empty-state__media"
26513
+ }, [!slots.media ? createVNode(Fragment, null, [props.image ? createVNode(VImg, {
26514
+ "key": "image",
26515
+ "src": props.image,
26516
+ "height": size
26517
+ }, null) : props.icon ? createVNode(VIcon, {
26518
+ "key": "icon",
26519
+ "size": size,
26520
+ "icon": props.icon
26521
+ }, null) : undefined]) : createVNode(VDefaultsProvider, {
26522
+ "key": "media-defaults",
26523
+ "defaults": {
26524
+ VImg: {
26525
+ src: props.image,
26526
+ height: size
26527
+ },
26528
+ VIcon: {
26529
+ size,
26530
+ icon: props.icon
26531
+ }
26532
+ }
26533
+ }, {
26534
+ default: () => [slots.media()]
26535
+ })]), hasHeadline && createVNode("div", {
26536
+ "key": "headline",
26537
+ "class": "v-empty-state__headline"
26538
+ }, [slots.headline?.() ?? props.headline]), hasTitle && createVNode("div", {
26539
+ "key": "title",
26540
+ "class": "v-empty-state__title"
26541
+ }, [slots.title?.() ?? props.title]), hasText && createVNode("div", {
26542
+ "key": "text",
26543
+ "class": "v-empty-state__text",
26544
+ "style": {
26545
+ maxWidth: convertToUnit(props.textWidth)
26546
+ }
26547
+ }, [slots.text?.() ?? props.text]), slots.default && createVNode("div", {
26548
+ "key": "content",
26549
+ "class": "v-empty-state__content"
26550
+ }, [slots.default()]), hasActions && createVNode("div", {
26551
+ "key": "actions",
26552
+ "class": "v-empty-state__actions"
26553
+ }, [createVNode(VDefaultsProvider, {
26554
+ "defaults": {
26555
+ VBtn: {
26556
+ class: 'v-empty-state__action-btn',
26557
+ color: props.color,
26558
+ text: props.actionText
26559
+ }
26560
+ }
26561
+ }, {
26562
+ default: () => [slots.actions?.({
26563
+ props: {
26564
+ onClick: onClickAction
26565
+ }
26566
+ }) ?? createVNode(VBtn, {
26567
+ "onClick": onClickAction
26568
+ }, null)]
26569
+ })])]);
26570
+ });
26571
+ return {};
26572
+ }
26573
+ });
26574
+
26327
26575
  var components = /*#__PURE__*/Object.freeze({
26328
26576
  __proto__: null,
26329
26577
  VAlert: VAlert,
@@ -26376,6 +26624,7 @@ var components = /*#__PURE__*/Object.freeze({
26376
26624
  VDataIterator: VDataIterator,
26377
26625
  VDataTable: VDataTable,
26378
26626
  VDataTableFooter: VDataTableFooter,
26627
+ VDataTableHeaders: VDataTableHeaders,
26379
26628
  VDataTableRow: VDataTableRow,
26380
26629
  VDataTableRows: VDataTableRows,
26381
26630
  VDataTableServer: VDataTableServer,
@@ -26392,12 +26641,14 @@ var components = /*#__PURE__*/Object.freeze({
26392
26641
  VDialogTopTransition: VDialogTopTransition,
26393
26642
  VDialogTransition: VDialogTransition,
26394
26643
  VDivider: VDivider,
26644
+ VEmptyState: VEmptyState,
26395
26645
  VExpandTransition: VExpandTransition,
26396
26646
  VExpandXTransition: VExpandXTransition,
26397
26647
  VExpansionPanel: VExpansionPanel,
26398
26648
  VExpansionPanelText: VExpansionPanelText,
26399
26649
  VExpansionPanelTitle: VExpansionPanelTitle,
26400
26650
  VExpansionPanels: VExpansionPanels,
26651
+ VFab: VFab,
26401
26652
  VFabTransition: VFabTransition,
26402
26653
  VFadeTransition: VFadeTransition,
26403
26654
  VField: VField,
@@ -26714,7 +26965,7 @@ function createVuetify$1() {
26714
26965
  goTo
26715
26966
  };
26716
26967
  }
26717
- const version$1 = "3.5.5";
26968
+ const version$1 = "3.5.7";
26718
26969
  createVuetify$1.version = version$1;
26719
26970
 
26720
26971
  // Vue's inject() can only be used in setup
@@ -26728,7 +26979,7 @@ function inject(key) {
26728
26979
 
26729
26980
  /* eslint-disable local-rules/sort-imports */
26730
26981
 
26731
- const version = "3.5.5";
26982
+ const version = "3.5.7";
26732
26983
 
26733
26984
  /* eslint-disable local-rules/sort-imports */
26734
26985