vuetify 3.5.8 → 3.5.9
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/dist/json/attributes.json +419 -7
- package/dist/json/importMap-labs.json +20 -8
- package/dist/json/importMap.json +150 -150
- package/dist/json/tags.json +118 -0
- package/dist/json/web-types.json +1315 -8
- package/dist/vuetify-labs.css +1437 -1420
- package/dist/vuetify-labs.d.ts +3021 -692
- package/dist/vuetify-labs.esm.js +790 -230
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +790 -230
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +592 -591
- package/dist/vuetify.d.ts +569 -68
- package/dist/vuetify.esm.js +220 -20
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +220 -20
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +486 -466
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.mjs +5 -3
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/index.d.mts +138 -6
- package/lib/components/VColorPicker/VColorPickerPreview.css +1 -0
- package/lib/components/VColorPicker/VColorPickerPreview.sass +1 -0
- package/lib/components/VColorPicker/_variables.scss +1 -0
- package/lib/components/VCombobox/VCombobox.mjs +5 -3
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VCombobox/index.d.mts +138 -6
- package/lib/components/VDatePicker/VDatePickerControls.mjs +1 -0
- package/lib/components/VDatePicker/VDatePickerControls.mjs.map +1 -1
- package/lib/components/VList/VList.mjs +8 -2
- package/lib/components/VList/VList.mjs.map +1 -1
- package/lib/components/VList/VListGroup.mjs +3 -1
- package/lib/components/VList/VListGroup.mjs.map +1 -1
- package/lib/components/VList/VListItem.mjs +17 -4
- package/lib/components/VList/VListItem.mjs.map +1 -1
- package/lib/components/VList/index.d.mts +108 -6
- package/lib/components/VSelect/VSelect.mjs +5 -3
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelect/index.d.mts +138 -6
- package/lib/components/index.d.mts +522 -24
- package/lib/composables/nested/activeStrategies.mjs +121 -0
- package/lib/composables/nested/activeStrategies.mjs.map +1 -0
- package/lib/composables/nested/nested.mjs +50 -1
- package/lib/composables/nested/nested.mjs.map +1 -1
- package/lib/composables/nested/selectStrategies.mjs +4 -2
- package/lib/composables/nested/selectStrategies.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +1 -1
- package/lib/iconsets/fa.mjs +2 -0
- package/lib/iconsets/fa.mjs.map +1 -1
- package/lib/iconsets/fa4.mjs +2 -0
- package/lib/iconsets/fa4.mjs.map +1 -1
- package/lib/iconsets/md.mjs +2 -0
- package/lib/iconsets/md.mjs.map +1 -1
- package/lib/iconsets/mdi-svg.mjs +2 -0
- package/lib/iconsets/mdi-svg.mjs.map +1 -1
- package/lib/iconsets/mdi.mjs +2 -0
- package/lib/iconsets/mdi.mjs.map +1 -1
- package/lib/index.d.mts +47 -44
- package/lib/labs/VTreeview/VTreeview.mjs +154 -0
- package/lib/labs/VTreeview/VTreeview.mjs.map +1 -0
- package/lib/labs/VTreeview/VTreeviewChildren.mjs +98 -0
- package/lib/labs/VTreeview/VTreeviewChildren.mjs.map +1 -0
- package/lib/labs/VTreeview/VTreeviewGroup.mjs +48 -0
- package/lib/labs/VTreeview/VTreeviewGroup.mjs.map +1 -0
- package/lib/labs/VTreeview/VTreeviewItem.css +17 -0
- package/lib/labs/VTreeview/VTreeviewItem.mjs +86 -0
- package/lib/labs/VTreeview/VTreeviewItem.mjs.map +1 -0
- package/lib/labs/VTreeview/VTreeviewItem.sass +19 -0
- package/lib/labs/VTreeview/index.d.mts +1975 -0
- package/lib/labs/VTreeview/index.mjs +4 -0
- package/lib/labs/VTreeview/index.mjs.map +1 -0
- package/lib/labs/VTreeview/shared.mjs +4 -0
- package/lib/labs/VTreeview/shared.mjs.map +1 -0
- package/lib/labs/VTreeview/variables.scss +8 -0
- package/lib/labs/components.d.mts +3708 -1773
- package/lib/labs/components.mjs +3 -2
- package/lib/labs/components.mjs.map +1 -1
- package/package.json +2 -2
package/dist/vuetify-labs.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Vuetify v3.5.
|
|
2
|
+
* Vuetify v3.5.9
|
|
3
3
|
* Forged by John Leider
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -4376,6 +4376,8 @@
|
|
|
4376
4376
|
plus: 'mdi-plus',
|
|
4377
4377
|
minus: 'mdi-minus',
|
|
4378
4378
|
calendar: 'mdi-calendar',
|
|
4379
|
+
treeviewCollapse: 'mdi-menu-down',
|
|
4380
|
+
treeviewExpand: 'mdi-menu-right',
|
|
4379
4381
|
eyeDropper: 'mdi-eyedropper'
|
|
4380
4382
|
};
|
|
4381
4383
|
const mdi = {
|
|
@@ -7762,6 +7764,126 @@
|
|
|
7762
7764
|
return vue.inject(ListKey, null);
|
|
7763
7765
|
}
|
|
7764
7766
|
|
|
7767
|
+
/* eslint-disable sonarjs/no-identical-functions */
|
|
7768
|
+
// Utilities
|
|
7769
|
+
const independentActiveStrategy = mandatory => {
|
|
7770
|
+
const strategy = {
|
|
7771
|
+
activate: _ref => {
|
|
7772
|
+
let {
|
|
7773
|
+
id,
|
|
7774
|
+
value,
|
|
7775
|
+
activated
|
|
7776
|
+
} = _ref;
|
|
7777
|
+
id = vue.toRaw(id);
|
|
7778
|
+
|
|
7779
|
+
// When mandatory and we're trying to deselect when id
|
|
7780
|
+
// is the only currently selected item then do nothing
|
|
7781
|
+
if (mandatory && !value && activated.size === 1 && activated.has(id)) return activated;
|
|
7782
|
+
if (value) {
|
|
7783
|
+
activated.add(id);
|
|
7784
|
+
} else {
|
|
7785
|
+
activated.delete(id);
|
|
7786
|
+
}
|
|
7787
|
+
return activated;
|
|
7788
|
+
},
|
|
7789
|
+
in: (v, children, parents) => {
|
|
7790
|
+
let set = new Set();
|
|
7791
|
+
for (const id of v || []) {
|
|
7792
|
+
set = strategy.activate({
|
|
7793
|
+
id,
|
|
7794
|
+
value: true,
|
|
7795
|
+
activated: new Set(set),
|
|
7796
|
+
children,
|
|
7797
|
+
parents
|
|
7798
|
+
});
|
|
7799
|
+
}
|
|
7800
|
+
return set;
|
|
7801
|
+
},
|
|
7802
|
+
out: v => {
|
|
7803
|
+
return Array.from(v);
|
|
7804
|
+
}
|
|
7805
|
+
};
|
|
7806
|
+
return strategy;
|
|
7807
|
+
};
|
|
7808
|
+
const independentSingleActiveStrategy = mandatory => {
|
|
7809
|
+
const parentStrategy = independentActiveStrategy(mandatory);
|
|
7810
|
+
const strategy = {
|
|
7811
|
+
activate: _ref2 => {
|
|
7812
|
+
let {
|
|
7813
|
+
activated,
|
|
7814
|
+
id,
|
|
7815
|
+
...rest
|
|
7816
|
+
} = _ref2;
|
|
7817
|
+
id = vue.toRaw(id);
|
|
7818
|
+
const singleSelected = activated.has(id) ? new Set([id]) : new Set();
|
|
7819
|
+
return parentStrategy.activate({
|
|
7820
|
+
...rest,
|
|
7821
|
+
id,
|
|
7822
|
+
activated: singleSelected
|
|
7823
|
+
});
|
|
7824
|
+
},
|
|
7825
|
+
in: (v, children, parents) => {
|
|
7826
|
+
let set = new Set();
|
|
7827
|
+
if (v?.length) {
|
|
7828
|
+
set = parentStrategy.in(v.slice(0, 1), children, parents);
|
|
7829
|
+
}
|
|
7830
|
+
return set;
|
|
7831
|
+
},
|
|
7832
|
+
out: (v, children, parents) => {
|
|
7833
|
+
return parentStrategy.out(v, children, parents);
|
|
7834
|
+
}
|
|
7835
|
+
};
|
|
7836
|
+
return strategy;
|
|
7837
|
+
};
|
|
7838
|
+
const leafActiveStrategy = mandatory => {
|
|
7839
|
+
const parentStrategy = independentActiveStrategy(mandatory);
|
|
7840
|
+
const strategy = {
|
|
7841
|
+
activate: _ref3 => {
|
|
7842
|
+
let {
|
|
7843
|
+
id,
|
|
7844
|
+
activated,
|
|
7845
|
+
children,
|
|
7846
|
+
...rest
|
|
7847
|
+
} = _ref3;
|
|
7848
|
+
id = vue.toRaw(id);
|
|
7849
|
+
if (children.has(id)) return activated;
|
|
7850
|
+
return parentStrategy.activate({
|
|
7851
|
+
id,
|
|
7852
|
+
activated,
|
|
7853
|
+
children,
|
|
7854
|
+
...rest
|
|
7855
|
+
});
|
|
7856
|
+
},
|
|
7857
|
+
in: parentStrategy.in,
|
|
7858
|
+
out: parentStrategy.out
|
|
7859
|
+
};
|
|
7860
|
+
return strategy;
|
|
7861
|
+
};
|
|
7862
|
+
const leafSingleActiveStrategy = mandatory => {
|
|
7863
|
+
const parentStrategy = independentSingleActiveStrategy(mandatory);
|
|
7864
|
+
const strategy = {
|
|
7865
|
+
activate: _ref4 => {
|
|
7866
|
+
let {
|
|
7867
|
+
id,
|
|
7868
|
+
activated,
|
|
7869
|
+
children,
|
|
7870
|
+
...rest
|
|
7871
|
+
} = _ref4;
|
|
7872
|
+
id = vue.toRaw(id);
|
|
7873
|
+
if (children.has(id)) return activated;
|
|
7874
|
+
return parentStrategy.activate({
|
|
7875
|
+
id,
|
|
7876
|
+
activated,
|
|
7877
|
+
children,
|
|
7878
|
+
...rest
|
|
7879
|
+
});
|
|
7880
|
+
},
|
|
7881
|
+
in: parentStrategy.in,
|
|
7882
|
+
out: parentStrategy.out
|
|
7883
|
+
};
|
|
7884
|
+
return strategy;
|
|
7885
|
+
};
|
|
7886
|
+
|
|
7765
7887
|
const singleOpenStrategy = {
|
|
7766
7888
|
open: _ref => {
|
|
7767
7889
|
let {
|
|
@@ -7846,7 +7968,8 @@
|
|
|
7846
7968
|
if (mandatory && !value) {
|
|
7847
7969
|
const on = Array.from(selected.entries()).reduce((arr, _ref2) => {
|
|
7848
7970
|
let [key, value] = _ref2;
|
|
7849
|
-
|
|
7971
|
+
if (value === 'on') arr.push(key);
|
|
7972
|
+
return arr;
|
|
7850
7973
|
}, []);
|
|
7851
7974
|
if (on.length === 1 && on[0] === id) return selected;
|
|
7852
7975
|
}
|
|
@@ -7988,7 +8111,8 @@
|
|
|
7988
8111
|
if (mandatory && !value) {
|
|
7989
8112
|
const on = Array.from(selected.entries()).reduce((arr, _ref7) => {
|
|
7990
8113
|
let [key, value] = _ref7;
|
|
7991
|
-
|
|
8114
|
+
if (value === 'on') arr.push(key);
|
|
8115
|
+
return arr;
|
|
7992
8116
|
}, []);
|
|
7993
8117
|
if (on.length === 0) return original;
|
|
7994
8118
|
}
|
|
@@ -8032,16 +8156,24 @@
|
|
|
8032
8156
|
children: vue.ref(new Map()),
|
|
8033
8157
|
open: () => null,
|
|
8034
8158
|
openOnSelect: () => null,
|
|
8159
|
+
activate: () => null,
|
|
8035
8160
|
select: () => null,
|
|
8161
|
+
activatable: vue.ref(false),
|
|
8162
|
+
selectable: vue.ref(false),
|
|
8036
8163
|
opened: vue.ref(new Set()),
|
|
8164
|
+
activated: vue.ref(new Set()),
|
|
8037
8165
|
selected: vue.ref(new Map()),
|
|
8038
8166
|
selectedValues: vue.ref([])
|
|
8039
8167
|
}
|
|
8040
8168
|
};
|
|
8041
8169
|
const makeNestedProps = propsFactory({
|
|
8170
|
+
activatable: Boolean,
|
|
8171
|
+
selectable: Boolean,
|
|
8172
|
+
activeStrategy: [String, Function],
|
|
8042
8173
|
selectStrategy: [String, Function],
|
|
8043
8174
|
openStrategy: [String, Object],
|
|
8044
8175
|
opened: Array,
|
|
8176
|
+
activated: Array,
|
|
8045
8177
|
selected: Array,
|
|
8046
8178
|
mandatory: Boolean
|
|
8047
8179
|
}, 'nested');
|
|
@@ -8050,6 +8182,20 @@
|
|
|
8050
8182
|
const children = vue.ref(new Map());
|
|
8051
8183
|
const parents = vue.ref(new Map());
|
|
8052
8184
|
const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(v), v => [...v.values()]);
|
|
8185
|
+
const activeStrategy = vue.computed(() => {
|
|
8186
|
+
if (typeof props.activeStrategy === 'object') return props.activeStrategy;
|
|
8187
|
+
switch (props.activeStrategy) {
|
|
8188
|
+
case 'leaf':
|
|
8189
|
+
return leafActiveStrategy(props.mandatory);
|
|
8190
|
+
case 'single-leaf':
|
|
8191
|
+
return leafSingleActiveStrategy(props.mandatory);
|
|
8192
|
+
case 'independent':
|
|
8193
|
+
return independentActiveStrategy(props.mandatory);
|
|
8194
|
+
case 'single-independent':
|
|
8195
|
+
default:
|
|
8196
|
+
return independentSingleActiveStrategy(props.mandatory);
|
|
8197
|
+
}
|
|
8198
|
+
});
|
|
8053
8199
|
const selectStrategy = vue.computed(() => {
|
|
8054
8200
|
if (typeof props.selectStrategy === 'object') return props.selectStrategy;
|
|
8055
8201
|
switch (props.selectStrategy) {
|
|
@@ -8078,6 +8224,7 @@
|
|
|
8078
8224
|
return multipleOpenStrategy;
|
|
8079
8225
|
}
|
|
8080
8226
|
});
|
|
8227
|
+
const activated = useProxiedModel(props, 'activated', props.activated, v => activeStrategy.value.in(v, children.value, parents.value), v => activeStrategy.value.out(v, children.value, parents.value));
|
|
8081
8228
|
const selected = useProxiedModel(props, 'selected', props.selected, v => selectStrategy.value.in(v, children.value, parents.value), v => selectStrategy.value.out(v, children.value, parents.value));
|
|
8082
8229
|
vue.onBeforeUnmount(() => {
|
|
8083
8230
|
isUnmounted = true;
|
|
@@ -8096,6 +8243,9 @@
|
|
|
8096
8243
|
id: vue.shallowRef(),
|
|
8097
8244
|
root: {
|
|
8098
8245
|
opened,
|
|
8246
|
+
activatable: vue.toRef(props, 'activatable'),
|
|
8247
|
+
selectable: vue.toRef(props, 'selectable'),
|
|
8248
|
+
activated,
|
|
8099
8249
|
selected,
|
|
8100
8250
|
selectedValues: vue.computed(() => {
|
|
8101
8251
|
const arr = [];
|
|
@@ -8169,6 +8319,26 @@
|
|
|
8169
8319
|
newSelected && (selected.value = newSelected);
|
|
8170
8320
|
nested.root.openOnSelect(id, value, event);
|
|
8171
8321
|
},
|
|
8322
|
+
activate: (id, value, event) => {
|
|
8323
|
+
if (!props.activatable) {
|
|
8324
|
+
return nested.root.select(id, true, event);
|
|
8325
|
+
}
|
|
8326
|
+
vm.emit('click:activate', {
|
|
8327
|
+
id,
|
|
8328
|
+
value,
|
|
8329
|
+
path: getPath(id),
|
|
8330
|
+
event
|
|
8331
|
+
});
|
|
8332
|
+
const newActivated = activeStrategy.value.activate({
|
|
8333
|
+
id,
|
|
8334
|
+
value,
|
|
8335
|
+
activated: new Set(activated.value),
|
|
8336
|
+
children: children.value,
|
|
8337
|
+
parents: parents.value,
|
|
8338
|
+
event
|
|
8339
|
+
});
|
|
8340
|
+
newActivated && (activated.value = newActivated);
|
|
8341
|
+
},
|
|
8172
8342
|
children,
|
|
8173
8343
|
parents
|
|
8174
8344
|
}
|
|
@@ -8187,6 +8357,8 @@
|
|
|
8187
8357
|
openOnSelect: (open, e) => parent.root.openOnSelect(computedId.value, open, e),
|
|
8188
8358
|
isOpen: vue.computed(() => parent.root.opened.value.has(computedId.value)),
|
|
8189
8359
|
parent: vue.computed(() => parent.root.parents.value.get(computedId.value)),
|
|
8360
|
+
activate: (activated, e) => parent.root.activate(computedId.value, activated, e),
|
|
8361
|
+
isActivated: vue.computed(() => parent.root.activated.value.has(vue.toRaw(computedId.value))),
|
|
8190
8362
|
select: (selected, e) => parent.root.select(computedId.value, selected, e),
|
|
8191
8363
|
isSelected: vue.computed(() => parent.root.selected.value.get(vue.toRaw(computedId.value)) === 'on'),
|
|
8192
8364
|
isIndeterminate: vue.computed(() => parent.root.selected.value.get(computedId.value) === 'indeterminate'),
|
|
@@ -8309,7 +8481,9 @@
|
|
|
8309
8481
|
}, [slots.default?.()]), [[vue.vShow, isOpen.value]])]
|
|
8310
8482
|
})]
|
|
8311
8483
|
}));
|
|
8312
|
-
return {
|
|
8484
|
+
return {
|
|
8485
|
+
isOpen
|
|
8486
|
+
};
|
|
8313
8487
|
}
|
|
8314
8488
|
});
|
|
8315
8489
|
|
|
@@ -8382,6 +8556,8 @@
|
|
|
8382
8556
|
const link = useLink(props, attrs);
|
|
8383
8557
|
const id = vue.computed(() => props.value === undefined ? link.href.value : props.value);
|
|
8384
8558
|
const {
|
|
8559
|
+
activate,
|
|
8560
|
+
isActivated,
|
|
8385
8561
|
select,
|
|
8386
8562
|
isSelected,
|
|
8387
8563
|
isIndeterminate,
|
|
@@ -8391,9 +8567,9 @@
|
|
|
8391
8567
|
openOnSelect
|
|
8392
8568
|
} = useNestedItem(id, false);
|
|
8393
8569
|
const list = useList();
|
|
8394
|
-
const isActive = vue.computed(() => props.active !== false && (props.active || link.isActive?.value || isSelected.value));
|
|
8570
|
+
const isActive = vue.computed(() => props.active !== false && (props.active || link.isActive?.value || (root.activatable.value ? isActivated.value : isSelected.value)));
|
|
8395
8571
|
const isLink = vue.computed(() => props.link !== false && link.isLink.value);
|
|
8396
|
-
const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || props.value != null
|
|
8572
|
+
const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || !!list && (root.selectable.value || root.activatable.value || props.value != null)));
|
|
8397
8573
|
const roundedProps = vue.computed(() => props.rounded || props.nav);
|
|
8398
8574
|
const color = vue.computed(() => props.color ?? props.activeColor);
|
|
8399
8575
|
const variantProps = vue.computed(() => ({
|
|
@@ -8444,7 +8620,13 @@
|
|
|
8444
8620
|
emit('click', e);
|
|
8445
8621
|
if (isGroupActivator || !isClickable.value) return;
|
|
8446
8622
|
link.navigate?.(e);
|
|
8447
|
-
|
|
8623
|
+
if (root.activatable) {
|
|
8624
|
+
activate(!isActivated.value, e);
|
|
8625
|
+
} else if (root.selectable) {
|
|
8626
|
+
select(!isSelected.value, e);
|
|
8627
|
+
} else if (props.value != null) {
|
|
8628
|
+
select(!isSelected.value, e);
|
|
8629
|
+
}
|
|
8448
8630
|
}
|
|
8449
8631
|
function onKeyDown(e) {
|
|
8450
8632
|
if (e.key === 'Enter' || e.key === ' ') {
|
|
@@ -8560,7 +8742,12 @@
|
|
|
8560
8742
|
}, null)])]
|
|
8561
8743
|
}), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]);
|
|
8562
8744
|
});
|
|
8563
|
-
return {
|
|
8745
|
+
return {
|
|
8746
|
+
isGroupActivator,
|
|
8747
|
+
isSelected,
|
|
8748
|
+
list,
|
|
8749
|
+
select
|
|
8750
|
+
};
|
|
8564
8751
|
}
|
|
8565
8752
|
});
|
|
8566
8753
|
|
|
@@ -8902,8 +9089,10 @@
|
|
|
8902
9089
|
props: makeVListProps(),
|
|
8903
9090
|
emits: {
|
|
8904
9091
|
'update:selected': value => true,
|
|
9092
|
+
'update:activated': value => true,
|
|
8905
9093
|
'update:opened': value => true,
|
|
8906
9094
|
'click:open': value => true,
|
|
9095
|
+
'click:activate': value => true,
|
|
8907
9096
|
'click:select': value => true
|
|
8908
9097
|
},
|
|
8909
9098
|
setup(props, _ref) {
|
|
@@ -8936,7 +9125,9 @@
|
|
|
8936
9125
|
roundedClasses
|
|
8937
9126
|
} = useRounded(props);
|
|
8938
9127
|
const {
|
|
9128
|
+
children,
|
|
8939
9129
|
open,
|
|
9130
|
+
parents,
|
|
8940
9131
|
select
|
|
8941
9132
|
} = useNested(props);
|
|
8942
9133
|
const lineClasses = vue.computed(() => props.lines ? `v-list--${props.lines}-line` : undefined);
|
|
@@ -9026,7 +9217,9 @@
|
|
|
9026
9217
|
return {
|
|
9027
9218
|
open,
|
|
9028
9219
|
select,
|
|
9029
|
-
focus
|
|
9220
|
+
focus,
|
|
9221
|
+
children,
|
|
9222
|
+
parents
|
|
9030
9223
|
};
|
|
9031
9224
|
}
|
|
9032
9225
|
});
|
|
@@ -11906,9 +12099,11 @@
|
|
|
11906
12099
|
});
|
|
11907
12100
|
}
|
|
11908
12101
|
});
|
|
11909
|
-
vue.watch(() => props.items,
|
|
11910
|
-
if (
|
|
11911
|
-
|
|
12102
|
+
vue.watch(() => props.items, (newVal, oldVal) => {
|
|
12103
|
+
if (menu.value) return;
|
|
12104
|
+
if (isFocused.value && !oldVal.length && newVal.length) {
|
|
12105
|
+
menu.value = true;
|
|
12106
|
+
}
|
|
11912
12107
|
});
|
|
11913
12108
|
useRender(() => {
|
|
11914
12109
|
const hasChips = !!(props.chips || slots.chip);
|
|
@@ -12468,9 +12663,11 @@
|
|
|
12468
12663
|
});
|
|
12469
12664
|
}
|
|
12470
12665
|
});
|
|
12471
|
-
vue.watch(() => props.items,
|
|
12472
|
-
if (
|
|
12473
|
-
|
|
12666
|
+
vue.watch(() => props.items, (newVal, oldVal) => {
|
|
12667
|
+
if (menu.value) return;
|
|
12668
|
+
if (isFocused.value && !oldVal.length && newVal.length) {
|
|
12669
|
+
menu.value = true;
|
|
12670
|
+
}
|
|
12474
12671
|
});
|
|
12475
12672
|
useRender(() => {
|
|
12476
12673
|
const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
|
|
@@ -16273,9 +16470,11 @@
|
|
|
16273
16470
|
});
|
|
16274
16471
|
}
|
|
16275
16472
|
});
|
|
16276
|
-
vue.watch(() => props.items,
|
|
16277
|
-
if (
|
|
16278
|
-
|
|
16473
|
+
vue.watch(() => props.items, (newVal, oldVal) => {
|
|
16474
|
+
if (menu.value) return;
|
|
16475
|
+
if (isFocused.value && !oldVal.length && newVal.length) {
|
|
16476
|
+
menu.value = true;
|
|
16477
|
+
}
|
|
16279
16478
|
});
|
|
16280
16479
|
useRender(() => {
|
|
16281
16480
|
const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
|
|
@@ -20296,6 +20495,7 @@
|
|
|
20296
20495
|
emit('click:month');
|
|
20297
20496
|
}
|
|
20298
20497
|
useRender(() => {
|
|
20498
|
+
// TODO: add slot support and scope defaults
|
|
20299
20499
|
return vue.createVNode("div", {
|
|
20300
20500
|
"class": ['v-date-picker-controls']
|
|
20301
20501
|
}, [vue.createVNode(VBtn, {
|
|
@@ -25402,78 +25602,6 @@
|
|
|
25402
25602
|
}
|
|
25403
25603
|
});
|
|
25404
25604
|
|
|
25405
|
-
// Types
|
|
25406
|
-
|
|
25407
|
-
const makeVConfirmEditProps = propsFactory({
|
|
25408
|
-
modelValue: null,
|
|
25409
|
-
color: String,
|
|
25410
|
-
cancelText: {
|
|
25411
|
-
type: String,
|
|
25412
|
-
default: '$vuetify.confirmEdit.cancel'
|
|
25413
|
-
},
|
|
25414
|
-
okText: {
|
|
25415
|
-
type: String,
|
|
25416
|
-
default: '$vuetify.confirmEdit.ok'
|
|
25417
|
-
}
|
|
25418
|
-
}, 'VConfirmEdit');
|
|
25419
|
-
const VConfirmEdit = genericComponent()({
|
|
25420
|
-
name: 'VConfirmEdit',
|
|
25421
|
-
props: makeVConfirmEditProps(),
|
|
25422
|
-
emits: {
|
|
25423
|
-
cancel: () => true,
|
|
25424
|
-
save: value => true,
|
|
25425
|
-
'update:modelValue': value => true
|
|
25426
|
-
},
|
|
25427
|
-
setup(props, _ref) {
|
|
25428
|
-
let {
|
|
25429
|
-
emit,
|
|
25430
|
-
slots
|
|
25431
|
-
} = _ref;
|
|
25432
|
-
const model = useProxiedModel(props, 'modelValue');
|
|
25433
|
-
const internalModel = vue.ref();
|
|
25434
|
-
vue.watchEffect(() => {
|
|
25435
|
-
internalModel.value = structuredClone(vue.toRaw(model.value));
|
|
25436
|
-
});
|
|
25437
|
-
const {
|
|
25438
|
-
t
|
|
25439
|
-
} = useLocale();
|
|
25440
|
-
const isPristine = vue.computed(() => {
|
|
25441
|
-
return deepEqual(model.value, internalModel.value);
|
|
25442
|
-
});
|
|
25443
|
-
function save() {
|
|
25444
|
-
model.value = internalModel.value;
|
|
25445
|
-
emit('save', internalModel.value);
|
|
25446
|
-
}
|
|
25447
|
-
function cancel() {
|
|
25448
|
-
internalModel.value = structuredClone(vue.toRaw(model.value));
|
|
25449
|
-
emit('cancel');
|
|
25450
|
-
}
|
|
25451
|
-
let actionsUsed = false;
|
|
25452
|
-
useRender(() => {
|
|
25453
|
-
const actions = vue.createVNode(vue.Fragment, null, [vue.createVNode(VBtn, {
|
|
25454
|
-
"disabled": isPristine.value,
|
|
25455
|
-
"variant": "text",
|
|
25456
|
-
"color": props.color,
|
|
25457
|
-
"onClick": cancel,
|
|
25458
|
-
"text": t(props.cancelText)
|
|
25459
|
-
}, null), vue.createVNode(VBtn, {
|
|
25460
|
-
"disabled": isPristine.value,
|
|
25461
|
-
"variant": "text",
|
|
25462
|
-
"color": props.color,
|
|
25463
|
-
"onClick": save,
|
|
25464
|
-
"text": t(props.okText)
|
|
25465
|
-
}, null)]);
|
|
25466
|
-
return vue.createVNode(vue.Fragment, null, [slots.default?.({
|
|
25467
|
-
model: internalModel,
|
|
25468
|
-
get actions() {
|
|
25469
|
-
actionsUsed = true;
|
|
25470
|
-
return actions;
|
|
25471
|
-
}
|
|
25472
|
-
}), !actionsUsed && actions]);
|
|
25473
|
-
});
|
|
25474
|
-
}
|
|
25475
|
-
});
|
|
25476
|
-
|
|
25477
25605
|
const makeVCalendarIntervalEventProps = propsFactory({
|
|
25478
25606
|
allDay: Boolean,
|
|
25479
25607
|
interval: Object,
|
|
@@ -25945,45 +26073,248 @@
|
|
|
25945
26073
|
}
|
|
25946
26074
|
});
|
|
25947
26075
|
|
|
25948
|
-
|
|
25949
|
-
|
|
25950
|
-
|
|
25951
|
-
|
|
25952
|
-
|
|
26076
|
+
// Types
|
|
26077
|
+
|
|
26078
|
+
const makeVConfirmEditProps = propsFactory({
|
|
26079
|
+
modelValue: null,
|
|
26080
|
+
color: String,
|
|
26081
|
+
cancelText: {
|
|
25953
26082
|
type: String,
|
|
25954
|
-
default: '
|
|
25955
|
-
},
|
|
25956
|
-
offset: Boolean,
|
|
25957
|
-
modelValue: {
|
|
25958
|
-
type: Boolean,
|
|
25959
|
-
default: true
|
|
26083
|
+
default: '$vuetify.confirmEdit.cancel'
|
|
25960
26084
|
},
|
|
25961
|
-
|
|
25962
|
-
|
|
25963
|
-
|
|
25964
|
-
|
|
25965
|
-
|
|
25966
|
-
|
|
25967
|
-
|
|
25968
|
-
|
|
25969
|
-
const VFab = genericComponent()({
|
|
25970
|
-
name: 'VFab',
|
|
25971
|
-
props: makeVFabProps(),
|
|
26085
|
+
okText: {
|
|
26086
|
+
type: String,
|
|
26087
|
+
default: '$vuetify.confirmEdit.ok'
|
|
26088
|
+
}
|
|
26089
|
+
}, 'VConfirmEdit');
|
|
26090
|
+
const VConfirmEdit = genericComponent()({
|
|
26091
|
+
name: 'VConfirmEdit',
|
|
26092
|
+
props: makeVConfirmEditProps(),
|
|
25972
26093
|
emits: {
|
|
26094
|
+
cancel: () => true,
|
|
26095
|
+
save: value => true,
|
|
25973
26096
|
'update:modelValue': value => true
|
|
25974
26097
|
},
|
|
25975
26098
|
setup(props, _ref) {
|
|
25976
26099
|
let {
|
|
26100
|
+
emit,
|
|
25977
26101
|
slots
|
|
25978
26102
|
} = _ref;
|
|
25979
26103
|
const model = useProxiedModel(props, 'modelValue');
|
|
25980
|
-
const
|
|
25981
|
-
|
|
26104
|
+
const internalModel = vue.ref();
|
|
26105
|
+
vue.watchEffect(() => {
|
|
26106
|
+
internalModel.value = structuredClone(vue.toRaw(model.value));
|
|
26107
|
+
});
|
|
25982
26108
|
const {
|
|
25983
|
-
|
|
25984
|
-
} =
|
|
25985
|
-
|
|
25986
|
-
|
|
26109
|
+
t
|
|
26110
|
+
} = useLocale();
|
|
26111
|
+
const isPristine = vue.computed(() => {
|
|
26112
|
+
return deepEqual(model.value, internalModel.value);
|
|
26113
|
+
});
|
|
26114
|
+
function save() {
|
|
26115
|
+
model.value = internalModel.value;
|
|
26116
|
+
emit('save', internalModel.value);
|
|
26117
|
+
}
|
|
26118
|
+
function cancel() {
|
|
26119
|
+
internalModel.value = structuredClone(vue.toRaw(model.value));
|
|
26120
|
+
emit('cancel');
|
|
26121
|
+
}
|
|
26122
|
+
let actionsUsed = false;
|
|
26123
|
+
useRender(() => {
|
|
26124
|
+
const actions = vue.createVNode(vue.Fragment, null, [vue.createVNode(VBtn, {
|
|
26125
|
+
"disabled": isPristine.value,
|
|
26126
|
+
"variant": "text",
|
|
26127
|
+
"color": props.color,
|
|
26128
|
+
"onClick": cancel,
|
|
26129
|
+
"text": t(props.cancelText)
|
|
26130
|
+
}, null), vue.createVNode(VBtn, {
|
|
26131
|
+
"disabled": isPristine.value,
|
|
26132
|
+
"variant": "text",
|
|
26133
|
+
"color": props.color,
|
|
26134
|
+
"onClick": save,
|
|
26135
|
+
"text": t(props.okText)
|
|
26136
|
+
}, null)]);
|
|
26137
|
+
return vue.createVNode(vue.Fragment, null, [slots.default?.({
|
|
26138
|
+
model: internalModel,
|
|
26139
|
+
get actions() {
|
|
26140
|
+
actionsUsed = true;
|
|
26141
|
+
return actions;
|
|
26142
|
+
}
|
|
26143
|
+
}), !actionsUsed && actions]);
|
|
26144
|
+
});
|
|
26145
|
+
}
|
|
26146
|
+
});
|
|
26147
|
+
|
|
26148
|
+
// Types
|
|
26149
|
+
|
|
26150
|
+
// Types
|
|
26151
|
+
|
|
26152
|
+
const makeVEmptyStateProps = propsFactory({
|
|
26153
|
+
actionText: String,
|
|
26154
|
+
bgColor: String,
|
|
26155
|
+
color: String,
|
|
26156
|
+
icon: IconValue,
|
|
26157
|
+
image: String,
|
|
26158
|
+
justify: {
|
|
26159
|
+
type: String,
|
|
26160
|
+
default: 'center'
|
|
26161
|
+
},
|
|
26162
|
+
headline: String,
|
|
26163
|
+
title: String,
|
|
26164
|
+
text: String,
|
|
26165
|
+
textWidth: {
|
|
26166
|
+
type: [Number, String],
|
|
26167
|
+
default: 500
|
|
26168
|
+
},
|
|
26169
|
+
href: String,
|
|
26170
|
+
to: String,
|
|
26171
|
+
...makeComponentProps(),
|
|
26172
|
+
...makeDimensionProps(),
|
|
26173
|
+
...makeSizeProps({
|
|
26174
|
+
size: undefined
|
|
26175
|
+
}),
|
|
26176
|
+
...makeThemeProps()
|
|
26177
|
+
}, 'VEmptyState');
|
|
26178
|
+
const VEmptyState = genericComponent()({
|
|
26179
|
+
name: 'VEmptyState',
|
|
26180
|
+
props: makeVEmptyStateProps(),
|
|
26181
|
+
emits: {
|
|
26182
|
+
'click:action': e => true
|
|
26183
|
+
},
|
|
26184
|
+
setup(props, _ref) {
|
|
26185
|
+
let {
|
|
26186
|
+
emit,
|
|
26187
|
+
slots
|
|
26188
|
+
} = _ref;
|
|
26189
|
+
const {
|
|
26190
|
+
themeClasses
|
|
26191
|
+
} = provideTheme(props);
|
|
26192
|
+
const {
|
|
26193
|
+
backgroundColorClasses,
|
|
26194
|
+
backgroundColorStyles
|
|
26195
|
+
} = useBackgroundColor(vue.toRef(props, 'bgColor'));
|
|
26196
|
+
const {
|
|
26197
|
+
dimensionStyles
|
|
26198
|
+
} = useDimension(props);
|
|
26199
|
+
function onClickAction(e) {
|
|
26200
|
+
emit('click:action', e);
|
|
26201
|
+
}
|
|
26202
|
+
useRender(() => {
|
|
26203
|
+
const hasActions = !!(slots.actions || props.actionText);
|
|
26204
|
+
const hasHeadline = !!(slots.headline || props.headline);
|
|
26205
|
+
const hasTitle = !!(slots.title || props.title);
|
|
26206
|
+
const hasText = !!(slots.text || props.text);
|
|
26207
|
+
const hasMedia = !!(slots.media || props.image || props.icon);
|
|
26208
|
+
const size = props.size || (props.image ? 200 : 96);
|
|
26209
|
+
return vue.createVNode("div", {
|
|
26210
|
+
"class": ['v-empty-state', {
|
|
26211
|
+
[`v-empty-state--${props.justify}`]: true
|
|
26212
|
+
}, themeClasses.value, backgroundColorClasses.value, props.class],
|
|
26213
|
+
"style": [backgroundColorStyles.value, dimensionStyles.value, props.style]
|
|
26214
|
+
}, [hasMedia && vue.createVNode("div", {
|
|
26215
|
+
"key": "media",
|
|
26216
|
+
"class": "v-empty-state__media"
|
|
26217
|
+
}, [!slots.media ? vue.createVNode(vue.Fragment, null, [props.image ? vue.createVNode(VImg, {
|
|
26218
|
+
"key": "image",
|
|
26219
|
+
"src": props.image,
|
|
26220
|
+
"height": size
|
|
26221
|
+
}, null) : props.icon ? vue.createVNode(VIcon, {
|
|
26222
|
+
"key": "icon",
|
|
26223
|
+
"size": size,
|
|
26224
|
+
"icon": props.icon
|
|
26225
|
+
}, null) : undefined]) : vue.createVNode(VDefaultsProvider, {
|
|
26226
|
+
"key": "media-defaults",
|
|
26227
|
+
"defaults": {
|
|
26228
|
+
VImg: {
|
|
26229
|
+
src: props.image,
|
|
26230
|
+
height: size
|
|
26231
|
+
},
|
|
26232
|
+
VIcon: {
|
|
26233
|
+
size,
|
|
26234
|
+
icon: props.icon
|
|
26235
|
+
}
|
|
26236
|
+
}
|
|
26237
|
+
}, {
|
|
26238
|
+
default: () => [slots.media()]
|
|
26239
|
+
})]), hasHeadline && vue.createVNode("div", {
|
|
26240
|
+
"key": "headline",
|
|
26241
|
+
"class": "v-empty-state__headline"
|
|
26242
|
+
}, [slots.headline?.() ?? props.headline]), hasTitle && vue.createVNode("div", {
|
|
26243
|
+
"key": "title",
|
|
26244
|
+
"class": "v-empty-state__title"
|
|
26245
|
+
}, [slots.title?.() ?? props.title]), hasText && vue.createVNode("div", {
|
|
26246
|
+
"key": "text",
|
|
26247
|
+
"class": "v-empty-state__text",
|
|
26248
|
+
"style": {
|
|
26249
|
+
maxWidth: convertToUnit(props.textWidth)
|
|
26250
|
+
}
|
|
26251
|
+
}, [slots.text?.() ?? props.text]), slots.default && vue.createVNode("div", {
|
|
26252
|
+
"key": "content",
|
|
26253
|
+
"class": "v-empty-state__content"
|
|
26254
|
+
}, [slots.default()]), hasActions && vue.createVNode("div", {
|
|
26255
|
+
"key": "actions",
|
|
26256
|
+
"class": "v-empty-state__actions"
|
|
26257
|
+
}, [vue.createVNode(VDefaultsProvider, {
|
|
26258
|
+
"defaults": {
|
|
26259
|
+
VBtn: {
|
|
26260
|
+
class: 'v-empty-state__action-btn',
|
|
26261
|
+
color: props.color,
|
|
26262
|
+
text: props.actionText
|
|
26263
|
+
}
|
|
26264
|
+
}
|
|
26265
|
+
}, {
|
|
26266
|
+
default: () => [slots.actions?.({
|
|
26267
|
+
props: {
|
|
26268
|
+
onClick: onClickAction
|
|
26269
|
+
}
|
|
26270
|
+
}) ?? vue.createVNode(VBtn, {
|
|
26271
|
+
"onClick": onClickAction
|
|
26272
|
+
}, null)]
|
|
26273
|
+
})])]);
|
|
26274
|
+
});
|
|
26275
|
+
return {};
|
|
26276
|
+
}
|
|
26277
|
+
});
|
|
26278
|
+
|
|
26279
|
+
const makeVFabProps = propsFactory({
|
|
26280
|
+
app: Boolean,
|
|
26281
|
+
appear: Boolean,
|
|
26282
|
+
extended: Boolean,
|
|
26283
|
+
location: {
|
|
26284
|
+
type: String,
|
|
26285
|
+
default: 'bottom end'
|
|
26286
|
+
},
|
|
26287
|
+
offset: Boolean,
|
|
26288
|
+
modelValue: {
|
|
26289
|
+
type: Boolean,
|
|
26290
|
+
default: true
|
|
26291
|
+
},
|
|
26292
|
+
...omit(makeVBtnProps({
|
|
26293
|
+
active: true
|
|
26294
|
+
}), ['location']),
|
|
26295
|
+
...makeLayoutItemProps(),
|
|
26296
|
+
...makeTransitionProps({
|
|
26297
|
+
transition: 'fab-transition'
|
|
26298
|
+
})
|
|
26299
|
+
}, 'VFab');
|
|
26300
|
+
const VFab = genericComponent()({
|
|
26301
|
+
name: 'VFab',
|
|
26302
|
+
props: makeVFabProps(),
|
|
26303
|
+
emits: {
|
|
26304
|
+
'update:modelValue': value => true
|
|
26305
|
+
},
|
|
26306
|
+
setup(props, _ref) {
|
|
26307
|
+
let {
|
|
26308
|
+
slots
|
|
26309
|
+
} = _ref;
|
|
26310
|
+
const model = useProxiedModel(props, 'modelValue');
|
|
26311
|
+
const height = vue.shallowRef(56);
|
|
26312
|
+
const layoutItemStyles = vue.ref();
|
|
26313
|
+
const {
|
|
26314
|
+
resizeRef
|
|
26315
|
+
} = useResizeObserver(entries => {
|
|
26316
|
+
if (!entries.length) return;
|
|
26317
|
+
height.value = entries[0].target.clientHeight;
|
|
25987
26318
|
});
|
|
25988
26319
|
const hasPosition = vue.computed(() => props.app || props.absolute);
|
|
25989
26320
|
const position = vue.computed(() => {
|
|
@@ -26540,132 +26871,358 @@
|
|
|
26540
26871
|
|
|
26541
26872
|
// Types
|
|
26542
26873
|
|
|
26874
|
+
const makeVTreeviewGroupProps = propsFactory({
|
|
26875
|
+
...omit(makeVListGroupProps({
|
|
26876
|
+
collapseIcon: '$treeviewCollapse',
|
|
26877
|
+
expandIcon: '$treeviewExpand'
|
|
26878
|
+
}), ['subgroup'])
|
|
26879
|
+
}, 'VTreeviewGroup');
|
|
26880
|
+
const VTreeviewGroup = genericComponent()({
|
|
26881
|
+
name: 'VTreeviewGroup',
|
|
26882
|
+
props: makeVTreeviewGroupProps(),
|
|
26883
|
+
setup(props, _ref) {
|
|
26884
|
+
let {
|
|
26885
|
+
slots
|
|
26886
|
+
} = _ref;
|
|
26887
|
+
const vListGroupRef = vue.ref();
|
|
26888
|
+
const toggleIcon = vue.computed(() => vListGroupRef.value?.isOpen ? props.collapseIcon : props.expandIcon);
|
|
26889
|
+
const activatorDefaults = vue.computed(() => ({
|
|
26890
|
+
VTreeviewItem: {
|
|
26891
|
+
prependIcon: undefined,
|
|
26892
|
+
appendIcon: undefined,
|
|
26893
|
+
active: vListGroupRef.value?.isOpen,
|
|
26894
|
+
toggleIcon: toggleIcon.value
|
|
26895
|
+
}
|
|
26896
|
+
}));
|
|
26897
|
+
useRender(() => {
|
|
26898
|
+
const listGroupProps = VListGroup.filterProps(props);
|
|
26899
|
+
return vue.createVNode(VListGroup, vue.mergeProps(listGroupProps, {
|
|
26900
|
+
"ref": vListGroupRef,
|
|
26901
|
+
"class": ['v-treeview-group', props.class],
|
|
26902
|
+
"subgroup": true
|
|
26903
|
+
}), {
|
|
26904
|
+
...slots,
|
|
26905
|
+
activator: slots.activator ? slotProps => vue.createVNode(vue.Fragment, null, [vue.createVNode(VDefaultsProvider, {
|
|
26906
|
+
"defaults": activatorDefaults.value
|
|
26907
|
+
}, {
|
|
26908
|
+
default: () => [slots.activator?.(slotProps)]
|
|
26909
|
+
})]) : undefined
|
|
26910
|
+
});
|
|
26911
|
+
});
|
|
26912
|
+
return {};
|
|
26913
|
+
}
|
|
26914
|
+
});
|
|
26915
|
+
|
|
26543
26916
|
// Types
|
|
26544
26917
|
|
|
26545
|
-
const
|
|
26546
|
-
|
|
26547
|
-
|
|
26548
|
-
|
|
26549
|
-
|
|
26550
|
-
|
|
26551
|
-
|
|
26918
|
+
const VTreeviewSymbol = Symbol.for('vuetify:v-treeview');
|
|
26919
|
+
|
|
26920
|
+
const makeVTreeviewItemProps = propsFactory({
|
|
26921
|
+
loading: Boolean,
|
|
26922
|
+
toggleIcon: IconValue,
|
|
26923
|
+
...makeVListItemProps({
|
|
26924
|
+
slim: true
|
|
26925
|
+
})
|
|
26926
|
+
}, 'VTreeviewItem');
|
|
26927
|
+
const VTreeviewItem = genericComponent()({
|
|
26928
|
+
name: 'VTreeviewItem',
|
|
26929
|
+
props: makeVTreeviewItemProps(),
|
|
26930
|
+
setup(props, _ref) {
|
|
26931
|
+
let {
|
|
26932
|
+
attrs,
|
|
26933
|
+
slots,
|
|
26934
|
+
emit
|
|
26935
|
+
} = _ref;
|
|
26936
|
+
const link = useLink(props, attrs);
|
|
26937
|
+
const id = vue.computed(() => props.value === undefined ? link.href.value : props.value);
|
|
26938
|
+
const vListItemRef = vue.ref();
|
|
26939
|
+
const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || props.value != null && !!vListItemRef.value?.list));
|
|
26940
|
+
function onClick(e) {
|
|
26941
|
+
if (!vListItemRef.value?.isGroupActivator || !isClickable.value) return;
|
|
26942
|
+
props.value != null && vListItemRef.value?.select(!vListItemRef.value?.isSelected, e);
|
|
26943
|
+
}
|
|
26944
|
+
function onKeyDown(e) {
|
|
26945
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
26946
|
+
e.preventDefault();
|
|
26947
|
+
onClick(e);
|
|
26948
|
+
}
|
|
26949
|
+
}
|
|
26950
|
+
const visibleIds = vue.inject(VTreeviewSymbol, {
|
|
26951
|
+
visibleIds: vue.ref()
|
|
26952
|
+
}).visibleIds;
|
|
26953
|
+
useRender(() => {
|
|
26954
|
+
const listItemProps = VListItem.filterProps(props);
|
|
26955
|
+
const hasPrepend = slots.prepend || props.toggleIcon;
|
|
26956
|
+
return vue.createVNode(VListItem, vue.mergeProps({
|
|
26957
|
+
"ref": vListItemRef
|
|
26958
|
+
}, listItemProps, {
|
|
26959
|
+
"class": ['v-treeview-item', {
|
|
26960
|
+
'v-treeview-item--filtered': visibleIds.value && !visibleIds.value.has(id.value)
|
|
26961
|
+
}, props.class],
|
|
26962
|
+
"onClick": onClick,
|
|
26963
|
+
"onKeydown": isClickable.value && onKeyDown
|
|
26964
|
+
}), {
|
|
26965
|
+
...slots,
|
|
26966
|
+
prepend: hasPrepend ? slotProps => {
|
|
26967
|
+
return vue.createVNode(vue.Fragment, null, [props.toggleIcon && vue.createVNode(VListItemAction, {
|
|
26968
|
+
"start": false
|
|
26969
|
+
}, {
|
|
26970
|
+
default: () => [vue.createVNode(VBtn, {
|
|
26971
|
+
"density": "compact",
|
|
26972
|
+
"icon": props.toggleIcon,
|
|
26973
|
+
"loading": props.loading,
|
|
26974
|
+
"variant": "text"
|
|
26975
|
+
}, {
|
|
26976
|
+
loader() {
|
|
26977
|
+
return vue.createVNode(VProgressCircular, {
|
|
26978
|
+
"indeterminate": "disable-shrink",
|
|
26979
|
+
"size": "20",
|
|
26980
|
+
"width": "2"
|
|
26981
|
+
}, null);
|
|
26982
|
+
}
|
|
26983
|
+
})]
|
|
26984
|
+
}), slots.prepend?.(slotProps)]);
|
|
26985
|
+
} : undefined
|
|
26986
|
+
});
|
|
26987
|
+
});
|
|
26988
|
+
return {};
|
|
26989
|
+
}
|
|
26990
|
+
});
|
|
26991
|
+
|
|
26992
|
+
// Types
|
|
26993
|
+
|
|
26994
|
+
const makeVTreeviewChildrenProps = propsFactory({
|
|
26995
|
+
loadChildren: Function,
|
|
26996
|
+
loadingIcon: {
|
|
26552
26997
|
type: String,
|
|
26553
|
-
default: '
|
|
26998
|
+
default: '$loading'
|
|
26554
26999
|
},
|
|
26555
|
-
|
|
26556
|
-
|
|
26557
|
-
|
|
26558
|
-
|
|
26559
|
-
|
|
26560
|
-
|
|
26561
|
-
|
|
26562
|
-
|
|
26563
|
-
|
|
26564
|
-
|
|
26565
|
-
|
|
26566
|
-
|
|
26567
|
-
|
|
27000
|
+
items: Array,
|
|
27001
|
+
selectable: Boolean
|
|
27002
|
+
}, 'VTreeviewChildren');
|
|
27003
|
+
const VTreeviewChildren = genericComponent()({
|
|
27004
|
+
name: 'VTreeviewChildren',
|
|
27005
|
+
props: makeVTreeviewChildrenProps(),
|
|
27006
|
+
setup(props, _ref) {
|
|
27007
|
+
let {
|
|
27008
|
+
emit,
|
|
27009
|
+
slots
|
|
27010
|
+
} = _ref;
|
|
27011
|
+
const isLoading = vue.shallowRef(false);
|
|
27012
|
+
const hasLoaded = vue.shallowRef(false);
|
|
27013
|
+
function checkChildren(item) {
|
|
27014
|
+
return new Promise(resolve => {
|
|
27015
|
+
if (!props.items?.length || !props.loadChildren || hasLoaded.value) return resolve();
|
|
27016
|
+
isLoading.value = true;
|
|
27017
|
+
props.loadChildren(item).then(resolve);
|
|
27018
|
+
}).then(() => {
|
|
27019
|
+
hasLoaded.value = true;
|
|
27020
|
+
}).finally(() => {
|
|
27021
|
+
isLoading.value = false;
|
|
27022
|
+
});
|
|
27023
|
+
}
|
|
27024
|
+
function onClick(e, item) {
|
|
27025
|
+
e.stopPropagation();
|
|
27026
|
+
checkChildren(item);
|
|
27027
|
+
}
|
|
27028
|
+
return () => slots.default?.() ?? props.items?.map(_ref2 => {
|
|
27029
|
+
let {
|
|
27030
|
+
children,
|
|
27031
|
+
props: itemProps,
|
|
27032
|
+
raw: item
|
|
27033
|
+
} = _ref2;
|
|
27034
|
+
const slotsWithItem = {
|
|
27035
|
+
prepend: slots.prepend ? slotProps => slots.prepend?.({
|
|
27036
|
+
...slotProps,
|
|
27037
|
+
item
|
|
27038
|
+
}) : props.selectable ? _ref3 => {
|
|
27039
|
+
let {
|
|
27040
|
+
isSelected,
|
|
27041
|
+
isIndeterminate
|
|
27042
|
+
} = _ref3;
|
|
27043
|
+
return vue.createVNode(VCheckboxBtn, {
|
|
27044
|
+
"key": item.value,
|
|
27045
|
+
"tabindex": "-1",
|
|
27046
|
+
"modelValue": isSelected,
|
|
27047
|
+
"loading": isLoading.value,
|
|
27048
|
+
"indeterminate": isIndeterminate,
|
|
27049
|
+
"onClick": e => onClick(e, item)
|
|
27050
|
+
}, null);
|
|
27051
|
+
} : undefined,
|
|
27052
|
+
append: slots.append ? slotProps => slots.append?.({
|
|
27053
|
+
...slotProps,
|
|
27054
|
+
item
|
|
27055
|
+
}) : undefined,
|
|
27056
|
+
title: slots.title ? slotProps => slots.title?.({
|
|
27057
|
+
...slotProps,
|
|
27058
|
+
item
|
|
27059
|
+
}) : undefined
|
|
27060
|
+
};
|
|
27061
|
+
const treeviewGroupProps = VTreeviewGroup.filterProps(itemProps);
|
|
27062
|
+
const treeviewChildrenProps = VTreeviewChildren.filterProps(props);
|
|
27063
|
+
return children ? vue.createVNode(VTreeviewGroup, vue.mergeProps({
|
|
27064
|
+
"value": itemProps?.value
|
|
27065
|
+
}, treeviewGroupProps), {
|
|
27066
|
+
activator: _ref4 => {
|
|
27067
|
+
let {
|
|
27068
|
+
props: activatorProps
|
|
27069
|
+
} = _ref4;
|
|
27070
|
+
return vue.createVNode(VTreeviewItem, vue.mergeProps(itemProps, activatorProps, {
|
|
27071
|
+
"loading": isLoading.value,
|
|
27072
|
+
"onClick": e => onClick(e, item)
|
|
27073
|
+
}), slotsWithItem);
|
|
27074
|
+
},
|
|
27075
|
+
default: () => vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
|
|
27076
|
+
"items": children
|
|
27077
|
+
}), slots)
|
|
27078
|
+
}) : slots.item?.({
|
|
27079
|
+
props: itemProps
|
|
27080
|
+
}) ?? vue.createVNode(VTreeviewItem, itemProps, slotsWithItem);
|
|
27081
|
+
});
|
|
27082
|
+
}
|
|
27083
|
+
});
|
|
27084
|
+
|
|
27085
|
+
function flatten(items) {
|
|
27086
|
+
let flat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
27087
|
+
for (const item of items) {
|
|
27088
|
+
flat.push(item);
|
|
27089
|
+
if (item.children) flatten(item.children, flat);
|
|
27090
|
+
}
|
|
27091
|
+
return flat;
|
|
27092
|
+
}
|
|
27093
|
+
const makeVTreeviewProps = propsFactory({
|
|
27094
|
+
openAll: Boolean,
|
|
27095
|
+
search: String,
|
|
27096
|
+
...makeFilterProps({
|
|
27097
|
+
filterKeys: ['title']
|
|
26568
27098
|
}),
|
|
26569
|
-
...
|
|
26570
|
-
|
|
26571
|
-
|
|
26572
|
-
|
|
26573
|
-
|
|
27099
|
+
...makeVTreeviewChildrenProps(),
|
|
27100
|
+
...omit(makeVListProps({
|
|
27101
|
+
collapseIcon: '$treeviewCollapse',
|
|
27102
|
+
expandIcon: '$treeviewExpand',
|
|
27103
|
+
selectStrategy: 'independent',
|
|
27104
|
+
openStrategy: 'multiple',
|
|
27105
|
+
slim: true
|
|
27106
|
+
}), ['nav'])
|
|
27107
|
+
}, 'VTreeview');
|
|
27108
|
+
const VTreeview = genericComponent()({
|
|
27109
|
+
name: 'VTreeview',
|
|
27110
|
+
props: makeVTreeviewProps(),
|
|
26574
27111
|
emits: {
|
|
26575
|
-
'
|
|
27112
|
+
'update:opened': val => true,
|
|
27113
|
+
'update:activated': val => true,
|
|
27114
|
+
'update:selected': val => true,
|
|
27115
|
+
'click:open': value => true,
|
|
27116
|
+
'click:select': value => true
|
|
26576
27117
|
},
|
|
26577
27118
|
setup(props, _ref) {
|
|
26578
27119
|
let {
|
|
26579
|
-
emit,
|
|
26580
27120
|
slots
|
|
26581
27121
|
} = _ref;
|
|
26582
27122
|
const {
|
|
26583
|
-
|
|
26584
|
-
} =
|
|
26585
|
-
const
|
|
26586
|
-
|
|
26587
|
-
|
|
26588
|
-
|
|
27123
|
+
items
|
|
27124
|
+
} = useListItems(props);
|
|
27125
|
+
const activeColor = vue.toRef(props, 'activeColor');
|
|
27126
|
+
const baseColor = vue.toRef(props, 'baseColor');
|
|
27127
|
+
const color = vue.toRef(props, 'color');
|
|
27128
|
+
const opened = useProxiedModel(props, 'opened');
|
|
27129
|
+
const activated = useProxiedModel(props, 'activated');
|
|
27130
|
+
const selected = useProxiedModel(props, 'selected');
|
|
27131
|
+
const vListRef = vue.ref();
|
|
27132
|
+
const flatItems = vue.computed(() => flatten(items.value));
|
|
27133
|
+
const search = vue.toRef(props, 'search');
|
|
26589
27134
|
const {
|
|
26590
|
-
|
|
26591
|
-
} =
|
|
26592
|
-
|
|
26593
|
-
|
|
27135
|
+
filteredItems
|
|
27136
|
+
} = useFilter(props, flatItems, search);
|
|
27137
|
+
const visibleIds = vue.computed(() => {
|
|
27138
|
+
if (!search.value) {
|
|
27139
|
+
return null;
|
|
27140
|
+
}
|
|
27141
|
+
return new Set(filteredItems.value.flatMap(item => {
|
|
27142
|
+
return [...getPath(item.props.value), ...getChildren(item.props.value)];
|
|
27143
|
+
}));
|
|
27144
|
+
});
|
|
27145
|
+
function getPath(id) {
|
|
27146
|
+
const path = [];
|
|
27147
|
+
let parent = id;
|
|
27148
|
+
while (parent != null) {
|
|
27149
|
+
path.unshift(parent);
|
|
27150
|
+
parent = vListRef.value?.parents.get(parent);
|
|
27151
|
+
}
|
|
27152
|
+
return path;
|
|
26594
27153
|
}
|
|
26595
|
-
|
|
26596
|
-
const
|
|
26597
|
-
const
|
|
26598
|
-
|
|
26599
|
-
|
|
26600
|
-
|
|
26601
|
-
|
|
26602
|
-
|
|
26603
|
-
|
|
26604
|
-
|
|
26605
|
-
|
|
26606
|
-
|
|
26607
|
-
|
|
26608
|
-
|
|
26609
|
-
|
|
26610
|
-
|
|
26611
|
-
|
|
26612
|
-
|
|
26613
|
-
|
|
26614
|
-
|
|
26615
|
-
|
|
26616
|
-
|
|
26617
|
-
|
|
26618
|
-
}, null) : undefined]) : vue.createVNode(VDefaultsProvider, {
|
|
26619
|
-
"key": "media-defaults",
|
|
26620
|
-
"defaults": {
|
|
26621
|
-
VImg: {
|
|
26622
|
-
src: props.image,
|
|
26623
|
-
height: size
|
|
26624
|
-
},
|
|
26625
|
-
VIcon: {
|
|
26626
|
-
size,
|
|
26627
|
-
icon: props.icon
|
|
26628
|
-
}
|
|
26629
|
-
}
|
|
26630
|
-
}, {
|
|
26631
|
-
default: () => [slots.media()]
|
|
26632
|
-
})]), hasHeadline && vue.createVNode("div", {
|
|
26633
|
-
"key": "headline",
|
|
26634
|
-
"class": "v-empty-state__headline"
|
|
26635
|
-
}, [slots.headline?.() ?? props.headline]), hasTitle && vue.createVNode("div", {
|
|
26636
|
-
"key": "title",
|
|
26637
|
-
"class": "v-empty-state__title"
|
|
26638
|
-
}, [slots.title?.() ?? props.title]), hasText && vue.createVNode("div", {
|
|
26639
|
-
"key": "text",
|
|
26640
|
-
"class": "v-empty-state__text",
|
|
26641
|
-
"style": {
|
|
26642
|
-
maxWidth: convertToUnit(props.textWidth)
|
|
26643
|
-
}
|
|
26644
|
-
}, [slots.text?.() ?? props.text]), slots.default && vue.createVNode("div", {
|
|
26645
|
-
"key": "content",
|
|
26646
|
-
"class": "v-empty-state__content"
|
|
26647
|
-
}, [slots.default()]), hasActions && vue.createVNode("div", {
|
|
26648
|
-
"key": "actions",
|
|
26649
|
-
"class": "v-empty-state__actions"
|
|
26650
|
-
}, [vue.createVNode(VDefaultsProvider, {
|
|
26651
|
-
"defaults": {
|
|
26652
|
-
VBtn: {
|
|
26653
|
-
class: 'v-empty-state__action-btn',
|
|
26654
|
-
color: props.color,
|
|
26655
|
-
text: props.actionText
|
|
26656
|
-
}
|
|
27154
|
+
function getChildren(id) {
|
|
27155
|
+
const arr = [];
|
|
27156
|
+
const queue = (vListRef.value?.children.get(id) ?? []).slice();
|
|
27157
|
+
while (queue.length) {
|
|
27158
|
+
const child = queue.shift();
|
|
27159
|
+
if (!child) continue;
|
|
27160
|
+
arr.push(child);
|
|
27161
|
+
queue.push(...(vListRef.value?.children.get(child) ?? []).slice());
|
|
27162
|
+
}
|
|
27163
|
+
return arr;
|
|
27164
|
+
}
|
|
27165
|
+
vue.watch(() => props.openAll, val => {
|
|
27166
|
+
opened.value = val ? openAll(items.value) : [];
|
|
27167
|
+
}, {
|
|
27168
|
+
immediate: true
|
|
27169
|
+
});
|
|
27170
|
+
function openAll(item) {
|
|
27171
|
+
let ids = [];
|
|
27172
|
+
for (const i of item) {
|
|
27173
|
+
if (!i.children) continue;
|
|
27174
|
+
ids.push(i.value);
|
|
27175
|
+
if (i.children) {
|
|
27176
|
+
ids = ids.concat(openAll(i.children));
|
|
26657
27177
|
}
|
|
26658
|
-
}
|
|
26659
|
-
|
|
26660
|
-
|
|
26661
|
-
|
|
26662
|
-
|
|
26663
|
-
}) ?? vue.createVNode(VBtn, {
|
|
26664
|
-
"onClick": onClickAction
|
|
26665
|
-
}, null)]
|
|
26666
|
-
})])]);
|
|
27178
|
+
}
|
|
27179
|
+
return ids;
|
|
27180
|
+
}
|
|
27181
|
+
vue.provide(VTreeviewSymbol, {
|
|
27182
|
+
visibleIds
|
|
26667
27183
|
});
|
|
26668
|
-
|
|
27184
|
+
provideDefaults({
|
|
27185
|
+
VTreeviewGroup: {
|
|
27186
|
+
activeColor,
|
|
27187
|
+
baseColor,
|
|
27188
|
+
color,
|
|
27189
|
+
collapseIcon: vue.toRef(props, 'collapseIcon'),
|
|
27190
|
+
expandIcon: vue.toRef(props, 'expandIcon')
|
|
27191
|
+
},
|
|
27192
|
+
VTreeviewItem: {
|
|
27193
|
+
activeClass: vue.toRef(props, 'activeClass'),
|
|
27194
|
+
activeColor,
|
|
27195
|
+
baseColor,
|
|
27196
|
+
color,
|
|
27197
|
+
density: vue.toRef(props, 'density'),
|
|
27198
|
+
disabled: vue.toRef(props, 'disabled'),
|
|
27199
|
+
lines: vue.toRef(props, 'lines'),
|
|
27200
|
+
variant: vue.toRef(props, 'variant')
|
|
27201
|
+
}
|
|
27202
|
+
});
|
|
27203
|
+
useRender(() => {
|
|
27204
|
+
const listProps = VList.filterProps(props);
|
|
27205
|
+
const treeviewChildrenProps = VTreeviewChildren.filterProps(props);
|
|
27206
|
+
return vue.createVNode(VList, vue.mergeProps({
|
|
27207
|
+
"ref": vListRef
|
|
27208
|
+
}, listProps, {
|
|
27209
|
+
"class": ['v-treeview', props.class],
|
|
27210
|
+
"style": props.style,
|
|
27211
|
+
"opened": opened.value,
|
|
27212
|
+
"onUpdate:opened": $event => opened.value = $event,
|
|
27213
|
+
"activated": activated.value,
|
|
27214
|
+
"onUpdate:activated": $event => activated.value = $event,
|
|
27215
|
+
"selected": selected.value,
|
|
27216
|
+
"onUpdate:selected": $event => selected.value = $event
|
|
27217
|
+
}), {
|
|
27218
|
+
default: () => [vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
|
|
27219
|
+
"items": items.value
|
|
27220
|
+
}), slots)]
|
|
27221
|
+
});
|
|
27222
|
+
});
|
|
27223
|
+
return {
|
|
27224
|
+
open
|
|
27225
|
+
};
|
|
26669
27226
|
}
|
|
26670
27227
|
});
|
|
26671
27228
|
|
|
@@ -26837,6 +27394,9 @@
|
|
|
26837
27394
|
VToolbarItems: VToolbarItems,
|
|
26838
27395
|
VToolbarTitle: VToolbarTitle,
|
|
26839
27396
|
VTooltip: VTooltip,
|
|
27397
|
+
VTreeview: VTreeview,
|
|
27398
|
+
VTreeviewGroup: VTreeviewGroup,
|
|
27399
|
+
VTreeviewItem: VTreeviewItem,
|
|
26840
27400
|
VValidation: VValidation,
|
|
26841
27401
|
VVirtualScroll: VVirtualScroll,
|
|
26842
27402
|
VWindow: VWindow,
|
|
@@ -27063,7 +27623,7 @@
|
|
|
27063
27623
|
goTo
|
|
27064
27624
|
};
|
|
27065
27625
|
}
|
|
27066
|
-
const version$1 = "3.5.
|
|
27626
|
+
const version$1 = "3.5.9";
|
|
27067
27627
|
createVuetify$1.version = version$1;
|
|
27068
27628
|
|
|
27069
27629
|
// Vue's inject() can only be used in setup
|
|
@@ -27077,7 +27637,7 @@
|
|
|
27077
27637
|
|
|
27078
27638
|
/* eslint-disable local-rules/sort-imports */
|
|
27079
27639
|
|
|
27080
|
-
const version = "3.5.
|
|
27640
|
+
const version = "3.5.9";
|
|
27081
27641
|
|
|
27082
27642
|
/* eslint-disable local-rules/sort-imports */
|
|
27083
27643
|
|