@vuetify/nightly 3.8.10-dev.2025-06-18 → 3.8.10-dev.2025-06-19

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 (145) hide show
  1. package/CHANGELOG.md +14 -4
  2. package/dist/_component-variables-labs.sass +1 -3
  3. package/dist/_component-variables.sass +2 -0
  4. package/dist/json/attributes.json +3889 -3885
  5. package/dist/json/importMap-labs.json +32 -56
  6. package/dist/json/importMap.json +180 -156
  7. package/dist/json/tags.json +7 -6
  8. package/dist/json/web-types.json +7006 -6996
  9. package/dist/vuetify-labs.cjs +3071 -3065
  10. package/dist/vuetify-labs.css +5691 -5661
  11. package/dist/vuetify-labs.d.ts +8142 -4681
  12. package/dist/vuetify-labs.esm.js +3071 -3065
  13. package/dist/vuetify-labs.esm.js.map +1 -1
  14. package/dist/vuetify-labs.js +3071 -3065
  15. package/dist/vuetify-labs.min.css +2 -2
  16. package/dist/vuetify.cjs +1218 -160
  17. package/dist/vuetify.cjs.map +1 -1
  18. package/dist/vuetify.css +5014 -4715
  19. package/dist/vuetify.d.ts +6675 -1051
  20. package/dist/vuetify.esm.js +1218 -160
  21. package/dist/vuetify.esm.js.map +1 -1
  22. package/dist/vuetify.js +1218 -160
  23. package/dist/vuetify.js.map +1 -1
  24. package/dist/vuetify.min.css +2 -2
  25. package/dist/vuetify.min.js +1224 -1143
  26. package/dist/vuetify.min.js.map +1 -1
  27. package/lib/components/VAutocomplete/VAutocomplete.d.ts +18 -18
  28. package/lib/components/VCarousel/VCarousel.d.ts +11 -1
  29. package/lib/components/VCheckbox/VCheckbox.d.ts +696 -3
  30. package/lib/components/VCheckbox/VCheckbox.js +5 -2
  31. package/lib/components/VCheckbox/VCheckbox.js.map +1 -1
  32. package/lib/components/VCombobox/VCombobox.d.ts +18 -18
  33. package/lib/components/VFileInput/VFileInput.d.ts +6 -6
  34. package/lib/components/VList/VListItem.d.ts +3 -3
  35. package/lib/components/VList/VListItem.js.map +1 -1
  36. package/lib/components/VNumberInput/VNumberInput.d.ts +18 -18
  37. package/lib/components/VRadioGroup/VRadioGroup.d.ts +696 -3
  38. package/lib/components/VRadioGroup/VRadioGroup.js +5 -2
  39. package/lib/components/VRadioGroup/VRadioGroup.js.map +1 -1
  40. package/lib/components/VRangeSlider/VRangeSlider.d.ts +696 -3
  41. package/lib/components/VRangeSlider/VRangeSlider.js +2 -1
  42. package/lib/components/VRangeSlider/VRangeSlider.js.map +1 -1
  43. package/lib/components/VSelect/VSelect.d.ts +18 -18
  44. package/lib/components/VSlider/VSlider.d.ts +696 -3
  45. package/lib/components/VSlider/VSlider.js +4 -1
  46. package/lib/components/VSlider/VSlider.js.map +1 -1
  47. package/lib/components/VStepper/VStepperWindow.d.ts +10 -0
  48. package/lib/components/VSwitch/VSwitch.d.ts +696 -3
  49. package/lib/components/VSwitch/VSwitch.js +4 -1
  50. package/lib/components/VSwitch/VSwitch.js.map +1 -1
  51. package/lib/components/VTabs/VTabsWindow.d.ts +10 -0
  52. package/lib/components/VTextField/VTextField.d.ts +6 -6
  53. package/lib/components/VTextarea/VTextarea.d.ts +6 -6
  54. package/lib/{labs → components}/VTimePicker/VTimePicker.d.ts +1 -14
  55. package/lib/{labs → components}/VTimePicker/VTimePicker.js +2 -4
  56. package/lib/components/VTimePicker/VTimePicker.js.map +1 -0
  57. package/lib/components/VTimePicker/VTimePickerClock.js.map +1 -0
  58. package/lib/{labs → components}/VTimePicker/VTimePickerControls.d.ts +0 -26
  59. package/lib/{labs → components}/VTimePicker/VTimePickerControls.js +3 -7
  60. package/lib/components/VTimePicker/VTimePickerControls.js.map +1 -0
  61. package/lib/{labs → components}/VTimePicker/_variables.scss +1 -1
  62. package/lib/components/VTimePicker/index.js.map +1 -0
  63. package/lib/components/VTimePicker/shared.js.map +1 -0
  64. package/lib/components/VTimePicker/util.js.map +1 -0
  65. package/lib/{labs → components}/VTreeview/VTreeview.d.ts +10 -10
  66. package/lib/{labs → components}/VTreeview/VTreeview.js +1 -1
  67. package/lib/components/VTreeview/VTreeview.js.map +1 -0
  68. package/lib/{labs → components}/VTreeview/VTreeviewChildren.d.ts +22 -22
  69. package/lib/{labs → components}/VTreeview/VTreeviewChildren.js +1 -1
  70. package/lib/components/VTreeview/VTreeviewChildren.js.map +1 -0
  71. package/lib/{labs → components}/VTreeview/VTreeviewGroup.js +2 -2
  72. package/lib/components/VTreeview/VTreeviewGroup.js.map +1 -0
  73. package/lib/{labs → components}/VTreeview/VTreeviewItem.d.ts +58 -58
  74. package/lib/{labs → components}/VTreeview/VTreeviewItem.js +4 -4
  75. package/lib/components/VTreeview/VTreeviewItem.js.map +1 -0
  76. package/lib/components/VTreeview/index.js.map +1 -0
  77. package/lib/components/VTreeview/shared.js.map +1 -0
  78. package/lib/components/VWindow/VWindow.css +15 -0
  79. package/lib/components/VWindow/VWindow.d.ts +10 -0
  80. package/lib/components/VWindow/VWindow.js +8 -2
  81. package/lib/components/VWindow/VWindow.js.map +1 -1
  82. package/lib/components/VWindow/VWindow.sass +17 -0
  83. package/lib/components/VWindow/_variables.scss +1 -0
  84. package/lib/components/index.d.ts +2 -0
  85. package/lib/components/index.js +4 -2
  86. package/lib/components/index.js.map +1 -1
  87. package/lib/composables/forwardRefs.d.ts +2 -2
  88. package/lib/composables/forwardRefs.js.map +1 -1
  89. package/lib/composables/icons.d.ts +1 -1
  90. package/lib/composables/icons.js.map +1 -1
  91. package/lib/composables/mask.d.ts +1 -1
  92. package/lib/composables/mask.js.map +1 -1
  93. package/lib/composables/theme.d.ts +1 -1
  94. package/lib/composables/theme.js +2 -4
  95. package/lib/composables/theme.js.map +1 -1
  96. package/lib/entry-bundler.js +1 -1
  97. package/lib/framework.d.ts +68 -68
  98. package/lib/framework.js +1 -1
  99. package/lib/labs/VCalendar/VCalendar.d.ts +24 -24
  100. package/lib/labs/VCalendar/VCalendar.js.map +1 -1
  101. package/lib/labs/VDateInput/VDateInput.d.ts +18 -18
  102. package/lib/labs/VMaskInput/VMaskInput.d.ts +18 -18
  103. package/lib/labs/components.d.ts +0 -2
  104. package/lib/labs/components.js +0 -2
  105. package/lib/labs/components.js.map +1 -1
  106. package/lib/styles/main.css +15 -0
  107. package/lib/styles/utilities/_index.sass +1 -0
  108. package/lib/styles/utilities/_pointer-events.sass +16 -0
  109. package/lib/util/helpers.d.ts +1 -0
  110. package/lib/util/helpers.js.map +1 -1
  111. package/package.json +1 -1
  112. package/lib/labs/VTimePicker/VTimePicker.js.map +0 -1
  113. package/lib/labs/VTimePicker/VTimePickerClock.js.map +0 -1
  114. package/lib/labs/VTimePicker/VTimePickerControls.js.map +0 -1
  115. package/lib/labs/VTimePicker/index.js.map +0 -1
  116. package/lib/labs/VTimePicker/shared.js.map +0 -1
  117. package/lib/labs/VTimePicker/util.js.map +0 -1
  118. package/lib/labs/VTreeview/VTreeview.js.map +0 -1
  119. package/lib/labs/VTreeview/VTreeviewChildren.js.map +0 -1
  120. package/lib/labs/VTreeview/VTreeviewGroup.js.map +0 -1
  121. package/lib/labs/VTreeview/VTreeviewItem.js.map +0 -1
  122. package/lib/labs/VTreeview/index.js.map +0 -1
  123. package/lib/labs/VTreeview/shared.js.map +0 -1
  124. /package/lib/{labs → components}/VTimePicker/VTimePicker.css +0 -0
  125. /package/lib/{labs → components}/VTimePicker/VTimePicker.sass +0 -0
  126. /package/lib/{labs → components}/VTimePicker/VTimePickerClock.css +0 -0
  127. /package/lib/{labs → components}/VTimePicker/VTimePickerClock.d.ts +0 -0
  128. /package/lib/{labs → components}/VTimePicker/VTimePickerClock.js +0 -0
  129. /package/lib/{labs → components}/VTimePicker/VTimePickerClock.sass +0 -0
  130. /package/lib/{labs → components}/VTimePicker/VTimePickerControls.css +0 -0
  131. /package/lib/{labs → components}/VTimePicker/VTimePickerControls.sass +0 -0
  132. /package/lib/{labs → components}/VTimePicker/index.d.ts +0 -0
  133. /package/lib/{labs → components}/VTimePicker/index.js +0 -0
  134. /package/lib/{labs → components}/VTimePicker/shared.d.ts +0 -0
  135. /package/lib/{labs → components}/VTimePicker/shared.js +0 -0
  136. /package/lib/{labs → components}/VTimePicker/util.d.ts +0 -0
  137. /package/lib/{labs → components}/VTimePicker/util.js +0 -0
  138. /package/lib/{labs → components}/VTreeview/VTreeviewGroup.d.ts +0 -0
  139. /package/lib/{labs → components}/VTreeview/VTreeviewItem.css +0 -0
  140. /package/lib/{labs → components}/VTreeview/VTreeviewItem.sass +0 -0
  141. /package/lib/{labs → components}/VTreeview/_variables.scss +0 -0
  142. /package/lib/{labs → components}/VTreeview/index.d.ts +0 -0
  143. /package/lib/{labs → components}/VTreeview/index.js +0 -0
  144. /package/lib/{labs → components}/VTreeview/shared.d.ts +0 -0
  145. /package/lib/{labs → components}/VTreeview/shared.js +0 -0
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.10-dev.2025-06-18
2
+ * Vuetify v3.8.10-dev.2025-06-19
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -3175,15 +3175,13 @@
3175
3175
  }
3176
3176
  const globalName = new Proxy(name, {
3177
3177
  get(target, prop) {
3178
- return target[prop];
3178
+ return Reflect.get(target, prop);
3179
3179
  },
3180
3180
  set(target, prop, val) {
3181
3181
  if (prop === 'value') {
3182
3182
  deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
3183
3183
  }
3184
- // @ts-expect-error
3185
- target[prop] = val;
3186
- return true;
3184
+ return Reflect.set(target, prop, val);
3187
3185
  }
3188
3186
  });
3189
3187
  return {
@@ -7558,6 +7556,103 @@
7558
7556
 
7559
7557
  // Types
7560
7558
 
7559
+ const Refs = Symbol('Forwarded refs');
7560
+
7561
+ /** Omit properties starting with P */
7562
+
7563
+ /** Omit keyof $props from T */
7564
+
7565
+ function getDescriptor(obj, key) {
7566
+ let currentObj = obj;
7567
+ while (currentObj) {
7568
+ const descriptor = Reflect.getOwnPropertyDescriptor(currentObj, key);
7569
+ if (descriptor) return descriptor;
7570
+ currentObj = Object.getPrototypeOf(currentObj);
7571
+ }
7572
+ return undefined;
7573
+ }
7574
+ function forwardRefs(target) {
7575
+ for (var _len = arguments.length, refs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
7576
+ refs[_key - 1] = arguments[_key];
7577
+ }
7578
+ target[Refs] = refs;
7579
+ return new Proxy(target, {
7580
+ get(target, key) {
7581
+ if (Reflect.has(target, key)) {
7582
+ return Reflect.get(target, key);
7583
+ }
7584
+
7585
+ // Skip internal properties
7586
+ if (typeof key === 'symbol' || key.startsWith('$') || key.startsWith('__')) return;
7587
+ for (const ref of refs) {
7588
+ if (ref.value && Reflect.has(ref.value, key)) {
7589
+ const val = Reflect.get(ref.value, key);
7590
+ return typeof val === 'function' ? val.bind(ref.value) : val;
7591
+ }
7592
+ }
7593
+ },
7594
+ has(target, key) {
7595
+ if (Reflect.has(target, key)) {
7596
+ return true;
7597
+ }
7598
+
7599
+ // Skip internal properties
7600
+ if (typeof key === 'symbol' || key.startsWith('$') || key.startsWith('__')) return false;
7601
+ for (const ref of refs) {
7602
+ if (ref.value && Reflect.has(ref.value, key)) {
7603
+ return true;
7604
+ }
7605
+ }
7606
+ return false;
7607
+ },
7608
+ set(target, key, value) {
7609
+ if (Reflect.has(target, key)) {
7610
+ return Reflect.set(target, key, value);
7611
+ }
7612
+
7613
+ // Skip internal properties
7614
+ if (typeof key === 'symbol' || key.startsWith('$') || key.startsWith('__')) return false;
7615
+ for (const ref of refs) {
7616
+ if (ref.value && Reflect.has(ref.value, key)) {
7617
+ return Reflect.set(ref.value, key, value);
7618
+ }
7619
+ }
7620
+ return false;
7621
+ },
7622
+ getOwnPropertyDescriptor(target, key) {
7623
+ const descriptor = Reflect.getOwnPropertyDescriptor(target, key);
7624
+ if (descriptor) return descriptor;
7625
+
7626
+ // Skip internal properties
7627
+ if (typeof key === 'symbol' || key.startsWith('$') || key.startsWith('__')) return;
7628
+
7629
+ // Check each ref's own properties
7630
+ for (const ref of refs) {
7631
+ if (!ref.value) continue;
7632
+ const descriptor = getDescriptor(ref.value, key) ?? ('_' in ref.value ? getDescriptor(ref.value._?.setupState, key) : undefined);
7633
+ if (descriptor) return descriptor;
7634
+ }
7635
+
7636
+ // Recursive search up each ref's prototype
7637
+ for (const ref of refs) {
7638
+ const childRefs = ref.value && ref.value[Refs];
7639
+ if (!childRefs) continue;
7640
+ const queue = childRefs.slice();
7641
+ while (queue.length) {
7642
+ const ref = queue.shift();
7643
+ const descriptor = getDescriptor(ref.value, key);
7644
+ if (descriptor) return descriptor;
7645
+ const childRefs = ref.value && ref.value[Refs];
7646
+ if (childRefs) queue.push(...childRefs);
7647
+ }
7648
+ }
7649
+ return undefined;
7650
+ }
7651
+ });
7652
+ }
7653
+
7654
+ // Types
7655
+
7561
7656
  const makeVCheckboxProps = propsFactory({
7562
7657
  ...makeVInputProps(),
7563
7658
  ...omit(makeVCheckboxBtnProps(), ['inline'])
@@ -7581,12 +7676,14 @@
7581
7676
  focus,
7582
7677
  blur
7583
7678
  } = useFocus(props);
7679
+ const inputRef = vue.ref();
7584
7680
  const uid = vue.useId();
7585
7681
  useRender(() => {
7586
7682
  const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
7587
7683
  const inputProps = VInput.filterProps(props);
7588
7684
  const checkboxProps = VCheckboxBtn.filterProps(props);
7589
7685
  return vue.createVNode(VInput, vue.mergeProps({
7686
+ "ref": inputRef,
7590
7687
  "class": ['v-checkbox', props.class]
7591
7688
  }, rootAttrs, inputProps, {
7592
7689
  "modelValue": model.value,
@@ -7619,7 +7716,7 @@
7619
7716
  }
7620
7717
  });
7621
7718
  });
7622
- return {};
7719
+ return forwardRefs({}, inputRef);
7623
7720
  }
7624
7721
  });
7625
7722
 
@@ -11830,103 +11927,6 @@
11830
11927
 
11831
11928
  // Types
11832
11929
 
11833
- const Refs = Symbol('Forwarded refs');
11834
-
11835
- /** Omit properties starting with P */
11836
-
11837
- /** Omit keyof $props from T */
11838
-
11839
- function getDescriptor(obj, key) {
11840
- let currentObj = obj;
11841
- while (currentObj) {
11842
- const descriptor = Reflect.getOwnPropertyDescriptor(currentObj, key);
11843
- if (descriptor) return descriptor;
11844
- currentObj = Object.getPrototypeOf(currentObj);
11845
- }
11846
- return undefined;
11847
- }
11848
- function forwardRefs(target) {
11849
- for (var _len = arguments.length, refs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
11850
- refs[_key - 1] = arguments[_key];
11851
- }
11852
- target[Refs] = refs;
11853
- return new Proxy(target, {
11854
- get(target, key) {
11855
- if (Reflect.has(target, key)) {
11856
- return Reflect.get(target, key);
11857
- }
11858
-
11859
- // Skip internal properties
11860
- if (typeof key === 'symbol' || key.startsWith('$') || key.startsWith('__')) return;
11861
- for (const ref of refs) {
11862
- if (ref.value && Reflect.has(ref.value, key)) {
11863
- const val = Reflect.get(ref.value, key);
11864
- return typeof val === 'function' ? val.bind(ref.value) : val;
11865
- }
11866
- }
11867
- },
11868
- has(target, key) {
11869
- if (Reflect.has(target, key)) {
11870
- return true;
11871
- }
11872
-
11873
- // Skip internal properties
11874
- if (typeof key === 'symbol' || key.startsWith('$') || key.startsWith('__')) return false;
11875
- for (const ref of refs) {
11876
- if (ref.value && Reflect.has(ref.value, key)) {
11877
- return true;
11878
- }
11879
- }
11880
- return false;
11881
- },
11882
- set(target, key, value) {
11883
- if (Reflect.has(target, key)) {
11884
- return Reflect.set(target, key, value);
11885
- }
11886
-
11887
- // Skip internal properties
11888
- if (typeof key === 'symbol' || key.startsWith('$') || key.startsWith('__')) return false;
11889
- for (const ref of refs) {
11890
- if (ref.value && Reflect.has(ref.value, key)) {
11891
- return Reflect.set(ref.value, key, value);
11892
- }
11893
- }
11894
- return false;
11895
- },
11896
- getOwnPropertyDescriptor(target, key) {
11897
- const descriptor = Reflect.getOwnPropertyDescriptor(target, key);
11898
- if (descriptor) return descriptor;
11899
-
11900
- // Skip internal properties
11901
- if (typeof key === 'symbol' || key.startsWith('$') || key.startsWith('__')) return;
11902
-
11903
- // Check each ref's own properties
11904
- for (const ref of refs) {
11905
- if (!ref.value) continue;
11906
- const descriptor = getDescriptor(ref.value, key) ?? ('_' in ref.value ? getDescriptor(ref.value._?.setupState, key) : undefined);
11907
- if (descriptor) return descriptor;
11908
- }
11909
-
11910
- // Recursive search up each ref's prototype
11911
- for (const ref of refs) {
11912
- const childRefs = ref.value && ref.value[Refs];
11913
- if (!childRefs) continue;
11914
- const queue = childRefs.slice();
11915
- while (queue.length) {
11916
- const ref = queue.shift();
11917
- const descriptor = getDescriptor(ref.value, key);
11918
- if (descriptor) return descriptor;
11919
- const childRefs = ref.value && ref.value[Refs];
11920
- if (childRefs) queue.push(...childRefs);
11921
- }
11922
- }
11923
- return undefined;
11924
- }
11925
- });
11926
- }
11927
-
11928
- // Types
11929
-
11930
11930
  const makeVMenuProps = propsFactory({
11931
11931
  // TODO
11932
11932
  // disableKeys: Boolean,
@@ -15427,6 +15427,7 @@
15427
15427
  type: [Boolean, String],
15428
15428
  validator: v => typeof v === 'boolean' || v === 'hover'
15429
15429
  },
15430
+ verticalArrows: [Boolean, String],
15430
15431
  touch: {
15431
15432
  type: [Object, Boolean],
15432
15433
  default: undefined
@@ -15561,7 +15562,8 @@
15561
15562
  useRender(() => vue.withDirectives(vue.createVNode(props.tag, {
15562
15563
  "ref": rootRef,
15563
15564
  "class": vue.normalizeClass(['v-window', {
15564
- 'v-window--show-arrows-on-hover': props.showArrows === 'hover'
15565
+ 'v-window--show-arrows-on-hover': props.showArrows === 'hover',
15566
+ 'v-window--vertical-arrows': !!props.verticalArrows
15565
15567
  }, themeClasses.value, props.class]),
15566
15568
  "style": vue.normalizeStyle(props.style)
15567
15569
  }, {
@@ -15573,7 +15575,11 @@
15573
15575
  }, [slots.default?.({
15574
15576
  group
15575
15577
  }), props.showArrows !== false && vue.createElementVNode("div", {
15576
- "class": "v-window__controls"
15578
+ "class": vue.normalizeClass(['v-window__controls', {
15579
+ 'v-window__controls--left': props.verticalArrows === 'left' || props.verticalArrows === true
15580
+ }, {
15581
+ 'v-window__controls--right': props.verticalArrows === 'right'
15582
+ }])
15577
15583
  }, [arrows.value])]), slots.additional?.({
15578
15584
  group
15579
15585
  })]
@@ -16902,6 +16908,7 @@
16902
16908
  emit
16903
16909
  } = _ref;
16904
16910
  const thumbContainerRef = vue.ref();
16911
+ const inputRef = vue.ref();
16905
16912
  const {
16906
16913
  rtlClasses
16907
16914
  } = useRtl();
@@ -16952,6 +16959,7 @@
16952
16959
  const inputProps = VInput.filterProps(props);
16953
16960
  const hasPrepend = !!(props.label || slots.label || slots.prepend);
16954
16961
  return vue.createVNode(VInput, vue.mergeProps({
16962
+ "ref": inputRef,
16955
16963
  "class": ['v-slider', {
16956
16964
  'v-slider--has-labels': !!slots['tick-label'] || hasLabels.value,
16957
16965
  'v-slider--focused': isFocused.value,
@@ -17010,7 +17018,7 @@
17010
17018
  }
17011
17019
  });
17012
17020
  });
17013
- return {};
17021
+ return forwardRefs({}, inputRef);
17014
17022
  }
17015
17023
  });
17016
17024
 
@@ -26304,6 +26312,7 @@
26304
26312
  const uid = vue.useId();
26305
26313
  const id = vue.computed(() => props.id || `radio-group-${uid}`);
26306
26314
  const model = useProxiedModel(props, 'modelValue');
26315
+ const inputRef = vue.ref();
26307
26316
  useRender(() => {
26308
26317
  const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
26309
26318
  const inputProps = VInput.filterProps(props);
@@ -26315,6 +26324,7 @@
26315
26324
  }
26316
26325
  }) : props.label;
26317
26326
  return vue.createVNode(VInput, vue.mergeProps({
26327
+ "ref": inputRef,
26318
26328
  "class": ['v-radio-group', props.class],
26319
26329
  "style": props.style
26320
26330
  }, rootAttrs, inputProps, {
@@ -26352,7 +26362,7 @@
26352
26362
  }
26353
26363
  });
26354
26364
  });
26355
- return {};
26365
+ return forwardRefs({}, inputRef);
26356
26366
  }
26357
26367
  });
26358
26368
 
@@ -26563,7 +26573,7 @@
26563
26573
  }
26564
26574
  });
26565
26575
  });
26566
- return {};
26576
+ return forwardRefs({}, inputRef);
26567
26577
  }
26568
26578
  });
26569
26579
 
@@ -28211,6 +28221,7 @@
28211
28221
  blur
28212
28222
  } = useFocus(props);
28213
28223
  const control = vue.ref();
28224
+ const inputRef = vue.ref();
28214
28225
  const isForcedColorsModeActive = IN_BROWSER && window.matchMedia('(forced-colors: active)').matches;
28215
28226
  const loaderColor = vue.toRef(() => {
28216
28227
  return typeof props.loading === 'string' && props.loading !== '' ? props.loading : props.color;
@@ -28232,6 +28243,7 @@
28232
28243
  const inputProps = VInput.filterProps(props);
28233
28244
  const controlProps = VSelectionControl.filterProps(props);
28234
28245
  return vue.createVNode(VInput, vue.mergeProps({
28246
+ "ref": inputRef,
28235
28247
  "class": ['v-switch', {
28236
28248
  'v-switch--flat': props.flat
28237
28249
  }, {
@@ -28339,7 +28351,7 @@
28339
28351
  }
28340
28352
  });
28341
28353
  });
28342
- return {};
28354
+ return forwardRefs({}, inputRef);
28343
28355
  }
28344
28356
  });
28345
28357
 
@@ -29205,58 +29217,675 @@
29205
29217
  }
29206
29218
  });
29207
29219
 
29208
- const makeVToolbarItemsProps = propsFactory({
29209
- ...makeComponentProps(),
29210
- ...makeVariantProps({
29211
- variant: 'text'
29212
- })
29213
- }, 'VToolbarItems');
29214
- const VToolbarItems = genericComponent()({
29215
- name: 'VToolbarItems',
29216
- props: makeVToolbarItemsProps(),
29217
- setup(props, _ref) {
29218
- let {
29219
- slots
29220
- } = _ref;
29221
- provideDefaults({
29222
- VBtn: {
29223
- color: vue.toRef(() => props.color),
29224
- height: 'inherit',
29225
- variant: vue.toRef(() => props.variant)
29226
- }
29227
- });
29228
- useRender(() => vue.createElementVNode("div", {
29229
- "class": vue.normalizeClass(['v-toolbar-items', props.class]),
29230
- "style": vue.normalizeStyle(props.style)
29231
- }, [slots.default?.()]));
29232
- return {};
29233
- }
29234
- });
29220
+ function pad(n) {
29221
+ let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
29222
+ return String(n).padStart(length, '0');
29223
+ }
29235
29224
 
29236
29225
  // Types
29237
29226
 
29238
- const makeVTooltipProps = propsFactory({
29239
- id: String,
29240
- interactive: Boolean,
29241
- text: String,
29242
- ...omit(makeVOverlayProps({
29243
- closeOnBack: false,
29244
- location: 'end',
29245
- locationStrategy: 'connected',
29246
- eager: true,
29247
- minWidth: 0,
29248
- offset: 10,
29249
- openOnClick: false,
29250
- openOnHover: true,
29251
- origin: 'auto',
29252
- scrim: false,
29253
- scrollStrategy: 'reposition',
29254
- transition: null
29255
- }), ['absolute', 'persistent'])
29256
- }, 'VTooltip');
29257
- const VTooltip = genericComponent()({
29258
- name: 'VTooltip',
29259
- props: makeVTooltipProps(),
29227
+ const makeVTimePickerClockProps = propsFactory({
29228
+ allowedValues: Function,
29229
+ ampm: Boolean,
29230
+ color: String,
29231
+ disabled: Boolean,
29232
+ displayedValue: null,
29233
+ double: Boolean,
29234
+ format: {
29235
+ type: Function,
29236
+ default: val => val
29237
+ },
29238
+ max: {
29239
+ type: Number,
29240
+ required: true
29241
+ },
29242
+ min: {
29243
+ type: Number,
29244
+ required: true
29245
+ },
29246
+ scrollable: Boolean,
29247
+ readonly: Boolean,
29248
+ rotate: {
29249
+ type: Number,
29250
+ default: 0
29251
+ },
29252
+ step: {
29253
+ type: Number,
29254
+ default: 1
29255
+ },
29256
+ modelValue: {
29257
+ type: Number
29258
+ }
29259
+ }, 'VTimePickerClock');
29260
+ const VTimePickerClock = genericComponent()({
29261
+ name: 'VTimePickerClock',
29262
+ props: makeVTimePickerClockProps(),
29263
+ emits: {
29264
+ change: val => true,
29265
+ input: val => true
29266
+ },
29267
+ setup(props, _ref) {
29268
+ let {
29269
+ emit
29270
+ } = _ref;
29271
+ const clockRef = vue.ref(null);
29272
+ const innerClockRef = vue.ref(null);
29273
+ const inputValue = vue.ref(undefined);
29274
+ const isDragging = vue.ref(false);
29275
+ const valueOnMouseDown = vue.ref(null);
29276
+ const valueOnMouseUp = vue.ref(null);
29277
+ const emitChangeDebounced = debounce(value => emit('change', value), 750);
29278
+ const {
29279
+ textColorClasses,
29280
+ textColorStyles
29281
+ } = useTextColor(() => props.color);
29282
+ const {
29283
+ backgroundColorClasses,
29284
+ backgroundColorStyles
29285
+ } = useBackgroundColor(() => props.color);
29286
+ const count = vue.computed(() => props.max - props.min + 1);
29287
+ const roundCount = vue.computed(() => props.double ? count.value / 2 : count.value);
29288
+ const degreesPerUnit = vue.computed(() => 360 / roundCount.value);
29289
+ const degrees = vue.computed(() => degreesPerUnit.value * Math.PI / 180);
29290
+ const displayedValue = vue.computed(() => props.modelValue == null ? props.min : props.modelValue);
29291
+ const innerRadiusScale = vue.computed(() => 0.62);
29292
+ const genChildren = vue.computed(() => {
29293
+ const children = [];
29294
+ for (let value = props.min; value <= props.max; value = value + props.step) {
29295
+ children.push(value);
29296
+ }
29297
+ return children;
29298
+ });
29299
+ vue.watch(() => props.modelValue, val => {
29300
+ inputValue.value = val;
29301
+ });
29302
+ function update(value) {
29303
+ if (inputValue.value !== value) {
29304
+ inputValue.value = value;
29305
+ }
29306
+ emit('input', value);
29307
+ }
29308
+ function isAllowed(value) {
29309
+ return !props.allowedValues || props.allowedValues(value);
29310
+ }
29311
+ function wheel(e) {
29312
+ if (!props.scrollable || props.disabled) return;
29313
+ e.preventDefault();
29314
+ const delta = Math.sign(-e.deltaY || 1);
29315
+ let value = displayedValue.value;
29316
+ do {
29317
+ value = value + delta;
29318
+ value = (value - props.min + count.value) % count.value + props.min;
29319
+ } while (!isAllowed(value) && value !== displayedValue.value);
29320
+ if (value !== props.displayedValue) {
29321
+ update(value);
29322
+ }
29323
+ emitChangeDebounced(value);
29324
+ }
29325
+ function isInner(value) {
29326
+ return props.double && value - props.min >= roundCount.value;
29327
+ }
29328
+ function handScale(value) {
29329
+ return isInner(value) ? innerRadiusScale.value : 1;
29330
+ }
29331
+ function getPosition(value) {
29332
+ const rotateRadians = props.rotate * Math.PI / 180;
29333
+ return {
29334
+ x: Math.sin((value - props.min) * degrees.value + rotateRadians) * handScale(value),
29335
+ y: -Math.cos((value - props.min) * degrees.value + rotateRadians) * handScale(value)
29336
+ };
29337
+ }
29338
+ function angleToValue(angle, insideClick) {
29339
+ const value = (Math.round(angle / degreesPerUnit.value) + (insideClick ? roundCount.value : 0)) % count.value + props.min;
29340
+
29341
+ // Necessary to fix edge case when selecting left part of the value(s) at 12 o'clock
29342
+ if (angle < 360 - degreesPerUnit.value / 2) return value;
29343
+ return insideClick ? props.max - roundCount.value + 1 : props.min;
29344
+ }
29345
+ function getTransform(i) {
29346
+ const {
29347
+ x,
29348
+ y
29349
+ } = getPosition(i);
29350
+ return {
29351
+ left: `${Math.round(50 + x * 50)}%`,
29352
+ top: `${Math.round(50 + y * 50)}%`
29353
+ };
29354
+ }
29355
+ function euclidean(p0, p1) {
29356
+ const dx = p1.x - p0.x;
29357
+ const dy = p1.y - p0.y;
29358
+ return Math.sqrt(dx * dx + dy * dy);
29359
+ }
29360
+ function angle(center, p1) {
29361
+ const value = 2 * Math.atan2(p1.y - center.y - euclidean(center, p1), p1.x - center.x);
29362
+ return Math.abs(value * 180 / Math.PI);
29363
+ }
29364
+ function setMouseDownValue(value) {
29365
+ if (valueOnMouseDown.value === null) {
29366
+ valueOnMouseDown.value = value;
29367
+ }
29368
+ valueOnMouseUp.value = value;
29369
+ update(value);
29370
+ }
29371
+ function onDragMove(e) {
29372
+ e.preventDefault();
29373
+ if (!isDragging.value && e.type !== 'click' || !clockRef.value) return;
29374
+ const {
29375
+ width,
29376
+ top,
29377
+ left
29378
+ } = clockRef.value?.getBoundingClientRect();
29379
+ const {
29380
+ width: innerWidth
29381
+ } = innerClockRef.value?.getBoundingClientRect() ?? {
29382
+ width: 0
29383
+ };
29384
+ const {
29385
+ clientX,
29386
+ clientY
29387
+ } = 'touches' in e ? e.touches[0] : e;
29388
+ const center = {
29389
+ x: width / 2,
29390
+ y: -width / 2
29391
+ };
29392
+ const coords = {
29393
+ x: clientX - left,
29394
+ y: top - clientY
29395
+ };
29396
+ const handAngle = Math.round(angle(center, coords) - props.rotate + 360) % 360;
29397
+ const insideClick = props.double && euclidean(center, coords) < (innerWidth + innerWidth * innerRadiusScale.value) / 4;
29398
+ const checksCount = Math.ceil(15 / degreesPerUnit.value);
29399
+ let value;
29400
+ for (let i = 0; i < checksCount; i++) {
29401
+ value = angleToValue(handAngle + i * degreesPerUnit.value, insideClick);
29402
+ if (isAllowed(value)) return setMouseDownValue(value);
29403
+ value = angleToValue(handAngle - i * degreesPerUnit.value, insideClick);
29404
+ if (isAllowed(value)) return setMouseDownValue(value);
29405
+ }
29406
+ }
29407
+ function onMouseDown(e) {
29408
+ if (props.disabled) return;
29409
+ e.preventDefault();
29410
+ window.addEventListener('mousemove', onDragMove);
29411
+ window.addEventListener('touchmove', onDragMove);
29412
+ window.addEventListener('mouseup', onMouseUp);
29413
+ window.addEventListener('touchend', onMouseUp);
29414
+ valueOnMouseDown.value = null;
29415
+ valueOnMouseUp.value = null;
29416
+ isDragging.value = true;
29417
+ onDragMove(e);
29418
+ }
29419
+ function onMouseUp(e) {
29420
+ e.stopPropagation();
29421
+ window.removeEventListener('mousemove', onDragMove);
29422
+ window.removeEventListener('touchmove', onDragMove);
29423
+ window.removeEventListener('mouseup', onMouseUp);
29424
+ window.removeEventListener('touchend', onMouseUp);
29425
+ isDragging.value = false;
29426
+ if (valueOnMouseUp.value !== null && isAllowed(valueOnMouseUp.value)) {
29427
+ emit('change', valueOnMouseUp.value);
29428
+ }
29429
+ }
29430
+ useRender(() => {
29431
+ return vue.createElementVNode("div", {
29432
+ "class": vue.normalizeClass([{
29433
+ 'v-time-picker-clock': true,
29434
+ 'v-time-picker-clock--indeterminate': props.modelValue == null,
29435
+ 'v-time-picker-clock--readonly': props.readonly
29436
+ }]),
29437
+ "onMousedown": onMouseDown,
29438
+ "onTouchstart": onMouseDown,
29439
+ "onWheel": wheel,
29440
+ "ref": clockRef
29441
+ }, [vue.createElementVNode("div", {
29442
+ "class": "v-time-picker-clock__inner",
29443
+ "ref": innerClockRef
29444
+ }, [vue.createElementVNode("div", {
29445
+ "class": vue.normalizeClass([{
29446
+ 'v-time-picker-clock__hand': true,
29447
+ 'v-time-picker-clock__hand--inner': isInner(props.modelValue)
29448
+ }, textColorClasses.value]),
29449
+ "style": vue.normalizeStyle([{
29450
+ transform: `rotate(${props.rotate + degreesPerUnit.value * (displayedValue.value - props.min)}deg) scaleY(${handScale(displayedValue.value)})`
29451
+ }, textColorStyles.value])
29452
+ }, null), genChildren.value.map(value => {
29453
+ const isActive = value === displayedValue.value;
29454
+ return vue.createElementVNode("div", {
29455
+ "class": vue.normalizeClass([{
29456
+ 'v-time-picker-clock__item': true,
29457
+ 'v-time-picker-clock__item--active': isActive,
29458
+ 'v-time-picker-clock__item--disabled': props.disabled || !isAllowed(value)
29459
+ }, isActive && backgroundColorClasses.value]),
29460
+ "style": vue.normalizeStyle([getTransform(value), isActive && backgroundColorStyles.value])
29461
+ }, [vue.createElementVNode("span", null, [props.format(value)])]);
29462
+ })])]);
29463
+ });
29464
+ }
29465
+ });
29466
+
29467
+ // Types
29468
+
29469
+ const makeVTimePickerControlsProps = propsFactory({
29470
+ ampm: Boolean,
29471
+ color: String,
29472
+ disabled: Boolean,
29473
+ hour: Number,
29474
+ minute: Number,
29475
+ second: Number,
29476
+ period: String,
29477
+ readonly: Boolean,
29478
+ useSeconds: Boolean,
29479
+ value: Number,
29480
+ viewMode: String
29481
+ }, 'VTimePickerControls');
29482
+ const VTimePickerControls = genericComponent()({
29483
+ name: 'VTimePickerControls',
29484
+ props: makeVTimePickerControlsProps(),
29485
+ emits: {
29486
+ 'update:period': data => true,
29487
+ 'update:viewMode': data => true
29488
+ },
29489
+ setup(props, _ref) {
29490
+ let {
29491
+ emit,
29492
+ slots
29493
+ } = _ref;
29494
+ const {
29495
+ t
29496
+ } = useLocale();
29497
+ useRender(() => {
29498
+ let hour = props.hour;
29499
+ if (props.ampm) {
29500
+ hour = hour ? (hour - 1) % 12 + 1 : 12;
29501
+ }
29502
+ return vue.createElementVNode("div", {
29503
+ "class": "v-time-picker-controls"
29504
+ }, [vue.createElementVNode("div", {
29505
+ "class": vue.normalizeClass({
29506
+ 'v-time-picker-controls__time': true,
29507
+ 'v-time-picker-controls__time--with-seconds': props.useSeconds
29508
+ })
29509
+ }, [vue.createVNode(VBtn, {
29510
+ "active": props.viewMode === 'hour',
29511
+ "color": props.viewMode === 'hour' ? props.color : undefined,
29512
+ "disabled": props.disabled,
29513
+ "variant": "tonal",
29514
+ "class": vue.normalizeClass({
29515
+ 'v-time-picker-controls__time__btn': true,
29516
+ 'v-time-picker-controls__time--with-ampm__btn': props.ampm,
29517
+ 'v-time-picker-controls__time--with-seconds__btn': props.useSeconds
29518
+ }),
29519
+ "text": props.hour == null ? '--' : pad(`${hour}`),
29520
+ "onClick": () => emit('update:viewMode', 'hour')
29521
+ }, null), vue.createElementVNode("span", {
29522
+ "class": vue.normalizeClass(['v-time-picker-controls__time__separator', {
29523
+ 'v-time-picker-controls--with-seconds__time__separator': props.useSeconds
29524
+ }])
29525
+ }, [vue.createTextVNode(":")]), vue.createVNode(VBtn, {
29526
+ "active": props.viewMode === 'minute',
29527
+ "color": props.viewMode === 'minute' ? props.color : undefined,
29528
+ "class": vue.normalizeClass({
29529
+ 'v-time-picker-controls__time__btn': true,
29530
+ 'v-time-picker-controls__time__btn__active': props.viewMode === 'minute',
29531
+ 'v-time-picker-controls__time--with-ampm__btn': props.ampm,
29532
+ 'v-time-picker-controls__time--with-seconds__btn': props.useSeconds
29533
+ }),
29534
+ "disabled": props.disabled,
29535
+ "variant": "tonal",
29536
+ "text": props.minute == null ? '--' : pad(props.minute),
29537
+ "onClick": () => emit('update:viewMode', 'minute')
29538
+ }, null), props.useSeconds && vue.createElementVNode("span", {
29539
+ "class": vue.normalizeClass(['v-time-picker-controls__time__separator', {
29540
+ 'v-time-picker-controls--with-seconds__time__separator': props.useSeconds
29541
+ }]),
29542
+ "key": "secondsDivider"
29543
+ }, [vue.createTextVNode(":")]), props.useSeconds && vue.createVNode(VBtn, {
29544
+ "key": "secondsVal",
29545
+ "active": props.viewMode === 'second',
29546
+ "color": props.viewMode === 'second' ? props.color : undefined,
29547
+ "variant": "tonal",
29548
+ "onClick": () => emit('update:viewMode', 'second'),
29549
+ "class": vue.normalizeClass({
29550
+ 'v-time-picker-controls__time__btn': true,
29551
+ 'v-time-picker-controls__time__btn__active': props.viewMode === 'second',
29552
+ 'v-time-picker-controls__time--with-seconds__btn': props.useSeconds
29553
+ }),
29554
+ "disabled": props.disabled,
29555
+ "text": props.second == null ? '--' : pad(props.second)
29556
+ }, null), props.ampm && vue.createElementVNode("div", {
29557
+ "class": "v-time-picker-controls__ampm"
29558
+ }, [vue.createVNode(VBtn, {
29559
+ "active": props.period === 'am',
29560
+ "color": props.period === 'am' ? props.color : undefined,
29561
+ "class": vue.normalizeClass({
29562
+ 'v-time-picker-controls__ampm__am': true,
29563
+ 'v-time-picker-controls__ampm__btn': true,
29564
+ 'v-time-picker-controls__ampm__btn__active': props.period === 'am'
29565
+ }),
29566
+ "disabled": props.disabled,
29567
+ "text": t('$vuetify.timePicker.am'),
29568
+ "variant": props.disabled && props.period === 'am' ? 'elevated' : 'tonal',
29569
+ "onClick": () => props.period !== 'am' ? emit('update:period', 'am') : null
29570
+ }, null), vue.createVNode(VBtn, {
29571
+ "active": props.period === 'pm',
29572
+ "color": props.period === 'pm' ? props.color : undefined,
29573
+ "class": vue.normalizeClass({
29574
+ 'v-time-picker-controls__ampm__pm': true,
29575
+ 'v-time-picker-controls__ampm__btn': true,
29576
+ 'v-time-picker-controls__ampm__btn__active': props.period === 'pm'
29577
+ }),
29578
+ "disabled": props.disabled,
29579
+ "text": t('$vuetify.timePicker.pm'),
29580
+ "variant": props.disabled && props.period === 'pm' ? 'elevated' : 'tonal',
29581
+ "onClick": () => props.period !== 'pm' ? emit('update:period', 'pm') : null
29582
+ }, null)])])]);
29583
+ });
29584
+ return {};
29585
+ }
29586
+ });
29587
+
29588
+ // Types
29589
+
29590
+ const rangeHours24 = createRange(24);
29591
+ const rangeHours12am = createRange(12);
29592
+ const rangeHours12pm = rangeHours12am.map(v => v + 12);
29593
+ createRange(60);
29594
+ const makeVTimePickerProps = propsFactory({
29595
+ allowedHours: [Function, Array],
29596
+ allowedMinutes: [Function, Array],
29597
+ allowedSeconds: [Function, Array],
29598
+ disabled: Boolean,
29599
+ format: {
29600
+ type: String,
29601
+ default: 'ampm'
29602
+ },
29603
+ max: String,
29604
+ min: String,
29605
+ viewMode: {
29606
+ type: String,
29607
+ default: 'hour'
29608
+ },
29609
+ modelValue: null,
29610
+ readonly: Boolean,
29611
+ scrollable: Boolean,
29612
+ useSeconds: Boolean,
29613
+ ...omit(makeVPickerProps({
29614
+ title: '$vuetify.timePicker.title'
29615
+ }), ['landscape'])
29616
+ }, 'VTimePicker');
29617
+ const VTimePicker = genericComponent()({
29618
+ name: 'VTimePicker',
29619
+ props: makeVTimePickerProps(),
29620
+ emits: {
29621
+ 'update:hour': val => true,
29622
+ 'update:minute': val => true,
29623
+ 'update:period': val => true,
29624
+ 'update:second': val => true,
29625
+ 'update:modelValue': val => true,
29626
+ 'update:viewMode': val => true
29627
+ },
29628
+ setup(props, _ref) {
29629
+ let {
29630
+ emit,
29631
+ slots
29632
+ } = _ref;
29633
+ const {
29634
+ t
29635
+ } = useLocale();
29636
+ const inputHour = vue.ref(null);
29637
+ const inputMinute = vue.ref(null);
29638
+ const inputSecond = vue.ref(null);
29639
+ const lazyInputHour = vue.ref(null);
29640
+ const lazyInputMinute = vue.ref(null);
29641
+ const lazyInputSecond = vue.ref(null);
29642
+ const period = vue.ref('am');
29643
+ const viewMode = useProxiedModel(props, 'viewMode', 'hour');
29644
+ const controlsRef = vue.ref(null);
29645
+ const clockRef = vue.ref(null);
29646
+ const isAllowedHourCb = vue.computed(() => {
29647
+ let cb;
29648
+ if (props.allowedHours instanceof Array) {
29649
+ cb = val => props.allowedHours.includes(val);
29650
+ } else {
29651
+ cb = props.allowedHours;
29652
+ }
29653
+ if (!props.min && !props.max) return cb;
29654
+ const minHour = props.min ? Number(props.min.split(':')[0]) : 0;
29655
+ const maxHour = props.max ? Number(props.max.split(':')[0]) : 23;
29656
+ return val => {
29657
+ return val >= Number(minHour) && val <= Number(maxHour) && (!cb || cb(val));
29658
+ };
29659
+ });
29660
+ const isAllowedMinuteCb = vue.computed(() => {
29661
+ let cb;
29662
+ const isHourAllowed = !isAllowedHourCb.value || inputHour.value === null || isAllowedHourCb.value(inputHour.value);
29663
+ if (props.allowedMinutes instanceof Array) {
29664
+ cb = val => props.allowedMinutes.includes(val);
29665
+ } else {
29666
+ cb = props.allowedMinutes;
29667
+ }
29668
+ if (!props.min && !props.max) {
29669
+ return isHourAllowed ? cb : () => false;
29670
+ }
29671
+ const [minHour, minMinute] = props.min ? props.min.split(':').map(Number) : [0, 0];
29672
+ const [maxHour, maxMinute] = props.max ? props.max.split(':').map(Number) : [23, 59];
29673
+ const minTime = minHour * 60 + Number(minMinute);
29674
+ const maxTime = maxHour * 60 + Number(maxMinute);
29675
+ return val => {
29676
+ const time = 60 * inputHour.value + val;
29677
+ return time >= minTime && time <= maxTime && isHourAllowed && (!cb || cb(val));
29678
+ };
29679
+ });
29680
+ const isAllowedSecondCb = vue.computed(() => {
29681
+ let cb;
29682
+ const isHourAllowed = !isAllowedHourCb.value || inputHour.value === null || isAllowedHourCb.value(inputHour.value);
29683
+ const isMinuteAllowed = isHourAllowed && (!isAllowedMinuteCb.value || inputMinute.value === null || isAllowedMinuteCb.value(inputMinute.value));
29684
+ if (props.allowedSeconds instanceof Array) {
29685
+ cb = val => props.allowedSeconds.includes(val);
29686
+ } else {
29687
+ cb = props.allowedSeconds;
29688
+ }
29689
+ if (!props.min && !props.max) {
29690
+ return isMinuteAllowed ? cb : () => false;
29691
+ }
29692
+ const [minHour, minMinute, minSecond] = props.min ? props.min.split(':').map(Number) : [0, 0, 0];
29693
+ const [maxHour, maxMinute, maxSecond] = props.max ? props.max.split(':').map(Number) : [23, 59, 59];
29694
+ const minTime = minHour * 3600 + minMinute * 60 + Number(minSecond || 0);
29695
+ const maxTime = maxHour * 3600 + maxMinute * 60 + Number(maxSecond || 0);
29696
+ return val => {
29697
+ const time = 3600 * inputHour.value + 60 * inputMinute.value + val;
29698
+ return time >= minTime && time <= maxTime && isMinuteAllowed && (!cb || cb(val));
29699
+ };
29700
+ });
29701
+ const isAmPm = vue.computed(() => {
29702
+ return props.format === 'ampm';
29703
+ });
29704
+ vue.watch(() => props.modelValue, val => setInputData(val));
29705
+ vue.onMounted(() => {
29706
+ setInputData(props.modelValue);
29707
+ });
29708
+ function genValue() {
29709
+ if (inputHour.value != null && inputMinute.value != null && (!props.useSeconds || inputSecond.value != null)) {
29710
+ return `${pad(inputHour.value)}:${pad(inputMinute.value)}` + (props.useSeconds ? `:${pad(inputSecond.value)}` : '');
29711
+ }
29712
+ return null;
29713
+ }
29714
+ function emitValue() {
29715
+ const value = genValue();
29716
+ if (value !== null) emit('update:modelValue', value);
29717
+ }
29718
+ function convert24to12(hour) {
29719
+ return hour ? (hour - 1) % 12 + 1 : 12;
29720
+ }
29721
+ function convert12to24(hour, period) {
29722
+ return hour % 12 + (period === 'pm' ? 12 : 0);
29723
+ }
29724
+ function setInputData(value) {
29725
+ if (value == null || value === '') {
29726
+ inputHour.value = null;
29727
+ inputMinute.value = null;
29728
+ inputSecond.value = null;
29729
+ } else if (value instanceof Date) {
29730
+ inputHour.value = value.getHours();
29731
+ inputMinute.value = value.getMinutes();
29732
+ inputSecond.value = value.getSeconds();
29733
+ } else {
29734
+ const [hour,, minute,, second, period] = value.trim().toLowerCase().match(/^(\d+):(\d+)(:(\d+))?([ap]m)?$/) || new Array(6);
29735
+ inputHour.value = period ? convert12to24(parseInt(hour, 10), period) : parseInt(hour, 10);
29736
+ inputMinute.value = parseInt(minute, 10);
29737
+ inputSecond.value = parseInt(second || 0, 10);
29738
+ }
29739
+ period.value = inputHour.value == null || inputHour.value < 12 ? 'am' : 'pm';
29740
+ }
29741
+ function firstAllowed(type, value) {
29742
+ const allowedFn = isAllowedHourCb.value ;
29743
+ if (!allowedFn) return value;
29744
+
29745
+ // TODO: clean up (Note from V2 code)
29746
+ const range = isAmPm.value ? value < 12 ? rangeHours12am : rangeHours12pm : rangeHours24;
29747
+ const first = range.find(v => allowedFn((v + value) % range.length + range[0]));
29748
+ return ((first || 0) + value) % range.length + range[0];
29749
+ }
29750
+ function setPeriod(val) {
29751
+ period.value = val;
29752
+ if (inputHour.value != null) {
29753
+ const newHour = inputHour.value + (period.value === 'am' ? -12 : 12);
29754
+ inputHour.value = firstAllowed('hour', newHour);
29755
+ }
29756
+ emit('update:period', val);
29757
+ emitValue();
29758
+ return true;
29759
+ }
29760
+ function onInput(value) {
29761
+ if (viewMode.value === 'hour') {
29762
+ inputHour.value = isAmPm.value ? convert12to24(value, period.value) : value;
29763
+ } else if (viewMode.value === 'minute') {
29764
+ inputMinute.value = value;
29765
+ } else {
29766
+ inputSecond.value = value;
29767
+ }
29768
+ }
29769
+ function onChange(value) {
29770
+ switch (viewMode.value || 'hour') {
29771
+ case 'hour':
29772
+ emit('update:hour', value);
29773
+ break;
29774
+ case 'minute':
29775
+ emit('update:minute', value);
29776
+ break;
29777
+ case 'second':
29778
+ emit('update:second', value);
29779
+ break;
29780
+ }
29781
+ const emitChange = inputHour.value !== null && inputMinute.value !== null && (props.useSeconds ? inputSecond.value !== null : true);
29782
+ if (viewMode.value === 'hour') {
29783
+ viewMode.value = 'minute';
29784
+ } else if (props.useSeconds && viewMode.value === 'minute') {
29785
+ viewMode.value = 'second';
29786
+ }
29787
+ if (inputHour.value === lazyInputHour.value && inputMinute.value === lazyInputMinute.value && (!props.useSeconds || inputSecond.value === lazyInputSecond.value)) return;
29788
+ const time = genValue();
29789
+ if (time === null) return;
29790
+ lazyInputHour.value = inputHour.value;
29791
+ lazyInputMinute.value = inputMinute.value;
29792
+ props.useSeconds && (lazyInputSecond.value = inputSecond.value);
29793
+ emitChange && emitValue();
29794
+ }
29795
+ useRender(() => {
29796
+ const pickerProps = VPicker.filterProps(props);
29797
+ const timePickerControlsProps = VTimePickerControls.filterProps(props);
29798
+ const timePickerClockProps = VTimePickerClock.filterProps(omit(props, ['format', 'modelValue', 'min', 'max']));
29799
+ return vue.createVNode(VPicker, vue.mergeProps(pickerProps, {
29800
+ "color": undefined,
29801
+ "class": ['v-time-picker', props.class],
29802
+ "style": props.style
29803
+ }), {
29804
+ title: () => slots.title?.() ?? vue.createElementVNode("div", {
29805
+ "class": "v-time-picker__title"
29806
+ }, [t(props.title)]),
29807
+ header: () => vue.createVNode(VTimePickerControls, vue.mergeProps(timePickerControlsProps, {
29808
+ "ampm": isAmPm.value,
29809
+ "hour": inputHour.value,
29810
+ "minute": inputMinute.value,
29811
+ "period": period.value,
29812
+ "second": inputSecond.value,
29813
+ "viewMode": viewMode.value,
29814
+ "onUpdate:period": val => setPeriod(val),
29815
+ "onUpdate:viewMode": value => viewMode.value = value,
29816
+ "ref": controlsRef
29817
+ }), null),
29818
+ default: () => vue.createVNode(VTimePickerClock, vue.mergeProps(timePickerClockProps, {
29819
+ "allowedValues": viewMode.value === 'hour' ? isAllowedHourCb.value : viewMode.value === 'minute' ? isAllowedMinuteCb.value : isAllowedSecondCb.value,
29820
+ "double": viewMode.value === 'hour' && !isAmPm.value,
29821
+ "format": viewMode.value === 'hour' ? isAmPm.value ? convert24to12 : val => val : val => pad(val, 2),
29822
+ "max": viewMode.value === 'hour' ? isAmPm.value && period.value === 'am' ? 11 : 23 : 59,
29823
+ "min": viewMode.value === 'hour' && isAmPm.value && period.value === 'pm' ? 12 : 0,
29824
+ "size": 20,
29825
+ "step": viewMode.value === 'hour' ? 1 : 5,
29826
+ "modelValue": viewMode.value === 'hour' ? inputHour.value : viewMode.value === 'minute' ? inputMinute.value : inputSecond.value,
29827
+ "onChange": onChange,
29828
+ "onInput": onInput,
29829
+ "ref": clockRef
29830
+ }), null),
29831
+ actions: slots.actions
29832
+ });
29833
+ });
29834
+ }
29835
+ });
29836
+
29837
+ const makeVToolbarItemsProps = propsFactory({
29838
+ ...makeComponentProps(),
29839
+ ...makeVariantProps({
29840
+ variant: 'text'
29841
+ })
29842
+ }, 'VToolbarItems');
29843
+ const VToolbarItems = genericComponent()({
29844
+ name: 'VToolbarItems',
29845
+ props: makeVToolbarItemsProps(),
29846
+ setup(props, _ref) {
29847
+ let {
29848
+ slots
29849
+ } = _ref;
29850
+ provideDefaults({
29851
+ VBtn: {
29852
+ color: vue.toRef(() => props.color),
29853
+ height: 'inherit',
29854
+ variant: vue.toRef(() => props.variant)
29855
+ }
29856
+ });
29857
+ useRender(() => vue.createElementVNode("div", {
29858
+ "class": vue.normalizeClass(['v-toolbar-items', props.class]),
29859
+ "style": vue.normalizeStyle(props.style)
29860
+ }, [slots.default?.()]));
29861
+ return {};
29862
+ }
29863
+ });
29864
+
29865
+ // Types
29866
+
29867
+ const makeVTooltipProps = propsFactory({
29868
+ id: String,
29869
+ interactive: Boolean,
29870
+ text: String,
29871
+ ...omit(makeVOverlayProps({
29872
+ closeOnBack: false,
29873
+ location: 'end',
29874
+ locationStrategy: 'connected',
29875
+ eager: true,
29876
+ minWidth: 0,
29877
+ offset: 10,
29878
+ openOnClick: false,
29879
+ openOnHover: true,
29880
+ origin: 'auto',
29881
+ scrim: false,
29882
+ scrollStrategy: 'reposition',
29883
+ transition: null
29884
+ }), ['absolute', 'persistent'])
29885
+ }, 'VTooltip');
29886
+ const VTooltip = genericComponent()({
29887
+ name: 'VTooltip',
29888
+ props: makeVTooltipProps(),
29260
29889
  emits: {
29261
29890
  'update:modelValue': value => true
29262
29891
  },
@@ -29318,6 +29947,429 @@
29318
29947
  }
29319
29948
  });
29320
29949
 
29950
+ // Types
29951
+
29952
+ const makeVTreeviewGroupProps = propsFactory({
29953
+ ...omit(makeVListGroupProps({
29954
+ collapseIcon: '$treeviewCollapse',
29955
+ expandIcon: '$treeviewExpand'
29956
+ }), ['subgroup'])
29957
+ }, 'VTreeviewGroup');
29958
+ const VTreeviewGroup = genericComponent()({
29959
+ name: 'VTreeviewGroup',
29960
+ props: makeVTreeviewGroupProps(),
29961
+ setup(props, _ref) {
29962
+ let {
29963
+ slots
29964
+ } = _ref;
29965
+ const vListGroupRef = vue.ref();
29966
+ const toggleIcon = vue.computed(() => vListGroupRef.value?.isOpen ? props.collapseIcon : props.expandIcon);
29967
+ const activatorDefaults = vue.computed(() => ({
29968
+ VTreeviewItem: {
29969
+ prependIcon: undefined,
29970
+ appendIcon: undefined,
29971
+ active: vListGroupRef.value?.isOpen,
29972
+ toggleIcon: toggleIcon.value
29973
+ }
29974
+ }));
29975
+ useRender(() => {
29976
+ const listGroupProps = VListGroup.filterProps(props);
29977
+ return vue.createVNode(VListGroup, vue.mergeProps(listGroupProps, {
29978
+ "ref": vListGroupRef,
29979
+ "class": ['v-treeview-group', props.class],
29980
+ "subgroup": true
29981
+ }), {
29982
+ ...slots,
29983
+ activator: slots.activator ? slotProps => vue.createElementVNode(vue.Fragment, null, [vue.createVNode(VDefaultsProvider, {
29984
+ "defaults": activatorDefaults.value
29985
+ }, {
29986
+ default: () => [slots.activator?.(slotProps)]
29987
+ })]) : undefined
29988
+ });
29989
+ });
29990
+ return {};
29991
+ }
29992
+ });
29993
+
29994
+ // Types
29995
+
29996
+ const VTreeviewSymbol = Symbol.for('vuetify:v-treeview');
29997
+
29998
+ const makeVTreeviewItemProps = propsFactory({
29999
+ loading: Boolean,
30000
+ toggleIcon: IconValue,
30001
+ ...makeVListItemProps({
30002
+ slim: true
30003
+ })
30004
+ }, 'VTreeviewItem');
30005
+ const VTreeviewItem = genericComponent()({
30006
+ name: 'VTreeviewItem',
30007
+ props: makeVTreeviewItemProps(),
30008
+ emits: {
30009
+ toggleExpand: value => true
30010
+ },
30011
+ setup(props, _ref) {
30012
+ let {
30013
+ slots,
30014
+ emit
30015
+ } = _ref;
30016
+ const visibleIds = vue.inject(VTreeviewSymbol, {
30017
+ visibleIds: vue.ref()
30018
+ }).visibleIds;
30019
+ const vListItemRef = vue.ref();
30020
+ const isActivatableGroupActivator = vue.computed(() => vListItemRef.value?.root.activatable.value && vListItemRef.value?.isGroupActivator);
30021
+ const vListItemRefIsClickable = vue.computed(() => vListItemRef.value?.link.isClickable.value || props.value != null && !!vListItemRef.value?.list);
30022
+ const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || vListItemRefIsClickable.value || isActivatableGroupActivator.value));
30023
+ const isFiltered = vue.computed(() => visibleIds.value && !visibleIds.value.has(vue.toRaw(vListItemRef.value?.id)));
30024
+ function activateGroupActivator(e) {
30025
+ if (isClickable.value && isActivatableGroupActivator.value) {
30026
+ vListItemRef.value?.activate(!vListItemRef.value?.isActivated, e);
30027
+ }
30028
+ }
30029
+ function onClickAction(e) {
30030
+ e.preventDefault();
30031
+ e.stopPropagation();
30032
+ emit('toggleExpand', e);
30033
+ }
30034
+ useRender(() => {
30035
+ const listItemProps = omit(VListItem.filterProps(props), ['onClick']);
30036
+ const hasPrepend = slots.prepend || props.toggleIcon;
30037
+ return vue.createVNode(VListItem, vue.mergeProps({
30038
+ "ref": vListItemRef
30039
+ }, listItemProps, {
30040
+ "active": vListItemRef.value?.isActivated,
30041
+ "class": ['v-treeview-item', {
30042
+ 'v-treeview-item--activatable-group-activator': isActivatableGroupActivator.value,
30043
+ 'v-treeview-item--filtered': isFiltered.value
30044
+ }, props.class],
30045
+ "ripple": false,
30046
+ "onClick": props.onClick ?? activateGroupActivator
30047
+ }), {
30048
+ ...slots,
30049
+ prepend: hasPrepend ? slotProps => {
30050
+ return vue.createElementVNode(vue.Fragment, null, [vue.createVNode(VListItemAction, {
30051
+ "start": false
30052
+ }, {
30053
+ default: () => [props.toggleIcon ? vue.createVNode(VBtn, {
30054
+ "density": "compact",
30055
+ "icon": props.toggleIcon,
30056
+ "loading": props.loading,
30057
+ "variant": "text",
30058
+ "onClick": onClickAction
30059
+ }, {
30060
+ loader() {
30061
+ return vue.createVNode(VProgressCircular, {
30062
+ "indeterminate": "disable-shrink",
30063
+ "size": "20",
30064
+ "width": "2"
30065
+ }, null);
30066
+ }
30067
+ }) : vue.createElementVNode("div", {
30068
+ "class": "v-treeview-item__level"
30069
+ }, null)]
30070
+ }), slots.prepend?.(slotProps)]);
30071
+ } : undefined
30072
+ });
30073
+ });
30074
+ return {};
30075
+ }
30076
+ });
30077
+
30078
+ // Types
30079
+
30080
+ const makeVTreeviewChildrenProps = propsFactory({
30081
+ disabled: Boolean,
30082
+ loadChildren: Function,
30083
+ loadingIcon: {
30084
+ type: String,
30085
+ default: '$loading'
30086
+ },
30087
+ items: Array,
30088
+ openOnClick: {
30089
+ type: Boolean,
30090
+ default: undefined
30091
+ },
30092
+ indeterminateIcon: {
30093
+ type: IconValue,
30094
+ default: '$checkboxIndeterminate'
30095
+ },
30096
+ falseIcon: IconValue,
30097
+ trueIcon: IconValue,
30098
+ returnObject: Boolean,
30099
+ selectable: Boolean,
30100
+ selectedColor: String,
30101
+ selectStrategy: [String, Function, Object],
30102
+ index: Number,
30103
+ path: {
30104
+ type: Array,
30105
+ default: () => []
30106
+ },
30107
+ ...makeDensityProps()
30108
+ }, 'VTreeviewChildren');
30109
+ const VTreeviewChildren = genericComponent()({
30110
+ name: 'VTreeviewChildren',
30111
+ props: makeVTreeviewChildrenProps(),
30112
+ setup(props, _ref) {
30113
+ let {
30114
+ slots
30115
+ } = _ref;
30116
+ const isLoading = vue.reactive(new Set());
30117
+ const isClickOnOpen = vue.computed(() => !props.disabled && (props.openOnClick != null ? props.openOnClick : props.selectable));
30118
+ async function checkChildren(item) {
30119
+ try {
30120
+ if (!props.items?.length || !props.loadChildren) return;
30121
+ if (item?.children?.length === 0) {
30122
+ isLoading.add(item.value);
30123
+ await props.loadChildren(item.raw);
30124
+ }
30125
+ } finally {
30126
+ isLoading.delete(item.value);
30127
+ }
30128
+ }
30129
+ function selectItem(select, isSelected) {
30130
+ if (props.selectable) {
30131
+ select(!isSelected);
30132
+ }
30133
+ }
30134
+ return () => slots.default?.() ?? props.items?.map((item, index) => {
30135
+ const {
30136
+ children,
30137
+ props: itemProps
30138
+ } = item;
30139
+ const loading = isLoading.has(item.value);
30140
+ const treeItemProps = {
30141
+ index,
30142
+ depth: props.path?.length ?? 0,
30143
+ isFirst: index === 0,
30144
+ isLast: props.items ? props.items.length - 1 === index : false,
30145
+ path: [...props.path, index]
30146
+ };
30147
+ const slotsWithItem = {
30148
+ prepend: slotProps => vue.createElementVNode(vue.Fragment, null, [props.selectable && (!children || children && !['leaf', 'single-leaf'].includes(props.selectStrategy)) && vue.createElementVNode("div", null, [vue.createVNode(VCheckboxBtn, {
30149
+ "key": item.value,
30150
+ "modelValue": slotProps.isSelected,
30151
+ "disabled": props.disabled,
30152
+ "loading": loading,
30153
+ "color": props.selectedColor,
30154
+ "density": props.density,
30155
+ "indeterminate": slotProps.isIndeterminate,
30156
+ "indeterminateIcon": props.indeterminateIcon,
30157
+ "falseIcon": props.falseIcon,
30158
+ "trueIcon": props.trueIcon,
30159
+ "onClick": vue.withModifiers(() => selectItem(slotProps.select, slotProps.isSelected), ['stop']),
30160
+ "onKeydown": e => {
30161
+ if (!['Enter', 'Space'].includes(e.key)) return;
30162
+ e.stopPropagation();
30163
+ selectItem(slotProps.select, slotProps.isSelected);
30164
+ }
30165
+ }, null)]), slots.prepend?.({
30166
+ ...slotProps,
30167
+ ...treeItemProps,
30168
+ item: item.raw,
30169
+ internalItem: item
30170
+ })]),
30171
+ append: slots.append ? slotProps => slots.append?.({
30172
+ ...slotProps,
30173
+ ...treeItemProps,
30174
+ item: item.raw,
30175
+ internalItem: item
30176
+ }) : undefined,
30177
+ title: slots.title ? slotProps => slots.title?.({
30178
+ ...slotProps,
30179
+ item: item.raw,
30180
+ internalItem: item
30181
+ }) : undefined,
30182
+ subtitle: slots.subtitle ? slotProps => slots.subtitle?.({
30183
+ ...slotProps,
30184
+ item: item.raw,
30185
+ internalItem: item
30186
+ }) : undefined
30187
+ };
30188
+ const treeviewGroupProps = VTreeviewGroup.filterProps(itemProps);
30189
+ const treeviewChildrenProps = VTreeviewChildren.filterProps({
30190
+ ...props,
30191
+ ...treeItemProps
30192
+ });
30193
+ return children ? vue.createVNode(VTreeviewGroup, vue.mergeProps(treeviewGroupProps, {
30194
+ "value": props.returnObject ? item.raw : treeviewGroupProps?.value,
30195
+ "rawId": treeviewGroupProps?.value
30196
+ }), {
30197
+ activator: _ref2 => {
30198
+ let {
30199
+ props: activatorProps
30200
+ } = _ref2;
30201
+ const listItemProps = {
30202
+ ...itemProps,
30203
+ ...activatorProps,
30204
+ value: itemProps?.value,
30205
+ onToggleExpand: [() => checkChildren(item), activatorProps.onClick],
30206
+ onClick: isClickOnOpen.value ? [() => checkChildren(item), activatorProps.onClick] : undefined
30207
+ };
30208
+ return vue.createVNode(VTreeviewItem, vue.mergeProps(listItemProps, {
30209
+ "value": props.returnObject ? item.raw : itemProps.value,
30210
+ "loading": loading
30211
+ }), slotsWithItem);
30212
+ },
30213
+ default: () => vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
30214
+ "items": children,
30215
+ "returnObject": props.returnObject
30216
+ }), slots)
30217
+ }) : slots.item?.({
30218
+ props: itemProps,
30219
+ item: item.raw,
30220
+ internalItem: item
30221
+ }) ?? vue.createVNode(VTreeviewItem, vue.mergeProps(itemProps, {
30222
+ "value": props.returnObject ? vue.toRaw(item.raw) : itemProps.value
30223
+ }), slotsWithItem);
30224
+ });
30225
+ }
30226
+ });
30227
+
30228
+ function flatten(items) {
30229
+ let flat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
30230
+ for (const item of items) {
30231
+ flat.push(item);
30232
+ if (item.children) flatten(item.children, flat);
30233
+ }
30234
+ return flat;
30235
+ }
30236
+ const makeVTreeviewProps = propsFactory({
30237
+ fluid: Boolean,
30238
+ openAll: Boolean,
30239
+ search: String,
30240
+ ...makeFilterProps({
30241
+ filterKeys: ['title']
30242
+ }),
30243
+ ...omit(makeVTreeviewChildrenProps(), ['index', 'path']),
30244
+ ...omit(makeVListProps({
30245
+ collapseIcon: '$treeviewCollapse',
30246
+ expandIcon: '$treeviewExpand',
30247
+ slim: true
30248
+ }), ['itemType', 'nav', 'openStrategy']),
30249
+ modelValue: {
30250
+ type: Array,
30251
+ default: () => []
30252
+ }
30253
+ }, 'VTreeview');
30254
+ const VTreeview = genericComponent()({
30255
+ name: 'VTreeview',
30256
+ props: makeVTreeviewProps(),
30257
+ emits: {
30258
+ 'update:opened': val => true,
30259
+ 'update:activated': val => true,
30260
+ 'update:selected': val => true,
30261
+ 'update:modelValue': val => true,
30262
+ 'click:open': value => true,
30263
+ 'click:select': value => true
30264
+ },
30265
+ setup(props, _ref) {
30266
+ let {
30267
+ slots
30268
+ } = _ref;
30269
+ const {
30270
+ items
30271
+ } = useListItems(props);
30272
+ const activeColor = vue.toRef(() => props.activeColor);
30273
+ const baseColor = vue.toRef(() => props.baseColor);
30274
+ const color = vue.toRef(() => props.color);
30275
+ const activated = useProxiedModel(props, 'activated');
30276
+ const model = useProxiedModel(props, 'modelValue');
30277
+ const _selected = useProxiedModel(props, 'selected', props.modelValue);
30278
+ const selected = vue.computed({
30279
+ get: () => _selected.value,
30280
+ set(val) {
30281
+ _selected.value = val;
30282
+ model.value = val;
30283
+ }
30284
+ });
30285
+ const vListRef = vue.ref();
30286
+ const opened = vue.computed(() => props.openAll ? openAll(items.value) : props.opened);
30287
+ const flatItems = vue.computed(() => flatten(items.value));
30288
+ const search = vue.toRef(() => props.search);
30289
+ const {
30290
+ filteredItems
30291
+ } = useFilter(props, flatItems, search);
30292
+ const visibleIds = vue.computed(() => {
30293
+ if (!search.value) return null;
30294
+ const getPath = vListRef.value?.getPath;
30295
+ if (!getPath) return null;
30296
+ return new Set(filteredItems.value.flatMap(item => {
30297
+ const itemVal = props.returnObject ? item.raw : item.props.value;
30298
+ return [...getPath(itemVal), ...getChildren(itemVal)].map(vue.toRaw);
30299
+ }));
30300
+ });
30301
+ function getChildren(id) {
30302
+ const arr = [];
30303
+ const queue = (vListRef.value?.children.get(id) ?? []).slice();
30304
+ while (queue.length) {
30305
+ const child = queue.shift();
30306
+ if (!child) continue;
30307
+ arr.push(child);
30308
+ queue.push(...(vListRef.value?.children.get(child) ?? []).slice());
30309
+ }
30310
+ return arr;
30311
+ }
30312
+ function openAll(items) {
30313
+ let ids = [];
30314
+ for (const i of items) {
30315
+ if (!i.children) continue;
30316
+ ids.push(props.returnObject ? vue.toRaw(i.raw) : i.value);
30317
+ if (i.children) {
30318
+ ids = ids.concat(openAll(i.children));
30319
+ }
30320
+ }
30321
+ return ids;
30322
+ }
30323
+ vue.provide(VTreeviewSymbol, {
30324
+ visibleIds
30325
+ });
30326
+ provideDefaults({
30327
+ VTreeviewGroup: {
30328
+ activeColor,
30329
+ baseColor,
30330
+ color,
30331
+ collapseIcon: vue.toRef(() => props.collapseIcon),
30332
+ expandIcon: vue.toRef(() => props.expandIcon)
30333
+ },
30334
+ VTreeviewItem: {
30335
+ activeClass: vue.toRef(() => props.activeClass),
30336
+ activeColor,
30337
+ baseColor,
30338
+ color,
30339
+ density: vue.toRef(() => props.density),
30340
+ disabled: vue.toRef(() => props.disabled),
30341
+ lines: vue.toRef(() => props.lines),
30342
+ variant: vue.toRef(() => props.variant)
30343
+ }
30344
+ });
30345
+ useRender(() => {
30346
+ const listProps = VList.filterProps(props);
30347
+ const treeviewChildrenProps = VTreeviewChildren.filterProps(props);
30348
+ return vue.createVNode(VList, vue.mergeProps({
30349
+ "ref": vListRef
30350
+ }, listProps, {
30351
+ "class": ['v-treeview', {
30352
+ 'v-treeview--fluid': props.fluid
30353
+ }, props.class],
30354
+ "open-strategy": "multiple",
30355
+ "style": props.style,
30356
+ "opened": opened.value,
30357
+ "activated": activated.value,
30358
+ "onUpdate:activated": $event => activated.value = $event,
30359
+ "selected": selected.value,
30360
+ "onUpdate:selected": $event => selected.value = $event
30361
+ }), {
30362
+ default: () => [vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
30363
+ "density": props.density,
30364
+ "returnObject": props.returnObject,
30365
+ "items": items.value
30366
+ }), slots)]
30367
+ });
30368
+ });
30369
+ return {};
30370
+ }
30371
+ });
30372
+
29321
30373
  // Composables
29322
30374
 
29323
30375
  // Types
@@ -29495,12 +30547,18 @@
29495
30547
  VTextField: VTextField,
29496
30548
  VTextarea: VTextarea,
29497
30549
  VThemeProvider: VThemeProvider,
30550
+ VTimePicker: VTimePicker,
30551
+ VTimePickerClock: VTimePickerClock,
30552
+ VTimePickerControls: VTimePickerControls,
29498
30553
  VTimeline: VTimeline,
29499
30554
  VTimelineItem: VTimelineItem,
29500
30555
  VToolbar: VToolbar,
29501
30556
  VToolbarItems: VToolbarItems,
29502
30557
  VToolbarTitle: VToolbarTitle,
29503
30558
  VTooltip: VTooltip,
30559
+ VTreeview: VTreeview,
30560
+ VTreeviewGroup: VTreeviewGroup,
30561
+ VTreeviewItem: VTreeviewItem,
29504
30562
  VValidation: VValidation,
29505
30563
  VVirtualScroll: VVirtualScroll,
29506
30564
  VWindow: VWindow,
@@ -29824,7 +30882,7 @@
29824
30882
  };
29825
30883
  });
29826
30884
  }
29827
- const version$1 = "3.8.10-dev.2025-06-18";
30885
+ const version$1 = "3.8.10-dev.2025-06-19";
29828
30886
  createVuetify$1.version = version$1;
29829
30887
 
29830
30888
  // Vue's inject() can only be used in setup
@@ -29849,7 +30907,7 @@
29849
30907
  ...options
29850
30908
  });
29851
30909
  };
29852
- const version = "3.8.10-dev.2025-06-18";
30910
+ const version = "3.8.10-dev.2025-06-19";
29853
30911
  createVuetify.version = version;
29854
30912
 
29855
30913
  exports.blueprints = index;