@vuetify/nightly 3.9.0-beta.0-dev.2025-06-20 → 3.9.0-beta.1-dev.2025-06-26

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 (65) hide show
  1. package/CHANGELOG.md +3 -3
  2. package/dist/json/attributes.json +2060 -2060
  3. package/dist/json/importMap-labs.json +12 -12
  4. package/dist/json/importMap.json +158 -158
  5. package/dist/json/web-types.json +3859 -3859
  6. package/dist/vuetify-labs.cjs +57 -54
  7. package/dist/vuetify-labs.css +4725 -4729
  8. package/dist/vuetify-labs.d.ts +1300 -97
  9. package/dist/vuetify-labs.esm.js +57 -54
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +57 -54
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +57 -54
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +3311 -3315
  16. package/dist/vuetify.d.ts +1300 -97
  17. package/dist/vuetify.esm.js +57 -54
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +57 -54
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +45 -45
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VBtn/VBtn.sass +3 -1
  25. package/lib/components/VCarousel/VCarousel.css +0 -1
  26. package/lib/components/VCarousel/VCarousel.js +1 -0
  27. package/lib/components/VCarousel/VCarousel.js.map +1 -1
  28. package/lib/components/VCarousel/VCarousel.sass +0 -1
  29. package/lib/components/VDatePicker/VDatePickerControls.css +1 -0
  30. package/lib/components/VDatePicker/VDatePickerControls.sass +1 -0
  31. package/lib/components/VDatePicker/VDatePickerMonth.css +3 -8
  32. package/lib/components/VDatePicker/VDatePickerMonth.js +8 -3
  33. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  34. package/lib/components/VDatePicker/VDatePickerMonth.sass +3 -8
  35. package/lib/components/VField/VField.js +2 -10
  36. package/lib/components/VField/VField.js.map +1 -1
  37. package/lib/components/VList/VList.js +1 -1
  38. package/lib/components/VList/VList.js.map +1 -1
  39. package/lib/components/VNumberInput/VNumberInput.js +4 -10
  40. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  41. package/lib/components/VNumberInput/hold.js +4 -0
  42. package/lib/components/VNumberInput/hold.js.map +1 -1
  43. package/lib/components/VTimePicker/VTimePicker.css +1 -6
  44. package/lib/components/VTimePicker/VTimePicker.sass +1 -6
  45. package/lib/components/VTimePicker/VTimePickerClock.css +5 -4
  46. package/lib/components/VTimePicker/VTimePickerClock.sass +5 -4
  47. package/lib/components/VTimePicker/VTimePickerControls.css +2 -1
  48. package/lib/components/VTimePicker/VTimePickerControls.sass +2 -3
  49. package/lib/components/VTreeview/VTreeviewChildren.d.ts +13 -0
  50. package/lib/components/VTreeview/VTreeviewChildren.js +11 -6
  51. package/lib/components/VTreeview/VTreeviewChildren.js.map +1 -1
  52. package/lib/components/VTreeview/VTreeviewItem.d.ts +1206 -3
  53. package/lib/components/VTreeview/VTreeviewItem.js +11 -12
  54. package/lib/components/VTreeview/VTreeviewItem.js.map +1 -1
  55. package/lib/composables/calendar.d.ts +2 -0
  56. package/lib/composables/calendar.js +7 -3
  57. package/lib/composables/calendar.js.map +1 -1
  58. package/lib/composables/nested/nested.js +8 -8
  59. package/lib/composables/nested/nested.js.map +1 -1
  60. package/lib/entry-bundler.js +1 -1
  61. package/lib/framework.d.ts +54 -54
  62. package/lib/framework.js +1 -1
  63. package/lib/labs/VPicker/VPicker.css +4 -0
  64. package/lib/labs/VPicker/VPicker.sass +4 -0
  65. package/package.json +1 -1
package/dist/vuetify.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.9.0-beta.0-dev.2025-06-20
2
+ * Vuetify v3.9.0-beta.1-dev.2025-06-26
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -9299,9 +9299,9 @@
9299
9299
  }, 'nested');
9300
9300
  const useNested = props => {
9301
9301
  let isUnmounted = false;
9302
- const children = vue.ref(new Map());
9303
- const parents = vue.ref(new Map());
9304
- const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(v), v => [...v.values()]);
9302
+ const children = vue.shallowRef(new Map());
9303
+ const parents = vue.shallowRef(new Map());
9304
+ const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(Array.isArray(v) ? v.map(i => vue.toRaw(i)) : v), v => [...v.values()]);
9305
9305
  const activeStrategy = vue.computed(() => {
9306
9306
  if (typeof props.activeStrategy === 'object') return props.activeStrategy;
9307
9307
  if (typeof props.activeStrategy === 'function') return props.activeStrategy(props.mandatory);
@@ -9355,7 +9355,7 @@
9355
9355
  });
9356
9356
  function getPath(id) {
9357
9357
  const path = [];
9358
- let parent = id;
9358
+ let parent = vue.toRaw(id);
9359
9359
  while (parent != null) {
9360
9360
  path.unshift(parent);
9361
9361
  parent = parents.value.get(parent);
@@ -9498,7 +9498,7 @@
9498
9498
  const useNestedItem = (id, isGroup) => {
9499
9499
  const parent = vue.inject(VNestedSymbol, emptyNested);
9500
9500
  const uidSymbol = Symbol('nested item');
9501
- const computedId = vue.computed(() => vue.toValue(id) ?? uidSymbol);
9501
+ const computedId = vue.computed(() => vue.toRaw(vue.toValue(id)) ?? uidSymbol);
9502
9502
  const item = {
9503
9503
  ...parent,
9504
9504
  id: computedId,
@@ -9507,10 +9507,10 @@
9507
9507
  isOpen: vue.computed(() => parent.root.opened.value.has(computedId.value)),
9508
9508
  parent: vue.computed(() => parent.root.parents.value.get(computedId.value)),
9509
9509
  activate: (activated, e) => parent.root.activate(computedId.value, activated, e),
9510
- isActivated: vue.computed(() => parent.root.activated.value.has(vue.toRaw(computedId.value))),
9510
+ isActivated: vue.computed(() => parent.root.activated.value.has(computedId.value)),
9511
9511
  select: (selected, e) => parent.root.select(computedId.value, selected, e),
9512
- isSelected: vue.computed(() => parent.root.selected.value.get(vue.toRaw(computedId.value)) === 'on'),
9513
- isIndeterminate: vue.computed(() => parent.root.selected.value.get(vue.toRaw(computedId.value)) === 'indeterminate'),
9512
+ isSelected: vue.computed(() => parent.root.selected.value.get(computedId.value) === 'on'),
9513
+ isIndeterminate: vue.computed(() => parent.root.selected.value.get(computedId.value) === 'indeterminate'),
9514
9514
  isLeaf: vue.computed(() => !parent.root.children.value.get(computedId.value)),
9515
9515
  isGroupActivator: parent.isGroupActivator
9516
9516
  };
@@ -10223,7 +10223,7 @@
10223
10223
  function transformItem$2(props, item) {
10224
10224
  const type = getPropertyFromItem(item, props.itemType, 'item');
10225
10225
  const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle);
10226
- const value = getPropertyFromItem(item, props.itemValue, undefined);
10226
+ const value = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemValue, undefined);
10227
10227
  const children = getPropertyFromItem(item, props.itemChildren);
10228
10228
  const itemProps = props.itemProps === true ? omit(item, ['children']) : getPropertyFromItem(item, props.itemProps);
10229
10229
  const _props = {
@@ -12375,11 +12375,7 @@
12375
12375
  default: slots.loader
12376
12376
  }), hasPrepend && vue.createElementVNode("div", {
12377
12377
  "key": "prepend",
12378
- "class": "v-field__prepend-inner",
12379
- "onMousedown": e => {
12380
- e.preventDefault();
12381
- e.stopPropagation();
12382
- }
12378
+ "class": "v-field__prepend-inner"
12383
12379
  }, [props.prependInnerIcon && vue.createVNode(InputIcon, {
12384
12380
  "key": "prepend-icon",
12385
12381
  "name": "prependInner",
@@ -12448,11 +12444,7 @@
12448
12444
  })]), [[vue.vShow, props.dirty]])]
12449
12445
  }), hasAppend && vue.createElementVNode("div", {
12450
12446
  "key": "append",
12451
- "class": "v-field__append-inner",
12452
- "onMousedown": e => {
12453
- e.preventDefault();
12454
- e.stopPropagation();
12455
- }
12447
+ "class": "v-field__append-inner"
12456
12448
  }, [slots['append-inner']?.(slotProps.value), props.appendInnerIcon && vue.createVNode(InputIcon, {
12457
12449
  "key": "append-icon",
12458
12450
  "name": "appendInner",
@@ -15698,6 +15690,7 @@
15698
15690
  }) : vue.createVNode(VBtn, vue.mergeProps(item, props), null);
15699
15691
  })]
15700
15692
  })]), props.progress && vue.createVNode(VProgressLinear, {
15693
+ "absolute": true,
15701
15694
  "class": "v-carousel__progress",
15702
15695
  "color": typeof props.progress === 'string' ? props.progress : undefined,
15703
15696
  "modelValue": (group.getItemIndex(model.value) + 1) / group.items.value.length * 100
@@ -22612,8 +22605,11 @@
22612
22605
  }, v => adapter.getMonth(v));
22613
22606
  const weekDays = vue.computed(() => {
22614
22607
  const firstDayOfWeek = adapter.toJsDate(adapter.startOfWeek(adapter.date(), props.firstDayOfWeek)).getDay();
22615
- // Always generate all days, regardless of props.weekdays
22616
- return [0, 1, 2, 3, 4, 5, 6].map(day => (day + firstDayOfWeek) % 7);
22608
+ return props.weekdays.map(day => (day + firstDayOfWeek) % 7);
22609
+ });
22610
+ const weekdayLabels = vue.computed(() => {
22611
+ const labels = adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat);
22612
+ return weekDays.value.map(day => labels[day]);
22617
22613
  });
22618
22614
  const weeksInMonth = vue.computed(() => {
22619
22615
  const weeks = adapter.getWeekArray(month.value, props.firstDayOfWeek);
@@ -22694,7 +22690,7 @@
22694
22690
  if (typeof props.allowedDates === 'function') {
22695
22691
  return !props.allowedDates(date);
22696
22692
  }
22697
- return !props.weekdays.includes(adapter.toJsDate(date).getDay());
22693
+ return false;
22698
22694
  }
22699
22695
  return {
22700
22696
  displayValue,
@@ -22704,6 +22700,7 @@
22704
22700
  model,
22705
22701
  weeksInMonth,
22706
22702
  weekDays,
22703
+ weekdayLabels,
22707
22704
  weekNumbers
22708
22705
  };
22709
22706
  }
@@ -22742,7 +22739,9 @@
22742
22739
  const {
22743
22740
  daysInMonth,
22744
22741
  model,
22745
- weekNumbers
22742
+ weekNumbers,
22743
+ weekDays,
22744
+ weekdayLabels
22746
22745
  } = useCalendar(props);
22747
22746
  const adapter = useDate();
22748
22747
  const rangeStart = vue.shallowRef();
@@ -22814,7 +22813,10 @@
22814
22813
  }
22815
22814
  }
22816
22815
  useRender(() => vue.createElementVNode("div", {
22817
- "class": "v-date-picker-month"
22816
+ "class": "v-date-picker-month",
22817
+ "style": {
22818
+ '--v-date-picker-days-in-week': weekDays.value.length
22819
+ }
22818
22820
  }, [props.showWeek && vue.createElementVNode("div", {
22819
22821
  "key": "weeks",
22820
22822
  "class": "v-date-picker-month__weeks"
@@ -22830,7 +22832,7 @@
22830
22832
  "ref": daysRef,
22831
22833
  "key": daysInMonth.value[0].date?.toString(),
22832
22834
  "class": "v-date-picker-month__days"
22833
- }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => vue.createElementVNode("div", {
22835
+ }, [!props.hideWeekdays && weekdayLabels.value.map(weekDay => vue.createElementVNode("div", {
22834
22836
  "class": vue.normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
22835
22837
  }, [weekDay])), daysInMonth.value.map((item, i) => {
22836
22838
  const slotProps = {
@@ -25510,6 +25512,8 @@
25510
25512
  function holdStart(value) {
25511
25513
  holdStop();
25512
25514
  tick(value);
25515
+ window.addEventListener('pointerup', holdStop);
25516
+ document.addEventListener('blur', holdStop);
25513
25517
  timeout = window.setTimeout(() => {
25514
25518
  interval = window.setInterval(() => tick(value), HOLD_REPEAT);
25515
25519
  }, HOLD_DELAY);
@@ -25517,6 +25521,8 @@
25517
25521
  function holdStop() {
25518
25522
  window.clearTimeout(timeout);
25519
25523
  window.clearInterval(interval);
25524
+ window.removeEventListener('pointerup', holdStop);
25525
+ document.removeEventListener('blur', holdStop);
25520
25526
  }
25521
25527
  function tick(value) {
25522
25528
  toggleUpDown(value === 'up');
@@ -25652,7 +25658,7 @@
25652
25658
  onClick: onControlClick,
25653
25659
  onPointerup: onControlMouseup,
25654
25660
  onPointerdown: onUpControlMousedown,
25655
- onPointercancel: onControlPointerCancel
25661
+ onPointercancel: onControlMouseup
25656
25662
  }
25657
25663
  };
25658
25664
  const decrementSlotProps = {
@@ -25660,7 +25666,7 @@
25660
25666
  onClick: onControlClick,
25661
25667
  onPointerup: onControlMouseup,
25662
25668
  onPointerdown: onDownControlMousedown,
25663
- onPointercancel: onControlPointerCancel
25669
+ onPointercancel: onControlMouseup
25664
25670
  }
25665
25671
  };
25666
25672
  vue.watch(() => props.precision, () => formatInputValue());
@@ -25741,7 +25747,6 @@
25741
25747
  const el = e.currentTarget;
25742
25748
  el?.releasePointerCapture(e.pointerId);
25743
25749
  e.preventDefault();
25744
- e.stopPropagation();
25745
25750
  holdStop();
25746
25751
  }
25747
25752
  function onUpControlMousedown(e) {
@@ -25758,11 +25763,6 @@
25758
25763
  e.stopPropagation();
25759
25764
  holdStart('down');
25760
25765
  }
25761
- function onControlPointerCancel(e) {
25762
- const el = e.currentTarget;
25763
- el?.releasePointerCapture(e.pointerId);
25764
- holdStop();
25765
- }
25766
25766
  function clampModel() {
25767
25767
  if (controlsDisabled.value) return;
25768
25768
  if (!vTextFieldRef.value) return;
@@ -25809,7 +25809,7 @@
25809
25809
  "onClick": onControlClick,
25810
25810
  "onPointerdown": onUpControlMousedown,
25811
25811
  "onPointerup": onControlMouseup,
25812
- "onPointercancel": onControlPointerCancel,
25812
+ "onPointercancel": onControlMouseup,
25813
25813
  "size": controlNodeSize.value,
25814
25814
  "tabindex": "-1"
25815
25815
  }, null) : vue.createVNode(VDefaultsProvider, {
@@ -25839,7 +25839,7 @@
25839
25839
  "onClick": onControlClick,
25840
25840
  "onPointerdown": onDownControlMousedown,
25841
25841
  "onPointerup": onControlMouseup,
25842
- "onPointercancel": onControlPointerCancel,
25842
+ "onPointercancel": onControlMouseup,
25843
25843
  "size": controlNodeSize.value,
25844
25844
  "tabindex": "-1"
25845
25845
  }, null) : vue.createVNode(VDefaultsProvider, {
@@ -30044,7 +30044,7 @@
30044
30044
  emit('toggleExpand', e);
30045
30045
  }
30046
30046
  useRender(() => {
30047
- const listItemProps = omit(VListItem.filterProps(props), ['onClick']);
30047
+ const listItemProps = VListItem.filterProps(props);
30048
30048
  const hasPrepend = slots.prepend || props.toggleIcon;
30049
30049
  return vue.createVNode(VListItem, vue.mergeProps({
30050
30050
  "ref": vListItemRef
@@ -30055,12 +30055,12 @@
30055
30055
  'v-treeview-item--filtered': isFiltered.value
30056
30056
  }, props.class],
30057
30057
  "ripple": false,
30058
- "onClick": props.onClick ?? activateGroupActivator
30058
+ "onClick": activateGroupActivator
30059
30059
  }), {
30060
30060
  ...slots,
30061
30061
  prepend: hasPrepend ? slotProps => {
30062
30062
  return vue.createElementVNode(vue.Fragment, null, [vue.createVNode(VListItemAction, {
30063
- "start": false
30063
+ "start": true
30064
30064
  }, {
30065
30065
  default: () => [props.toggleIcon ? vue.createVNode(VBtn, {
30066
30066
  "density": "compact",
@@ -30069,13 +30069,11 @@
30069
30069
  "variant": "text",
30070
30070
  "onClick": onClickAction
30071
30071
  }, {
30072
- loader() {
30073
- return vue.createVNode(VProgressCircular, {
30074
- "indeterminate": "disable-shrink",
30075
- "size": "20",
30076
- "width": "2"
30077
- }, null);
30078
- }
30072
+ loader: () => vue.createVNode(VProgressCircular, {
30073
+ "indeterminate": "disable-shrink",
30074
+ "size": "20",
30075
+ "width": "2"
30076
+ }, null)
30079
30077
  }) : vue.createElementVNode("div", {
30080
30078
  "class": "v-treeview-item__level"
30081
30079
  }, null)]
@@ -30083,7 +30081,7 @@
30083
30081
  } : undefined
30084
30082
  });
30085
30083
  });
30086
- return {};
30084
+ return forwardRefs({}, vListItemRef);
30087
30085
  }
30088
30086
  });
30089
30087
 
@@ -30108,6 +30106,7 @@
30108
30106
  falseIcon: IconValue,
30109
30107
  trueIcon: IconValue,
30110
30108
  returnObject: Boolean,
30109
+ activatable: Boolean,
30111
30110
  selectable: Boolean,
30112
30111
  selectedColor: String,
30113
30112
  selectStrategy: [String, Function, Object],
@@ -30126,7 +30125,8 @@
30126
30125
  slots
30127
30126
  } = _ref;
30128
30127
  const isLoading = vue.reactive(new Set());
30129
- const isClickOnOpen = vue.computed(() => !props.disabled && (props.openOnClick != null ? props.openOnClick : props.selectable));
30128
+ const activatorItems = vue.ref([]);
30129
+ const isClickOnOpen = vue.computed(() => !props.disabled && (props.openOnClick != null ? props.openOnClick : props.selectable && !props.activatable));
30130
30130
  async function checkChildren(item) {
30131
30131
  try {
30132
30132
  if (!props.items?.length || !props.loadChildren) return;
@@ -30140,7 +30140,7 @@
30140
30140
  }
30141
30141
  function selectItem(select, isSelected) {
30142
30142
  if (props.selectable) {
30143
- select(!isSelected);
30143
+ select(isSelected);
30144
30144
  }
30145
30145
  }
30146
30146
  return () => slots.default?.() ?? props.items?.map((item, index) => {
@@ -30168,7 +30168,8 @@
30168
30168
  "indeterminateIcon": props.indeterminateIcon,
30169
30169
  "falseIcon": props.falseIcon,
30170
30170
  "trueIcon": props.trueIcon,
30171
- "onClick": vue.withModifiers(() => selectItem(slotProps.select, slotProps.isSelected), ['stop']),
30171
+ "onUpdate:modelValue": v => selectItem(slotProps.select, v),
30172
+ "onClick": e => e.stopPropagation(),
30172
30173
  "onKeydown": e => {
30173
30174
  if (!['Enter', 'Space'].includes(e.key)) return;
30174
30175
  e.stopPropagation();
@@ -30215,9 +30216,11 @@
30215
30216
  ...activatorProps,
30216
30217
  value: itemProps?.value,
30217
30218
  onToggleExpand: [() => checkChildren(item), activatorProps.onClick],
30218
- onClick: isClickOnOpen.value ? [() => checkChildren(item), activatorProps.onClick] : undefined
30219
+ onClick: isClickOnOpen.value ? [() => checkChildren(item), activatorProps.onClick] : () => selectItem(activatorItems.value[index]?.select, !activatorItems.value[index]?.isSelected)
30219
30220
  };
30220
- return vue.createVNode(VTreeviewItem, vue.mergeProps(listItemProps, {
30221
+ return vue.createVNode(VTreeviewItem, vue.mergeProps({
30222
+ "ref": el => activatorItems.value[index] = el
30223
+ }, listItemProps, {
30221
30224
  "value": props.returnObject ? item.raw : itemProps.value,
30222
30225
  "loading": loading
30223
30226
  }), slotsWithItem);
@@ -30894,7 +30897,7 @@
30894
30897
  };
30895
30898
  });
30896
30899
  }
30897
- const version$1 = "3.9.0-beta.0-dev.2025-06-20";
30900
+ const version$1 = "3.9.0-beta.1-dev.2025-06-26";
30898
30901
  createVuetify$1.version = version$1;
30899
30902
 
30900
30903
  // Vue's inject() can only be used in setup
@@ -30919,7 +30922,7 @@
30919
30922
  ...options
30920
30923
  });
30921
30924
  };
30922
- const version = "3.9.0-beta.0-dev.2025-06-20";
30925
+ const version = "3.9.0-beta.1-dev.2025-06-26";
30923
30926
  createVuetify.version = version;
30924
30927
 
30925
30928
  exports.blueprints = index;