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
package/dist/vuetify.js CHANGED
@@ -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
  */
@@ -6885,7 +6885,8 @@
6885
6885
  id,
6886
6886
  messagesId,
6887
6887
  isDisabled,
6888
- isReadonly
6888
+ isReadonly,
6889
+ isValid
6889
6890
  } = _ref2;
6890
6891
  return vue.createVNode(VCheckboxBtn, vue.mergeProps(checkboxProps, {
6891
6892
  "id": id.value,
@@ -6893,6 +6894,7 @@
6893
6894
  "disabled": isDisabled.value,
6894
6895
  "readonly": isReadonly.value
6895
6896
  }, controlAttrs, {
6897
+ "error": isValid.value === false,
6896
6898
  "modelValue": model.value,
6897
6899
  "onUpdate:modelValue": $event => model.value = $event,
6898
6900
  "onFocus": focus,
@@ -11842,20 +11844,27 @@
11842
11844
  model.value = [item];
11843
11845
  }
11844
11846
  }
11847
+
11848
+ /** @param set - null means toggle */
11845
11849
  function select(item) {
11846
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
11847
- const add = index === -1;
11850
+ let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
11851
+ if (item.props.disabled) return;
11848
11852
  if (props.multiple) {
11849
- if (add) {
11850
- model.value = [...model.value, item];
11851
- } else {
11852
- const value = [...model.value];
11853
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
11854
+ const add = set == null ? !~index : set;
11855
+ if (~index) {
11856
+ const value = add ? [...model.value, item] : [...model.value];
11853
11857
  value.splice(index, 1);
11854
11858
  model.value = value;
11859
+ } else if (add) {
11860
+ model.value = [...model.value, item];
11855
11861
  }
11856
11862
  } else {
11863
+ const add = set !== false;
11857
11864
  model.value = add ? [item] : [];
11858
- menu.value = false;
11865
+ vue.nextTick(() => {
11866
+ menu.value = false;
11867
+ });
11859
11868
  }
11860
11869
  }
11861
11870
  function onBlur(e) {
@@ -11889,14 +11898,9 @@
11889
11898
  });
11890
11899
  }
11891
11900
  });
11892
- vue.watch(displayItems, (val, oldVal) => {
11893
- if (!isFocused.value) return;
11894
- if (!val.length && props.hideNoData) {
11895
- menu.value = false;
11896
- }
11897
- if (!oldVal.length && val.length) {
11898
- menu.value = true;
11899
- }
11901
+ vue.watch(() => props.items, val => {
11902
+ if (!isFocused.value || !val.length || menu.value) return;
11903
+ menu.value = true;
11900
11904
  });
11901
11905
  useRender(() => {
11902
11906
  const hasChips = !!(props.chips || slots.chip);
@@ -11974,7 +11978,7 @@
11974
11978
  const itemProps = vue.mergeProps(item.props, {
11975
11979
  ref: itemRef,
11976
11980
  key: index,
11977
- onClick: () => select(item)
11981
+ onClick: () => select(item, null)
11978
11982
  });
11979
11983
  return slots.item?.({
11980
11984
  item,
@@ -12006,7 +12010,7 @@
12006
12010
  function onChipClose(e) {
12007
12011
  e.stopPropagation();
12008
12012
  e.preventDefault();
12009
- select(item);
12013
+ select(item, false);
12010
12014
  }
12011
12015
  const slotProps = {
12012
12016
  'onClick:close': onChipClose,
@@ -12116,7 +12120,7 @@
12116
12120
  if (typeof item === 'object') {
12117
12121
  const filterKeys = keys || Object.keys(transformed);
12118
12122
  for (const key of filterKeys) {
12119
- const value = getPropertyFromItem(transformed, key, transformed);
12123
+ const value = getPropertyFromItem(transformed, key);
12120
12124
  const keyFilter = options?.customKeyFilter?.[key];
12121
12125
  match = keyFilter ? keyFilter(value, query, item) : filter(value, query, item);
12122
12126
  if (match !== -1 && match !== false) {
@@ -12281,6 +12285,8 @@
12281
12285
  }
12282
12286
  return filteredItems.value;
12283
12287
  });
12288
+ const hasChips = vue.computed(() => !!(props.chips || slots.chip));
12289
+ const hasSelectionSlot = vue.computed(() => hasChips.value || !!slots.selection);
12284
12290
  const selectedValues = vue.computed(() => model.value.map(selection => selection.props.value));
12285
12291
  const highlightFirst = vue.computed(() => {
12286
12292
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
@@ -12339,7 +12345,7 @@
12339
12345
  }
12340
12346
  const originalSelectionIndex = selectionIndex.value;
12341
12347
  const selectedItem = model.value[selectionIndex.value];
12342
- if (selectedItem && !selectedItem.props.disabled) select(selectedItem);
12348
+ if (selectedItem && !selectedItem.props.disabled) select(selectedItem, false);
12343
12349
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12344
12350
  }
12345
12351
  if (e.key === 'ArrowLeft') {
@@ -12390,35 +12396,41 @@
12390
12396
  if (v == null || v === '' && !props.multiple) model.value = [];
12391
12397
  }
12392
12398
  const isSelecting = vue.shallowRef(false);
12399
+
12400
+ /** @param set - null means toggle */
12393
12401
  function select(item) {
12402
+ let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12394
12403
  if (item.props.disabled) return;
12395
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12396
- const add = index === -1;
12397
12404
  if (props.multiple) {
12398
- if (add) {
12399
- model.value = [...model.value, item];
12400
- } else {
12401
- const value = [...model.value];
12405
+ const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12406
+ const add = set == null ? !~index : set;
12407
+ if (~index) {
12408
+ const value = add ? [...model.value, item] : [...model.value];
12402
12409
  value.splice(index, 1);
12403
12410
  model.value = value;
12411
+ } else if (add) {
12412
+ model.value = [...model.value, item];
12404
12413
  }
12405
12414
  if (props.clearOnSelect) {
12406
12415
  search.value = '';
12407
12416
  }
12408
12417
  } else {
12418
+ const add = set !== false;
12409
12419
  model.value = add ? [item] : [];
12410
- isSelecting.value = true;
12411
- search.value = add ? item.title : '';
12412
- menu.value = false;
12413
- isPristine.value = true;
12414
- vue.nextTick(() => isSelecting.value = false);
12420
+ search.value = add && !hasSelectionSlot.value ? item.title : '';
12421
+
12422
+ // watch for search watcher to trigger
12423
+ vue.nextTick(() => {
12424
+ menu.value = false;
12425
+ isPristine.value = true;
12426
+ });
12415
12427
  }
12416
12428
  }
12417
12429
  vue.watch(isFocused, (val, oldVal) => {
12418
12430
  if (val === oldVal) return;
12419
12431
  if (val) {
12420
12432
  isSelecting.value = true;
12421
- search.value = props.multiple ? '' : String(model.value.at(-1)?.props.title ?? '');
12433
+ search.value = props.multiple || hasSelectionSlot.value ? '' : String(model.value.at(-1)?.props.title ?? '');
12422
12434
  isPristine.value = true;
12423
12435
  vue.nextTick(() => isSelecting.value = false);
12424
12436
  } else {
@@ -12448,17 +12460,11 @@
12448
12460
  });
12449
12461
  }
12450
12462
  });
12451
- vue.watch(displayItems, (val, oldVal) => {
12452
- if (!isFocused.value) return;
12453
- if (!val.length && props.hideNoData) {
12454
- menu.value = false;
12455
- }
12456
- if (!oldVal.length && val.length) {
12457
- menu.value = true;
12458
- }
12463
+ vue.watch(() => props.items, val => {
12464
+ if (!isFocused.value || !val.length || menu.value) return;
12465
+ menu.value = true;
12459
12466
  });
12460
12467
  useRender(() => {
12461
- const hasChips = !!(props.chips || slots.chip);
12462
12468
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
12463
12469
  const isDirty = model.value.length > 0;
12464
12470
  const textFieldProps = VTextField.filterProps(props);
@@ -12476,7 +12482,7 @@
12476
12482
  "class": ['v-autocomplete', `v-autocomplete--${props.multiple ? 'multiple' : 'single'}`, {
12477
12483
  'v-autocomplete--active-menu': menu.value,
12478
12484
  'v-autocomplete--chips': !!props.chips,
12479
- 'v-autocomplete--selection-slot': !!slots.selection,
12485
+ 'v-autocomplete--selection-slot': !!hasSelectionSlot.value,
12480
12486
  'v-autocomplete--selecting-index': selectionIndex.value > -1
12481
12487
  }, props.class],
12482
12488
  "style": props.style,
@@ -12531,13 +12537,15 @@
12531
12537
  ref: itemRef,
12532
12538
  key: index,
12533
12539
  active: highlightFirst.value && index === 0 ? true : undefined,
12534
- onClick: () => select(item)
12540
+ onClick: () => select(item, null)
12535
12541
  });
12536
12542
  return slots.item?.({
12537
12543
  item,
12538
12544
  index,
12539
12545
  props: itemProps
12540
- }) ?? vue.createVNode(VListItem, itemProps, {
12546
+ }) ?? vue.createVNode(VListItem, vue.mergeProps(itemProps, {
12547
+ "role": "option"
12548
+ }), {
12541
12549
  prepend: _ref4 => {
12542
12550
  let {
12543
12551
  isSelected
@@ -12564,7 +12572,7 @@
12564
12572
  function onChipClose(e) {
12565
12573
  e.stopPropagation();
12566
12574
  e.preventDefault();
12567
- select(item);
12575
+ select(item, false);
12568
12576
  }
12569
12577
  const slotProps = {
12570
12578
  'onClick:close': onChipClose,
@@ -12575,8 +12583,8 @@
12575
12583
  modelValue: true,
12576
12584
  'onUpdate:modelValue': undefined
12577
12585
  };
12578
- const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
12579
- const slotContent = hasSlot ? ensureValidVNode(hasChips ? slots.chip({
12586
+ const hasSlot = hasChips.value ? !!slots.chip : !!slots.selection;
12587
+ const slotContent = hasSlot ? ensureValidVNode(hasChips.value ? slots.chip({
12580
12588
  item,
12581
12589
  index,
12582
12590
  props: slotProps
@@ -12589,7 +12597,7 @@
12589
12597
  "key": item.value,
12590
12598
  "class": ['v-autocomplete__selection', index === selectionIndex.value && ['v-autocomplete__selection--selected', textColorClasses.value]],
12591
12599
  "style": index === selectionIndex.value ? textColorStyles.value : {}
12592
- }, [hasChips ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
12600
+ }, [hasChips.value ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
12593
12601
  "key": "chip",
12594
12602
  "closable": props.closableChips,
12595
12603
  "size": "small",
@@ -16028,14 +16036,16 @@
16028
16036
  return props.multiple ? transformed : transformed[0] ?? null;
16029
16037
  });
16030
16038
  const form = useForm();
16031
- const _search = vue.shallowRef(!props.multiple ? model.value[0]?.title ?? '' : '');
16039
+ const hasChips = vue.computed(() => !!(props.chips || slots.chip));
16040
+ const hasSelectionSlot = vue.computed(() => hasChips.value || !!slots.selection);
16041
+ const _search = vue.shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
16032
16042
  const search = vue.computed({
16033
16043
  get: () => {
16034
16044
  return _search.value;
16035
16045
  },
16036
16046
  set: val => {
16037
16047
  _search.value = val ?? '';
16038
- if (!props.multiple) {
16048
+ if (!props.multiple && !hasSelectionSlot.value) {
16039
16049
  model.value = [transformItem$3(props, val)];
16040
16050
  }
16041
16051
  if (val && props.multiple && props.delimiters?.length) {
@@ -16066,7 +16076,7 @@
16066
16076
  emit('update:search', value);
16067
16077
  });
16068
16078
  vue.watch(model, value => {
16069
- if (!props.multiple) {
16079
+ if (!props.multiple && !hasSelectionSlot.value) {
16070
16080
  _search.value = value[0]?.title ?? '';
16071
16081
  }
16072
16082
  });
@@ -16131,6 +16141,10 @@
16131
16141
  if (e.key === 'ArrowDown' && highlightFirst.value) {
16132
16142
  listRef.value?.focus('next');
16133
16143
  }
16144
+ if (e.key === 'Enter' && search.value) {
16145
+ select(transformItem$3(props, search.value));
16146
+ if (hasSelectionSlot.value) search.value = '';
16147
+ }
16134
16148
  if (!props.multiple) return;
16135
16149
  if (['Backspace', 'Delete'].includes(e.key)) {
16136
16150
  if (selectionIndex.value < 0) {
@@ -16164,10 +16178,6 @@
16164
16178
  vTextFieldRef.value.setSelectionRange(0, 0);
16165
16179
  }
16166
16180
  }
16167
- if (e.key === 'Enter' && search.value) {
16168
- select(transformItem$3(props, search.value));
16169
- search.value = '';
16170
- }
16171
16181
  }
16172
16182
  function onAfterLeave() {
16173
16183
  if (isFocused.value) {
@@ -16178,6 +16188,7 @@
16178
16188
  /** @param set - null means toggle */
16179
16189
  function select(item) {
16180
16190
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
16191
+ if (item.props.disabled) return;
16181
16192
  if (props.multiple) {
16182
16193
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
16183
16194
  const add = set == null ? !~index : set;
@@ -16194,7 +16205,7 @@
16194
16205
  } else {
16195
16206
  const add = set !== false;
16196
16207
  model.value = add ? [item] : [];
16197
- _search.value = add ? item.title : '';
16208
+ _search.value = add && !hasSelectionSlot.value ? item.title : '';
16198
16209
 
16199
16210
  // watch for search watcher to trigger
16200
16211
  vue.nextTick(() => {
@@ -16226,7 +16237,7 @@
16226
16237
  return value === displayItems.value[0].value;
16227
16238
  })) {
16228
16239
  select(displayItems.value[0]);
16229
- } else if (props.multiple && search.value) {
16240
+ } else if (search.value) {
16230
16241
  select(transformItem$3(props, search.value));
16231
16242
  }
16232
16243
  });
@@ -16238,17 +16249,11 @@
16238
16249
  });
16239
16250
  }
16240
16251
  });
16241
- vue.watch(displayItems, (val, oldVal) => {
16242
- if (!isFocused.value) return;
16243
- if (!val.length && props.hideNoData) {
16244
- menu.value = false;
16245
- }
16246
- if (!oldVal.length && val.length) {
16247
- menu.value = true;
16248
- }
16252
+ vue.watch(() => props.items, val => {
16253
+ if (!isFocused.value || !val.length || menu.value) return;
16254
+ menu.value = true;
16249
16255
  });
16250
16256
  useRender(() => {
16251
- const hasChips = !!(props.chips || slots.chip);
16252
16257
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
16253
16258
  const isDirty = model.value.length > 0;
16254
16259
  const textFieldProps = VTextField.filterProps(props);
@@ -16265,7 +16270,7 @@
16265
16270
  "class": ['v-combobox', {
16266
16271
  'v-combobox--active-menu': menu.value,
16267
16272
  'v-combobox--chips': !!props.chips,
16268
- 'v-combobox--selection-slot': !!slots.selection,
16273
+ 'v-combobox--selection-slot': !!hasSelectionSlot.value,
16269
16274
  'v-combobox--selecting-index': selectionIndex.value > -1,
16270
16275
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
16271
16276
  }, props.class],
@@ -16327,7 +16332,9 @@
16327
16332
  item,
16328
16333
  index,
16329
16334
  props: itemProps
16330
- }) ?? vue.createVNode(VListItem, itemProps, {
16335
+ }) ?? vue.createVNode(VListItem, vue.mergeProps(itemProps, {
16336
+ "role": "option"
16337
+ }), {
16331
16338
  prepend: _ref4 => {
16332
16339
  let {
16333
16340
  isSelected
@@ -16365,8 +16372,8 @@
16365
16372
  modelValue: true,
16366
16373
  'onUpdate:modelValue': undefined
16367
16374
  };
16368
- const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
16369
- const slotContent = hasSlot ? ensureValidVNode(hasChips ? slots.chip({
16375
+ const hasSlot = hasChips.value ? !!slots.chip : !!slots.selection;
16376
+ const slotContent = hasSlot ? ensureValidVNode(hasChips.value ? slots.chip({
16370
16377
  item,
16371
16378
  index,
16372
16379
  props: slotProps
@@ -16379,7 +16386,7 @@
16379
16386
  "key": item.value,
16380
16387
  "class": ['v-combobox__selection', index === selectionIndex.value && ['v-combobox__selection--selected', textColorClasses.value]],
16381
16388
  "style": index === selectionIndex.value ? textColorStyles.value : {}
16382
- }, [hasChips ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
16389
+ }, [hasChips.value ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
16383
16390
  "key": "chip",
16384
16391
  "closable": props.closableChips,
16385
16392
  "size": "small",
@@ -17670,7 +17677,7 @@
17670
17677
  return new Promise(resolve => requestAnimationFrame(function step(currentTime) {
17671
17678
  const timeElapsed = currentTime - startTime;
17672
17679
  const progress = timeElapsed / options.duration;
17673
- const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(Math.max(progress, 1)));
17680
+ const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(clamp(progress, 0, 1)));
17674
17681
  container[property] = location;
17675
17682
 
17676
17683
  // Allow for some jitter if target time has elapsed
@@ -21094,6 +21101,7 @@
21094
21101
  const makeVExpansionPanelsProps = propsFactory({
21095
21102
  color: String,
21096
21103
  flat: Boolean,
21104
+ focusable: Boolean,
21097
21105
  static: Boolean,
21098
21106
  tile: Boolean,
21099
21107
  variant: {
@@ -21128,6 +21136,7 @@
21128
21136
  readonly: vue.toRef(props, 'readonly')
21129
21137
  },
21130
21138
  VExpansionPanelTitle: {
21139
+ focusable: vue.toRef(props, 'focusable'),
21131
21140
  static: vue.toRef(props, 'static')
21132
21141
  }
21133
21142
  });
@@ -21186,6 +21195,7 @@
21186
21195
  default: '$collapse'
21187
21196
  },
21188
21197
  hideActions: Boolean,
21198
+ focusable: Boolean,
21189
21199
  static: Boolean,
21190
21200
  ripple: {
21191
21201
  type: [Boolean, Object],
@@ -21220,6 +21230,7 @@
21220
21230
  useRender(() => vue.withDirectives(vue.createVNode("button", {
21221
21231
  "class": ['v-expansion-panel-title', {
21222
21232
  'v-expansion-panel-title--active': expansionPanel.isSelected.value,
21233
+ 'v-expansion-panel-title--focusable': props.focusable,
21223
21234
  'v-expansion-panel-title--static': props.static
21224
21235
  }, backgroundColorClasses.value, props.class],
21225
21236
  "style": [backgroundColorStyles.value, props.style],
@@ -25392,6 +25403,7 @@
25392
25403
  VDataIterator: VDataIterator,
25393
25404
  VDataTable: VDataTable,
25394
25405
  VDataTableFooter: VDataTableFooter,
25406
+ VDataTableHeaders: VDataTableHeaders,
25395
25407
  VDataTableRow: VDataTableRow,
25396
25408
  VDataTableRows: VDataTableRows,
25397
25409
  VDataTableServer: VDataTableServer,
@@ -25727,7 +25739,7 @@
25727
25739
  goTo
25728
25740
  };
25729
25741
  }
25730
- const version$1 = "3.5.5";
25742
+ const version$1 = "3.5.7";
25731
25743
  createVuetify$1.version = version$1;
25732
25744
 
25733
25745
  // Vue's inject() can only be used in setup
@@ -25752,7 +25764,7 @@
25752
25764
  ...options
25753
25765
  });
25754
25766
  };
25755
- const version = "3.5.5";
25767
+ const version = "3.5.7";
25756
25768
  createVuetify.version = version;
25757
25769
 
25758
25770
  exports.components = components;