vuetify 3.9.6 → 3.9.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 (75) hide show
  1. package/dist/json/attributes.json +2761 -2761
  2. package/dist/json/importMap-labs.json +24 -24
  3. package/dist/json/importMap.json +206 -206
  4. package/dist/json/web-types.json +5372 -5295
  5. package/dist/vuetify-labs.cjs +51 -52
  6. package/dist/vuetify-labs.css +5946 -5832
  7. package/dist/vuetify-labs.d.ts +168 -94
  8. package/dist/vuetify-labs.esm.js +51 -52
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +51 -52
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.cjs +26 -22
  13. package/dist/vuetify.cjs.map +1 -1
  14. package/dist/vuetify.css +1937 -1823
  15. package/dist/vuetify.d.ts +91 -91
  16. package/dist/vuetify.esm.js +26 -22
  17. package/dist/vuetify.esm.js.map +1 -1
  18. package/dist/vuetify.js +26 -22
  19. package/dist/vuetify.js.map +1 -1
  20. package/dist/vuetify.min.css +2 -2
  21. package/dist/vuetify.min.js +35 -32
  22. package/dist/vuetify.min.js.map +1 -1
  23. package/lib/components/VAlert/VAlert.css +12 -0
  24. package/lib/components/VAlert/VAlert.sass +13 -0
  25. package/lib/components/VAutocomplete/VAutocomplete.css +2 -1
  26. package/lib/components/VAutocomplete/VAutocomplete.sass +3 -2
  27. package/lib/components/VBtn/VBtn.sass +1 -4
  28. package/lib/components/VCard/VCard.css +6 -0
  29. package/lib/components/VCard/VCard.sass +5 -0
  30. package/lib/components/VChip/VChip.css +6 -0
  31. package/lib/components/VChip/VChip.sass +5 -0
  32. package/lib/components/VChipGroup/VChipGroup.css +25 -0
  33. package/lib/components/VChipGroup/VChipGroup.sass +23 -0
  34. package/lib/components/VCombobox/VCombobox.css +2 -1
  35. package/lib/components/VCombobox/VCombobox.sass +3 -2
  36. package/lib/components/VList/VListItem.css +30 -0
  37. package/lib/components/VList/VListItem.d.ts +3 -3
  38. package/lib/components/VList/VListItem.sass +29 -0
  39. package/lib/components/VOtpInput/VOtpInput.js +1 -2
  40. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  41. package/lib/components/VProgressLinear/VProgressLinear.css +3 -3
  42. package/lib/components/VProgressLinear/VProgressLinear.js +5 -6
  43. package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
  44. package/lib/components/VProgressLinear/VProgressLinear.sass +3 -3
  45. package/lib/components/VSelect/VSelect.css +2 -1
  46. package/lib/components/VSelect/VSelect.sass +3 -2
  47. package/lib/components/VSlideGroup/VSlideGroup.js +5 -4
  48. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  49. package/lib/components/VSnackbar/VSnackbar.css +5 -0
  50. package/lib/components/VSnackbar/VSnackbar.sass +3 -0
  51. package/lib/components/VTimeline/VTimeline.css +22 -0
  52. package/lib/components/VTimeline/VTimeline.sass +12 -0
  53. package/lib/components/VTreeview/VTreeviewItem.css +13 -8
  54. package/lib/components/VTreeview/VTreeviewItem.d.ts +9 -9
  55. package/lib/components/VTreeview/VTreeviewItem.sass +12 -8
  56. package/lib/composables/filter.js +3 -1
  57. package/lib/composables/filter.js.map +1 -1
  58. package/lib/composables/nested/nested.d.ts +1 -1
  59. package/lib/composables/nested/nested.js +5 -2
  60. package/lib/composables/nested/nested.js.map +1 -1
  61. package/lib/composables/rounded.js +3 -3
  62. package/lib/composables/rounded.js.map +1 -1
  63. package/lib/directives/touch/index.js +2 -2
  64. package/lib/directives/touch/index.js.map +1 -1
  65. package/lib/entry-bundler.js +1 -1
  66. package/lib/framework.d.ts +79 -79
  67. package/lib/framework.js +1 -1
  68. package/lib/labs/VDateInput/VDateInput.d.ts +78 -3
  69. package/lib/labs/VDateInput/VDateInput.js +3 -1
  70. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  71. package/lib/labs/VVideo/VVideo.css +4 -4
  72. package/lib/labs/VVideo/VVideo.js +24 -33
  73. package/lib/labs/VVideo/VVideo.js.map +1 -1
  74. package/lib/labs/VVideo/VVideo.sass +4 -4
  75. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.9.6
2
+ * Vuetify v3.9.7
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -3497,14 +3497,14 @@ function useRounded(props) {
3497
3497
  const rounded = isRef(props) ? props.value : props.rounded;
3498
3498
  const tile = isRef(props) ? props.value : props.tile;
3499
3499
  const classes = [];
3500
- if (rounded === true || rounded === '') {
3500
+ if (tile || rounded === false) {
3501
+ classes.push('rounded-0');
3502
+ } else if (rounded === true || rounded === '') {
3501
3503
  classes.push(`${name}--rounded`);
3502
3504
  } else if (typeof rounded === 'string' || rounded === 0) {
3503
3505
  for (const value of String(rounded).split(' ')) {
3504
3506
  classes.push(`rounded-${value}`);
3505
3507
  }
3506
- } else if (tile || rounded === false) {
3507
- classes.push('rounded-0');
3508
3508
  }
3509
3509
  return classes;
3510
3510
  });
@@ -5364,7 +5364,6 @@ const VProgressLinear = genericComponent()({
5364
5364
  const normalizedValue = computed(() => clamp(parseFloat(progress.value) / max.value * 100, 0, 100));
5365
5365
  const isReversed = computed(() => isRtl.value !== props.reverse);
5366
5366
  const transition = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition');
5367
- const isForcedColorsModeActive = IN_BROWSER && window.matchMedia?.('(forced-colors: active)').matches;
5368
5367
  function handleClick(e) {
5369
5368
  if (!intersectionRef.value) return;
5370
5369
  const {
@@ -5413,13 +5412,13 @@ const VProgressLinear = genericComponent()({
5413
5412
  '--v-progress-linear-stream-to': convertToUnit(height.value * (isReversed.value ? 1 : -1))
5414
5413
  }
5415
5414
  }, null), createElementVNode("div", {
5416
- "class": normalizeClass(['v-progress-linear__background', !isForcedColorsModeActive ? backgroundColorClasses.value : undefined]),
5415
+ "class": normalizeClass(['v-progress-linear__background', backgroundColorClasses.value]),
5417
5416
  "style": normalizeStyle([backgroundColorStyles.value, {
5418
5417
  opacity: parseFloat(props.bgOpacity),
5419
5418
  width: props.stream ? 0 : undefined
5420
5419
  }])
5421
5420
  }, null), createElementVNode("div", {
5422
- "class": normalizeClass(['v-progress-linear__buffer', !isForcedColorsModeActive ? bufferColorClasses.value : undefined]),
5421
+ "class": normalizeClass(['v-progress-linear__buffer', bufferColorClasses.value]),
5423
5422
  "style": normalizeStyle([bufferColorStyles.value, {
5424
5423
  opacity: parseFloat(props.bufferOpacity),
5425
5424
  width: convertToUnit(normalizedBuffer.value, '%')
@@ -5428,7 +5427,7 @@ const VProgressLinear = genericComponent()({
5428
5427
  "name": transition.value
5429
5428
  }, {
5430
5429
  default: () => [!props.indeterminate ? createElementVNode("div", {
5431
- "class": normalizeClass(['v-progress-linear__determinate', !isForcedColorsModeActive ? barColorClasses.value : undefined]),
5430
+ "class": normalizeClass(['v-progress-linear__determinate', barColorClasses.value]),
5432
5431
  "style": normalizeStyle([barColorStyles.value, {
5433
5432
  width: convertToUnit(normalizedValue.value, '%')
5434
5433
  }])
@@ -5436,7 +5435,7 @@ const VProgressLinear = genericComponent()({
5436
5435
  "class": "v-progress-linear__indeterminate"
5437
5436
  }, [['long', 'short'].map(bar => createElementVNode("div", {
5438
5437
  "key": bar,
5439
- "class": normalizeClass(['v-progress-linear__indeterminate', bar, !isForcedColorsModeActive ? barColorClasses.value : undefined]),
5438
+ "class": normalizeClass(['v-progress-linear__indeterminate', bar, barColorClasses.value]),
5440
5439
  "style": normalizeStyle(barColorStyles.value)
5441
5440
  }, null))])]
5442
5441
  }), slots.default && createElementVNode("div", {
@@ -8208,6 +8207,7 @@ const VSlideGroup = genericComponent()({
8208
8207
  select: group.select,
8209
8208
  isSelected: group.isSelected
8210
8209
  }));
8210
+ const hasOverflowOrScroll = computed(() => isOverflowing.value || Math.abs(scrollOffset.value) > 0);
8211
8211
  const hasAffixes = computed(() => {
8212
8212
  switch (props.showArrows) {
8213
8213
  // Always show arrows on desktop & mobile
@@ -8221,17 +8221,17 @@ const VSlideGroup = genericComponent()({
8221
8221
  // Show arrows on mobile when overflowing.
8222
8222
  // This matches the default 2.2 behavior
8223
8223
  case true:
8224
- return isOverflowing.value || Math.abs(scrollOffset.value) > 0;
8224
+ return hasOverflowOrScroll.value;
8225
8225
 
8226
8226
  // Always show on mobile
8227
8227
  case 'mobile':
8228
- return mobile.value || isOverflowing.value || Math.abs(scrollOffset.value) > 0;
8228
+ return mobile.value || hasOverflowOrScroll.value;
8229
8229
 
8230
8230
  // https://material.io/components/tabs#scrollable-tabs
8231
8231
  // Always show arrows when
8232
8232
  // overflowed on desktop
8233
8233
  default:
8234
- return !mobile.value && (isOverflowing.value || Math.abs(scrollOffset.value) > 0);
8234
+ return !mobile.value && hasOverflowOrScroll.value;
8235
8235
  }
8236
8236
  });
8237
8237
  const hasPrev = computed(() => {
@@ -8239,7 +8239,7 @@ const VSlideGroup = genericComponent()({
8239
8239
  return Math.abs(scrollOffset.value) > 1;
8240
8240
  });
8241
8241
  const hasNext = computed(() => {
8242
- if (!containerRef.value) return false;
8242
+ if (!containerRef.value || !hasOverflowOrScroll.value) return false;
8243
8243
  const scrollSize = getScrollSize(isHorizontal.value, containerRef.el);
8244
8244
  const clientSize = getClientSize(isHorizontal.value, containerRef.el);
8245
8245
  const scrollSizeMax = scrollSize - clientSize;
@@ -9236,7 +9236,7 @@ const useNested = props => {
9236
9236
  function getPath(id) {
9237
9237
  const path = [];
9238
9238
  let parent = toRaw(id);
9239
- while (parent != null) {
9239
+ while (parent !== undefined) {
9240
9240
  path.unshift(parent);
9241
9241
  parent = parents.value.get(parent);
9242
9242
  }
@@ -9382,7 +9382,10 @@ const useNested = props => {
9382
9382
  const useNestedItem = (id, isDisabled, isGroup) => {
9383
9383
  const parent = inject$1(VNestedSymbol, emptyNested);
9384
9384
  const uidSymbol = Symbol('nested item');
9385
- const computedId = computed(() => toRaw(toValue(id)) ?? uidSymbol);
9385
+ const computedId = computed(() => {
9386
+ const idValue = toRaw(toValue(id));
9387
+ return idValue !== undefined ? idValue : uidSymbol;
9388
+ });
9386
9389
  const item = {
9387
9390
  ...parent,
9388
9391
  id: computedId,
@@ -13593,11 +13596,13 @@ function filterItems(items, query, options) {
13593
13596
  const defaultMatches = {};
13594
13597
  let match = -1;
13595
13598
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13599
+ let hasOnlyCustomFilters = false;
13596
13600
  if (typeof item === 'object') {
13597
13601
  if (item.type === 'divider' || item.type === 'subheader') {
13598
13602
  continue;
13599
13603
  }
13600
13604
  const filterKeys = keys || Object.keys(transformed);
13605
+ hasOnlyCustomFilters = filterKeys.length === customFiltersLength;
13601
13606
  for (const key of filterKeys) {
13602
13607
  const value = getPropertyFromItem(transformed, key);
13603
13608
  const keyFilter = options?.customKeyFilter?.[key];
@@ -13618,7 +13623,7 @@ function filterItems(items, query, options) {
13618
13623
  const customMatchesLength = Object.keys(customMatches).length;
13619
13624
  if (!defaultMatchesLength && !customMatchesLength) continue;
13620
13625
  if (options?.filterMode === 'union' && customMatchesLength !== customFiltersLength && !defaultMatchesLength) continue;
13621
- if (options?.filterMode === 'intersection' && (customMatchesLength !== customFiltersLength || !defaultMatchesLength)) continue;
13626
+ if (options?.filterMode === 'intersection' && (customMatchesLength !== customFiltersLength || !defaultMatchesLength && customFiltersLength > 0 && !hasOnlyCustomFilters)) continue;
13622
13627
  }
13623
13628
  array.push({
13624
13629
  index: i,
@@ -15292,7 +15297,7 @@ function mounted$3(el, binding) {
15292
15297
  };
15293
15298
  const uid = binding.instance?.$.uid; // TODO: use custom uid generator
15294
15299
 
15295
- if (!target || !uid) return;
15300
+ if (!target || uid === undefined) return;
15296
15301
  const handlers = createHandlers(binding.value);
15297
15302
  target._touchHandlers = target._touchHandlers ?? Object.create(null);
15298
15303
  target._touchHandlers[uid] = handlers;
@@ -15303,7 +15308,7 @@ function mounted$3(el, binding) {
15303
15308
  function unmounted$3(el, binding) {
15304
15309
  const target = binding.value?.parent ? el.parentElement : el;
15305
15310
  const uid = binding.instance?.$.uid;
15306
- if (!target?._touchHandlers || !uid) return;
15311
+ if (!target?._touchHandlers || uid === undefined) return;
15307
15312
  const handlers = target._touchHandlers[uid];
15308
15313
  keys(handlers).forEach(eventName => {
15309
15314
  target.removeEventListener(eventName, handlers[eventName]);
@@ -26431,7 +26436,7 @@ const VOtpInput = genericComponent()({
26431
26436
  const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
26432
26437
  if (isValidNumber(clipboardText)) return;
26433
26438
  model.value = clipboardText.split('');
26434
- inputRef.value?.[finalIndex].focus();
26439
+ focusIndex.value = finalIndex;
26435
26440
  }
26436
26441
  function reset() {
26437
26442
  model.value = [];
@@ -26461,7 +26466,6 @@ const VOtpInput = genericComponent()({
26461
26466
  });
26462
26467
  watch(model, val => {
26463
26468
  if (val.length === length.value) {
26464
- focusIndex.value = length.value - 1;
26465
26469
  emit('finish', val.join(''));
26466
26470
  }
26467
26471
  }, {
@@ -31861,6 +31865,7 @@ const VDateInput = genericComponent()({
31861
31865
  useRender(() => {
31862
31866
  const confirmEditProps = VConfirmEdit.filterProps(props);
31863
31867
  const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']));
31868
+ const datePickerSlots = pick(slots, ['title', 'header', 'day', 'month', 'year']);
31864
31869
  const textFieldProps = VTextField.filterProps(omit(props, ['placeholder']));
31865
31870
  return createVNode(VTextField, mergeProps({
31866
31871
  "ref": vTextFieldRef
@@ -31923,6 +31928,7 @@ const VDateInput = genericComponent()({
31923
31928
  "onUpdate:modelValue": value => onUpdateModel(value),
31924
31929
  "onMousedown": e => e.preventDefault()
31925
31930
  }), {
31931
+ ...datePickerSlots,
31926
31932
  actions: !props.hideActions ? () => slots.actions?.({
31927
31933
  save,
31928
31934
  cancel,
@@ -34736,11 +34742,6 @@ const VVideo = genericComponent()({
34736
34742
  useRender(() => {
34737
34743
  const showControls = state.value === 'loaded' && props.variant === 'player' && props.controlsVariant !== 'hidden';
34738
34744
  const posterTransition = props.variant === 'background' ? 'poster-fade-out' : 'fade-transition';
34739
- const overlayProps = {
34740
- contained: true,
34741
- persistent: true,
34742
- contentClass: 'v-video__overlay-fill'
34743
- };
34744
34745
  const controlsProps = {
34745
34746
  ...VVideoControls.filterProps(omit(props, ['variant', 'rounded', 'hideVolume'])),
34746
34747
  rounded: Array.isArray(props.rounded) ? props.rounded.at(-1) : props.rounded,
@@ -34776,8 +34777,14 @@ const VVideo = genericComponent()({
34776
34777
  "color": "#fff",
34777
34778
  "variant": "outlined",
34778
34779
  "iconSize": "50",
34779
- "class": "v-video__center-icon"
34780
+ "class": "v-video__center-icon",
34781
+ "onClick": onVideoClick
34780
34782
  }, null);
34783
+ const activeOverlays = {
34784
+ playIcon: props.variant === 'player' && state.value === 'loaded' && !props.hideOverlay && !playing.value,
34785
+ poster: state.value !== 'loaded',
34786
+ loading: props.variant === 'player' && (state.value === 'loading' || waiting.value)
34787
+ };
34781
34788
  return createElementVNode("div", {
34782
34789
  "ref": containerRef,
34783
34790
  "class": normalizeClass(['v-video', `v-video--variant-${props.variant}`, `v-video--${state.value}`, {
@@ -34811,39 +34818,31 @@ const VVideo = genericComponent()({
34811
34818
  }), [slots.sources?.() ?? createElementVNode("source", {
34812
34819
  "src": props.src,
34813
34820
  "type": props.type
34814
- }, null)]), props.variant === 'player' && !props.hideOverlay && createVNode(VOverlay, mergeProps({
34815
- "key": "pause-overlay",
34816
- "modelValue": state.value === 'loaded',
34817
- "opacity": "0"
34818
- }, overlayProps), {
34819
- default: () => [createVNode(VSpacer, null, null), createVNode(MaybeTransition, {
34820
- "name": "fade-transition"
34821
- }, {
34822
- default: () => [!playing.value && overlayPlayIcon]
34823
- }), createVNode(VSpacer, null, null)]
34824
- }), props.variant === 'player' && !!slots.header ? createElementVNode("div", {
34821
+ }, null)]), createVNode(Transition, {
34822
+ "name": "fade-transition"
34823
+ }, {
34824
+ default: () => [activeOverlays.playIcon && createElementVNode("div", {
34825
+ "class": "v-video__overlay-fill"
34826
+ }, [overlayPlayIcon])]
34827
+ }), props.variant === 'player' && !!slots.header && createElementVNode("div", {
34825
34828
  "key": "header",
34826
34829
  "class": "v-video__header"
34827
- }, [slots.header()]) : '', createVNode(VOverlay, mergeProps({
34828
- "key": "poster-overlay",
34829
- "modelValue": state.value !== 'loaded',
34830
+ }, [slots.header()]), createVNode(MaybeTransition, {
34830
34831
  "transition": posterTransition
34831
- }, overlayProps), {
34832
- default: () => [createVNode(VImg, {
34832
+ }, {
34833
+ default: () => [activeOverlays.poster && createElementVNode("div", {
34834
+ "class": "v-video__overlay-fill"
34835
+ }, [createVNode(VImg, {
34833
34836
  "cover": true,
34834
34837
  "src": props.image
34835
34838
  }, {
34836
34839
  default: () => [createElementVNode("div", {
34837
34840
  "class": normalizeClass(['v-video__overlay-fill', ...roundedContainerClasses.value])
34838
34841
  }, [props.variant === 'player' && overlayPlayIcon])]
34839
- })]
34840
- }), props.variant === 'player' && createVNode(VOverlay, mergeProps({
34841
- "key": "loading-overlay",
34842
- "modelValue": state.value === 'loading' || waiting.value,
34843
- "opacity": ".1"
34844
- }, overlayProps), {
34845
- default: () => [loadingIndicator]
34846
- })]), createVNode(MaybeTransition, {
34842
+ })])]
34843
+ }), activeOverlays.loading && createElementVNode("div", {
34844
+ "class": "v-video__overlay-fill"
34845
+ }, [loadingIndicator])]), createVNode(MaybeTransition, {
34847
34846
  "key": "actions",
34848
34847
  "transition": props.controlsTransition
34849
34848
  }, {
@@ -35299,7 +35298,7 @@ function createVuetify$1() {
35299
35298
  };
35300
35299
  });
35301
35300
  }
35302
- const version$1 = "3.9.6";
35301
+ const version$1 = "3.9.7";
35303
35302
  createVuetify$1.version = version$1;
35304
35303
 
35305
35304
  // Vue's inject() can only be used in setup
@@ -35597,7 +35596,7 @@ var index = /*#__PURE__*/Object.freeze({
35597
35596
 
35598
35597
  /* eslint-disable local-rules/sort-imports */
35599
35598
 
35600
- const version = "3.9.6";
35599
+ const version = "3.9.7";
35601
35600
 
35602
35601
  /* eslint-disable local-rules/sort-imports */
35603
35602