vuetify 3.5.6 → 3.5.8

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 (96) hide show
  1. package/dist/_component-variables-labs.sass +2 -0
  2. package/dist/json/attributes.json +461 -41
  3. package/dist/json/importMap-labs.json +16 -4
  4. package/dist/json/importMap.json +120 -120
  5. package/dist/json/tags.json +120 -0
  6. package/dist/json/web-types.json +1173 -53
  7. package/dist/vuetify-labs.css +1547 -1407
  8. package/dist/vuetify-labs.d.ts +1672 -127
  9. package/dist/vuetify-labs.esm.js +428 -94
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +428 -94
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +438 -432
  14. package/dist/vuetify.d.ts +78 -142
  15. package/dist/vuetify.esm.js +121 -82
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +121 -82
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +147 -135
  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 +28 -27
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  26. package/lib/components/VAutocomplete/VAutocomplete.sass +2 -2
  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 +40 -27
  31. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  32. package/lib/components/VCombobox/VCombobox.sass +2 -2
  33. package/lib/components/VDataIterator/VDataIterator.mjs.map +1 -1
  34. package/lib/components/VDataIterator/index.d.mts +50 -94
  35. package/lib/components/VDatePicker/VDatePickerMonth.mjs +1 -1
  36. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  37. package/lib/components/VLayout/index.d.mts +8 -6
  38. package/lib/components/VSelect/VSelect.mjs +18 -17
  39. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  40. package/lib/components/VSwitch/VSwitch.css +9 -5
  41. package/lib/components/VSwitch/VSwitch.mjs +2 -0
  42. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  43. package/lib/components/VSwitch/VSwitch.sass +10 -7
  44. package/lib/components/VSwitch/_variables.scss +2 -0
  45. package/lib/components/VToolbar/VToolbar.css +3 -1
  46. package/lib/components/VToolbar/VToolbar.sass +2 -1
  47. package/lib/components/index.d.mts +38 -105
  48. package/lib/composables/date/adapters/vuetify.mjs +21 -3
  49. package/lib/composables/date/adapters/vuetify.mjs.map +1 -1
  50. package/lib/composables/layout.mjs.map +1 -1
  51. package/lib/composables/transition.mjs +7 -5
  52. package/lib/composables/transition.mjs.map +1 -1
  53. package/lib/entry-bundler.mjs +1 -1
  54. package/lib/framework.mjs +1 -1
  55. package/lib/index.d.mts +42 -37
  56. package/lib/labs/VCalendar/VCalendarInterval.css +1 -0
  57. package/lib/labs/VCalendar/VCalendarInterval.sass +1 -0
  58. package/lib/labs/VCalendar/VCalendarIntervalEvent.css +6 -0
  59. package/lib/labs/VCalendar/VCalendarIntervalEvent.mjs +5 -2
  60. package/lib/labs/VCalendar/VCalendarIntervalEvent.mjs.map +1 -1
  61. package/lib/labs/VCalendar/VCalendarIntervalEvent.sass +6 -0
  62. package/lib/labs/VEmptyState/VEmptyState.css +59 -0
  63. package/lib/labs/VEmptyState/VEmptyState.mjs +145 -0
  64. package/lib/labs/VEmptyState/VEmptyState.mjs.map +1 -0
  65. package/lib/labs/VEmptyState/VEmptyState.sass +53 -0
  66. package/lib/labs/VEmptyState/_variables.scss +22 -0
  67. package/lib/labs/VEmptyState/index.d.mts +415 -0
  68. package/lib/labs/VEmptyState/index.mjs +2 -0
  69. package/lib/labs/VEmptyState/index.mjs.map +1 -0
  70. package/lib/labs/VFab/VFab.css +69 -0
  71. package/lib/labs/VFab/VFab.mjs +114 -0
  72. package/lib/labs/VFab/VFab.mjs.map +1 -0
  73. package/lib/labs/VFab/VFab.sass +82 -0
  74. package/lib/labs/VFab/_mixins.scss +22 -0
  75. package/lib/labs/VFab/_variables.scss +33 -0
  76. package/lib/labs/VFab/index.d.mts +656 -0
  77. package/lib/labs/VFab/index.mjs +2 -0
  78. package/lib/labs/VFab/index.mjs.map +1 -0
  79. package/lib/labs/VSparkline/VBarline.mjs +8 -7
  80. package/lib/labs/VSparkline/VBarline.mjs.map +1 -1
  81. package/lib/labs/VSparkline/VTrendline.mjs +14 -6
  82. package/lib/labs/VSparkline/VTrendline.mjs.map +1 -1
  83. package/lib/labs/VSparkline/index.d.mts +27 -0
  84. package/lib/labs/VSparkline/util/line.mjs +6 -0
  85. package/lib/labs/VSparkline/util/line.mjs.map +1 -1
  86. package/lib/labs/VSpeedDial/VSpeedDial.css +3 -0
  87. package/lib/labs/VSpeedDial/VSpeedDial.mjs +56 -0
  88. package/lib/labs/VSpeedDial/VSpeedDial.mjs.map +1 -0
  89. package/lib/labs/VSpeedDial/VSpeedDial.sass +2 -0
  90. package/lib/labs/VSpeedDial/index.d.mts +649 -0
  91. package/lib/labs/VSpeedDial/index.mjs +2 -0
  92. package/lib/labs/VSpeedDial/index.mjs.map +1 -0
  93. package/lib/labs/components.d.mts +1907 -193
  94. package/lib/labs/components.mjs +3 -0
  95. package/lib/labs/components.mjs.map +1 -1
  96. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.5.6
2
+ * Vuetify v3.5.8
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -3160,17 +3160,19 @@ const MaybeTransition = (props, _ref) => {
3160
3160
  const {
3161
3161
  transition,
3162
3162
  disabled,
3163
+ group,
3163
3164
  ...rest
3164
3165
  } = props;
3165
3166
  const {
3166
- component = Transition,
3167
+ component = group ? TransitionGroup : Transition,
3167
3168
  ...customProps
3168
3169
  } = typeof transition === 'object' ? transition : {};
3169
3170
  return h(component, mergeProps(typeof transition === 'string' ? {
3170
3171
  name: disabled ? '' : transition
3171
- } : customProps, rest, {
3172
- disabled
3173
- }), slots);
3172
+ } : customProps, typeof transition === 'string' ? {} : {
3173
+ disabled,
3174
+ group
3175
+ }, rest), slots);
3174
3176
  };
3175
3177
 
3176
3178
  // Utilities
@@ -6887,7 +6889,8 @@ const VCheckbox = genericComponent()({
6887
6889
  id,
6888
6890
  messagesId,
6889
6891
  isDisabled,
6890
- isReadonly
6892
+ isReadonly,
6893
+ isValid
6891
6894
  } = _ref2;
6892
6895
  return createVNode(VCheckboxBtn, mergeProps(checkboxProps, {
6893
6896
  "id": id.value,
@@ -6895,6 +6898,7 @@ const VCheckbox = genericComponent()({
6895
6898
  "disabled": isDisabled.value,
6896
6899
  "readonly": isReadonly.value
6897
6900
  }, controlAttrs, {
6901
+ "error": isValid.value === false,
6898
6902
  "modelValue": model.value,
6899
6903
  "onUpdate:modelValue": $event => model.value = $event,
6900
6904
  "onFocus": focus,
@@ -11844,21 +11848,27 @@ const VSelect = genericComponent()({
11844
11848
  model.value = [item];
11845
11849
  }
11846
11850
  }
11851
+
11852
+ /** @param set - null means toggle */
11847
11853
  function select(item) {
11848
- let add = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
11854
+ let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
11855
+ if (item.props.disabled) return;
11849
11856
  if (props.multiple) {
11850
11857
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
11851
- add = index === -1;
11852
- if (add) {
11853
- model.value = [...model.value, item];
11854
- } else {
11855
- const value = [...model.value];
11858
+ const add = set == null ? !~index : set;
11859
+ if (~index) {
11860
+ const value = add ? [...model.value, item] : [...model.value];
11856
11861
  value.splice(index, 1);
11857
11862
  model.value = value;
11863
+ } else if (add) {
11864
+ model.value = [...model.value, item];
11858
11865
  }
11859
11866
  } else {
11867
+ const add = set !== false;
11860
11868
  model.value = add ? [item] : [];
11861
- menu.value = false;
11869
+ nextTick(() => {
11870
+ menu.value = false;
11871
+ });
11862
11872
  }
11863
11873
  }
11864
11874
  function onBlur(e) {
@@ -11892,14 +11902,9 @@ const VSelect = genericComponent()({
11892
11902
  });
11893
11903
  }
11894
11904
  });
11895
- watch(displayItems, (val, oldVal) => {
11896
- if (!isFocused.value) return;
11897
- if (!val.length && props.hideNoData) {
11898
- menu.value = false;
11899
- }
11900
- if (!oldVal.length && val.length) {
11901
- menu.value = true;
11902
- }
11905
+ watch(() => props.items, val => {
11906
+ if (!isFocused.value || !val.length || menu.value) return;
11907
+ menu.value = true;
11903
11908
  });
11904
11909
  useRender(() => {
11905
11910
  const hasChips = !!(props.chips || slots.chip);
@@ -11977,7 +11982,7 @@ const VSelect = genericComponent()({
11977
11982
  const itemProps = mergeProps(item.props, {
11978
11983
  ref: itemRef,
11979
11984
  key: index,
11980
- onClick: () => select(item)
11985
+ onClick: () => select(item, null)
11981
11986
  });
11982
11987
  return slots.item?.({
11983
11988
  item,
@@ -12284,6 +12289,8 @@ const VAutocomplete = genericComponent()({
12284
12289
  }
12285
12290
  return filteredItems.value;
12286
12291
  });
12292
+ const hasChips = computed(() => !!(props.chips || slots.chip));
12293
+ const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection);
12287
12294
  const selectedValues = computed(() => model.value.map(selection => selection.props.value));
12288
12295
  const highlightFirst = computed(() => {
12289
12296
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
@@ -12342,7 +12349,7 @@ const VAutocomplete = genericComponent()({
12342
12349
  }
12343
12350
  const originalSelectionIndex = selectionIndex.value;
12344
12351
  const selectedItem = model.value[selectionIndex.value];
12345
- if (selectedItem && !selectedItem.props.disabled) select(selectedItem);
12352
+ if (selectedItem && !selectedItem.props.disabled) select(selectedItem, false);
12346
12353
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12347
12354
  }
12348
12355
  if (e.key === 'ArrowLeft') {
@@ -12393,36 +12400,41 @@ const VAutocomplete = genericComponent()({
12393
12400
  if (v == null || v === '' && !props.multiple) model.value = [];
12394
12401
  }
12395
12402
  const isSelecting = shallowRef(false);
12403
+
12404
+ /** @param set - null means toggle */
12396
12405
  function select(item) {
12397
- let add = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12406
+ let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12398
12407
  if (item.props.disabled) return;
12399
12408
  if (props.multiple) {
12400
12409
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12401
- add = index === -1;
12402
- if (add) {
12403
- model.value = [...model.value, item];
12404
- } else {
12405
- const value = [...model.value];
12410
+ const add = set == null ? !~index : set;
12411
+ if (~index) {
12412
+ const value = add ? [...model.value, item] : [...model.value];
12406
12413
  value.splice(index, 1);
12407
12414
  model.value = value;
12415
+ } else if (add) {
12416
+ model.value = [...model.value, item];
12408
12417
  }
12409
12418
  if (props.clearOnSelect) {
12410
12419
  search.value = '';
12411
12420
  }
12412
12421
  } else {
12422
+ const add = set !== false;
12413
12423
  model.value = add ? [item] : [];
12414
- isSelecting.value = true;
12415
- search.value = add ? item.title : '';
12416
- menu.value = false;
12417
- isPristine.value = true;
12418
- nextTick(() => isSelecting.value = false);
12424
+ search.value = add && !hasSelectionSlot.value ? item.title : '';
12425
+
12426
+ // watch for search watcher to trigger
12427
+ nextTick(() => {
12428
+ menu.value = false;
12429
+ isPristine.value = true;
12430
+ });
12419
12431
  }
12420
12432
  }
12421
12433
  watch(isFocused, (val, oldVal) => {
12422
12434
  if (val === oldVal) return;
12423
12435
  if (val) {
12424
12436
  isSelecting.value = true;
12425
- search.value = props.multiple ? '' : String(model.value.at(-1)?.props.title ?? '');
12437
+ search.value = props.multiple || hasSelectionSlot.value ? '' : String(model.value.at(-1)?.props.title ?? '');
12426
12438
  isPristine.value = true;
12427
12439
  nextTick(() => isSelecting.value = false);
12428
12440
  } else {
@@ -12452,17 +12464,11 @@ const VAutocomplete = genericComponent()({
12452
12464
  });
12453
12465
  }
12454
12466
  });
12455
- watch(displayItems, (val, oldVal) => {
12456
- if (!isFocused.value) return;
12457
- if (!val.length && props.hideNoData) {
12458
- menu.value = false;
12459
- }
12460
- if (!oldVal.length && val.length) {
12461
- menu.value = true;
12462
- }
12467
+ watch(() => props.items, val => {
12468
+ if (!isFocused.value || !val.length || menu.value) return;
12469
+ menu.value = true;
12463
12470
  });
12464
12471
  useRender(() => {
12465
- const hasChips = !!(props.chips || slots.chip);
12466
12472
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
12467
12473
  const isDirty = model.value.length > 0;
12468
12474
  const textFieldProps = VTextField.filterProps(props);
@@ -12480,7 +12486,7 @@ const VAutocomplete = genericComponent()({
12480
12486
  "class": ['v-autocomplete', `v-autocomplete--${props.multiple ? 'multiple' : 'single'}`, {
12481
12487
  'v-autocomplete--active-menu': menu.value,
12482
12488
  'v-autocomplete--chips': !!props.chips,
12483
- 'v-autocomplete--selection-slot': !!slots.selection,
12489
+ 'v-autocomplete--selection-slot': !!hasSelectionSlot.value,
12484
12490
  'v-autocomplete--selecting-index': selectionIndex.value > -1
12485
12491
  }, props.class],
12486
12492
  "style": props.style,
@@ -12535,7 +12541,7 @@ const VAutocomplete = genericComponent()({
12535
12541
  ref: itemRef,
12536
12542
  key: index,
12537
12543
  active: highlightFirst.value && index === 0 ? true : undefined,
12538
- onClick: () => select(item)
12544
+ onClick: () => select(item, null)
12539
12545
  });
12540
12546
  return slots.item?.({
12541
12547
  item,
@@ -12581,8 +12587,8 @@ const VAutocomplete = genericComponent()({
12581
12587
  modelValue: true,
12582
12588
  'onUpdate:modelValue': undefined
12583
12589
  };
12584
- const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
12585
- const slotContent = hasSlot ? ensureValidVNode(hasChips ? slots.chip({
12590
+ const hasSlot = hasChips.value ? !!slots.chip : !!slots.selection;
12591
+ const slotContent = hasSlot ? ensureValidVNode(hasChips.value ? slots.chip({
12586
12592
  item,
12587
12593
  index,
12588
12594
  props: slotProps
@@ -12595,7 +12601,7 @@ const VAutocomplete = genericComponent()({
12595
12601
  "key": item.value,
12596
12602
  "class": ['v-autocomplete__selection', index === selectionIndex.value && ['v-autocomplete__selection--selected', textColorClasses.value]],
12597
12603
  "style": index === selectionIndex.value ? textColorStyles.value : {}
12598
- }, [hasChips ? !slots.chip ? createVNode(VChip, mergeProps({
12604
+ }, [hasChips.value ? !slots.chip ? createVNode(VChip, mergeProps({
12599
12605
  "key": "chip",
12600
12606
  "closable": props.closableChips,
12601
12607
  "size": "small",
@@ -16034,14 +16040,16 @@ const VCombobox = genericComponent()({
16034
16040
  return props.multiple ? transformed : transformed[0] ?? null;
16035
16041
  });
16036
16042
  const form = useForm();
16037
- const _search = shallowRef(!props.multiple ? model.value[0]?.title ?? '' : '');
16043
+ const hasChips = computed(() => !!(props.chips || slots.chip));
16044
+ const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection);
16045
+ const _search = shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
16038
16046
  const search = computed({
16039
16047
  get: () => {
16040
16048
  return _search.value;
16041
16049
  },
16042
16050
  set: val => {
16043
16051
  _search.value = val ?? '';
16044
- if (!props.multiple) {
16052
+ if (!props.multiple && !hasSelectionSlot.value) {
16045
16053
  model.value = [transformItem$3(props, val)];
16046
16054
  }
16047
16055
  if (val && props.multiple && props.delimiters?.length) {
@@ -16072,7 +16080,7 @@ const VCombobox = genericComponent()({
16072
16080
  emit('update:search', value);
16073
16081
  });
16074
16082
  watch(model, value => {
16075
- if (!props.multiple) {
16083
+ if (!props.multiple && !hasSelectionSlot.value) {
16076
16084
  _search.value = value[0]?.title ?? '';
16077
16085
  }
16078
16086
  });
@@ -16137,6 +16145,10 @@ const VCombobox = genericComponent()({
16137
16145
  if (e.key === 'ArrowDown' && highlightFirst.value) {
16138
16146
  listRef.value?.focus('next');
16139
16147
  }
16148
+ if (e.key === 'Enter' && search.value) {
16149
+ select(transformItem$3(props, search.value));
16150
+ if (hasSelectionSlot.value) _search.value = '';
16151
+ }
16140
16152
  if (!props.multiple) return;
16141
16153
  if (['Backspace', 'Delete'].includes(e.key)) {
16142
16154
  if (selectionIndex.value < 0) {
@@ -16170,10 +16182,6 @@ const VCombobox = genericComponent()({
16170
16182
  vTextFieldRef.value.setSelectionRange(0, 0);
16171
16183
  }
16172
16184
  }
16173
- if (e.key === 'Enter' && search.value) {
16174
- select(transformItem$3(props, search.value));
16175
- search.value = '';
16176
- }
16177
16185
  }
16178
16186
  function onAfterLeave() {
16179
16187
  if (isFocused.value) {
@@ -16184,6 +16192,7 @@ const VCombobox = genericComponent()({
16184
16192
  /** @param set - null means toggle */
16185
16193
  function select(item) {
16186
16194
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
16195
+ if (item.props.disabled) return;
16187
16196
  if (props.multiple) {
16188
16197
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
16189
16198
  const add = set == null ? !~index : set;
@@ -16200,7 +16209,7 @@ const VCombobox = genericComponent()({
16200
16209
  } else {
16201
16210
  const add = set !== false;
16202
16211
  model.value = add ? [item] : [];
16203
- _search.value = add ? item.title : '';
16212
+ _search.value = add && !hasSelectionSlot.value ? item.title : '';
16204
16213
 
16205
16214
  // watch for search watcher to trigger
16206
16215
  nextTick(() => {
@@ -16232,8 +16241,24 @@ const VCombobox = genericComponent()({
16232
16241
  return value === displayItems.value[0].value;
16233
16242
  })) {
16234
16243
  select(displayItems.value[0]);
16235
- } else if (props.multiple && search.value) {
16236
- select(transformItem$3(props, search.value));
16244
+ return;
16245
+ }
16246
+ if (search.value) {
16247
+ if (props.multiple) {
16248
+ select(transformItem$3(props, search.value));
16249
+ return;
16250
+ }
16251
+ if (!hasSelectionSlot.value) return;
16252
+ if (model.value.some(_ref3 => {
16253
+ let {
16254
+ title
16255
+ } = _ref3;
16256
+ return title === search.value;
16257
+ })) {
16258
+ _search.value = '';
16259
+ } else {
16260
+ select(transformItem$3(props, search.value));
16261
+ }
16237
16262
  }
16238
16263
  });
16239
16264
  watch(menu, () => {
@@ -16244,17 +16269,11 @@ const VCombobox = genericComponent()({
16244
16269
  });
16245
16270
  }
16246
16271
  });
16247
- watch(displayItems, (val, oldVal) => {
16248
- if (!isFocused.value) return;
16249
- if (!val.length && props.hideNoData) {
16250
- menu.value = false;
16251
- }
16252
- if (!oldVal.length && val.length) {
16253
- menu.value = true;
16254
- }
16272
+ watch(() => props.items, val => {
16273
+ if (!isFocused.value || !val.length || menu.value) return;
16274
+ menu.value = true;
16255
16275
  });
16256
16276
  useRender(() => {
16257
- const hasChips = !!(props.chips || slots.chip);
16258
16277
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
16259
16278
  const isDirty = model.value.length > 0;
16260
16279
  const textFieldProps = VTextField.filterProps(props);
@@ -16271,7 +16290,7 @@ const VCombobox = genericComponent()({
16271
16290
  "class": ['v-combobox', {
16272
16291
  'v-combobox--active-menu': menu.value,
16273
16292
  'v-combobox--chips': !!props.chips,
16274
- 'v-combobox--selection-slot': !!slots.selection,
16293
+ 'v-combobox--selection-slot': !!hasSelectionSlot.value,
16275
16294
  'v-combobox--selecting-index': selectionIndex.value > -1,
16276
16295
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
16277
16296
  }, props.class],
@@ -16317,12 +16336,12 @@ const VCombobox = genericComponent()({
16317
16336
  "renderless": true,
16318
16337
  "items": displayItems.value
16319
16338
  }, {
16320
- default: _ref3 => {
16339
+ default: _ref4 => {
16321
16340
  let {
16322
16341
  item,
16323
16342
  index,
16324
16343
  itemRef
16325
- } = _ref3;
16344
+ } = _ref4;
16326
16345
  const itemProps = mergeProps(item.props, {
16327
16346
  ref: itemRef,
16328
16347
  key: index,
@@ -16336,10 +16355,10 @@ const VCombobox = genericComponent()({
16336
16355
  }) ?? createVNode(VListItem, mergeProps(itemProps, {
16337
16356
  "role": "option"
16338
16357
  }), {
16339
- prepend: _ref4 => {
16358
+ prepend: _ref5 => {
16340
16359
  let {
16341
16360
  isSelected
16342
- } = _ref4;
16361
+ } = _ref5;
16343
16362
  return createVNode(Fragment, null, [props.multiple && !props.hideSelected ? createVNode(VCheckboxBtn, {
16344
16363
  "key": item.value,
16345
16364
  "modelValue": isSelected,
@@ -16373,8 +16392,8 @@ const VCombobox = genericComponent()({
16373
16392
  modelValue: true,
16374
16393
  'onUpdate:modelValue': undefined
16375
16394
  };
16376
- const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
16377
- const slotContent = hasSlot ? ensureValidVNode(hasChips ? slots.chip({
16395
+ const hasSlot = hasChips.value ? !!slots.chip : !!slots.selection;
16396
+ const slotContent = hasSlot ? ensureValidVNode(hasChips.value ? slots.chip({
16378
16397
  item,
16379
16398
  index,
16380
16399
  props: slotProps
@@ -16387,7 +16406,7 @@ const VCombobox = genericComponent()({
16387
16406
  "key": item.value,
16388
16407
  "class": ['v-combobox__selection', index === selectionIndex.value && ['v-combobox__selection--selected', textColorClasses.value]],
16389
16408
  "style": index === selectionIndex.value ? textColorStyles.value : {}
16390
- }, [hasChips ? !slots.chip ? createVNode(VChip, mergeProps({
16409
+ }, [hasChips.value ? !slots.chip ? createVNode(VChip, mergeProps({
16391
16410
  "key": "chip",
16392
16411
  "closable": props.closableChips,
16393
16412
  "size": "small",
@@ -17355,10 +17374,28 @@ function isSameMonth(date, comparing) {
17355
17374
  function getDiff(date, comparing, unit) {
17356
17375
  const d = new Date(date);
17357
17376
  const c = new Date(comparing);
17358
- if (unit === 'month') {
17359
- return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
17377
+ switch (unit) {
17378
+ case 'years':
17379
+ return d.getFullYear() - c.getFullYear();
17380
+ case 'quarters':
17381
+ return Math.floor((d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12) / 4);
17382
+ case 'months':
17383
+ return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
17384
+ case 'weeks':
17385
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24 * 7));
17386
+ case 'days':
17387
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
17388
+ case 'hours':
17389
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60));
17390
+ case 'minutes':
17391
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60));
17392
+ case 'seconds':
17393
+ return Math.floor((d.getTime() - c.getTime()) / 1000);
17394
+ default:
17395
+ {
17396
+ return d.getTime() - c.getTime();
17397
+ }
17360
17398
  }
17361
- return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
17362
17399
  }
17363
17400
  function setHours(date, count) {
17364
17401
  const d = new Date(date);
@@ -20553,7 +20590,7 @@ const VDatePickerMonth = genericComponent()({
20553
20590
  } else {
20554
20591
  rangeStop.value = _value;
20555
20592
  }
20556
- const diff = adapter.getDiff(rangeStop.value, rangeStart.value);
20593
+ const diff = adapter.getDiff(rangeStop.value, rangeStart.value, 'days');
20557
20594
  const datesInRange = [rangeStart.value];
20558
20595
  for (let i = 1; i < diff; i++) {
20559
20596
  const nextDate = adapter.addDays(rangeStart.value, i);
@@ -24367,6 +24404,8 @@ const VSwitch = genericComponent()({
24367
24404
  const controlProps = VSelectionControl.filterProps(props);
24368
24405
  return createVNode(VInput, mergeProps({
24369
24406
  "class": ['v-switch', {
24407
+ 'v-switch--flat': props.flat
24408
+ }, {
24370
24409
  'v-switch--inset': props.inset
24371
24410
  }, {
24372
24411
  'v-switch--indeterminate': indeterminate.value
@@ -25490,8 +25529,8 @@ const VCalendarIntervalEvent = genericComponent()({
25490
25529
  return createVNode(VSheet, {
25491
25530
  "height": calcHeight().height,
25492
25531
  "density": "comfortable",
25493
- "style": `width: 100%; margin-top: ${calcHeight().margin}`,
25494
- "class": "align-center pa-1",
25532
+ "style": `margin-top: ${calcHeight().margin}`,
25533
+ "class": "v-calendar-internal-event",
25495
25534
  "color": props.event?.color ?? undefined,
25496
25535
  "rounded": props.event?.first && props.event?.last ? true : props.event?.first ? 't' : props.event?.last ? 'b' : false
25497
25536
  }, {
@@ -25902,6 +25941,106 @@ const VCalendar = genericComponent()({
25902
25941
  }
25903
25942
  });
25904
25943
 
25944
+ const makeVFabProps = propsFactory({
25945
+ app: Boolean,
25946
+ appear: Boolean,
25947
+ extended: Boolean,
25948
+ location: {
25949
+ type: String,
25950
+ default: 'bottom end'
25951
+ },
25952
+ offset: Boolean,
25953
+ modelValue: {
25954
+ type: Boolean,
25955
+ default: true
25956
+ },
25957
+ ...omit(makeVBtnProps({
25958
+ active: true
25959
+ }), ['location']),
25960
+ ...makeLayoutItemProps(),
25961
+ ...makeTransitionProps({
25962
+ transition: 'fab-transition'
25963
+ })
25964
+ }, 'VFab');
25965
+ const VFab = genericComponent()({
25966
+ name: 'VFab',
25967
+ props: makeVFabProps(),
25968
+ emits: {
25969
+ 'update:modelValue': value => true
25970
+ },
25971
+ setup(props, _ref) {
25972
+ let {
25973
+ slots
25974
+ } = _ref;
25975
+ const model = useProxiedModel(props, 'modelValue');
25976
+ const height = shallowRef(56);
25977
+ const layoutItemStyles = ref();
25978
+ const {
25979
+ resizeRef
25980
+ } = useResizeObserver(entries => {
25981
+ if (!entries.length) return;
25982
+ height.value = entries[0].target.clientHeight;
25983
+ });
25984
+ const hasPosition = computed(() => props.app || props.absolute);
25985
+ const position = computed(() => {
25986
+ if (!hasPosition.value) return false;
25987
+ return props.location.split(' ').shift();
25988
+ });
25989
+ const orientation = computed(() => {
25990
+ if (!hasPosition.value) return false;
25991
+ return props.location.split(' ')[1] ?? 'end';
25992
+ });
25993
+ useToggleScope(() => props.app, () => {
25994
+ const layout = useLayoutItem({
25995
+ id: props.name,
25996
+ order: computed(() => parseInt(props.order, 10)),
25997
+ position,
25998
+ layoutSize: height,
25999
+ elementSize: computed(() => height.value + 32),
26000
+ active: computed(() => props.app && model.value),
26001
+ absolute: toRef(props, 'absolute')
26002
+ });
26003
+ watchEffect(() => {
26004
+ layoutItemStyles.value = layout.layoutItemStyles.value;
26005
+ });
26006
+ });
26007
+ const vFabRef = ref();
26008
+ useRender(() => {
26009
+ const btnProps = VBtn.filterProps(props);
26010
+ return createVNode("div", {
26011
+ "ref": vFabRef,
26012
+ "class": ['v-fab', {
26013
+ 'v-fab--absolute': props.absolute,
26014
+ 'v-fab--app': !!props.app,
26015
+ 'v-fab--extended': props.extended,
26016
+ 'v-fab--offset': props.offset,
26017
+ [`v-fab--${position.value}`]: hasPosition.value,
26018
+ [`v-fab--${orientation.value}`]: hasPosition.value
26019
+ }, props.class],
26020
+ "style": [props.app ? {
26021
+ ...layoutItemStyles.value
26022
+ } : {
26023
+ height: 'inherit',
26024
+ width: undefined
26025
+ }, props.style]
26026
+ }, [createVNode("div", {
26027
+ "class": "v-fab__container"
26028
+ }, [createVNode(MaybeTransition, {
26029
+ "appear": props.appear,
26030
+ "transition": props.transition
26031
+ }, {
26032
+ default: () => [withDirectives(createVNode(VBtn, mergeProps({
26033
+ "ref": resizeRef
26034
+ }, btnProps, {
26035
+ "active": undefined,
26036
+ "location": undefined
26037
+ }), slots), [[vShow, props.active]])]
26038
+ })])]);
26039
+ });
26040
+ return {};
26041
+ }
26042
+ });
26043
+
25905
26044
  // Utilities
25906
26045
 
25907
26046
  // Types
@@ -25940,10 +26079,16 @@ const makeLineProps = propsFactory({
25940
26079
  default: 4
25941
26080
  },
25942
26081
  id: String,
26082
+ itemValue: {
26083
+ type: String,
26084
+ default: 'value'
26085
+ },
25943
26086
  modelValue: {
25944
26087
  type: Array,
25945
26088
  default: () => []
25946
26089
  },
26090
+ min: [String, Number],
26091
+ max: [String, Number],
25947
26092
  padding: {
25948
26093
  type: [String, Number],
25949
26094
  default: 8
@@ -25985,6 +26130,7 @@ const VBarline = genericComponent()({
25985
26130
  maxY: parseInt(props.height, 10)
25986
26131
  };
25987
26132
  });
26133
+ const items = computed(() => props.modelValue.map(item => getPropertyFromItem(item, props.itemValue, item)));
25988
26134
  function genBars(values, boundary) {
25989
26135
  const {
25990
26136
  minX,
@@ -25993,10 +26139,10 @@ const VBarline = genericComponent()({
25993
26139
  maxY
25994
26140
  } = boundary;
25995
26141
  const totalValues = values.length;
25996
- let maxValue = Math.max(...values);
25997
- let minValue = Math.min(...values);
25998
- if (minValue > 0) minValue = 0;
25999
- if (maxValue < 0) maxValue = 0;
26142
+ let maxValue = props.max != null ? Number(props.max) : Math.max(...values);
26143
+ let minValue = props.min != null ? Number(props.min) : Math.min(...values);
26144
+ if (minValue > 0 && props.min == null) minValue = 0;
26145
+ if (maxValue < 0 && props.max == null) maxValue = 0;
26000
26146
  const gridX = maxX / totalValues;
26001
26147
  const gridY = (maxY - minY) / (maxValue - minValue || 1);
26002
26148
  const horizonY = maxY - Math.abs(minValue * gridY);
@@ -26012,7 +26158,7 @@ const VBarline = genericComponent()({
26012
26158
  }
26013
26159
  const parsedLabels = computed(() => {
26014
26160
  const labels = [];
26015
- const points = genBars(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value);
26161
+ const points = genBars(items.value, boundary.value);
26016
26162
  const len = points.length;
26017
26163
  for (let i = 0; labels.length < len; i++) {
26018
26164
  const item = points[i];
@@ -26027,7 +26173,7 @@ const VBarline = genericComponent()({
26027
26173
  }
26028
26174
  return labels;
26029
26175
  });
26030
- const bars = computed(() => genBars(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value));
26176
+ const bars = computed(() => genBars(items.value, boundary.value));
26031
26177
  const offsetX = computed(() => (Math.abs(bars.value[0].x - bars.value[1].x) - lineWidth.value) / 2);
26032
26178
  useRender(() => {
26033
26179
  const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
@@ -26177,8 +26323,8 @@ const VTrendline = genericComponent()({
26177
26323
  maxY
26178
26324
  } = boundary;
26179
26325
  const totalValues = values.length;
26180
- const maxValue = Math.max(...values);
26181
- const minValue = Math.min(...values);
26326
+ const maxValue = props.max != null ? Number(props.max) : Math.max(...values);
26327
+ const minValue = props.min != null ? Number(props.min) : Math.min(...values);
26182
26328
  const gridX = (maxX - minX) / (totalValues - 1);
26183
26329
  const gridY = (maxY - minY) / (maxValue - minValue || 1);
26184
26330
  return values.map((value, index) => {
@@ -26205,9 +26351,10 @@ const VTrendline = genericComponent()({
26205
26351
  maxY: parseInt(props.height, 10) - padding
26206
26352
  };
26207
26353
  });
26354
+ const items = computed(() => props.modelValue.map(item => getPropertyFromItem(item, props.itemValue, item)));
26208
26355
  const parsedLabels = computed(() => {
26209
26356
  const labels = [];
26210
- const points = genPoints(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value);
26357
+ const points = genPoints(items.value, boundary.value);
26211
26358
  const len = points.length;
26212
26359
  for (let i = 0; labels.length < len; i++) {
26213
26360
  const item = points[i];
@@ -26251,6 +26398,9 @@ const VTrendline = genericComponent()({
26251
26398
  }, {
26252
26399
  immediate: true
26253
26400
  });
26401
+ function genPath$1(fill) {
26402
+ return genPath(genPoints(items.value, boundary.value), props.smooth ? 8 : Number(props.smooth), fill, parseInt(props.height, 10));
26403
+ }
26254
26404
  useRender(() => {
26255
26405
  const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
26256
26406
  return createVNode("svg", {
@@ -26282,9 +26432,13 @@ const VTrendline = genericComponent()({
26282
26432
  value: item.value
26283
26433
  }) ?? item.value]))]), createVNode("path", {
26284
26434
  "ref": path,
26285
- "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)),
26435
+ "d": genPath$1(props.fill),
26286
26436
  "fill": props.fill ? `url(#${id.value})` : 'none',
26287
26437
  "stroke": props.fill ? 'none' : `url(#${id.value})`
26438
+ }, null), props.fill && createVNode("path", {
26439
+ "d": genPath$1(false),
26440
+ "fill": "none",
26441
+ "stroke": props.color ?? props.gradient?.[0]
26288
26442
  }, null)]);
26289
26443
  });
26290
26444
  }
@@ -26334,6 +26488,183 @@ const VSparkline = genericComponent()({
26334
26488
  }
26335
26489
  });
26336
26490
 
26491
+ const makeVSpeedDialProps = propsFactory({
26492
+ ...makeComponentProps(),
26493
+ ...makeVMenuProps({
26494
+ offset: 8,
26495
+ minWidth: 0,
26496
+ location: 'top center'
26497
+ }),
26498
+ ...makeTransitionProps({
26499
+ transition: 'fade-transition'
26500
+ })
26501
+ }, 'VSpeedDial');
26502
+ const VSpeedDial = genericComponent()({
26503
+ name: 'VSpeedDial',
26504
+ props: makeVSpeedDialProps(),
26505
+ setup(props, _ref) {
26506
+ let {
26507
+ slots
26508
+ } = _ref;
26509
+ useRender(() => {
26510
+ const menuProps = VMenu.filterProps(props);
26511
+ return createVNode(VMenu, mergeProps(menuProps, {
26512
+ "class": props.class,
26513
+ "style": props.style,
26514
+ "contentClass": "v-speed-dial__content"
26515
+ }), {
26516
+ default: () => [createVNode(VDefaultsProvider, {
26517
+ "defaults": {
26518
+ VBtn: {
26519
+ size: 'small'
26520
+ }
26521
+ }
26522
+ }, {
26523
+ default: () => [createVNode(MaybeTransition, {
26524
+ "appear": true,
26525
+ "group": true,
26526
+ "transition": props.transition
26527
+ }, {
26528
+ default: () => [slots.default?.()]
26529
+ })]
26530
+ })]
26531
+ });
26532
+ });
26533
+ return {};
26534
+ }
26535
+ });
26536
+
26537
+ // Types
26538
+
26539
+ // Types
26540
+
26541
+ const makeVEmptyStateProps = propsFactory({
26542
+ actionText: String,
26543
+ bgColor: String,
26544
+ color: String,
26545
+ icon: IconValue,
26546
+ image: String,
26547
+ justify: {
26548
+ type: String,
26549
+ default: 'center'
26550
+ },
26551
+ headline: String,
26552
+ title: String,
26553
+ text: String,
26554
+ textWidth: {
26555
+ type: [Number, String],
26556
+ default: 500
26557
+ },
26558
+ href: String,
26559
+ to: String,
26560
+ ...makeComponentProps(),
26561
+ ...makeDimensionProps(),
26562
+ ...makeSizeProps({
26563
+ size: undefined
26564
+ }),
26565
+ ...makeThemeProps()
26566
+ }, 'VEmptyState');
26567
+ const VEmptyState = genericComponent()({
26568
+ name: 'VEmptyState',
26569
+ props: makeVEmptyStateProps(),
26570
+ emits: {
26571
+ 'click:action': e => true
26572
+ },
26573
+ setup(props, _ref) {
26574
+ let {
26575
+ emit,
26576
+ slots
26577
+ } = _ref;
26578
+ const {
26579
+ themeClasses
26580
+ } = provideTheme(props);
26581
+ const {
26582
+ backgroundColorClasses,
26583
+ backgroundColorStyles
26584
+ } = useBackgroundColor(toRef(props, 'bgColor'));
26585
+ const {
26586
+ dimensionStyles
26587
+ } = useDimension(props);
26588
+ function onClickAction(e) {
26589
+ emit('click:action', e);
26590
+ }
26591
+ useRender(() => {
26592
+ const hasActions = !!(slots.actions || props.actionText);
26593
+ const hasHeadline = !!(slots.headline || props.headline);
26594
+ const hasTitle = !!(slots.title || props.title);
26595
+ const hasText = !!(slots.text || props.text);
26596
+ const hasMedia = !!(slots.media || props.image || props.icon);
26597
+ const size = props.size || (props.image ? 200 : 96);
26598
+ return createVNode("div", {
26599
+ "class": ['v-empty-state', {
26600
+ [`v-empty-state--${props.justify}`]: true
26601
+ }, themeClasses.value, backgroundColorClasses.value, props.class],
26602
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style]
26603
+ }, [hasMedia && createVNode("div", {
26604
+ "key": "media",
26605
+ "class": "v-empty-state__media"
26606
+ }, [!slots.media ? createVNode(Fragment, null, [props.image ? createVNode(VImg, {
26607
+ "key": "image",
26608
+ "src": props.image,
26609
+ "height": size
26610
+ }, null) : props.icon ? createVNode(VIcon, {
26611
+ "key": "icon",
26612
+ "size": size,
26613
+ "icon": props.icon
26614
+ }, null) : undefined]) : createVNode(VDefaultsProvider, {
26615
+ "key": "media-defaults",
26616
+ "defaults": {
26617
+ VImg: {
26618
+ src: props.image,
26619
+ height: size
26620
+ },
26621
+ VIcon: {
26622
+ size,
26623
+ icon: props.icon
26624
+ }
26625
+ }
26626
+ }, {
26627
+ default: () => [slots.media()]
26628
+ })]), hasHeadline && createVNode("div", {
26629
+ "key": "headline",
26630
+ "class": "v-empty-state__headline"
26631
+ }, [slots.headline?.() ?? props.headline]), hasTitle && createVNode("div", {
26632
+ "key": "title",
26633
+ "class": "v-empty-state__title"
26634
+ }, [slots.title?.() ?? props.title]), hasText && createVNode("div", {
26635
+ "key": "text",
26636
+ "class": "v-empty-state__text",
26637
+ "style": {
26638
+ maxWidth: convertToUnit(props.textWidth)
26639
+ }
26640
+ }, [slots.text?.() ?? props.text]), slots.default && createVNode("div", {
26641
+ "key": "content",
26642
+ "class": "v-empty-state__content"
26643
+ }, [slots.default()]), hasActions && createVNode("div", {
26644
+ "key": "actions",
26645
+ "class": "v-empty-state__actions"
26646
+ }, [createVNode(VDefaultsProvider, {
26647
+ "defaults": {
26648
+ VBtn: {
26649
+ class: 'v-empty-state__action-btn',
26650
+ color: props.color,
26651
+ text: props.actionText
26652
+ }
26653
+ }
26654
+ }, {
26655
+ default: () => [slots.actions?.({
26656
+ props: {
26657
+ onClick: onClickAction
26658
+ }
26659
+ }) ?? createVNode(VBtn, {
26660
+ "onClick": onClickAction
26661
+ }, null)]
26662
+ })])]);
26663
+ });
26664
+ return {};
26665
+ }
26666
+ });
26667
+
26337
26668
  var components = /*#__PURE__*/Object.freeze({
26338
26669
  __proto__: null,
26339
26670
  VAlert: VAlert,
@@ -26403,12 +26734,14 @@ var components = /*#__PURE__*/Object.freeze({
26403
26734
  VDialogTopTransition: VDialogTopTransition,
26404
26735
  VDialogTransition: VDialogTransition,
26405
26736
  VDivider: VDivider,
26737
+ VEmptyState: VEmptyState,
26406
26738
  VExpandTransition: VExpandTransition,
26407
26739
  VExpandXTransition: VExpandXTransition,
26408
26740
  VExpansionPanel: VExpansionPanel,
26409
26741
  VExpansionPanelText: VExpansionPanelText,
26410
26742
  VExpansionPanelTitle: VExpansionPanelTitle,
26411
26743
  VExpansionPanels: VExpansionPanels,
26744
+ VFab: VFab,
26412
26745
  VFabTransition: VFabTransition,
26413
26746
  VFadeTransition: VFadeTransition,
26414
26747
  VField: VField,
@@ -26478,6 +26811,7 @@ var components = /*#__PURE__*/Object.freeze({
26478
26811
  VSnackbar: VSnackbar,
26479
26812
  VSpacer: VSpacer,
26480
26813
  VSparkline: VSparkline,
26814
+ VSpeedDial: VSpeedDial,
26481
26815
  VStepper: VStepper,
26482
26816
  VStepperActions: VStepperActions,
26483
26817
  VStepperHeader: VStepperHeader,
@@ -26725,7 +27059,7 @@ function createVuetify$1() {
26725
27059
  goTo
26726
27060
  };
26727
27061
  }
26728
- const version$1 = "3.5.6";
27062
+ const version$1 = "3.5.8";
26729
27063
  createVuetify$1.version = version$1;
26730
27064
 
26731
27065
  // Vue's inject() can only be used in setup
@@ -26739,7 +27073,7 @@ function inject(key) {
26739
27073
 
26740
27074
  /* eslint-disable local-rules/sort-imports */
26741
27075
 
26742
- const version = "3.5.6";
27076
+ const version = "3.5.8";
26743
27077
 
26744
27078
  /* eslint-disable local-rules/sort-imports */
26745
27079