vuetify 3.5.6 → 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 (72) hide show
  1. package/dist/_component-variables-labs.sass +2 -0
  2. package/dist/json/attributes.json +312 -40
  3. package/dist/json/importMap-labs.json +8 -0
  4. package/dist/json/importMap.json +122 -122
  5. package/dist/json/tags.json +78 -0
  6. package/dist/json/web-types.json +793 -52
  7. package/dist/vuetify-labs.css +1931 -1803
  8. package/dist/vuetify-labs.d.ts +1073 -106
  9. package/dist/vuetify-labs.esm.js +315 -75
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +315 -75
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +846 -844
  14. package/dist/vuetify.d.ts +74 -141
  15. package/dist/vuetify.esm.js +70 -69
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +70 -69
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +50 -49
  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 +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 +19 -22
  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/VLayout/index.d.mts +8 -6
  36. package/lib/components/VSelect/VSelect.mjs +18 -17
  37. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  38. package/lib/components/VToolbar/VToolbar.css +3 -1
  39. package/lib/components/VToolbar/VToolbar.sass +2 -1
  40. package/lib/components/index.d.mts +38 -105
  41. package/lib/composables/layout.mjs.map +1 -1
  42. package/lib/entry-bundler.mjs +1 -1
  43. package/lib/framework.mjs +1 -1
  44. package/lib/index.d.mts +38 -36
  45. package/lib/labs/VEmptyState/VEmptyState.css +59 -0
  46. package/lib/labs/VEmptyState/VEmptyState.mjs +145 -0
  47. package/lib/labs/VEmptyState/VEmptyState.mjs.map +1 -0
  48. package/lib/labs/VEmptyState/VEmptyState.sass +53 -0
  49. package/lib/labs/VEmptyState/_variables.scss +22 -0
  50. package/lib/labs/VEmptyState/index.d.mts +415 -0
  51. package/lib/labs/VEmptyState/index.mjs +2 -0
  52. package/lib/labs/VEmptyState/index.mjs.map +1 -0
  53. package/lib/labs/VFab/VFab.css +69 -0
  54. package/lib/labs/VFab/VFab.mjs +114 -0
  55. package/lib/labs/VFab/VFab.mjs.map +1 -0
  56. package/lib/labs/VFab/VFab.sass +82 -0
  57. package/lib/labs/VFab/_mixins.scss +22 -0
  58. package/lib/labs/VFab/_variables.scss +33 -0
  59. package/lib/labs/VFab/index.d.mts +656 -0
  60. package/lib/labs/VFab/index.mjs +2 -0
  61. package/lib/labs/VFab/index.mjs.map +1 -0
  62. package/lib/labs/VSparkline/VBarline.mjs +4 -4
  63. package/lib/labs/VSparkline/VBarline.mjs.map +1 -1
  64. package/lib/labs/VSparkline/VTrendline.mjs +6 -2
  65. package/lib/labs/VSparkline/VTrendline.mjs.map +1 -1
  66. package/lib/labs/VSparkline/index.d.mts +12 -0
  67. package/lib/labs/VSparkline/util/line.mjs +2 -0
  68. package/lib/labs/VSparkline/util/line.mjs.map +1 -1
  69. package/lib/labs/components.d.mts +1066 -2
  70. package/lib/labs/components.mjs +2 -0
  71. package/lib/labs/components.mjs.map +1 -1
  72. package/package.json +2 -2
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.5.6
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,21 +11844,27 @@
11842
11844
  model.value = [item];
11843
11845
  }
11844
11846
  }
11847
+
11848
+ /** @param set - null means toggle */
11845
11849
  function select(item) {
11846
- let add = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
11850
+ let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
11851
+ if (item.props.disabled) return;
11847
11852
  if (props.multiple) {
11848
11853
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
11849
- add = index === -1;
11850
- if (add) {
11851
- model.value = [...model.value, item];
11852
- } else {
11853
- const value = [...model.value];
11854
+ const add = set == null ? !~index : set;
11855
+ if (~index) {
11856
+ const value = add ? [...model.value, item] : [...model.value];
11854
11857
  value.splice(index, 1);
11855
11858
  model.value = value;
11859
+ } else if (add) {
11860
+ model.value = [...model.value, item];
11856
11861
  }
11857
11862
  } else {
11863
+ const add = set !== false;
11858
11864
  model.value = add ? [item] : [];
11859
- menu.value = false;
11865
+ vue.nextTick(() => {
11866
+ menu.value = false;
11867
+ });
11860
11868
  }
11861
11869
  }
11862
11870
  function onBlur(e) {
@@ -11890,14 +11898,9 @@
11890
11898
  });
11891
11899
  }
11892
11900
  });
11893
- vue.watch(displayItems, (val, oldVal) => {
11894
- if (!isFocused.value) return;
11895
- if (!val.length && props.hideNoData) {
11896
- menu.value = false;
11897
- }
11898
- if (!oldVal.length && val.length) {
11899
- menu.value = true;
11900
- }
11901
+ vue.watch(() => props.items, val => {
11902
+ if (!isFocused.value || !val.length || menu.value) return;
11903
+ menu.value = true;
11901
11904
  });
11902
11905
  useRender(() => {
11903
11906
  const hasChips = !!(props.chips || slots.chip);
@@ -11975,7 +11978,7 @@
11975
11978
  const itemProps = vue.mergeProps(item.props, {
11976
11979
  ref: itemRef,
11977
11980
  key: index,
11978
- onClick: () => select(item)
11981
+ onClick: () => select(item, null)
11979
11982
  });
11980
11983
  return slots.item?.({
11981
11984
  item,
@@ -12282,6 +12285,8 @@
12282
12285
  }
12283
12286
  return filteredItems.value;
12284
12287
  });
12288
+ const hasChips = vue.computed(() => !!(props.chips || slots.chip));
12289
+ const hasSelectionSlot = vue.computed(() => hasChips.value || !!slots.selection);
12285
12290
  const selectedValues = vue.computed(() => model.value.map(selection => selection.props.value));
12286
12291
  const highlightFirst = vue.computed(() => {
12287
12292
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
@@ -12340,7 +12345,7 @@
12340
12345
  }
12341
12346
  const originalSelectionIndex = selectionIndex.value;
12342
12347
  const selectedItem = model.value[selectionIndex.value];
12343
- if (selectedItem && !selectedItem.props.disabled) select(selectedItem);
12348
+ if (selectedItem && !selectedItem.props.disabled) select(selectedItem, false);
12344
12349
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12345
12350
  }
12346
12351
  if (e.key === 'ArrowLeft') {
@@ -12391,36 +12396,41 @@
12391
12396
  if (v == null || v === '' && !props.multiple) model.value = [];
12392
12397
  }
12393
12398
  const isSelecting = vue.shallowRef(false);
12399
+
12400
+ /** @param set - null means toggle */
12394
12401
  function select(item) {
12395
- let add = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12402
+ let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12396
12403
  if (item.props.disabled) return;
12397
12404
  if (props.multiple) {
12398
12405
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12399
- add = index === -1;
12400
- if (add) {
12401
- model.value = [...model.value, item];
12402
- } else {
12403
- const value = [...model.value];
12406
+ const add = set == null ? !~index : set;
12407
+ if (~index) {
12408
+ const value = add ? [...model.value, item] : [...model.value];
12404
12409
  value.splice(index, 1);
12405
12410
  model.value = value;
12411
+ } else if (add) {
12412
+ model.value = [...model.value, item];
12406
12413
  }
12407
12414
  if (props.clearOnSelect) {
12408
12415
  search.value = '';
12409
12416
  }
12410
12417
  } else {
12418
+ const add = set !== false;
12411
12419
  model.value = add ? [item] : [];
12412
- isSelecting.value = true;
12413
- search.value = add ? item.title : '';
12414
- menu.value = false;
12415
- isPristine.value = true;
12416
- 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
+ });
12417
12427
  }
12418
12428
  }
12419
12429
  vue.watch(isFocused, (val, oldVal) => {
12420
12430
  if (val === oldVal) return;
12421
12431
  if (val) {
12422
12432
  isSelecting.value = true;
12423
- 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 ?? '');
12424
12434
  isPristine.value = true;
12425
12435
  vue.nextTick(() => isSelecting.value = false);
12426
12436
  } else {
@@ -12450,17 +12460,11 @@
12450
12460
  });
12451
12461
  }
12452
12462
  });
12453
- vue.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
- }
12463
+ vue.watch(() => props.items, val => {
12464
+ if (!isFocused.value || !val.length || menu.value) return;
12465
+ menu.value = true;
12461
12466
  });
12462
12467
  useRender(() => {
12463
- const hasChips = !!(props.chips || slots.chip);
12464
12468
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
12465
12469
  const isDirty = model.value.length > 0;
12466
12470
  const textFieldProps = VTextField.filterProps(props);
@@ -12478,7 +12482,7 @@
12478
12482
  "class": ['v-autocomplete', `v-autocomplete--${props.multiple ? 'multiple' : 'single'}`, {
12479
12483
  'v-autocomplete--active-menu': menu.value,
12480
12484
  'v-autocomplete--chips': !!props.chips,
12481
- 'v-autocomplete--selection-slot': !!slots.selection,
12485
+ 'v-autocomplete--selection-slot': !!hasSelectionSlot.value,
12482
12486
  'v-autocomplete--selecting-index': selectionIndex.value > -1
12483
12487
  }, props.class],
12484
12488
  "style": props.style,
@@ -12533,7 +12537,7 @@
12533
12537
  ref: itemRef,
12534
12538
  key: index,
12535
12539
  active: highlightFirst.value && index === 0 ? true : undefined,
12536
- onClick: () => select(item)
12540
+ onClick: () => select(item, null)
12537
12541
  });
12538
12542
  return slots.item?.({
12539
12543
  item,
@@ -12579,8 +12583,8 @@
12579
12583
  modelValue: true,
12580
12584
  'onUpdate:modelValue': undefined
12581
12585
  };
12582
- const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
12583
- 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({
12584
12588
  item,
12585
12589
  index,
12586
12590
  props: slotProps
@@ -12593,7 +12597,7 @@
12593
12597
  "key": item.value,
12594
12598
  "class": ['v-autocomplete__selection', index === selectionIndex.value && ['v-autocomplete__selection--selected', textColorClasses.value]],
12595
12599
  "style": index === selectionIndex.value ? textColorStyles.value : {}
12596
- }, [hasChips ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
12600
+ }, [hasChips.value ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
12597
12601
  "key": "chip",
12598
12602
  "closable": props.closableChips,
12599
12603
  "size": "small",
@@ -16032,14 +16036,16 @@
16032
16036
  return props.multiple ? transformed : transformed[0] ?? null;
16033
16037
  });
16034
16038
  const form = useForm();
16035
- 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 ?? '' : '');
16036
16042
  const search = vue.computed({
16037
16043
  get: () => {
16038
16044
  return _search.value;
16039
16045
  },
16040
16046
  set: val => {
16041
16047
  _search.value = val ?? '';
16042
- if (!props.multiple) {
16048
+ if (!props.multiple && !hasSelectionSlot.value) {
16043
16049
  model.value = [transformItem$3(props, val)];
16044
16050
  }
16045
16051
  if (val && props.multiple && props.delimiters?.length) {
@@ -16070,7 +16076,7 @@
16070
16076
  emit('update:search', value);
16071
16077
  });
16072
16078
  vue.watch(model, value => {
16073
- if (!props.multiple) {
16079
+ if (!props.multiple && !hasSelectionSlot.value) {
16074
16080
  _search.value = value[0]?.title ?? '';
16075
16081
  }
16076
16082
  });
@@ -16135,6 +16141,10 @@
16135
16141
  if (e.key === 'ArrowDown' && highlightFirst.value) {
16136
16142
  listRef.value?.focus('next');
16137
16143
  }
16144
+ if (e.key === 'Enter' && search.value) {
16145
+ select(transformItem$3(props, search.value));
16146
+ if (hasSelectionSlot.value) search.value = '';
16147
+ }
16138
16148
  if (!props.multiple) return;
16139
16149
  if (['Backspace', 'Delete'].includes(e.key)) {
16140
16150
  if (selectionIndex.value < 0) {
@@ -16168,10 +16178,6 @@
16168
16178
  vTextFieldRef.value.setSelectionRange(0, 0);
16169
16179
  }
16170
16180
  }
16171
- if (e.key === 'Enter' && search.value) {
16172
- select(transformItem$3(props, search.value));
16173
- search.value = '';
16174
- }
16175
16181
  }
16176
16182
  function onAfterLeave() {
16177
16183
  if (isFocused.value) {
@@ -16182,6 +16188,7 @@
16182
16188
  /** @param set - null means toggle */
16183
16189
  function select(item) {
16184
16190
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
16191
+ if (item.props.disabled) return;
16185
16192
  if (props.multiple) {
16186
16193
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
16187
16194
  const add = set == null ? !~index : set;
@@ -16198,7 +16205,7 @@
16198
16205
  } else {
16199
16206
  const add = set !== false;
16200
16207
  model.value = add ? [item] : [];
16201
- _search.value = add ? item.title : '';
16208
+ _search.value = add && !hasSelectionSlot.value ? item.title : '';
16202
16209
 
16203
16210
  // watch for search watcher to trigger
16204
16211
  vue.nextTick(() => {
@@ -16230,7 +16237,7 @@
16230
16237
  return value === displayItems.value[0].value;
16231
16238
  })) {
16232
16239
  select(displayItems.value[0]);
16233
- } else if (props.multiple && search.value) {
16240
+ } else if (search.value) {
16234
16241
  select(transformItem$3(props, search.value));
16235
16242
  }
16236
16243
  });
@@ -16242,17 +16249,11 @@
16242
16249
  });
16243
16250
  }
16244
16251
  });
16245
- vue.watch(displayItems, (val, oldVal) => {
16246
- if (!isFocused.value) return;
16247
- if (!val.length && props.hideNoData) {
16248
- menu.value = false;
16249
- }
16250
- if (!oldVal.length && val.length) {
16251
- menu.value = true;
16252
- }
16252
+ vue.watch(() => props.items, val => {
16253
+ if (!isFocused.value || !val.length || menu.value) return;
16254
+ menu.value = true;
16253
16255
  });
16254
16256
  useRender(() => {
16255
- const hasChips = !!(props.chips || slots.chip);
16256
16257
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
16257
16258
  const isDirty = model.value.length > 0;
16258
16259
  const textFieldProps = VTextField.filterProps(props);
@@ -16269,7 +16270,7 @@
16269
16270
  "class": ['v-combobox', {
16270
16271
  'v-combobox--active-menu': menu.value,
16271
16272
  'v-combobox--chips': !!props.chips,
16272
- 'v-combobox--selection-slot': !!slots.selection,
16273
+ 'v-combobox--selection-slot': !!hasSelectionSlot.value,
16273
16274
  'v-combobox--selecting-index': selectionIndex.value > -1,
16274
16275
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
16275
16276
  }, props.class],
@@ -16371,8 +16372,8 @@
16371
16372
  modelValue: true,
16372
16373
  'onUpdate:modelValue': undefined
16373
16374
  };
16374
- const hasSlot = hasChips ? !!slots.chip : !!slots.selection;
16375
- 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({
16376
16377
  item,
16377
16378
  index,
16378
16379
  props: slotProps
@@ -16385,7 +16386,7 @@
16385
16386
  "key": item.value,
16386
16387
  "class": ['v-combobox__selection', index === selectionIndex.value && ['v-combobox__selection--selected', textColorClasses.value]],
16387
16388
  "style": index === selectionIndex.value ? textColorStyles.value : {}
16388
- }, [hasChips ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
16389
+ }, [hasChips.value ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
16389
16390
  "key": "chip",
16390
16391
  "closable": props.closableChips,
16391
16392
  "size": "small",
@@ -25738,7 +25739,7 @@
25738
25739
  goTo
25739
25740
  };
25740
25741
  }
25741
- const version$1 = "3.5.6";
25742
+ const version$1 = "3.5.7";
25742
25743
  createVuetify$1.version = version$1;
25743
25744
 
25744
25745
  // Vue's inject() can only be used in setup
@@ -25763,7 +25764,7 @@
25763
25764
  ...options
25764
25765
  });
25765
25766
  };
25766
- const version = "3.5.6";
25767
+ const version = "3.5.7";
25767
25768
  createVuetify.version = version;
25768
25769
 
25769
25770
  exports.components = components;