vuetify 3.3.2 → 3.3.3
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 +8 -8
- package/dist/json/importMap.json +4 -4
- package/dist/json/web-types.json +26 -15
- package/dist/vuetify-labs.css +53 -61
- package/dist/vuetify-labs.d.ts +253 -119
- package/dist/vuetify-labs.esm.js +196 -82
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +195 -81
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +10 -8
- package/dist/vuetify.d.ts +254 -120
- package/dist/vuetify.esm.js +191 -78
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +190 -77
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +780 -771
- package/dist/vuetify.min.js.map +1 -1
- package/lib/blueprints/index.d.mts +2 -2
- package/lib/blueprints/md1.d.mts +2 -2
- package/lib/blueprints/md2.d.mts +2 -2
- package/lib/blueprints/md3.d.mts +2 -2
- package/lib/components/VAppBar/index.d.mts +24 -8
- package/lib/components/VAutocomplete/VAutocomplete.mjs +16 -11
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VBtn/VBtn.mjs +1 -1
- package/lib/components/VBtn/VBtn.mjs.map +1 -1
- package/lib/components/VBtn/index.d.mts +24 -8
- package/lib/components/VCard/VCard.mjs +1 -1
- package/lib/components/VCard/VCard.mjs.map +1 -1
- package/lib/components/VCard/index.d.mts +44 -28
- package/lib/components/VCheckbox/VCheckbox.mjs +8 -1
- package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
- package/lib/components/VCheckbox/index.d.mts +7 -1
- package/lib/components/VChip/VChip.mjs +2 -2
- package/lib/components/VChip/VChip.mjs.map +1 -1
- package/lib/components/VChip/index.d.mts +48 -32
- package/lib/components/VCombobox/VCombobox.mjs +16 -8
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +1 -1
- package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
- package/lib/components/VExpansionPanel/index.d.mts +56 -24
- package/lib/components/VField/VField.css +1 -0
- package/lib/components/VField/VField.sass +1 -0
- package/lib/components/VIcon/VIcon.mjs +2 -2
- package/lib/components/VIcon/VIcon.mjs.map +1 -1
- package/lib/components/VList/VListItem.mjs +1 -1
- package/lib/components/VList/VListItem.mjs.map +1 -1
- package/lib/components/VList/index.d.mts +24 -8
- package/lib/components/VMenu/VMenu.mjs +29 -3
- package/lib/components/VMenu/VMenu.mjs.map +1 -1
- package/lib/components/VOverlay/VOverlay.mjs +7 -4
- package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
- package/lib/components/VOverlay/useActivator.mjs +29 -35
- package/lib/components/VOverlay/useActivator.mjs.map +1 -1
- package/lib/components/VSelect/VSelect.mjs +15 -10
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSlider/VSliderThumb.mjs +2 -2
- package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
- package/lib/components/VTabs/VTabs.css +1 -0
- package/lib/components/VTabs/VTabs.sass +1 -0
- package/lib/components/VTabs/index.d.mts +24 -8
- package/lib/components/VTextarea/VTextarea.css +7 -7
- package/lib/components/VTextarea/VTextarea.sass +9 -9
- package/lib/components/index.d.mts +251 -117
- package/lib/composables/icons.mjs.map +1 -1
- package/lib/composables/theme.mjs +1 -1
- package/lib/composables/theme.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +1 -1
- package/lib/iconsets/mdi-svg.mjs +35 -35
- package/lib/iconsets/mdi-svg.mjs.map +1 -1
- package/lib/index.d.mts +3 -3
- package/lib/labs/VDataTable/VDataTable.css +4 -14
- package/lib/labs/VDataTable/VDataTable.sass +6 -15
- package/lib/labs/VDataTable/VDataTableHeaders.mjs +2 -2
- package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
- package/lib/labs/VDataTable/composables/select.mjs +3 -2
- package/lib/labs/VDataTable/composables/select.mjs.map +1 -1
- package/lib/util/bindProps.mjs +49 -0
- package/lib/util/bindProps.mjs.map +1 -0
- package/lib/util/helpers.mjs +3 -0
- package/lib/util/helpers.mjs.map +1 -1
- package/lib/util/index.mjs +1 -0
- package/lib/util/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/vuetify.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Vuetify v3.3.
|
|
2
|
+
* Vuetify v3.3.3
|
|
3
3
|
* Forged by John Leider
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -298,6 +298,15 @@
|
|
|
298
298
|
}
|
|
299
299
|
return out;
|
|
300
300
|
}
|
|
301
|
+
function flattenFragments(nodes) {
|
|
302
|
+
return nodes.map(node => {
|
|
303
|
+
if (node.type === vue.Fragment) {
|
|
304
|
+
return flattenFragments(node.children);
|
|
305
|
+
} else {
|
|
306
|
+
return node;
|
|
307
|
+
}
|
|
308
|
+
}).flat();
|
|
309
|
+
}
|
|
301
310
|
function toKebabCase() {
|
|
302
311
|
let str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
303
312
|
if (toKebabCase.cache.has(str)) return toKebabCase.cache.get(str);
|
|
@@ -377,6 +386,9 @@
|
|
|
377
386
|
}
|
|
378
387
|
const onRE = /^on[^a-z]/;
|
|
379
388
|
const isOn = key => onRE.test(key);
|
|
389
|
+
function eventName(propName) {
|
|
390
|
+
return propName[2].toLowerCase() + propName.slice(3);
|
|
391
|
+
}
|
|
380
392
|
const EventProp = () => [Function, Array];
|
|
381
393
|
function hasEvent(props, name) {
|
|
382
394
|
name = 'on' + vue.capitalize(name);
|
|
@@ -575,6 +587,54 @@
|
|
|
575
587
|
return animation;
|
|
576
588
|
}
|
|
577
589
|
|
|
590
|
+
// Utilities
|
|
591
|
+
const handlers = new WeakMap();
|
|
592
|
+
function bindProps(el, props) {
|
|
593
|
+
Object.keys(props).forEach(k => {
|
|
594
|
+
if (isOn(k)) {
|
|
595
|
+
const name = eventName(k);
|
|
596
|
+
const handler = handlers.get(el);
|
|
597
|
+
if (props[k] == null) {
|
|
598
|
+
handler?.forEach(v => {
|
|
599
|
+
const [n, fn] = v;
|
|
600
|
+
if (n === name) {
|
|
601
|
+
el.removeEventListener(name, fn);
|
|
602
|
+
handler.delete(v);
|
|
603
|
+
}
|
|
604
|
+
});
|
|
605
|
+
} else if (!handler || ![...handler]?.some(v => v[0] === name && v[1] === props[k])) {
|
|
606
|
+
el.addEventListener(name, props[k]);
|
|
607
|
+
const _handler = handler || new Set();
|
|
608
|
+
_handler.add([name, props[k]]);
|
|
609
|
+
if (!handlers.has(el)) handlers.set(el, _handler);
|
|
610
|
+
}
|
|
611
|
+
} else {
|
|
612
|
+
if (props[k] == null) {
|
|
613
|
+
el.removeAttribute(k);
|
|
614
|
+
} else {
|
|
615
|
+
el.setAttribute(k, props[k]);
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
function unbindProps(el, props) {
|
|
621
|
+
Object.keys(props).forEach(k => {
|
|
622
|
+
if (isOn(k)) {
|
|
623
|
+
const name = eventName(k);
|
|
624
|
+
const handler = handlers.get(el);
|
|
625
|
+
handler?.forEach(v => {
|
|
626
|
+
const [n, fn] = v;
|
|
627
|
+
if (n === name) {
|
|
628
|
+
el.removeEventListener(name, fn);
|
|
629
|
+
handler.delete(v);
|
|
630
|
+
}
|
|
631
|
+
});
|
|
632
|
+
} else {
|
|
633
|
+
el.removeAttribute(k);
|
|
634
|
+
}
|
|
635
|
+
});
|
|
636
|
+
}
|
|
637
|
+
|
|
578
638
|
/* eslint-disable no-console */
|
|
579
639
|
|
|
580
640
|
function consoleWarn(message) {
|
|
@@ -2158,6 +2218,7 @@
|
|
|
2158
2218
|
};
|
|
2159
2219
|
}
|
|
2160
2220
|
function install(app) {
|
|
2221
|
+
if (parsedOptions.isDisabled) return;
|
|
2161
2222
|
const head = app._context.provides.usehead;
|
|
2162
2223
|
if (head) {
|
|
2163
2224
|
if (head.push) {
|
|
@@ -2179,7 +2240,6 @@
|
|
|
2179
2240
|
immediate: true
|
|
2180
2241
|
});
|
|
2181
2242
|
function updateStyles() {
|
|
2182
|
-
if (parsedOptions.isDisabled) return;
|
|
2183
2243
|
if (typeof document !== 'undefined' && !styleEl) {
|
|
2184
2244
|
const el = document.createElement('style');
|
|
2185
2245
|
el.type = 'text/css';
|
|
@@ -4266,7 +4326,7 @@
|
|
|
4266
4326
|
useRender(() => {
|
|
4267
4327
|
const slotValue = slots.default?.();
|
|
4268
4328
|
if (slotValue) {
|
|
4269
|
-
slotIcon.value = slotValue.filter(node => node.type === vue.Text && node.children && typeof node.children === 'string')[0]?.children;
|
|
4329
|
+
slotIcon.value = flattenFragments(slotValue).filter(node => node.type === vue.Text && node.children && typeof node.children === 'string')[0]?.children;
|
|
4270
4330
|
}
|
|
4271
4331
|
return vue.createVNode(iconData.value.component, {
|
|
4272
4332
|
"tag": props.tag,
|
|
@@ -5103,7 +5163,7 @@
|
|
|
5103
5163
|
block: Boolean,
|
|
5104
5164
|
stacked: Boolean,
|
|
5105
5165
|
ripple: {
|
|
5106
|
-
type: Boolean,
|
|
5166
|
+
type: [Boolean, Object],
|
|
5107
5167
|
default: true
|
|
5108
5168
|
},
|
|
5109
5169
|
text: String,
|
|
@@ -6386,6 +6446,7 @@
|
|
|
6386
6446
|
inheritAttrs: false,
|
|
6387
6447
|
props: makeVCheckboxProps(),
|
|
6388
6448
|
emits: {
|
|
6449
|
+
'update:modelValue': value => true,
|
|
6389
6450
|
'update:focused': focused => true
|
|
6390
6451
|
},
|
|
6391
6452
|
setup(props, _ref) {
|
|
@@ -6393,6 +6454,7 @@
|
|
|
6393
6454
|
attrs,
|
|
6394
6455
|
slots
|
|
6395
6456
|
} = _ref;
|
|
6457
|
+
const model = useProxiedModel(props, 'modelValue');
|
|
6396
6458
|
const {
|
|
6397
6459
|
isFocused,
|
|
6398
6460
|
focus,
|
|
@@ -6407,6 +6469,8 @@
|
|
|
6407
6469
|
return vue.createVNode(VInput, vue.mergeProps({
|
|
6408
6470
|
"class": ['v-checkbox', props.class]
|
|
6409
6471
|
}, inputAttrs, inputProps, {
|
|
6472
|
+
"modelValue": model.value,
|
|
6473
|
+
"onUpdate:modelValue": $event => model.value = $event,
|
|
6410
6474
|
"id": id.value,
|
|
6411
6475
|
"focused": isFocused.value,
|
|
6412
6476
|
"style": props.style
|
|
@@ -6425,6 +6489,8 @@
|
|
|
6425
6489
|
"disabled": isDisabled.value,
|
|
6426
6490
|
"readonly": isReadonly.value
|
|
6427
6491
|
}, controlAttrs, {
|
|
6492
|
+
"modelValue": model.value,
|
|
6493
|
+
"onUpdate:modelValue": $event => model.value = $event,
|
|
6428
6494
|
"onFocus": focus,
|
|
6429
6495
|
"onBlur": blur
|
|
6430
6496
|
}), slots);
|
|
@@ -6562,6 +6628,8 @@
|
|
|
6562
6628
|
}
|
|
6563
6629
|
});
|
|
6564
6630
|
|
|
6631
|
+
// Types
|
|
6632
|
+
|
|
6565
6633
|
const makeVChipProps = propsFactory({
|
|
6566
6634
|
activeClass: String,
|
|
6567
6635
|
appendAvatar: String,
|
|
@@ -6590,7 +6658,7 @@
|
|
|
6590
6658
|
prependAvatar: String,
|
|
6591
6659
|
prependIcon: IconValue,
|
|
6592
6660
|
ripple: {
|
|
6593
|
-
type: Boolean,
|
|
6661
|
+
type: [Boolean, Object],
|
|
6594
6662
|
default: true
|
|
6595
6663
|
},
|
|
6596
6664
|
text: String,
|
|
@@ -7406,7 +7474,7 @@
|
|
|
7406
7474
|
prependAvatar: String,
|
|
7407
7475
|
prependIcon: IconValue,
|
|
7408
7476
|
ripple: {
|
|
7409
|
-
type: Boolean,
|
|
7477
|
+
type: [Boolean, Object],
|
|
7410
7478
|
default: true
|
|
7411
7479
|
},
|
|
7412
7480
|
subtitle: [String, Number, Boolean],
|
|
@@ -8779,29 +8847,29 @@
|
|
|
8779
8847
|
}
|
|
8780
8848
|
});
|
|
8781
8849
|
const availableEvents = {
|
|
8782
|
-
|
|
8850
|
+
onClick: e => {
|
|
8783
8851
|
e.stopPropagation();
|
|
8784
8852
|
activatorEl.value = e.currentTarget || e.target;
|
|
8785
8853
|
isActive.value = !isActive.value;
|
|
8786
8854
|
},
|
|
8787
|
-
|
|
8855
|
+
onMouseenter: e => {
|
|
8788
8856
|
if (e.sourceCapabilities?.firesTouchEvents) return;
|
|
8789
8857
|
isHovered = true;
|
|
8790
8858
|
activatorEl.value = e.currentTarget || e.target;
|
|
8791
8859
|
runOpenDelay();
|
|
8792
8860
|
},
|
|
8793
|
-
|
|
8861
|
+
onMouseleave: e => {
|
|
8794
8862
|
isHovered = false;
|
|
8795
8863
|
runCloseDelay();
|
|
8796
8864
|
},
|
|
8797
|
-
|
|
8865
|
+
onFocus: e => {
|
|
8798
8866
|
if (SUPPORTS_FOCUS_VISIBLE && !e.target.matches(':focus-visible')) return;
|
|
8799
8867
|
isFocused = true;
|
|
8800
8868
|
e.stopPropagation();
|
|
8801
8869
|
activatorEl.value = e.currentTarget || e.target;
|
|
8802
8870
|
runOpenDelay();
|
|
8803
8871
|
},
|
|
8804
|
-
|
|
8872
|
+
onBlur: e => {
|
|
8805
8873
|
isFocused = false;
|
|
8806
8874
|
e.stopPropagation();
|
|
8807
8875
|
runCloseDelay();
|
|
@@ -8810,33 +8878,43 @@
|
|
|
8810
8878
|
const activatorEvents = vue.computed(() => {
|
|
8811
8879
|
const events = {};
|
|
8812
8880
|
if (openOnClick.value) {
|
|
8813
|
-
events.
|
|
8881
|
+
events.onClick = availableEvents.onClick;
|
|
8814
8882
|
}
|
|
8815
8883
|
if (props.openOnHover) {
|
|
8816
|
-
events.
|
|
8817
|
-
events.
|
|
8884
|
+
events.onMouseenter = availableEvents.onMouseenter;
|
|
8885
|
+
events.onMouseleave = availableEvents.onMouseleave;
|
|
8818
8886
|
}
|
|
8819
8887
|
if (openOnFocus.value) {
|
|
8820
|
-
events.
|
|
8821
|
-
events.
|
|
8888
|
+
events.onFocus = availableEvents.onFocus;
|
|
8889
|
+
events.onBlur = availableEvents.onBlur;
|
|
8822
8890
|
}
|
|
8823
8891
|
return events;
|
|
8824
8892
|
});
|
|
8825
8893
|
const contentEvents = vue.computed(() => {
|
|
8826
8894
|
const events = {};
|
|
8827
8895
|
if (props.openOnHover) {
|
|
8828
|
-
events.
|
|
8896
|
+
events.onMouseenter = () => {
|
|
8829
8897
|
isHovered = true;
|
|
8830
8898
|
runOpenDelay();
|
|
8831
8899
|
};
|
|
8832
|
-
events.
|
|
8900
|
+
events.onMouseleave = () => {
|
|
8833
8901
|
isHovered = false;
|
|
8834
8902
|
runCloseDelay();
|
|
8835
8903
|
};
|
|
8836
8904
|
}
|
|
8905
|
+
if (openOnFocus.value) {
|
|
8906
|
+
events.onFocusin = () => {
|
|
8907
|
+
isFocused = true;
|
|
8908
|
+
runOpenDelay();
|
|
8909
|
+
};
|
|
8910
|
+
events.onFocusout = () => {
|
|
8911
|
+
isFocused = false;
|
|
8912
|
+
runCloseDelay();
|
|
8913
|
+
};
|
|
8914
|
+
}
|
|
8837
8915
|
if (props.closeOnContentClick) {
|
|
8838
8916
|
const menu = vue.inject(VMenuSymbol, null);
|
|
8839
|
-
events.
|
|
8917
|
+
events.onClick = () => {
|
|
8840
8918
|
isActive.value = false;
|
|
8841
8919
|
menu?.closeParents();
|
|
8842
8920
|
};
|
|
@@ -8846,14 +8924,14 @@
|
|
|
8846
8924
|
const scrimEvents = vue.computed(() => {
|
|
8847
8925
|
const events = {};
|
|
8848
8926
|
if (props.openOnHover) {
|
|
8849
|
-
events.
|
|
8927
|
+
events.onMouseenter = () => {
|
|
8850
8928
|
if (firstEnter) {
|
|
8851
8929
|
isHovered = true;
|
|
8852
8930
|
firstEnter = false;
|
|
8853
8931
|
runOpenDelay();
|
|
8854
8932
|
}
|
|
8855
8933
|
};
|
|
8856
|
-
events.
|
|
8934
|
+
events.onMouseleave = () => {
|
|
8857
8935
|
isHovered = false;
|
|
8858
8936
|
runCloseDelay();
|
|
8859
8937
|
};
|
|
@@ -8927,29 +9005,13 @@
|
|
|
8927
9005
|
let el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getActivator();
|
|
8928
9006
|
let _props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.activatorProps;
|
|
8929
9007
|
if (!el) return;
|
|
8930
|
-
|
|
8931
|
-
let [name, cb] = _ref3;
|
|
8932
|
-
el.addEventListener(name, cb);
|
|
8933
|
-
});
|
|
8934
|
-
Object.keys(_props).forEach(k => {
|
|
8935
|
-
if (_props[k] == null) {
|
|
8936
|
-
el.removeAttribute(k);
|
|
8937
|
-
} else {
|
|
8938
|
-
el.setAttribute(k, _props[k]);
|
|
8939
|
-
}
|
|
8940
|
-
});
|
|
9008
|
+
bindProps(el, vue.mergeProps(activatorEvents.value, _props));
|
|
8941
9009
|
}
|
|
8942
9010
|
function unbindActivatorProps() {
|
|
8943
9011
|
let el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getActivator();
|
|
8944
9012
|
let _props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.activatorProps;
|
|
8945
9013
|
if (!el) return;
|
|
8946
|
-
|
|
8947
|
-
let [name, cb] = _ref4;
|
|
8948
|
-
el.removeEventListener(name, cb);
|
|
8949
|
-
});
|
|
8950
|
-
Object.keys(_props).forEach(k => {
|
|
8951
|
-
el.removeAttribute(k);
|
|
8952
|
-
});
|
|
9014
|
+
unbindProps(el, vue.mergeProps(activatorEvents.value, _props));
|
|
8953
9015
|
}
|
|
8954
9016
|
function getActivator() {
|
|
8955
9017
|
let selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : props.activator;
|
|
@@ -9476,6 +9538,9 @@
|
|
|
9476
9538
|
if (e.key === 'Escape' && globalTop.value) {
|
|
9477
9539
|
if (!props.persistent) {
|
|
9478
9540
|
isActive.value = false;
|
|
9541
|
+
if (contentEl.value?.contains(document.activeElement)) {
|
|
9542
|
+
activatorEl.value?.focus();
|
|
9543
|
+
}
|
|
9479
9544
|
} else animateClick();
|
|
9480
9545
|
}
|
|
9481
9546
|
}
|
|
@@ -9518,7 +9583,7 @@
|
|
|
9518
9583
|
isActive: isActive.value,
|
|
9519
9584
|
props: vue.mergeProps({
|
|
9520
9585
|
ref: activatorRef
|
|
9521
|
-
},
|
|
9586
|
+
}, activatorEvents.value, props.activatorProps)
|
|
9522
9587
|
}), isMounted.value && vue.createVNode(vue.Teleport, {
|
|
9523
9588
|
"disabled": !teleportTarget.value,
|
|
9524
9589
|
"to": teleportTarget.value
|
|
@@ -9536,7 +9601,7 @@
|
|
|
9536
9601
|
}, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
|
|
9537
9602
|
"color": scrimColor,
|
|
9538
9603
|
"modelValue": isActive.value && !!props.scrim
|
|
9539
|
-
},
|
|
9604
|
+
}, scrimEvents.value), null), vue.createVNode(MaybeTransition, {
|
|
9540
9605
|
"appear": true,
|
|
9541
9606
|
"persisted": true,
|
|
9542
9607
|
"transition": props.transition,
|
|
@@ -9550,7 +9615,7 @@
|
|
|
9550
9615
|
"ref": contentEl,
|
|
9551
9616
|
"class": ['v-overlay__content', props.contentClass],
|
|
9552
9617
|
"style": [dimensionStyles.value, contentStyles.value]
|
|
9553
|
-
},
|
|
9618
|
+
}, contentEvents.value, props.contentProps), [slots.default?.({
|
|
9554
9619
|
isActive
|
|
9555
9620
|
})]), [[vue.vShow, isActive.value], [vue.resolveDirective("click-outside"), {
|
|
9556
9621
|
handler: onClickOutside,
|
|
@@ -9710,10 +9775,35 @@
|
|
|
9710
9775
|
function onClickOutside() {
|
|
9711
9776
|
parent?.closeParents();
|
|
9712
9777
|
}
|
|
9778
|
+
function onKeydown(e) {
|
|
9779
|
+
if (props.disabled) return;
|
|
9780
|
+
if (e.key === 'Tab') {
|
|
9781
|
+
isActive.value = false;
|
|
9782
|
+
overlay.value?.activatorEl?.focus();
|
|
9783
|
+
}
|
|
9784
|
+
}
|
|
9785
|
+
function onActivatorKeydown(e) {
|
|
9786
|
+
if (props.disabled) return;
|
|
9787
|
+
const el = overlay.value?.contentEl;
|
|
9788
|
+
if (el && isActive.value) {
|
|
9789
|
+
if (e.key === 'ArrowDown') {
|
|
9790
|
+
e.preventDefault();
|
|
9791
|
+
focusChild(el, 'next');
|
|
9792
|
+
} else if (e.key === 'ArrowUp') {
|
|
9793
|
+
e.preventDefault();
|
|
9794
|
+
focusChild(el, 'prev');
|
|
9795
|
+
}
|
|
9796
|
+
} else if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
|
|
9797
|
+
isActive.value = true;
|
|
9798
|
+
e.preventDefault();
|
|
9799
|
+
setTimeout(() => setTimeout(() => onActivatorKeydown(e)));
|
|
9800
|
+
}
|
|
9801
|
+
}
|
|
9713
9802
|
const activatorProps = vue.computed(() => vue.mergeProps({
|
|
9714
9803
|
'aria-haspopup': 'menu',
|
|
9715
9804
|
'aria-expanded': String(isActive.value),
|
|
9716
|
-
'aria-owns': id.value
|
|
9805
|
+
'aria-owns': id.value,
|
|
9806
|
+
onKeydown: onActivatorKeydown
|
|
9717
9807
|
}, props.activatorProps));
|
|
9718
9808
|
useRender(() => {
|
|
9719
9809
|
const [overlayProps] = VOverlay.filterProps(props);
|
|
@@ -9726,7 +9816,8 @@
|
|
|
9726
9816
|
"onUpdate:modelValue": $event => isActive.value = $event,
|
|
9727
9817
|
"absolute": true,
|
|
9728
9818
|
"activatorProps": activatorProps.value,
|
|
9729
|
-
"onClick:outside": onClickOutside
|
|
9819
|
+
"onClick:outside": onClickOutside,
|
|
9820
|
+
"onKeydown": onKeydown
|
|
9730
9821
|
}, scopeId), {
|
|
9731
9822
|
activator: slots.activator,
|
|
9732
9823
|
default: function () {
|
|
@@ -10370,6 +10461,7 @@
|
|
|
10370
10461
|
}
|
|
10371
10462
|
return items.value;
|
|
10372
10463
|
});
|
|
10464
|
+
const menuDisabled = vue.computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
|
|
10373
10465
|
const listRef = vue.ref();
|
|
10374
10466
|
function onClear(e) {
|
|
10375
10467
|
if (props.openOnClear) {
|
|
@@ -10377,7 +10469,7 @@
|
|
|
10377
10469
|
}
|
|
10378
10470
|
}
|
|
10379
10471
|
function onMousedownControl() {
|
|
10380
|
-
if (
|
|
10472
|
+
if (menuDisabled.value) return;
|
|
10381
10473
|
menu.value = !menu.value;
|
|
10382
10474
|
}
|
|
10383
10475
|
function onKeydown(e) {
|
|
@@ -10391,11 +10483,7 @@
|
|
|
10391
10483
|
if (['Escape', 'Tab'].includes(e.key)) {
|
|
10392
10484
|
menu.value = false;
|
|
10393
10485
|
}
|
|
10394
|
-
if (e.key === '
|
|
10395
|
-
listRef.value?.focus('next');
|
|
10396
|
-
} else if (e.key === 'ArrowUp') {
|
|
10397
|
-
listRef.value?.focus('prev');
|
|
10398
|
-
} else if (e.key === 'Home') {
|
|
10486
|
+
if (e.key === 'Home') {
|
|
10399
10487
|
listRef.value?.focus('first');
|
|
10400
10488
|
} else if (e.key === 'End') {
|
|
10401
10489
|
listRef.value?.focus('last');
|
|
@@ -10421,6 +10509,11 @@
|
|
|
10421
10509
|
model.value = [item];
|
|
10422
10510
|
}
|
|
10423
10511
|
}
|
|
10512
|
+
function onListKeydown(e) {
|
|
10513
|
+
if (e.key === 'Tab') {
|
|
10514
|
+
vTextFieldRef.value?.focus();
|
|
10515
|
+
}
|
|
10516
|
+
}
|
|
10424
10517
|
function select(item) {
|
|
10425
10518
|
if (props.multiple) {
|
|
10426
10519
|
const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
|
|
@@ -10451,7 +10544,7 @@
|
|
|
10451
10544
|
}
|
|
10452
10545
|
useRender(() => {
|
|
10453
10546
|
const hasChips = !!(props.chips || slots.chip);
|
|
10454
|
-
const hasList = !!(!props.hideNoData || displayItems.value.length || slots
|
|
10547
|
+
const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
|
|
10455
10548
|
const isDirty = model.value.length > 0;
|
|
10456
10549
|
const [textFieldProps] = VTextField.filterProps(props);
|
|
10457
10550
|
const placeholder = isDirty || !isFocused.value && props.label && !props.persistentPlaceholder ? undefined : props.placeholder;
|
|
@@ -10488,6 +10581,7 @@
|
|
|
10488
10581
|
"onUpdate:modelValue": $event => menu.value = $event,
|
|
10489
10582
|
"activator": "parent",
|
|
10490
10583
|
"contentClass": "v-select__content",
|
|
10584
|
+
"disabled": menuDisabled.value,
|
|
10491
10585
|
"eager": props.eager,
|
|
10492
10586
|
"maxHeight": 310,
|
|
10493
10587
|
"openOnClick": false,
|
|
@@ -10500,11 +10594,13 @@
|
|
|
10500
10594
|
"selected": selected.value,
|
|
10501
10595
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
|
10502
10596
|
"onMousedown": e => e.preventDefault(),
|
|
10503
|
-
"
|
|
10597
|
+
"onKeydown": onListKeydown,
|
|
10598
|
+
"onFocusin": onFocusin,
|
|
10599
|
+
"tabindex": "-1"
|
|
10504
10600
|
}, {
|
|
10505
|
-
default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
|
|
10601
|
+
default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
|
|
10506
10602
|
"title": t(props.noDataText)
|
|
10507
|
-
}, null)),
|
|
10603
|
+
}, null)), displayItems.value.map((item, index) => {
|
|
10508
10604
|
const itemProps = vue.mergeProps(item.props, {
|
|
10509
10605
|
key: index,
|
|
10510
10606
|
onClick: () => select(item)
|
|
@@ -10796,6 +10892,7 @@
|
|
|
10796
10892
|
const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
|
|
10797
10893
|
return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
|
|
10798
10894
|
});
|
|
10895
|
+
const menuDisabled = vue.computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
|
|
10799
10896
|
const listRef = vue.ref();
|
|
10800
10897
|
function onClear(e) {
|
|
10801
10898
|
if (props.openOnClear) {
|
|
@@ -10804,10 +10901,11 @@
|
|
|
10804
10901
|
search.value = '';
|
|
10805
10902
|
}
|
|
10806
10903
|
function onMousedownControl() {
|
|
10807
|
-
if (
|
|
10904
|
+
if (menuDisabled.value) return;
|
|
10808
10905
|
menu.value = true;
|
|
10809
10906
|
}
|
|
10810
10907
|
function onMousedownMenuIcon(e) {
|
|
10908
|
+
if (menuDisabled.value) return;
|
|
10811
10909
|
if (isFocused.value) {
|
|
10812
10910
|
e.preventDefault();
|
|
10813
10911
|
e.stopPropagation();
|
|
@@ -10833,13 +10931,8 @@
|
|
|
10833
10931
|
}
|
|
10834
10932
|
isPristine.value = true;
|
|
10835
10933
|
}
|
|
10836
|
-
if (e.key === 'ArrowDown') {
|
|
10934
|
+
if (e.key === 'ArrowDown' && highlightFirst.value) {
|
|
10837
10935
|
listRef.value?.focus('next');
|
|
10838
|
-
if (highlightFirst.value) {
|
|
10839
|
-
listRef.value?.focus('next');
|
|
10840
|
-
}
|
|
10841
|
-
} else if (e.key === 'ArrowUp') {
|
|
10842
|
-
listRef.value?.focus('prev');
|
|
10843
10936
|
}
|
|
10844
10937
|
if (!props.multiple) return;
|
|
10845
10938
|
if (['Backspace', 'Delete'].includes(e.key)) {
|
|
@@ -10874,6 +10967,11 @@
|
|
|
10874
10967
|
}
|
|
10875
10968
|
}
|
|
10876
10969
|
}
|
|
10970
|
+
function onListKeydown(e) {
|
|
10971
|
+
if (e.key === 'Tab') {
|
|
10972
|
+
vTextFieldRef.value?.focus();
|
|
10973
|
+
}
|
|
10974
|
+
}
|
|
10877
10975
|
function onInput(e) {
|
|
10878
10976
|
search.value = e.target.value;
|
|
10879
10977
|
}
|
|
@@ -10943,7 +11041,7 @@
|
|
|
10943
11041
|
});
|
|
10944
11042
|
useRender(() => {
|
|
10945
11043
|
const hasChips = !!(props.chips || slots.chip);
|
|
10946
|
-
const hasList = !!(!props.hideNoData || displayItems.value.length || slots
|
|
11044
|
+
const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
|
|
10947
11045
|
const isDirty = model.value.length > 0;
|
|
10948
11046
|
const [textFieldProps] = VTextField.filterProps(props);
|
|
10949
11047
|
return vue.createVNode(VTextField, vue.mergeProps({
|
|
@@ -10976,6 +11074,7 @@
|
|
|
10976
11074
|
"onUpdate:modelValue": $event => menu.value = $event,
|
|
10977
11075
|
"activator": "parent",
|
|
10978
11076
|
"contentClass": "v-autocomplete__content",
|
|
11077
|
+
"disabled": menuDisabled.value,
|
|
10979
11078
|
"eager": props.eager,
|
|
10980
11079
|
"maxHeight": 310,
|
|
10981
11080
|
"openOnClick": false,
|
|
@@ -10988,12 +11087,14 @@
|
|
|
10988
11087
|
"selected": selected.value,
|
|
10989
11088
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
|
10990
11089
|
"onMousedown": e => e.preventDefault(),
|
|
11090
|
+
"onKeydown": onListKeydown,
|
|
10991
11091
|
"onFocusin": onFocusin,
|
|
10992
|
-
"onFocusout": onFocusout
|
|
11092
|
+
"onFocusout": onFocusout,
|
|
11093
|
+
"tabindex": "-1"
|
|
10993
11094
|
}, {
|
|
10994
|
-
default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
|
|
11095
|
+
default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
|
|
10995
11096
|
"title": t(props.noDataText)
|
|
10996
|
-
}, null)),
|
|
11097
|
+
}, null)), displayItems.value.map((item, index) => {
|
|
10997
11098
|
const itemProps = vue.mergeProps(item.props, {
|
|
10998
11099
|
key: index,
|
|
10999
11100
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
|
@@ -11743,7 +11844,7 @@
|
|
|
11743
11844
|
prependAvatar: String,
|
|
11744
11845
|
prependIcon: IconValue,
|
|
11745
11846
|
ripple: {
|
|
11746
|
-
type: Boolean,
|
|
11847
|
+
type: [Boolean, Object],
|
|
11747
11848
|
default: true
|
|
11748
11849
|
},
|
|
11749
11850
|
subtitle: String,
|
|
@@ -13148,6 +13249,8 @@
|
|
|
13148
13249
|
return data;
|
|
13149
13250
|
};
|
|
13150
13251
|
|
|
13252
|
+
// Types
|
|
13253
|
+
|
|
13151
13254
|
const makeVSliderThumbProps = propsFactory({
|
|
13152
13255
|
focused: Boolean,
|
|
13153
13256
|
max: {
|
|
@@ -13167,7 +13270,7 @@
|
|
|
13167
13270
|
required: true
|
|
13168
13271
|
},
|
|
13169
13272
|
ripple: {
|
|
13170
|
-
type: Boolean,
|
|
13273
|
+
type: [Boolean, Object],
|
|
13171
13274
|
default: true
|
|
13172
13275
|
},
|
|
13173
13276
|
...makeComponentProps()
|
|
@@ -14326,6 +14429,7 @@
|
|
|
14326
14429
|
const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
|
|
14327
14430
|
return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
|
|
14328
14431
|
});
|
|
14432
|
+
const menuDisabled = vue.computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
|
|
14329
14433
|
const listRef = vue.ref();
|
|
14330
14434
|
function onClear(e) {
|
|
14331
14435
|
cleared = true;
|
|
@@ -14334,10 +14438,11 @@
|
|
|
14334
14438
|
}
|
|
14335
14439
|
}
|
|
14336
14440
|
function onMousedownControl() {
|
|
14337
|
-
if (
|
|
14441
|
+
if (menuDisabled.value) return;
|
|
14338
14442
|
menu.value = true;
|
|
14339
14443
|
}
|
|
14340
14444
|
function onMousedownMenuIcon(e) {
|
|
14445
|
+
if (menuDisabled.value) return;
|
|
14341
14446
|
if (isFocused.value) {
|
|
14342
14447
|
e.preventDefault();
|
|
14343
14448
|
e.stopPropagation();
|
|
@@ -14363,10 +14468,8 @@
|
|
|
14363
14468
|
}
|
|
14364
14469
|
isPristine.value = true;
|
|
14365
14470
|
}
|
|
14366
|
-
if (e.key === 'ArrowDown') {
|
|
14471
|
+
if (e.key === 'ArrowDown' && highlightFirst.value) {
|
|
14367
14472
|
listRef.value?.focus('next');
|
|
14368
|
-
} else if (e.key === 'ArrowUp') {
|
|
14369
|
-
listRef.value?.focus('prev');
|
|
14370
14473
|
}
|
|
14371
14474
|
if (!props.multiple) return;
|
|
14372
14475
|
if (['Backspace', 'Delete'].includes(e.key)) {
|
|
@@ -14405,6 +14508,11 @@
|
|
|
14405
14508
|
search.value = '';
|
|
14406
14509
|
}
|
|
14407
14510
|
}
|
|
14511
|
+
function onListKeydown(e) {
|
|
14512
|
+
if (e.key === 'Tab') {
|
|
14513
|
+
vTextFieldRef.value?.focus();
|
|
14514
|
+
}
|
|
14515
|
+
}
|
|
14408
14516
|
function onAfterLeave() {
|
|
14409
14517
|
if (isFocused.value) {
|
|
14410
14518
|
isPristine.value = true;
|
|
@@ -14466,7 +14574,7 @@
|
|
|
14466
14574
|
});
|
|
14467
14575
|
useRender(() => {
|
|
14468
14576
|
const hasChips = !!(props.chips || slots.chip);
|
|
14469
|
-
const hasList = !!(!props.hideNoData || displayItems.value.length || slots
|
|
14577
|
+
const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
|
|
14470
14578
|
const isDirty = model.value.length > 0;
|
|
14471
14579
|
const [textFieldProps] = VTextField.filterProps(props);
|
|
14472
14580
|
return vue.createVNode(VTextField, vue.mergeProps({
|
|
@@ -14499,6 +14607,7 @@
|
|
|
14499
14607
|
"onUpdate:modelValue": $event => menu.value = $event,
|
|
14500
14608
|
"activator": "parent",
|
|
14501
14609
|
"contentClass": "v-combobox__content",
|
|
14610
|
+
"disabled": menuDisabled.value,
|
|
14502
14611
|
"eager": props.eager,
|
|
14503
14612
|
"maxHeight": 310,
|
|
14504
14613
|
"openOnClick": false,
|
|
@@ -14511,12 +14620,14 @@
|
|
|
14511
14620
|
"selected": selected.value,
|
|
14512
14621
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
|
14513
14622
|
"onMousedown": e => e.preventDefault(),
|
|
14623
|
+
"onKeydown": onListKeydown,
|
|
14514
14624
|
"onFocusin": onFocusin,
|
|
14515
|
-
"onFocusout": onFocusout
|
|
14625
|
+
"onFocusout": onFocusout,
|
|
14626
|
+
"tabindex": "-1"
|
|
14516
14627
|
}, {
|
|
14517
|
-
default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
|
|
14628
|
+
default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
|
|
14518
14629
|
"title": t(props.noDataText)
|
|
14519
|
-
}, null)),
|
|
14630
|
+
}, null)), displayItems.value.map((item, index) => {
|
|
14520
14631
|
const itemProps = vue.mergeProps(item.props, {
|
|
14521
14632
|
key: index,
|
|
14522
14633
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
|
@@ -14808,6 +14919,8 @@
|
|
|
14808
14919
|
}
|
|
14809
14920
|
});
|
|
14810
14921
|
|
|
14922
|
+
// Types
|
|
14923
|
+
|
|
14811
14924
|
const makeVExpansionPanelTitleProps = propsFactory({
|
|
14812
14925
|
color: String,
|
|
14813
14926
|
expandIcon: {
|
|
@@ -19857,7 +19970,7 @@
|
|
|
19857
19970
|
date
|
|
19858
19971
|
};
|
|
19859
19972
|
}
|
|
19860
|
-
const version$1 = "3.3.
|
|
19973
|
+
const version$1 = "3.3.3";
|
|
19861
19974
|
createVuetify$1.version = version$1;
|
|
19862
19975
|
|
|
19863
19976
|
// Vue's inject() can only be used in setup
|
|
@@ -19882,7 +19995,7 @@
|
|
|
19882
19995
|
...options
|
|
19883
19996
|
});
|
|
19884
19997
|
};
|
|
19885
|
-
const version = "3.3.
|
|
19998
|
+
const version = "3.3.3";
|
|
19886
19999
|
createVuetify.version = version;
|
|
19887
20000
|
|
|
19888
20001
|
exports.components = components;
|