@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.
- package/CHANGELOG.md +14 -4
- package/dist/_component-variables-labs.sass +1 -3
- package/dist/_component-variables.sass +2 -0
- package/dist/json/attributes.json +3889 -3885
- package/dist/json/importMap-labs.json +32 -56
- package/dist/json/importMap.json +180 -156
- package/dist/json/tags.json +7 -6
- package/dist/json/web-types.json +7006 -6996
- package/dist/vuetify-labs.cjs +3071 -3065
- package/dist/vuetify-labs.css +5691 -5661
- package/dist/vuetify-labs.d.ts +8142 -4681
- package/dist/vuetify-labs.esm.js +3071 -3065
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +3071 -3065
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +1218 -160
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +5014 -4715
- package/dist/vuetify.d.ts +6675 -1051
- package/dist/vuetify.esm.js +1218 -160
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +1218 -160
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1224 -1143
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +18 -18
- package/lib/components/VCarousel/VCarousel.d.ts +11 -1
- package/lib/components/VCheckbox/VCheckbox.d.ts +696 -3
- package/lib/components/VCheckbox/VCheckbox.js +5 -2
- package/lib/components/VCheckbox/VCheckbox.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.d.ts +18 -18
- package/lib/components/VFileInput/VFileInput.d.ts +6 -6
- package/lib/components/VList/VListItem.d.ts +3 -3
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.d.ts +18 -18
- package/lib/components/VRadioGroup/VRadioGroup.d.ts +696 -3
- package/lib/components/VRadioGroup/VRadioGroup.js +5 -2
- package/lib/components/VRadioGroup/VRadioGroup.js.map +1 -1
- package/lib/components/VRangeSlider/VRangeSlider.d.ts +696 -3
- package/lib/components/VRangeSlider/VRangeSlider.js +2 -1
- package/lib/components/VRangeSlider/VRangeSlider.js.map +1 -1
- package/lib/components/VSelect/VSelect.d.ts +18 -18
- package/lib/components/VSlider/VSlider.d.ts +696 -3
- package/lib/components/VSlider/VSlider.js +4 -1
- package/lib/components/VSlider/VSlider.js.map +1 -1
- package/lib/components/VStepper/VStepperWindow.d.ts +10 -0
- package/lib/components/VSwitch/VSwitch.d.ts +696 -3
- package/lib/components/VSwitch/VSwitch.js +4 -1
- package/lib/components/VSwitch/VSwitch.js.map +1 -1
- package/lib/components/VTabs/VTabsWindow.d.ts +10 -0
- package/lib/components/VTextField/VTextField.d.ts +6 -6
- package/lib/components/VTextarea/VTextarea.d.ts +6 -6
- package/lib/{labs → components}/VTimePicker/VTimePicker.d.ts +1 -14
- package/lib/{labs → components}/VTimePicker/VTimePicker.js +2 -4
- package/lib/components/VTimePicker/VTimePicker.js.map +1 -0
- package/lib/components/VTimePicker/VTimePickerClock.js.map +1 -0
- package/lib/{labs → components}/VTimePicker/VTimePickerControls.d.ts +0 -26
- package/lib/{labs → components}/VTimePicker/VTimePickerControls.js +3 -7
- package/lib/components/VTimePicker/VTimePickerControls.js.map +1 -0
- package/lib/{labs → components}/VTimePicker/_variables.scss +1 -1
- package/lib/components/VTimePicker/index.js.map +1 -0
- package/lib/components/VTimePicker/shared.js.map +1 -0
- package/lib/components/VTimePicker/util.js.map +1 -0
- package/lib/{labs → components}/VTreeview/VTreeview.d.ts +10 -10
- package/lib/{labs → components}/VTreeview/VTreeview.js +1 -1
- package/lib/components/VTreeview/VTreeview.js.map +1 -0
- package/lib/{labs → components}/VTreeview/VTreeviewChildren.d.ts +22 -22
- package/lib/{labs → components}/VTreeview/VTreeviewChildren.js +1 -1
- package/lib/components/VTreeview/VTreeviewChildren.js.map +1 -0
- package/lib/{labs → components}/VTreeview/VTreeviewGroup.js +2 -2
- package/lib/components/VTreeview/VTreeviewGroup.js.map +1 -0
- package/lib/{labs → components}/VTreeview/VTreeviewItem.d.ts +58 -58
- package/lib/{labs → components}/VTreeview/VTreeviewItem.js +4 -4
- package/lib/components/VTreeview/VTreeviewItem.js.map +1 -0
- package/lib/components/VTreeview/index.js.map +1 -0
- package/lib/components/VTreeview/shared.js.map +1 -0
- package/lib/components/VWindow/VWindow.css +15 -0
- package/lib/components/VWindow/VWindow.d.ts +10 -0
- package/lib/components/VWindow/VWindow.js +8 -2
- package/lib/components/VWindow/VWindow.js.map +1 -1
- package/lib/components/VWindow/VWindow.sass +17 -0
- package/lib/components/VWindow/_variables.scss +1 -0
- package/lib/components/index.d.ts +2 -0
- package/lib/components/index.js +4 -2
- package/lib/components/index.js.map +1 -1
- package/lib/composables/forwardRefs.d.ts +2 -2
- package/lib/composables/forwardRefs.js.map +1 -1
- package/lib/composables/icons.d.ts +1 -1
- package/lib/composables/icons.js.map +1 -1
- package/lib/composables/mask.d.ts +1 -1
- package/lib/composables/mask.js.map +1 -1
- package/lib/composables/theme.d.ts +1 -1
- package/lib/composables/theme.js +2 -4
- package/lib/composables/theme.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/framework.d.ts +68 -68
- package/lib/framework.js +1 -1
- package/lib/labs/VCalendar/VCalendar.d.ts +24 -24
- package/lib/labs/VCalendar/VCalendar.js.map +1 -1
- package/lib/labs/VDateInput/VDateInput.d.ts +18 -18
- package/lib/labs/VMaskInput/VMaskInput.d.ts +18 -18
- package/lib/labs/components.d.ts +0 -2
- package/lib/labs/components.js +0 -2
- package/lib/labs/components.js.map +1 -1
- package/lib/styles/main.css +15 -0
- package/lib/styles/utilities/_index.sass +1 -0
- package/lib/styles/utilities/_pointer-events.sass +16 -0
- package/lib/util/helpers.d.ts +1 -0
- package/lib/util/helpers.js.map +1 -1
- package/package.json +1 -1
- package/lib/labs/VTimePicker/VTimePicker.js.map +0 -1
- package/lib/labs/VTimePicker/VTimePickerClock.js.map +0 -1
- package/lib/labs/VTimePicker/VTimePickerControls.js.map +0 -1
- package/lib/labs/VTimePicker/index.js.map +0 -1
- package/lib/labs/VTimePicker/shared.js.map +0 -1
- package/lib/labs/VTimePicker/util.js.map +0 -1
- package/lib/labs/VTreeview/VTreeview.js.map +0 -1
- package/lib/labs/VTreeview/VTreeviewChildren.js.map +0 -1
- package/lib/labs/VTreeview/VTreeviewGroup.js.map +0 -1
- package/lib/labs/VTreeview/VTreeviewItem.js.map +0 -1
- package/lib/labs/VTreeview/index.js.map +0 -1
- package/lib/labs/VTreeview/shared.js.map +0 -1
- /package/lib/{labs → components}/VTimePicker/VTimePicker.css +0 -0
- /package/lib/{labs → components}/VTimePicker/VTimePicker.sass +0 -0
- /package/lib/{labs → components}/VTimePicker/VTimePickerClock.css +0 -0
- /package/lib/{labs → components}/VTimePicker/VTimePickerClock.d.ts +0 -0
- /package/lib/{labs → components}/VTimePicker/VTimePickerClock.js +0 -0
- /package/lib/{labs → components}/VTimePicker/VTimePickerClock.sass +0 -0
- /package/lib/{labs → components}/VTimePicker/VTimePickerControls.css +0 -0
- /package/lib/{labs → components}/VTimePicker/VTimePickerControls.sass +0 -0
- /package/lib/{labs → components}/VTimePicker/index.d.ts +0 -0
- /package/lib/{labs → components}/VTimePicker/index.js +0 -0
- /package/lib/{labs → components}/VTimePicker/shared.d.ts +0 -0
- /package/lib/{labs → components}/VTimePicker/shared.js +0 -0
- /package/lib/{labs → components}/VTimePicker/util.d.ts +0 -0
- /package/lib/{labs → components}/VTimePicker/util.js +0 -0
- /package/lib/{labs → components}/VTreeview/VTreeviewGroup.d.ts +0 -0
- /package/lib/{labs → components}/VTreeview/VTreeviewItem.css +0 -0
- /package/lib/{labs → components}/VTreeview/VTreeviewItem.sass +0 -0
- /package/lib/{labs → components}/VTreeview/_variables.scss +0 -0
- /package/lib/{labs → components}/VTreeview/index.d.ts +0 -0
- /package/lib/{labs → components}/VTreeview/index.js +0 -0
- /package/lib/{labs → components}/VTreeview/shared.d.ts +0 -0
- /package/lib/{labs → components}/VTreeview/shared.js +0 -0
package/dist/vuetify.cjs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.10-dev.2025-06-
|
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
|
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
|
-
|
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":
|
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
|
-
|
29209
|
-
|
29210
|
-
|
29211
|
-
|
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
|
29239
|
-
|
29240
|
-
|
29241
|
-
|
29242
|
-
|
29243
|
-
|
29244
|
-
|
29245
|
-
|
29246
|
-
|
29247
|
-
|
29248
|
-
|
29249
|
-
|
29250
|
-
|
29251
|
-
|
29252
|
-
|
29253
|
-
|
29254
|
-
|
29255
|
-
|
29256
|
-
|
29257
|
-
|
29258
|
-
|
29259
|
-
|
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-
|
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-
|
30910
|
+
const version = "3.8.10-dev.2025-06-19";
|
29853
30911
|
createVuetify.version = version;
|
29854
30912
|
|
29855
30913
|
exports.blueprints = index;
|