vuetify 3.8.9 → 3.8.10

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 (83) hide show
  1. package/dist/json/attributes.json +3370 -3362
  2. package/dist/json/importMap-labs.json +24 -24
  3. package/dist/json/importMap.json +160 -160
  4. package/dist/json/tags.json +2 -0
  5. package/dist/json/web-types.json +5992 -5974
  6. package/dist/vuetify-labs.cjs +89 -40
  7. package/dist/vuetify-labs.css +5399 -5390
  8. package/dist/vuetify-labs.d.ts +69 -59
  9. package/dist/vuetify-labs.esm.js +89 -40
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +89 -40
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +83 -39
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +5526 -5517
  16. package/dist/vuetify.d.ts +64 -59
  17. package/dist/vuetify.esm.js +83 -39
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +83 -39
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +390 -387
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VBtn/VBtn.css +3 -0
  25. package/lib/components/VBtn/VBtn.sass +3 -0
  26. package/lib/components/VBtnGroup/VBtnGroup.css +2 -1
  27. package/lib/components/VBtnGroup/VBtnGroup.sass +2 -1
  28. package/lib/components/VDataTable/VDataTable.css +6 -3
  29. package/lib/components/VDataTable/VDataTable.sass +4 -2
  30. package/lib/components/VDatePicker/VDatePicker.js +19 -13
  31. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  32. package/lib/components/VDatePicker/VDatePickerYears.js +1 -3
  33. package/lib/components/VDatePicker/VDatePickerYears.js.map +1 -1
  34. package/lib/components/VField/VField.js +10 -2
  35. package/lib/components/VField/VField.js.map +1 -1
  36. package/lib/components/VList/VListChildren.js +4 -3
  37. package/lib/components/VList/VListChildren.js.map +1 -1
  38. package/lib/components/VList/VListGroup.d.ts +10 -0
  39. package/lib/components/VList/VListGroup.js +2 -2
  40. package/lib/components/VList/VListGroup.js.map +1 -1
  41. package/lib/components/VList/VListItem.css +2 -0
  42. package/lib/components/VList/VListItem.sass +2 -0
  43. package/lib/components/VList/_variables.scss +1 -0
  44. package/lib/components/VOtpInput/VOtpInput.js +17 -1
  45. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  46. package/lib/components/VSpeedDial/VSpeedDial.css +1 -1
  47. package/lib/components/VSpeedDial/VSpeedDial.sass +3 -1
  48. package/lib/components/VTextField/VTextField.js +4 -4
  49. package/lib/components/VTextField/VTextField.js.map +1 -1
  50. package/lib/components/VTextarea/VTextarea.js +4 -4
  51. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  52. package/lib/composables/autofocus.d.ts +7 -0
  53. package/lib/composables/autofocus.js +10 -0
  54. package/lib/composables/autofocus.js.map +1 -0
  55. package/lib/composables/group.js +1 -0
  56. package/lib/composables/group.js.map +1 -1
  57. package/lib/composables/hotkey.d.ts +9 -0
  58. package/lib/composables/hotkey.js +131 -0
  59. package/lib/composables/hotkey.js.map +1 -0
  60. package/lib/composables/intersectionObserver.js +2 -2
  61. package/lib/composables/intersectionObserver.js.map +1 -1
  62. package/lib/composables/selectLink.js +2 -2
  63. package/lib/composables/selectLink.js.map +1 -1
  64. package/lib/composables/transition.js +3 -3
  65. package/lib/composables/transition.js.map +1 -1
  66. package/lib/entry-bundler.js +1 -1
  67. package/lib/entry-bundler.js.map +1 -1
  68. package/lib/framework.d.ts +59 -59
  69. package/lib/framework.js +1 -1
  70. package/lib/framework.js.map +1 -1
  71. package/lib/labs/VFileUpload/VFileUploadItem.js +1 -0
  72. package/lib/labs/VFileUpload/VFileUploadItem.js.map +1 -1
  73. package/lib/labs/VTimePicker/VTimePickerClock.js +3 -1
  74. package/lib/labs/VTimePicker/VTimePickerClock.js.map +1 -1
  75. package/lib/labs/VTreeview/VTreeviewChildren.js +2 -1
  76. package/lib/labs/VTreeview/VTreeviewChildren.js.map +1 -1
  77. package/lib/labs/VTreeview/VTreeviewGroup.d.ts +10 -0
  78. package/lib/labs/VTreeview/VTreeviewItem.js +1 -0
  79. package/lib/labs/VTreeview/VTreeviewItem.js.map +1 -1
  80. package/lib/util/helpers.d.ts +3 -0
  81. package/lib/util/helpers.js +7 -0
  82. package/lib/util/helpers.js.map +1 -1
  83. package/package.json +8 -8
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.9
2
+ * Vuetify v3.8.10
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -613,6 +613,13 @@
613
613
  }
614
614
  return out;
615
615
  }
616
+ function onlyDefinedProps(props) {
617
+ const booleanAttributes = ['checked', 'disabled'];
618
+ return Object.fromEntries(Object.entries(props).filter(_ref => {
619
+ let [key, v] = _ref;
620
+ return booleanAttributes.includes(key) ? !!v : v !== undefined;
621
+ }));
622
+ }
616
623
 
617
624
  // Utilities
618
625
  const block = ['top', 'bottom'];
@@ -937,7 +944,7 @@
937
944
  // WoB should always return negative value.
938
945
 
939
946
  const SAPC = (Ybg ** revBG - Ytxt ** revTXT) * scaleWoB;
940
- outputContrast = SAPC > -1e-3 ? 0.0 : SAPC > -0.078 ? SAPC - SAPC * loConFactor * loConOffset : SAPC + loConOffset;
947
+ outputContrast = SAPC > -loClip ? 0.0 : SAPC > -loConThresh ? SAPC - SAPC * loConFactor * loConOffset : SAPC + loConOffset;
941
948
  }
942
949
  return outputContrast * 100;
943
950
  }
@@ -3325,10 +3332,10 @@
3325
3332
  } = isObject(transition) ? transition : {};
3326
3333
  let transitionProps;
3327
3334
  if (isObject(transition)) {
3328
- transitionProps = vue.mergeProps(customProps, JSON.parse(JSON.stringify({
3335
+ transitionProps = vue.mergeProps(customProps, onlyDefinedProps({
3329
3336
  disabled,
3330
3337
  group
3331
- })), rest);
3338
+ }), rest);
3332
3339
  } else {
3333
3340
  transitionProps = vue.mergeProps({
3334
3341
  name: disabled || !transition ? '' : transition
@@ -4397,6 +4404,7 @@
4397
4404
  } else {
4398
4405
  const isSelected = selected.value.includes(id);
4399
4406
  if (props.mandatory && isSelected) return;
4407
+ if (!isSelected && !value) return;
4400
4408
  selected.value = value ?? !isSelected ? [id] : [];
4401
4409
  }
4402
4410
  }
@@ -4831,7 +4839,7 @@
4831
4839
  const observer = new IntersectionObserver(entries => {
4832
4840
  isIntersecting.value = !!entries.find(entry => entry.isIntersecting);
4833
4841
  }, options);
4834
- vue.onBeforeUnmount(() => {
4842
+ vue.onScopeDispose(() => {
4835
4843
  observer.disconnect();
4836
4844
  });
4837
4845
  vue.watch(intersectionRef, (newValue, oldValue) => {
@@ -5362,9 +5370,9 @@
5362
5370
 
5363
5371
  function useSelectLink(link, select) {
5364
5372
  vue.watch(() => link.isActive?.value, isActive => {
5365
- if (link.isLink.value && isActive && select) {
5373
+ if (link.isLink.value && isActive != null && select) {
5366
5374
  vue.nextTick(() => {
5367
- select(true);
5375
+ select(isActive);
5368
5376
  });
5369
5377
  }
5370
5378
  }, {
@@ -8978,6 +8986,7 @@
8978
8986
  type: IconValue,
8979
8987
  default: '$expand'
8980
8988
  },
8989
+ rawId: [String, Number],
8981
8990
  prependIcon: IconValue,
8982
8991
  appendIcon: IconValue,
8983
8992
  fluid: Boolean,
@@ -8999,13 +9008,12 @@
8999
9008
  open,
9000
9009
  id: _id
9001
9010
  } = useNestedItem(() => props.value, true);
9002
- const id = vue.computed(() => `v-list-group--id-${String(_id.value)}`);
9011
+ const id = vue.computed(() => `v-list-group--id-${String(props.rawId ?? _id.value)}`);
9003
9012
  const list = useList();
9004
9013
  const {
9005
9014
  isBooted
9006
9015
  } = useSsrBoot();
9007
9016
  function onClick(e) {
9008
- e.stopPropagation();
9009
9017
  if (['INPUT', 'TEXTAREA'].includes(e.target?.tagName)) return;
9010
9018
  open(!isOpen.value, e);
9011
9019
  }
@@ -9523,9 +9531,10 @@
9523
9531
  }) : undefined
9524
9532
  };
9525
9533
  const listGroupProps = VListGroup.filterProps(itemProps);
9526
- return children ? vue.createVNode(VListGroup, vue.mergeProps({
9527
- "value": itemProps?.value
9528
- }, listGroupProps), {
9534
+ return children ? vue.createVNode(VListGroup, vue.mergeProps(listGroupProps, {
9535
+ "value": props.returnObject ? item : itemProps?.value,
9536
+ "rawId": itemProps?.value
9537
+ }), {
9529
9538
  activator: _ref3 => {
9530
9539
  let {
9531
9540
  props: activatorProps
@@ -11949,7 +11958,11 @@
11949
11958
  default: slots.loader
11950
11959
  }), hasPrepend && vue.createElementVNode("div", {
11951
11960
  "key": "prepend",
11952
- "class": "v-field__prepend-inner"
11961
+ "class": "v-field__prepend-inner",
11962
+ "onMousedown": e => {
11963
+ e.preventDefault();
11964
+ e.stopPropagation();
11965
+ }
11953
11966
  }, [props.prependInnerIcon && vue.createVNode(InputIcon, {
11954
11967
  "key": "prepend-icon",
11955
11968
  "name": "prependInner",
@@ -12018,7 +12031,11 @@
12018
12031
  })]), [[vue.vShow, props.dirty]])]
12019
12032
  }), hasAppend && vue.createElementVNode("div", {
12020
12033
  "key": "append",
12021
- "class": "v-field__append-inner"
12034
+ "class": "v-field__append-inner",
12035
+ "onMousedown": e => {
12036
+ e.preventDefault();
12037
+ e.stopPropagation();
12038
+ }
12022
12039
  }, [slots['append-inner']?.(slotProps.value), props.appendInnerIcon && vue.createVNode(InputIcon, {
12023
12040
  "key": "append-icon",
12024
12041
  "name": "appendInner",
@@ -12053,6 +12070,16 @@
12053
12070
  }
12054
12071
  });
12055
12072
 
12073
+ function useAutofocus(props) {
12074
+ function onIntersect(isIntersecting, entries) {
12075
+ if (!props.autofocus || !isIntersecting) return;
12076
+ entries[0].target?.focus?.();
12077
+ }
12078
+ return {
12079
+ onIntersect
12080
+ };
12081
+ }
12082
+
12056
12083
  // Types
12057
12084
 
12058
12085
  const activeTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month'];
@@ -12099,6 +12126,9 @@
12099
12126
  focus,
12100
12127
  blur
12101
12128
  } = useFocus(props);
12129
+ const {
12130
+ onIntersect
12131
+ } = useAutofocus(props);
12102
12132
  const counterValue = vue.computed(() => {
12103
12133
  return typeof props.counterValue === 'function' ? props.counterValue(model.value) : typeof props.counterValue === 'number' ? props.counterValue : (model.value ?? '').toString().length;
12104
12134
  });
@@ -12108,10 +12138,6 @@
12108
12138
  return props.counter;
12109
12139
  });
12110
12140
  const isPlainOrUnderlined = vue.computed(() => ['plain', 'underlined'].includes(props.variant));
12111
- function onIntersect(isIntersecting, entries) {
12112
- if (!props.autofocus || !isIntersecting) return;
12113
- entries[0].target?.focus?.();
12114
- }
12115
12141
  const vInputRef = vue.ref();
12116
12142
  const vFieldRef = vue.ref();
12117
12143
  const inputRef = vue.ref();
@@ -22477,9 +22503,7 @@
22477
22503
  const yearRef = templateRef();
22478
22504
  vue.onMounted(async () => {
22479
22505
  await vue.nextTick();
22480
- yearRef.el?.scrollIntoView({
22481
- block: 'center'
22482
- });
22506
+ yearRef.el?.focus();
22483
22507
  });
22484
22508
  function isYearAllowed(year) {
22485
22509
  if (Array.isArray(props.allowedYears) && props.allowedYears.length) {
@@ -22615,8 +22639,16 @@
22615
22639
  return value && adapter.isValid(value) ? value : today;
22616
22640
  });
22617
22641
  const headerColor = vue.toRef(() => props.headerColor ?? props.color);
22618
- const month = vue.ref(Number(props.month ?? adapter.getMonth(adapter.startOfMonth(internal.value))));
22619
- const year = vue.ref(Number(props.year ?? adapter.getYear(adapter.startOfYear(adapter.setMonth(internal.value, month.value)))));
22642
+ const _month = useProxiedModel(props, 'month');
22643
+ const month = vue.computed({
22644
+ get: () => Number(_month.value ?? adapter.getMonth(adapter.startOfMonth(internal.value))),
22645
+ set: v => _month.value = v
22646
+ });
22647
+ const _year = useProxiedModel(props, 'year');
22648
+ const year = vue.computed({
22649
+ get: () => Number(_year.value ?? adapter.getYear(adapter.startOfYear(adapter.setMonth(internal.value, month.value)))),
22650
+ set: v => _year.value = v
22651
+ });
22620
22652
  const isReversing = vue.shallowRef(false);
22621
22653
  const header = vue.computed(() => {
22622
22654
  if (props.multiple && model.value.length > 1) {
@@ -22700,9 +22732,9 @@
22700
22732
  } else {
22701
22733
  year.value++;
22702
22734
  month.value = 0;
22703
- onUpdateYear(year.value);
22735
+ onUpdateYear();
22704
22736
  }
22705
- onUpdateMonth(month.value);
22737
+ onUpdateMonth();
22706
22738
  }
22707
22739
  function onClickPrev() {
22708
22740
  if (month.value > 0) {
@@ -22710,9 +22742,9 @@
22710
22742
  } else {
22711
22743
  year.value--;
22712
22744
  month.value = 11;
22713
- onUpdateYear(year.value);
22745
+ onUpdateYear();
22714
22746
  }
22715
- onUpdateMonth(month.value);
22747
+ onUpdateMonth();
22716
22748
  }
22717
22749
  function onClickDate() {
22718
22750
  viewMode.value = 'month';
@@ -22723,13 +22755,11 @@
22723
22755
  function onClickYear() {
22724
22756
  viewMode.value = viewMode.value === 'year' ? 'month' : 'year';
22725
22757
  }
22726
- function onUpdateMonth(value) {
22758
+ function onUpdateMonth() {
22727
22759
  if (viewMode.value === 'months') onClickMonth();
22728
- emit('update:month', value);
22729
22760
  }
22730
- function onUpdateYear(value) {
22761
+ function onUpdateYear() {
22731
22762
  if (viewMode.value === 'year') onClickYear();
22732
- emit('update:year', value);
22733
22763
  }
22734
22764
  vue.watch(model, (val, oldVal) => {
22735
22765
  const arrBefore = wrapInArray(oldVal);
@@ -22741,11 +22771,11 @@
22741
22771
  const newYear = adapter.getYear(after);
22742
22772
  if (newMonth !== month.value) {
22743
22773
  month.value = newMonth;
22744
- onUpdateMonth(month.value);
22774
+ onUpdateMonth();
22745
22775
  }
22746
22776
  if (newYear !== year.value) {
22747
22777
  year.value = newYear;
22748
- onUpdateYear(year.value);
22778
+ onUpdateYear();
22749
22779
  }
22750
22780
  isReversing.value = adapter.isBefore(before, after);
22751
22781
  });
@@ -25353,6 +25383,21 @@
25353
25383
  const contentRef = vue.ref();
25354
25384
  const inputRef = vue.ref([]);
25355
25385
  const current = vue.computed(() => inputRef.value[focusIndex.value]);
25386
+ const intersectScope = vue.effectScope();
25387
+ intersectScope.run(() => {
25388
+ const {
25389
+ intersectionRef,
25390
+ isIntersecting
25391
+ } = useIntersectionObserver();
25392
+ vue.watch(isIntersecting, v => {
25393
+ if (!v) return;
25394
+ intersectionRef.value?.focus();
25395
+ intersectScope.stop();
25396
+ });
25397
+ vue.watchEffect(() => {
25398
+ intersectionRef.value = inputRef.value[0];
25399
+ });
25400
+ });
25356
25401
  function onInput() {
25357
25402
  // The maxlength attribute doesn't work for the number type input, so the text type is used.
25358
25403
  // The following logic simulates the behavior of a number input.
@@ -28099,6 +28144,9 @@
28099
28144
  focus,
28100
28145
  blur
28101
28146
  } = useFocus(props);
28147
+ const {
28148
+ onIntersect
28149
+ } = useAutofocus(props);
28102
28150
  const counterValue = vue.computed(() => {
28103
28151
  return typeof props.counterValue === 'function' ? props.counterValue(model.value) : (model.value || '').toString().length;
28104
28152
  });
@@ -28107,10 +28155,6 @@
28107
28155
  if (!props.counter || typeof props.counter !== 'number' && typeof props.counter !== 'string') return undefined;
28108
28156
  return props.counter;
28109
28157
  });
28110
- function onIntersect(isIntersecting, entries) {
28111
- if (!props.autofocus || !isIntersecting) return;
28112
- entries[0].target?.focus?.();
28113
- }
28114
28158
  const vInputRef = vue.ref();
28115
28159
  const vFieldRef = vue.ref();
28116
28160
  const controlHeight = vue.shallowRef('');
@@ -29827,6 +29871,7 @@
29827
29871
  "class": "v-file-upload-item"
29828
29872
  }), {
29829
29873
  ...slots,
29874
+ title: () => props?.title ?? props.file?.name,
29830
29875
  prepend: slotProps => vue.createElementVNode(vue.Fragment, null, [!slots.prepend ? vue.createVNode(VAvatar, {
29831
29876
  "icon": props.fileIcon,
29832
29877
  "image": preview.value,
@@ -30675,6 +30720,7 @@
30675
30720
  const isDragging = vue.ref(false);
30676
30721
  const valueOnMouseDown = vue.ref(null);
30677
30722
  const valueOnMouseUp = vue.ref(null);
30723
+ const emitChangeDebounced = debounce(value => emit('change', value), 750);
30678
30724
  const {
30679
30725
  textColorClasses,
30680
30726
  textColorStyles
@@ -30720,6 +30766,7 @@
30720
30766
  if (value !== props.displayedValue) {
30721
30767
  update(value);
30722
30768
  }
30769
+ emitChangeDebounced(value);
30723
30770
  }
30724
30771
  function isInner(value) {
30725
30772
  return props.double && value - props.min >= roundCount.value;
@@ -31320,6 +31367,7 @@
31320
31367
  }
31321
31368
  function onClickAction(e) {
31322
31369
  e.preventDefault();
31370
+ e.stopPropagation();
31323
31371
  emit('toggleExpand', e);
31324
31372
  }
31325
31373
  useRender(() => {
@@ -31465,7 +31513,8 @@
31465
31513
  const treeviewGroupProps = VTreeviewGroup.filterProps(itemProps);
31466
31514
  const treeviewChildrenProps = VTreeviewChildren.filterProps(props);
31467
31515
  return children ? vue.createVNode(VTreeviewGroup, vue.mergeProps(treeviewGroupProps, {
31468
- "value": props.returnObject ? item.raw : treeviewGroupProps?.value
31516
+ "value": props.returnObject ? item.raw : treeviewGroupProps?.value,
31517
+ "rawId": treeviewGroupProps?.value
31469
31518
  }), {
31470
31519
  activator: _ref2 => {
31471
31520
  let {
@@ -32153,7 +32202,7 @@
32153
32202
  };
32154
32203
  });
32155
32204
  }
32156
- const version$1 = "3.8.9";
32205
+ const version$1 = "3.8.10";
32157
32206
  createVuetify$1.version = version$1;
32158
32207
 
32159
32208
  // Vue's inject() can only be used in setup
@@ -32451,7 +32500,7 @@
32451
32500
 
32452
32501
  /* eslint-disable local-rules/sort-imports */
32453
32502
 
32454
- const version = "3.8.9";
32503
+ const version = "3.8.10";
32455
32504
 
32456
32505
  /* eslint-disable local-rules/sort-imports */
32457
32506