@vuetify/nightly 3.9.1-dev.2025-07-17 → 3.9.2-master.2025-07-18

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 (61) hide show
  1. package/CHANGELOG.md +3 -14
  2. package/dist/json/attributes.json +3514 -3534
  3. package/dist/json/importMap-labs.json +24 -24
  4. package/dist/json/importMap.json +192 -192
  5. package/dist/json/tags.json +0 -5
  6. package/dist/json/web-types.json +19798 -6490
  7. package/dist/vuetify-labs.cjs +88 -278
  8. package/dist/vuetify-labs.css +4475 -4477
  9. package/dist/vuetify-labs.d.ts +64 -126
  10. package/dist/vuetify-labs.esm.js +88 -278
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +88 -278
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +79 -240
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +2683 -2685
  17. package/dist/vuetify.d.ts +64 -116
  18. package/dist/vuetify.esm.js +79 -240
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +79 -240
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +702 -724
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VAutocomplete/VAutocomplete.js +0 -1
  26. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  27. package/lib/components/VCombobox/VCombobox.js +0 -1
  28. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  29. package/lib/components/VFileInput/VFileInput.d.ts +0 -15
  30. package/lib/components/VFileInput/VFileInput.js +9 -38
  31. package/lib/components/VFileInput/VFileInput.js.map +1 -1
  32. package/lib/components/VList/VList.js +1 -2
  33. package/lib/components/VList/VList.js.map +1 -1
  34. package/lib/components/VList/VListItem.js +1 -7
  35. package/lib/components/VList/VListItem.js.map +1 -1
  36. package/lib/components/VProgressLinear/VProgressLinear.css +1 -1
  37. package/lib/components/VProgressLinear/VProgressLinear.d.ts +0 -75
  38. package/lib/components/VProgressLinear/VProgressLinear.js +6 -32
  39. package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
  40. package/lib/components/VProgressLinear/VProgressLinear.sass +2 -2
  41. package/lib/components/VSelect/VSelect.js +0 -1
  42. package/lib/components/VSelect/VSelect.js.map +1 -1
  43. package/lib/components/VTreeview/VTreeview.js +2 -3
  44. package/lib/components/VTreeview/VTreeview.js.map +1 -1
  45. package/lib/components/VTreeview/VTreeviewChildren.js +59 -59
  46. package/lib/components/VTreeview/VTreeviewChildren.js.map +1 -1
  47. package/lib/entry-bundler.js +1 -1
  48. package/lib/entry-bundler.js.map +1 -1
  49. package/lib/framework.d.ts +64 -64
  50. package/lib/framework.js +1 -1
  51. package/lib/framework.js.map +1 -1
  52. package/lib/labs/VFileUpload/VFileUpload.d.ts +0 -15
  53. package/lib/labs/VFileUpload/VFileUpload.js +9 -39
  54. package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
  55. package/package.json +1 -1
  56. package/lib/components/VProgressLinear/chunks.d.ts +0 -55
  57. package/lib/components/VProgressLinear/chunks.js +0 -62
  58. package/lib/components/VProgressLinear/chunks.js.map +0 -1
  59. package/lib/composables/fileFilter.d.ts +0 -18
  60. package/lib/composables/fileFilter.js +0 -38
  61. package/lib/composables/fileFilter.js.map +0 -1
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.9.1-dev.2025-07-17
2
+ * Vuetify v3.9.2-master.2025-07-18
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -5447,69 +5447,6 @@
5447
5447
  };
5448
5448
  }
5449
5449
 
5450
- // Utilities
5451
-
5452
- // Types
5453
-
5454
- // Composables
5455
- const makeChunksProps = propsFactory({
5456
- chunkCount: {
5457
- type: [Number, String],
5458
- default: null
5459
- },
5460
- chunkWidth: {
5461
- type: [Number, String],
5462
- default: null
5463
- },
5464
- chunkGap: {
5465
- type: [Number, String],
5466
- default: 4
5467
- }
5468
- }, 'chunks');
5469
- function useChunks(props, containerWidth) {
5470
- const hasChunks = vue.toRef(() => !!props.chunkCount || !!props.chunkWidth);
5471
- const chunkWidth = vue.computed(() => {
5472
- const containerSize = vue.toValue(containerWidth);
5473
- if (!containerSize) {
5474
- return 0;
5475
- }
5476
- if (!props.chunkCount) {
5477
- return Number(props.chunkWidth);
5478
- }
5479
- const count = Number(props.chunkCount);
5480
- const availableWidth = containerSize - Number(props.chunkGap) * (count - 1);
5481
- return availableWidth / count;
5482
- });
5483
- const chunkGap = vue.toRef(() => Number(props.chunkGap));
5484
- const chunksMaskStyles = vue.computed(() => {
5485
- if (!hasChunks.value) {
5486
- return {};
5487
- }
5488
- const chunkGapPx = convertToUnit(chunkGap.value);
5489
- const chunkWidthPx = convertToUnit(chunkWidth.value);
5490
- return {
5491
- maskRepeat: 'repeat-x',
5492
- maskImage: `linear-gradient(90deg, #000, #000 ${chunkWidthPx}, transparent ${chunkWidthPx}, transparent)`,
5493
- maskSize: `calc(${chunkWidthPx} + ${chunkGapPx}) 100%`
5494
- };
5495
- });
5496
- function snapValueToChunk(val) {
5497
- const containerSize = vue.toValue(containerWidth);
5498
- if (!containerSize) {
5499
- return val;
5500
- }
5501
- const gapRelativeSize = 100 * chunkGap.value / containerSize;
5502
- const chunkRelativeSize = 100 * (chunkWidth.value + chunkGap.value) / containerSize;
5503
- const filledChunks = Math.floor((val + gapRelativeSize) / chunkRelativeSize);
5504
- return clamp(0, filledChunks * chunkRelativeSize - gapRelativeSize / 2, 100);
5505
- }
5506
- return {
5507
- hasChunks,
5508
- chunksMaskStyles,
5509
- snapValueToChunk
5510
- };
5511
- }
5512
-
5513
5450
  const makeVProgressLinearProps = propsFactory({
5514
5451
  absolute: Boolean,
5515
5452
  active: {
@@ -5544,7 +5481,6 @@
5544
5481
  stream: Boolean,
5545
5482
  striped: Boolean,
5546
5483
  roundedBar: Boolean,
5547
- ...makeChunksProps(),
5548
5484
  ...makeComponentProps(),
5549
5485
  ...makeLocationProps({
5550
5486
  location: 'top'
@@ -5563,7 +5499,6 @@
5563
5499
  let {
5564
5500
  slots
5565
5501
  } = _ref;
5566
- const root = vue.ref();
5567
5502
  const progress = useProxiedModel(props, 'modelValue');
5568
5503
  const {
5569
5504
  isRtl,
@@ -5605,24 +5540,6 @@
5605
5540
  const isReversed = vue.computed(() => isRtl.value !== props.reverse);
5606
5541
  const transition = vue.computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition');
5607
5542
  const isForcedColorsModeActive = IN_BROWSER && window.matchMedia?.('(forced-colors: active)').matches;
5608
- const containerWidth = vue.shallowRef(0);
5609
- const {
5610
- hasChunks,
5611
- chunksMaskStyles,
5612
- snapValueToChunk
5613
- } = useChunks(props, containerWidth);
5614
- useToggleScope(hasChunks, () => {
5615
- const {
5616
- resizeRef
5617
- } = useResizeObserver(entries => containerWidth.value = entries[0].contentRect.width);
5618
- vue.watchEffect(() => resizeRef.value = root.value);
5619
- });
5620
- const bufferWidth = vue.computed(() => {
5621
- return hasChunks.value ? snapValueToChunk(normalizedBuffer.value) : normalizedBuffer.value;
5622
- });
5623
- const barWidth = vue.computed(() => {
5624
- return hasChunks.value ? snapValueToChunk(normalizedValue.value) : normalizedValue.value;
5625
- });
5626
5543
  function handleClick(e) {
5627
5544
  if (!intersectionRef.value) return;
5628
5545
  const {
@@ -5633,11 +5550,8 @@
5633
5550
  const value = isReversed.value ? width - e.clientX + (right - width) : e.clientX - left;
5634
5551
  progress.value = Math.round(value / width * max.value);
5635
5552
  }
5636
- vue.watchEffect(() => {
5637
- intersectionRef.value = root.value;
5638
- });
5639
5553
  useRender(() => vue.createVNode(props.tag, {
5640
- "ref": root,
5554
+ "ref": intersectionRef,
5641
5555
  "class": vue.normalizeClass(['v-progress-linear', {
5642
5556
  'v-progress-linear--absolute': props.absolute,
5643
5557
  'v-progress-linear--active': props.active && isIntersecting.value,
@@ -5652,7 +5566,7 @@
5652
5566
  height: props.active ? convertToUnit(height.value) : 0,
5653
5567
  '--v-progress-linear-height': convertToUnit(height.value),
5654
5568
  ...(props.absolute ? locationStyles.value : {})
5655
- }, chunksMaskStyles.value, props.style]),
5569
+ }, props.style]),
5656
5570
  "role": "progressbar",
5657
5571
  "aria-hidden": props.active ? 'false' : 'true',
5658
5572
  "aria-valuemin": "0",
@@ -5682,7 +5596,7 @@
5682
5596
  "class": vue.normalizeClass(['v-progress-linear__buffer', !isForcedColorsModeActive ? bufferColorClasses.value : undefined]),
5683
5597
  "style": vue.normalizeStyle([bufferColorStyles.value, {
5684
5598
  opacity: parseFloat(props.bufferOpacity),
5685
- width: convertToUnit(bufferWidth.value, '%')
5599
+ width: convertToUnit(normalizedBuffer.value, '%')
5686
5600
  }])
5687
5601
  }, null), vue.createVNode(vue.Transition, {
5688
5602
  "name": transition.value
@@ -5690,7 +5604,7 @@
5690
5604
  default: () => [!props.indeterminate ? vue.createElementVNode("div", {
5691
5605
  "class": vue.normalizeClass(['v-progress-linear__determinate', !isForcedColorsModeActive ? barColorClasses.value : undefined]),
5692
5606
  "style": vue.normalizeStyle([barColorStyles.value, {
5693
- width: convertToUnit(barWidth.value, '%')
5607
+ width: convertToUnit(normalizedValue.value, '%')
5694
5608
  }])
5695
5609
  }, null) : vue.createElementVNode("div", {
5696
5610
  "class": "v-progress-linear__indeterminate"
@@ -9908,11 +9822,6 @@
9908
9822
  const isLink = vue.toRef(() => props.link !== false && link.isLink.value);
9909
9823
  const isSelectable = vue.computed(() => !!list && (root.selectable.value || root.activatable.value || props.value != null));
9910
9824
  const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || isSelectable.value));
9911
- const role = vue.computed(() => list ? isSelectable.value ? 'option' : 'listitem' : undefined);
9912
- const ariaSelected = vue.computed(() => {
9913
- if (!isSelectable.value) return undefined;
9914
- return root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value;
9915
- });
9916
9825
  const roundedProps = vue.toRef(() => props.rounded || props.nav);
9917
9826
  const color = vue.toRef(() => props.color ?? props.activeColor);
9918
9827
  const variantProps = vue.toRef(() => ({
@@ -10016,8 +9925,7 @@
10016
9925
  }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
10017
9926
  "style": [colorStyles.value, dimensionStyles.value, props.style],
10018
9927
  "tabindex": isClickable.value ? list ? -2 : 0 : undefined,
10019
- "aria-selected": ariaSelected.value,
10020
- "role": role.value,
9928
+ "aria-selected": isSelectable.value ? root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value : undefined,
10021
9929
  "onClick": onClick,
10022
9930
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
10023
9931
  }, link.linkProps), {
@@ -10519,7 +10427,6 @@
10519
10427
  const activeColor = vue.toRef(() => props.activeColor);
10520
10428
  const baseColor = vue.toRef(() => props.baseColor);
10521
10429
  const color = vue.toRef(() => props.color);
10522
- const isSelectable = vue.toRef(() => props.selectable || props.activatable);
10523
10430
  createList({
10524
10431
  filterable: props.filterable
10525
10432
  });
@@ -10591,7 +10498,7 @@
10591
10498
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class]),
10592
10499
  "style": vue.normalizeStyle([backgroundColorStyles.value, dimensionStyles.value, props.style]),
10593
10500
  "tabindex": props.disabled ? -1 : 0,
10594
- "role": isSelectable.value ? 'listbox' : 'list',
10501
+ "role": "listbox",
10595
10502
  "aria-activedescendant": undefined,
10596
10503
  "onFocusin": onFocusin,
10597
10504
  "onFocusout": onFocusout,
@@ -13661,7 +13568,6 @@
13661
13568
  "onKeydown": onListKeydown,
13662
13569
  "onFocusin": onFocusin,
13663
13570
  "tabindex": "-1",
13664
- "selectable": true,
13665
13571
  "aria-live": "polite",
13666
13572
  "aria-label": `${props.label}-list`,
13667
13573
  "color": props.itemColor ?? props.color
@@ -14281,7 +14187,6 @@
14281
14187
  "onFocusin": onFocusin,
14282
14188
  "onFocusout": onFocusout,
14283
14189
  "tabindex": "-1",
14284
- "selectable": true,
14285
14190
  "aria-live": "polite",
14286
14191
  "color": props.itemColor ?? props.color
14287
14192
  }, listEvents, props.listProps), {
@@ -19369,7 +19274,6 @@
19369
19274
  "selected": selectedValues.value,
19370
19275
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
19371
19276
  "onMousedown": e => e.preventDefault(),
19372
- "selectable": true,
19373
19277
  "onKeydown": onListKeydown,
19374
19278
  "onFocusin": onFocusin,
19375
19279
  "onFocusout": onFocusout,
@@ -24468,42 +24372,6 @@
24468
24372
  return item.isDirectory ? `${path}/${item.name}` : path;
24469
24373
  }
24470
24374
 
24471
- // Utilities
24472
- // Composables
24473
- const makeFileFilterProps = propsFactory({
24474
- filterByType: String
24475
- }, 'file-accept');
24476
- function useFileFilter(props) {
24477
- const fileFilter = vue.computed(() => props.filterByType ? createFilter(props.filterByType) : null);
24478
- function filterAccepted(files) {
24479
- if (fileFilter.value) {
24480
- const accepted = files.filter(fileFilter.value);
24481
- return {
24482
- accepted,
24483
- rejected: files.filter(f => !accepted.includes(f))
24484
- };
24485
- }
24486
- return {
24487
- accepted: files,
24488
- rejected: []
24489
- };
24490
- }
24491
- return {
24492
- filterAccepted
24493
- };
24494
- }
24495
- function createFilter(v) {
24496
- const types = v.split(',').map(x => x.trim().toLowerCase());
24497
- const extensionsToMatch = types.filter(x => x.startsWith('.'));
24498
- const wildcards = types.filter(x => x.endsWith('/*'));
24499
- const typesToMatch = types.filter(x => !extensionsToMatch.includes(x) && !wildcards.includes(x));
24500
- return file => {
24501
- const extension = file.name.split('.').at(-1)?.toLowerCase() ?? '';
24502
- const typeGroup = file.type.split('/').at(0)?.toLowerCase() ?? '';
24503
- return typesToMatch.includes(file.type) || extensionsToMatch.includes(`.${extension}`) || wildcards.includes(`${typeGroup}/*`);
24504
- };
24505
- }
24506
-
24507
24375
  // Types
24508
24376
 
24509
24377
  const makeVFileInputProps = propsFactory({
@@ -24536,7 +24404,6 @@
24536
24404
  return wrapInArray(val).every(v => v != null && typeof v === 'object');
24537
24405
  }
24538
24406
  },
24539
- ...makeFileFilterProps(),
24540
24407
  ...makeVFieldProps({
24541
24408
  clearable: true
24542
24409
  })
@@ -24549,8 +24416,7 @@
24549
24416
  'click:control': e => true,
24550
24417
  'mousedown:control': e => true,
24551
24418
  'update:focused': focused => true,
24552
- 'update:modelValue': files => true,
24553
- rejected: files => true
24419
+ 'update:modelValue': files => true
24554
24420
  },
24555
24421
  setup(props, _ref) {
24556
24422
  let {
@@ -24561,9 +24427,6 @@
24561
24427
  const {
24562
24428
  t
24563
24429
  } = useLocale();
24564
- const {
24565
- filterAccepted
24566
- } = useFileFilter(props);
24567
24430
  const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => !props.multiple && Array.isArray(val) ? val[0] : val);
24568
24431
  const {
24569
24432
  isFocused,
@@ -24637,38 +24500,14 @@
24637
24500
  e.stopImmediatePropagation();
24638
24501
  isDragging.value = false;
24639
24502
  if (!inputRef.value || !hasFilesOrFolders(e)) return;
24640
- const allDroppedFiles = await handleDrop(e);
24641
- selectAccepted(allDroppedFiles);
24642
- }
24643
- function onFileSelection(e) {
24644
- if (!e.target || e.repack) return; // prevent loop
24645
-
24646
- if (!props.filterByType) {
24647
- const target = e.target;
24648
- model.value = [...(target.files ?? [])];
24649
- } else {
24650
- selectAccepted([...e.target.files]);
24651
- }
24652
- }
24653
- function selectAccepted(files) {
24654
24503
  const dataTransfer = new DataTransfer();
24655
- const {
24656
- accepted,
24657
- rejected
24658
- } = filterAccepted(files);
24659
- if (rejected.length) {
24660
- emit('rejected', rejected);
24661
- }
24662
- for (const file of accepted) {
24504
+ for (const file of await handleDrop(e)) {
24663
24505
  dataTransfer.items.add(file);
24664
24506
  }
24665
24507
  inputRef.value.files = dataTransfer.files;
24666
- model.value = [...dataTransfer.files];
24667
- const event = new Event('change', {
24508
+ inputRef.value.dispatchEvent(new Event('change', {
24668
24509
  bubbles: true
24669
- });
24670
- event.repack = true;
24671
- inputRef.value.dispatchEvent(event);
24510
+ }));
24672
24511
  }
24673
24512
  vue.watch(model, newValue => {
24674
24513
  const hasModelReset = !Array.isArray(newValue) || !newValue.length;
@@ -24685,8 +24524,6 @@
24685
24524
  ...inputProps
24686
24525
  } = VInput.filterProps(props);
24687
24526
  const fieldProps = VField.filterProps(props);
24688
- const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false;
24689
- const inputAccept = expectsDirectory ? undefined : props.filterByType ?? String(attrs.accept);
24690
24527
  return vue.createVNode(VInput, vue.mergeProps({
24691
24528
  "ref": vInputRef,
24692
24529
  "modelValue": props.multiple ? model.value : model.value[0],
@@ -24742,7 +24579,6 @@
24742
24579
  return vue.createElementVNode(vue.Fragment, null, [vue.createElementVNode("input", vue.mergeProps({
24743
24580
  "ref": inputRef,
24744
24581
  "type": "file",
24745
- "accept": inputAccept,
24746
24582
  "readonly": isReadonly.value,
24747
24583
  "disabled": isDisabled.value,
24748
24584
  "multiple": props.multiple,
@@ -24752,7 +24588,11 @@
24752
24588
  if (isReadonly.value) e.preventDefault();
24753
24589
  onFocus();
24754
24590
  },
24755
- "onChange": onFileSelection,
24591
+ "onChange": e => {
24592
+ if (!e.target) return;
24593
+ const target = e.target;
24594
+ model.value = [...(target.files ?? [])];
24595
+ },
24756
24596
  "onDragleave": onDragleave,
24757
24597
  "onFocus": onFocus,
24758
24598
  "onBlur": blur
@@ -30787,51 +30627,48 @@
30787
30627
  parentIndentLines: props.parentIndentLines,
30788
30628
  variant: props.indentLinesVariant
30789
30629
  });
30790
- function renderItem(itemProps) {
30791
- return vue.createVNode(VTreeviewItem, itemProps, {
30792
- prepend: slotProps => vue.createElementVNode(vue.Fragment, null, [props.selectable && (!children || children && !['leaf', 'single-leaf'].includes(props.selectStrategy)) && vue.createElementVNode("div", null, [vue.createVNode(VCheckboxBtn, {
30793
- "key": item.value,
30794
- "modelValue": slotProps.isSelected,
30795
- "disabled": props.disabled,
30796
- "loading": loading,
30797
- "color": props.selectedColor,
30798
- "density": props.density,
30799
- "indeterminate": slotProps.isIndeterminate,
30800
- "indeterminateIcon": props.indeterminateIcon,
30801
- "falseIcon": props.falseIcon,
30802
- "trueIcon": props.trueIcon,
30803
- "onUpdate:modelValue": v => selectItem(slotProps.select, v),
30804
- "onClick": e => e.stopPropagation(),
30805
- "onKeydown": e => {
30806
- if (!['Enter', 'Space'].includes(e.key)) return;
30807
- e.stopPropagation();
30808
- selectItem(slotProps.select, slotProps.isSelected);
30809
- }
30810
- }, null)]), slots.prepend?.({
30811
- ...slotProps,
30812
- ...treeItemProps,
30813
- item: item.raw,
30814
- internalItem: item
30815
- })]),
30816
- append: slots.append ? slotProps => slots.append?.({
30817
- ...slotProps,
30818
- ...treeItemProps,
30819
- item: item.raw,
30820
- internalItem: item
30821
- }) : undefined,
30822
- title: slots.title ? slotProps => slots.title?.({
30823
- ...slotProps,
30824
- item: item.raw,
30825
- internalItem: item
30826
- }) : undefined,
30827
- subtitle: slots.subtitle ? slotProps => slots.subtitle?.({
30828
- ...slotProps,
30829
- item: item.raw,
30830
- internalItem: item
30831
- }) : undefined,
30832
- $stable: true
30833
- });
30834
- }
30630
+ const slotsWithItem = {
30631
+ prepend: slotProps => vue.createElementVNode(vue.Fragment, null, [props.selectable && (!children || children && !['leaf', 'single-leaf'].includes(props.selectStrategy)) && vue.createElementVNode("div", null, [vue.createVNode(VCheckboxBtn, {
30632
+ "key": item.value,
30633
+ "modelValue": slotProps.isSelected,
30634
+ "disabled": props.disabled,
30635
+ "loading": loading,
30636
+ "color": props.selectedColor,
30637
+ "density": props.density,
30638
+ "indeterminate": slotProps.isIndeterminate,
30639
+ "indeterminateIcon": props.indeterminateIcon,
30640
+ "falseIcon": props.falseIcon,
30641
+ "trueIcon": props.trueIcon,
30642
+ "onUpdate:modelValue": v => selectItem(slotProps.select, v),
30643
+ "onClick": e => e.stopPropagation(),
30644
+ "onKeydown": e => {
30645
+ if (!['Enter', 'Space'].includes(e.key)) return;
30646
+ e.stopPropagation();
30647
+ selectItem(slotProps.select, slotProps.isSelected);
30648
+ }
30649
+ }, null)]), slots.prepend?.({
30650
+ ...slotProps,
30651
+ ...treeItemProps,
30652
+ item: item.raw,
30653
+ internalItem: item
30654
+ })]),
30655
+ append: slots.append ? slotProps => slots.append?.({
30656
+ ...slotProps,
30657
+ ...treeItemProps,
30658
+ item: item.raw,
30659
+ internalItem: item
30660
+ }) : undefined,
30661
+ title: slots.title ? slotProps => slots.title?.({
30662
+ ...slotProps,
30663
+ item: item.raw,
30664
+ internalItem: item
30665
+ }) : undefined,
30666
+ subtitle: slots.subtitle ? slotProps => slots.subtitle?.({
30667
+ ...slotProps,
30668
+ item: item.raw,
30669
+ internalItem: item
30670
+ }) : undefined
30671
+ };
30835
30672
  const treeviewGroupProps = VTreeviewGroup.filterProps(itemProps);
30836
30673
  const treeviewChildrenProps = VTreeviewChildren.filterProps({
30837
30674
  ...props,
@@ -30845,16 +30682,21 @@
30845
30682
  let {
30846
30683
  props: activatorProps
30847
30684
  } = _ref2;
30848
- return renderItem({
30685
+ const listItemProps = {
30849
30686
  ...itemProps,
30850
30687
  ...activatorProps,
30851
- loading,
30852
- hideActions: props.hideActions,
30853
- indentLines: indentLines.node,
30854
- value: props.returnObject ? item.raw : itemProps.value,
30688
+ value: itemProps?.value,
30855
30689
  onToggleExpand: [() => checkChildren(item), activatorProps.onClick],
30856
30690
  onClick: isClickOnOpen.value ? [() => checkChildren(item), activatorProps.onClick] : () => selectItem(activatorItems.value[index]?.select, !activatorItems.value[index]?.isSelected)
30857
- });
30691
+ };
30692
+ return vue.createVNode(VTreeviewItem, vue.mergeProps({
30693
+ "ref": el => activatorItems.value[index] = el
30694
+ }, listItemProps, {
30695
+ "hideActions": props.hideActions,
30696
+ "indentLines": indentLines.node,
30697
+ "value": props.returnObject ? item.raw : itemProps.value,
30698
+ "loading": loading
30699
+ }), slotsWithItem);
30858
30700
  },
30859
30701
  default: () => vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
30860
30702
  "items": children,
@@ -30862,8 +30704,7 @@
30862
30704
  "parentIndentLines": indentLines.children,
30863
30705
  "isLastGroup": nextItemHasChildren,
30864
30706
  "returnObject": props.returnObject
30865
- }), slots),
30866
- $stable: true
30707
+ }), slots)
30867
30708
  }) : renderSlot(slots.item, {
30868
30709
  props: itemProps,
30869
30710
  item: item.raw,
@@ -30879,12 +30720,11 @@
30879
30720
  props: item.raw
30880
30721
  }, () => vue.createVNode(VListSubheader, item.props, null));
30881
30722
  }
30882
- return renderItem({
30883
- ...itemProps,
30884
- hideActions: props.hideActions,
30885
- indentLines: indentLines.leaf,
30886
- value: props.returnObject ? vue.toRaw(item.raw) : itemProps.value
30887
- });
30723
+ return vue.createVNode(VTreeviewItem, vue.mergeProps(itemProps, {
30724
+ "hideActions": props.hideActions,
30725
+ "indentLines": indentLines.leaf,
30726
+ "value": props.returnObject ? vue.toRaw(item.raw) : itemProps.value
30727
+ }), slotsWithItem);
30888
30728
  });
30889
30729
  });
30890
30730
  }
@@ -31023,14 +30863,13 @@
31023
30863
  "selected": selected.value,
31024
30864
  "onUpdate:selected": $event => selected.value = $event
31025
30865
  }), {
31026
- default: () => vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
30866
+ default: () => [vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
31027
30867
  "density": props.density,
31028
30868
  "returnObject": props.returnObject,
31029
30869
  "items": items.value,
31030
30870
  "parentIndentLines": props.indentLines ? [] : undefined,
31031
30871
  "indentLinesVariant": indentLinesVariant
31032
- }), slots),
31033
- $stable: true
30872
+ }), slots)]
31034
30873
  });
31035
30874
  });
31036
30875
  return {};
@@ -31549,7 +31388,7 @@
31549
31388
  };
31550
31389
  });
31551
31390
  }
31552
- const version$1 = "3.9.1-dev.2025-07-17";
31391
+ const version$1 = "3.9.2-master.2025-07-18";
31553
31392
  createVuetify$1.version = version$1;
31554
31393
 
31555
31394
  // Vue's inject() can only be used in setup
@@ -31574,7 +31413,7 @@
31574
31413
  ...options
31575
31414
  });
31576
31415
  };
31577
- const version = "3.9.1-dev.2025-07-17";
31416
+ const version = "3.9.2-master.2025-07-18";
31578
31417
  createVuetify.version = version;
31579
31418
 
31580
31419
  exports.blueprints = index;