vuetify 3.3.6 → 3.3.7
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 +14 -10
- package/dist/json/importMap.json +76 -76
- package/dist/json/tags.json +1 -0
- package/dist/json/web-types.json +26 -24
- package/dist/vuetify-labs.css +127 -111
- package/dist/vuetify-labs.d.ts +178 -76
- package/dist/vuetify-labs.esm.js +486 -337
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +485 -336
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +36 -20
- package/dist/vuetify.d.ts +157 -93
- package/dist/vuetify.esm.js +469 -326
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +468 -325
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +688 -669
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.mjs +48 -35
- 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/VCheckbox/index.d.mts +28 -16
- package/lib/components/VCombobox/VCombobox.mjs +48 -35
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VField/VField.css +17 -6
- package/lib/components/VField/VField.sass +17 -6
- package/lib/components/VField/_variables.scss +2 -2
- package/lib/components/VIcon/VIcon.css +1 -0
- package/lib/components/VIcon/VIcon.sass +1 -0
- package/lib/components/VImg/VImg.css +4 -2
- package/lib/components/VImg/VImg.mjs +4 -2
- package/lib/components/VImg/VImg.mjs.map +1 -1
- package/lib/components/VImg/VImg.sass +3 -4
- package/lib/components/VOverlay/VOverlay.css +2 -0
- package/lib/components/VOverlay/VOverlay.sass +3 -1
- package/lib/components/VOverlay/scrollStrategies.mjs +3 -1
- package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
- package/lib/components/VRadio/index.d.mts +14 -8
- package/lib/components/VRadioGroup/index.d.mts +14 -8
- package/lib/components/VResponsive/VResponsive.css +6 -11
- package/lib/components/VResponsive/VResponsive.sass +5 -10
- package/lib/components/VSelect/VSelect.mjs +43 -31
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelect/useScrolling.mjs +69 -0
- package/lib/components/VSelect/useScrolling.mjs.map +1 -0
- package/lib/components/VSelectionControl/VSelectionControl.mjs +2 -2
- package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
- package/lib/components/VSelectionControl/index.d.mts +14 -8
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +4 -1
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
- package/lib/components/VSelectionControlGroup/index.d.mts +14 -8
- package/lib/components/VSwitch/index.d.mts +14 -8
- package/lib/components/VTextField/VTextField.css +5 -0
- package/lib/components/VTextField/VTextField.mjs +6 -2
- package/lib/components/VTextField/VTextField.mjs.map +1 -1
- package/lib/components/VTextField/VTextField.sass +5 -0
- package/lib/components/VTextField/_variables.scss +1 -0
- package/lib/components/VVirtualScroll/VVirtualScroll.mjs +50 -24
- package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
- package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs +13 -23
- package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -1
- package/lib/components/VVirtualScroll/index.d.mts +37 -15
- package/lib/components/index.d.mts +134 -70
- package/lib/composables/filter.mjs +9 -7
- package/lib/composables/filter.mjs.map +1 -1
- package/lib/composables/resizeObserver.mjs +6 -1
- package/lib/composables/resizeObserver.mjs.map +1 -1
- package/lib/composables/virtual.mjs +17 -17
- package/lib/composables/virtual.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +1 -1
- package/lib/index.d.mts +23 -23
- package/lib/labs/VDataTable/VDataTableVirtual.mjs +12 -10
- package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
- package/lib/labs/VDataTable/composables/headers.mjs +6 -2
- package/lib/labs/VDataTable/composables/headers.mjs.map +1 -1
- package/lib/labs/VDataTable/index.d.mts +44 -6
- package/lib/labs/components.d.mts +44 -6
- package/lib/util/getScrollParent.mjs +7 -1
- package/lib/util/getScrollParent.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -52,7 +52,9 @@ function blockScrollStrategy(data, props) {
|
|
|
52
52
|
scrollElements.forEach((el, i) => {
|
|
53
53
|
el.style.setProperty('--v-body-scroll-x', convertToUnit(-el.scrollLeft));
|
|
54
54
|
el.style.setProperty('--v-body-scroll-y', convertToUnit(-el.scrollTop));
|
|
55
|
-
el.
|
|
55
|
+
if (el !== document.documentElement) {
|
|
56
|
+
el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth));
|
|
57
|
+
}
|
|
56
58
|
el.classList.add('v-overlay-scroll-blocked');
|
|
57
59
|
});
|
|
58
60
|
onScopeDispose(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollStrategies.mjs","names":["effectScope","nextTick","onScopeDispose","watchEffect","requestNewFrame","convertToUnit","getScrollParents","hasScrollbar","IN_BROWSER","propsFactory","scrollStrategies","none","close","closeScrollStrategy","block","blockScrollStrategy","reposition","repositionScrollStrategy","makeScrollStrategyProps","scrollStrategy","type","String","Function","default","validator","val","useScrollStrategies","props","data","scope","stop","isActive","value","active","run","onScroll","e","bindScroll","activatorEl","contentEl","offsetParent","root","scrollElements","Set","contained","undefined","filter","el","classList","contains","scrollbarWidth","window","innerWidth","document","documentElement","offsetWidth","scrollableParent","add","forEach","i","style","setProperty","scrollLeft","scrollTop","x","parseFloat","getPropertyValue","y","removeProperty","remove","slow","raf","ric","update","start","performance","now","updateLocation","time","requestIdleCallback","cb","cancelAnimationFrame","requestAnimationFrame","cancelIdleCallback","addEventListener","passive","removeEventListener"],"sources":["../../../src/components/VOverlay/scrollStrategies.ts"],"sourcesContent":["// Utilities\nimport { effectScope, nextTick, onScopeDispose, watchEffect } from 'vue'\nimport { requestNewFrame } from './requestNewFrame'\nimport { convertToUnit, getScrollParents, hasScrollbar, IN_BROWSER, propsFactory } from '@/util'\n\n// Types\nimport type { EffectScope, PropType, Ref } from 'vue'\n\nexport interface ScrollStrategyData {\n root: Ref<HTMLElement | undefined>\n contentEl: Ref<HTMLElement | undefined>\n activatorEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n updateLocation: Ref<((e: Event) => void) | undefined>\n}\n\ntype ScrollStrategyFn = (data: ScrollStrategyData, props: StrategyProps, scope: EffectScope) => void\n\nconst scrollStrategies = {\n none: null,\n close: closeScrollStrategy,\n block: blockScrollStrategy,\n reposition: repositionScrollStrategy,\n}\n\nexport interface StrategyProps {\n scrollStrategy: keyof typeof scrollStrategies | ScrollStrategyFn\n contained: boolean | undefined\n}\n\nexport const makeScrollStrategyProps = propsFactory({\n scrollStrategy: {\n type: [String, Function] as PropType<StrategyProps['scrollStrategy']>,\n default: 'block',\n validator: (val: any) => typeof val === 'function' || val in scrollStrategies,\n },\n}, 'VOverlay-scroll-strategies')\n\nexport function useScrollStrategies (\n props: StrategyProps,\n data: ScrollStrategyData\n) {\n if (!IN_BROWSER) return\n\n let scope: EffectScope | undefined\n watchEffect(async () => {\n scope?.stop()\n\n if (!(data.isActive.value && props.scrollStrategy)) return\n\n scope = effectScope()\n await nextTick()\n scope.active && scope.run(() => {\n if (typeof props.scrollStrategy === 'function') {\n props.scrollStrategy(data, props, scope!)\n } else {\n scrollStrategies[props.scrollStrategy]?.(data, props, scope!)\n }\n })\n })\n\n onScopeDispose(() => {\n scope?.stop()\n })\n}\n\nfunction closeScrollStrategy (data: ScrollStrategyData) {\n function onScroll (e: Event) {\n data.isActive.value = false\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, onScroll)\n}\n\nfunction blockScrollStrategy (data: ScrollStrategyData, props: StrategyProps) {\n const offsetParent = data.root.value?.offsetParent\n const scrollElements = [...new Set([\n ...getScrollParents(data.activatorEl.value, props.contained ? offsetParent : undefined),\n ...getScrollParents(data.contentEl.value, props.contained ? offsetParent : undefined),\n ])].filter(el => !el.classList.contains('v-overlay-scroll-blocked'))\n const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth\n\n const scrollableParent = (el => hasScrollbar(el) && el)(offsetParent || document.documentElement)\n if (scrollableParent) {\n data.root.value!.classList.add('v-overlay--scroll-blocked')\n }\n\n scrollElements.forEach((el, i) => {\n el.style.setProperty('--v-body-scroll-x', convertToUnit(-el.scrollLeft))\n el.style.setProperty('--v-body-scroll-y', convertToUnit(-el.scrollTop))\n el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth))\n el.classList.add('v-overlay-scroll-blocked')\n })\n\n onScopeDispose(() => {\n scrollElements.forEach((el, i) => {\n const x = parseFloat(el.style.getPropertyValue('--v-body-scroll-x'))\n const y = parseFloat(el.style.getPropertyValue('--v-body-scroll-y'))\n\n el.style.removeProperty('--v-body-scroll-x')\n el.style.removeProperty('--v-body-scroll-y')\n el.style.removeProperty('--v-scrollbar-offset')\n el.classList.remove('v-overlay-scroll-blocked')\n\n el.scrollLeft = -x\n el.scrollTop = -y\n })\n if (scrollableParent) {\n data.root.value!.classList.remove('v-overlay--scroll-blocked')\n }\n })\n}\n\nfunction repositionScrollStrategy (data: ScrollStrategyData, props: StrategyProps, scope: EffectScope) {\n let slow = false\n let raf = -1\n let ric = -1\n\n function update (e: Event) {\n requestNewFrame(() => {\n const start = performance.now()\n data.updateLocation.value?.(e)\n const time = performance.now() - start\n slow = time / (1000 / 60) > 2\n })\n }\n\n ric = (typeof requestIdleCallback === 'undefined' ? (cb: Function) => cb() : requestIdleCallback)(() => {\n scope.run(() => {\n bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {\n if (slow) {\n // If the position calculation is slow,\n // defer updates until scrolling is finished.\n // Browsers usually fire one scroll event per frame so\n // we just wait until we've got two frames without an event\n cancelAnimationFrame(raf)\n raf = requestAnimationFrame(() => {\n raf = requestAnimationFrame(() => {\n update(e)\n })\n })\n } else {\n update(e)\n }\n })\n })\n })\n\n onScopeDispose(() => {\n typeof cancelIdleCallback !== 'undefined' && cancelIdleCallback(ric)\n cancelAnimationFrame(raf)\n })\n}\n\n/** @private */\nfunction bindScroll (el: HTMLElement | undefined, onScroll: (e: Event) => void) {\n const scrollElements = [document, ...getScrollParents(el)]\n scrollElements.forEach(el => {\n el.addEventListener('scroll', onScroll, { passive: true })\n })\n\n onScopeDispose(() => {\n scrollElements.forEach(el => {\n el.removeEventListener('scroll', onScroll)\n })\n })\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scrollStrategies.mjs","names":["effectScope","nextTick","onScopeDispose","watchEffect","requestNewFrame","convertToUnit","getScrollParents","hasScrollbar","IN_BROWSER","propsFactory","scrollStrategies","none","close","closeScrollStrategy","block","blockScrollStrategy","reposition","repositionScrollStrategy","makeScrollStrategyProps","scrollStrategy","type","String","Function","default","validator","val","useScrollStrategies","props","data","scope","stop","isActive","value","active","run","onScroll","e","bindScroll","activatorEl","contentEl","offsetParent","root","scrollElements","Set","contained","undefined","filter","el","classList","contains","scrollbarWidth","window","innerWidth","document","documentElement","offsetWidth","scrollableParent","add","forEach","i","style","setProperty","scrollLeft","scrollTop","x","parseFloat","getPropertyValue","y","removeProperty","remove","slow","raf","ric","update","start","performance","now","updateLocation","time","requestIdleCallback","cb","cancelAnimationFrame","requestAnimationFrame","cancelIdleCallback","addEventListener","passive","removeEventListener"],"sources":["../../../src/components/VOverlay/scrollStrategies.ts"],"sourcesContent":["// Utilities\nimport { effectScope, nextTick, onScopeDispose, watchEffect } from 'vue'\nimport { requestNewFrame } from './requestNewFrame'\nimport { convertToUnit, getScrollParents, hasScrollbar, IN_BROWSER, propsFactory } from '@/util'\n\n// Types\nimport type { EffectScope, PropType, Ref } from 'vue'\n\nexport interface ScrollStrategyData {\n root: Ref<HTMLElement | undefined>\n contentEl: Ref<HTMLElement | undefined>\n activatorEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n updateLocation: Ref<((e: Event) => void) | undefined>\n}\n\ntype ScrollStrategyFn = (data: ScrollStrategyData, props: StrategyProps, scope: EffectScope) => void\n\nconst scrollStrategies = {\n none: null,\n close: closeScrollStrategy,\n block: blockScrollStrategy,\n reposition: repositionScrollStrategy,\n}\n\nexport interface StrategyProps {\n scrollStrategy: keyof typeof scrollStrategies | ScrollStrategyFn\n contained: boolean | undefined\n}\n\nexport const makeScrollStrategyProps = propsFactory({\n scrollStrategy: {\n type: [String, Function] as PropType<StrategyProps['scrollStrategy']>,\n default: 'block',\n validator: (val: any) => typeof val === 'function' || val in scrollStrategies,\n },\n}, 'VOverlay-scroll-strategies')\n\nexport function useScrollStrategies (\n props: StrategyProps,\n data: ScrollStrategyData\n) {\n if (!IN_BROWSER) return\n\n let scope: EffectScope | undefined\n watchEffect(async () => {\n scope?.stop()\n\n if (!(data.isActive.value && props.scrollStrategy)) return\n\n scope = effectScope()\n await nextTick()\n scope.active && scope.run(() => {\n if (typeof props.scrollStrategy === 'function') {\n props.scrollStrategy(data, props, scope!)\n } else {\n scrollStrategies[props.scrollStrategy]?.(data, props, scope!)\n }\n })\n })\n\n onScopeDispose(() => {\n scope?.stop()\n })\n}\n\nfunction closeScrollStrategy (data: ScrollStrategyData) {\n function onScroll (e: Event) {\n data.isActive.value = false\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, onScroll)\n}\n\nfunction blockScrollStrategy (data: ScrollStrategyData, props: StrategyProps) {\n const offsetParent = data.root.value?.offsetParent\n const scrollElements = [...new Set([\n ...getScrollParents(data.activatorEl.value, props.contained ? offsetParent : undefined),\n ...getScrollParents(data.contentEl.value, props.contained ? offsetParent : undefined),\n ])].filter(el => !el.classList.contains('v-overlay-scroll-blocked'))\n const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth\n\n const scrollableParent = (el => hasScrollbar(el) && el)(offsetParent || document.documentElement)\n if (scrollableParent) {\n data.root.value!.classList.add('v-overlay--scroll-blocked')\n }\n\n scrollElements.forEach((el, i) => {\n el.style.setProperty('--v-body-scroll-x', convertToUnit(-el.scrollLeft))\n el.style.setProperty('--v-body-scroll-y', convertToUnit(-el.scrollTop))\n\n if (el !== document.documentElement) {\n el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth))\n }\n\n el.classList.add('v-overlay-scroll-blocked')\n })\n\n onScopeDispose(() => {\n scrollElements.forEach((el, i) => {\n const x = parseFloat(el.style.getPropertyValue('--v-body-scroll-x'))\n const y = parseFloat(el.style.getPropertyValue('--v-body-scroll-y'))\n\n el.style.removeProperty('--v-body-scroll-x')\n el.style.removeProperty('--v-body-scroll-y')\n el.style.removeProperty('--v-scrollbar-offset')\n el.classList.remove('v-overlay-scroll-blocked')\n\n el.scrollLeft = -x\n el.scrollTop = -y\n })\n if (scrollableParent) {\n data.root.value!.classList.remove('v-overlay--scroll-blocked')\n }\n })\n}\n\nfunction repositionScrollStrategy (data: ScrollStrategyData, props: StrategyProps, scope: EffectScope) {\n let slow = false\n let raf = -1\n let ric = -1\n\n function update (e: Event) {\n requestNewFrame(() => {\n const start = performance.now()\n data.updateLocation.value?.(e)\n const time = performance.now() - start\n slow = time / (1000 / 60) > 2\n })\n }\n\n ric = (typeof requestIdleCallback === 'undefined' ? (cb: Function) => cb() : requestIdleCallback)(() => {\n scope.run(() => {\n bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {\n if (slow) {\n // If the position calculation is slow,\n // defer updates until scrolling is finished.\n // Browsers usually fire one scroll event per frame so\n // we just wait until we've got two frames without an event\n cancelAnimationFrame(raf)\n raf = requestAnimationFrame(() => {\n raf = requestAnimationFrame(() => {\n update(e)\n })\n })\n } else {\n update(e)\n }\n })\n })\n })\n\n onScopeDispose(() => {\n typeof cancelIdleCallback !== 'undefined' && cancelIdleCallback(ric)\n cancelAnimationFrame(raf)\n })\n}\n\n/** @private */\nfunction bindScroll (el: HTMLElement | undefined, onScroll: (e: Event) => void) {\n const scrollElements = [document, ...getScrollParents(el)]\n scrollElements.forEach(el => {\n el.addEventListener('scroll', onScroll, { passive: true })\n })\n\n onScopeDispose(() => {\n scrollElements.forEach(el => {\n el.removeEventListener('scroll', onScroll)\n })\n })\n}\n"],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ declare const VRadio: {
|
|
|
31
31
|
inline?: boolean | undefined;
|
|
32
32
|
error?: boolean | undefined;
|
|
33
33
|
style?: vue.StyleValue | undefined;
|
|
34
|
-
disabled?: boolean | undefined;
|
|
34
|
+
disabled?: boolean | null | undefined;
|
|
35
35
|
multiple?: boolean | null | undefined;
|
|
36
36
|
readonly?: boolean | undefined;
|
|
37
37
|
density?: Density | undefined;
|
|
@@ -144,7 +144,7 @@ declare const VRadio: {
|
|
|
144
144
|
inline: boolean;
|
|
145
145
|
error: boolean;
|
|
146
146
|
style: vue.StyleValue;
|
|
147
|
-
disabled: boolean;
|
|
147
|
+
disabled: boolean | null;
|
|
148
148
|
multiple: boolean | null;
|
|
149
149
|
readonly: boolean;
|
|
150
150
|
density: Density;
|
|
@@ -193,7 +193,7 @@ declare const VRadio: {
|
|
|
193
193
|
inline: boolean;
|
|
194
194
|
error: boolean;
|
|
195
195
|
style: vue.StyleValue;
|
|
196
|
-
disabled: boolean;
|
|
196
|
+
disabled: boolean | null;
|
|
197
197
|
multiple: boolean | null;
|
|
198
198
|
readonly: boolean;
|
|
199
199
|
density: Density;
|
|
@@ -238,7 +238,7 @@ declare const VRadio: {
|
|
|
238
238
|
inline: boolean;
|
|
239
239
|
error: boolean;
|
|
240
240
|
style: vue.StyleValue;
|
|
241
|
-
disabled: boolean;
|
|
241
|
+
disabled: boolean | null;
|
|
242
242
|
multiple: boolean | null;
|
|
243
243
|
readonly: boolean;
|
|
244
244
|
density: Density;
|
|
@@ -291,7 +291,7 @@ declare const VRadio: {
|
|
|
291
291
|
inline: boolean;
|
|
292
292
|
error: boolean;
|
|
293
293
|
style: vue.StyleValue;
|
|
294
|
-
disabled: boolean;
|
|
294
|
+
disabled: boolean | null;
|
|
295
295
|
multiple: boolean | null;
|
|
296
296
|
readonly: boolean;
|
|
297
297
|
density: Density;
|
|
@@ -340,7 +340,7 @@ declare const VRadio: {
|
|
|
340
340
|
inline: boolean;
|
|
341
341
|
error: boolean;
|
|
342
342
|
style: vue.StyleValue;
|
|
343
|
-
disabled: boolean;
|
|
343
|
+
disabled: boolean | null;
|
|
344
344
|
multiple: boolean | null;
|
|
345
345
|
readonly: boolean;
|
|
346
346
|
density: Density;
|
|
@@ -374,7 +374,10 @@ declare const VRadio: {
|
|
|
374
374
|
default: null;
|
|
375
375
|
};
|
|
376
376
|
color: StringConstructor;
|
|
377
|
-
disabled:
|
|
377
|
+
disabled: {
|
|
378
|
+
type: vue.PropType<boolean | null>;
|
|
379
|
+
default: null;
|
|
380
|
+
};
|
|
378
381
|
defaultsTarget: StringConstructor;
|
|
379
382
|
error: BooleanConstructor;
|
|
380
383
|
id: StringConstructor;
|
|
@@ -420,7 +423,10 @@ declare const VRadio: {
|
|
|
420
423
|
default: null;
|
|
421
424
|
};
|
|
422
425
|
color: StringConstructor;
|
|
423
|
-
disabled:
|
|
426
|
+
disabled: {
|
|
427
|
+
type: vue.PropType<boolean | null>;
|
|
428
|
+
default: null;
|
|
429
|
+
};
|
|
424
430
|
defaultsTarget: StringConstructor;
|
|
425
431
|
error: BooleanConstructor;
|
|
426
432
|
id: StringConstructor;
|
|
@@ -57,7 +57,7 @@ declare const VRadioGroup: {
|
|
|
57
57
|
height?: string | number | undefined;
|
|
58
58
|
direction?: "horizontal" | "vertical" | undefined;
|
|
59
59
|
style?: vue.StyleValue | undefined;
|
|
60
|
-
disabled?: boolean | undefined;
|
|
60
|
+
disabled?: boolean | null | undefined;
|
|
61
61
|
readonly?: boolean | undefined;
|
|
62
62
|
messages?: string | readonly string[] | undefined;
|
|
63
63
|
density?: Density | undefined;
|
|
@@ -209,7 +209,7 @@ declare const VRadioGroup: {
|
|
|
209
209
|
height: string | number;
|
|
210
210
|
direction: "horizontal" | "vertical";
|
|
211
211
|
style: vue.StyleValue;
|
|
212
|
-
disabled: boolean;
|
|
212
|
+
disabled: boolean | null;
|
|
213
213
|
readonly: boolean;
|
|
214
214
|
messages: string | readonly string[];
|
|
215
215
|
density: Density;
|
|
@@ -288,7 +288,7 @@ declare const VRadioGroup: {
|
|
|
288
288
|
height: string | number;
|
|
289
289
|
direction: "horizontal" | "vertical";
|
|
290
290
|
style: vue.StyleValue;
|
|
291
|
-
disabled: boolean;
|
|
291
|
+
disabled: boolean | null;
|
|
292
292
|
readonly: boolean;
|
|
293
293
|
messages: string | readonly string[];
|
|
294
294
|
density: Density;
|
|
@@ -354,7 +354,7 @@ declare const VRadioGroup: {
|
|
|
354
354
|
height: string | number;
|
|
355
355
|
direction: "horizontal" | "vertical";
|
|
356
356
|
style: vue.StyleValue;
|
|
357
|
-
disabled: boolean;
|
|
357
|
+
disabled: boolean | null;
|
|
358
358
|
readonly: boolean;
|
|
359
359
|
messages: string | readonly string[];
|
|
360
360
|
density: Density;
|
|
@@ -435,7 +435,7 @@ declare const VRadioGroup: {
|
|
|
435
435
|
height: string | number;
|
|
436
436
|
direction: "horizontal" | "vertical";
|
|
437
437
|
style: vue.StyleValue;
|
|
438
|
-
disabled: boolean;
|
|
438
|
+
disabled: boolean | null;
|
|
439
439
|
readonly: boolean;
|
|
440
440
|
messages: string | readonly string[];
|
|
441
441
|
density: Density;
|
|
@@ -514,7 +514,7 @@ declare const VRadioGroup: {
|
|
|
514
514
|
height: string | number;
|
|
515
515
|
direction: "horizontal" | "vertical";
|
|
516
516
|
style: vue.StyleValue;
|
|
517
|
-
disabled: boolean;
|
|
517
|
+
disabled: boolean | null;
|
|
518
518
|
readonly: boolean;
|
|
519
519
|
messages: string | readonly string[];
|
|
520
520
|
density: Density;
|
|
@@ -575,7 +575,10 @@ declare const VRadioGroup: {
|
|
|
575
575
|
type: vue.PropType<vue.StyleValue>;
|
|
576
576
|
default: null;
|
|
577
577
|
};
|
|
578
|
-
disabled:
|
|
578
|
+
disabled: {
|
|
579
|
+
type: vue.PropType<boolean | null>;
|
|
580
|
+
default: null;
|
|
581
|
+
};
|
|
579
582
|
readonly: BooleanConstructor;
|
|
580
583
|
class: vue.PropType<any>;
|
|
581
584
|
theme: StringConstructor;
|
|
@@ -657,7 +660,10 @@ declare const VRadioGroup: {
|
|
|
657
660
|
type: vue.PropType<vue.StyleValue>;
|
|
658
661
|
default: null;
|
|
659
662
|
};
|
|
660
|
-
disabled:
|
|
663
|
+
disabled: {
|
|
664
|
+
type: vue.PropType<boolean | null>;
|
|
665
|
+
default: null;
|
|
666
|
+
};
|
|
661
667
|
readonly: BooleanConstructor;
|
|
662
668
|
class: vue.PropType<any>;
|
|
663
669
|
theme: StringConstructor;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
.v-responsive {
|
|
2
|
-
display:
|
|
3
|
-
grid-template-rows: minmax(100%, 1fr);
|
|
4
|
-
grid-template-columns: 1fr;
|
|
2
|
+
display: flex;
|
|
5
3
|
flex: 1 0 auto;
|
|
6
4
|
max-height: 100%;
|
|
7
5
|
max-width: 100%;
|
|
@@ -9,7 +7,7 @@
|
|
|
9
7
|
position: relative;
|
|
10
8
|
}
|
|
11
9
|
.v-responsive--inline {
|
|
12
|
-
display: inline-
|
|
10
|
+
display: inline-flex;
|
|
13
11
|
flex: 0 0 auto;
|
|
14
12
|
}
|
|
15
13
|
|
|
@@ -18,15 +16,12 @@
|
|
|
18
16
|
max-width: 100%;
|
|
19
17
|
}
|
|
20
18
|
|
|
19
|
+
.v-responsive__sizer ~ .v-responsive__content {
|
|
20
|
+
margin-inline-start: -100%;
|
|
21
|
+
}
|
|
22
|
+
|
|
21
23
|
.v-responsive__sizer {
|
|
22
24
|
flex: 1 0 0px;
|
|
23
25
|
transition: padding-bottom 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
24
26
|
pointer-events: none;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.v-responsive__sizer,
|
|
28
|
-
.v-responsive__content {
|
|
29
|
-
position: relative;
|
|
30
|
-
grid-row-start: 1;
|
|
31
|
-
grid-column-start: 1;
|
|
32
27
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
@use '../../styles/settings'
|
|
2
2
|
|
|
3
3
|
.v-responsive
|
|
4
|
-
display:
|
|
5
|
-
grid-template-rows: minmax(100%, 1fr)
|
|
6
|
-
grid-template-columns: 1fr
|
|
4
|
+
display: flex
|
|
7
5
|
flex: 1 0 auto
|
|
8
6
|
max-height: 100%
|
|
9
7
|
max-width: 100%
|
|
@@ -11,20 +9,17 @@
|
|
|
11
9
|
position: relative
|
|
12
10
|
|
|
13
11
|
&--inline
|
|
14
|
-
display: inline-
|
|
12
|
+
display: inline-flex
|
|
15
13
|
flex: 0 0 auto
|
|
16
14
|
|
|
17
15
|
.v-responsive__content
|
|
18
16
|
flex: 1 0 0px
|
|
19
17
|
max-width: 100%
|
|
20
18
|
|
|
19
|
+
.v-responsive__sizer ~ .v-responsive__content
|
|
20
|
+
margin-inline-start: -100%
|
|
21
|
+
|
|
21
22
|
.v-responsive__sizer
|
|
22
23
|
flex: 1 0 0px
|
|
23
24
|
transition: padding-bottom 0.2s settings.$standard-easing
|
|
24
25
|
pointer-events: none
|
|
25
|
-
|
|
26
|
-
.v-responsive__sizer,
|
|
27
|
-
.v-responsive__content
|
|
28
|
-
position: relative
|
|
29
|
-
grid-row-start: 1
|
|
30
|
-
grid-column-start: 1
|
|
@@ -10,8 +10,9 @@ import { VDefaultsProvider } from "../VDefaultsProvider/index.mjs";
|
|
|
10
10
|
import { VIcon } from "../VIcon/index.mjs";
|
|
11
11
|
import { VList, VListItem } from "../VList/index.mjs";
|
|
12
12
|
import { VMenu } from "../VMenu/index.mjs";
|
|
13
|
-
import { VTextField } from "../VTextField/
|
|
14
|
-
import {
|
|
13
|
+
import { makeVTextFieldProps, VTextField } from "../VTextField/VTextField.mjs";
|
|
14
|
+
import { VVirtualScroll } from "../VVirtualScroll/index.mjs"; // Composables
|
|
15
|
+
import { useScrolling } from "./useScrolling.mjs";
|
|
15
16
|
import { useForm } from "../../composables/form.mjs";
|
|
16
17
|
import { forwardRefs } from "../../composables/forwardRefs.mjs";
|
|
17
18
|
import { IconValue } from "../../composables/icons.mjs";
|
|
@@ -112,6 +113,10 @@ export const VSelect = genericComponent()({
|
|
|
112
113
|
});
|
|
113
114
|
const menuDisabled = computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
|
|
114
115
|
const listRef = ref();
|
|
116
|
+
const {
|
|
117
|
+
onListScroll,
|
|
118
|
+
onListKeydown
|
|
119
|
+
} = useScrolling(listRef, vTextFieldRef);
|
|
115
120
|
function onClear(e) {
|
|
116
121
|
if (props.openOnClear) {
|
|
117
122
|
menu.value = true;
|
|
@@ -158,11 +163,6 @@ export const VSelect = genericComponent()({
|
|
|
158
163
|
model.value = [item];
|
|
159
164
|
}
|
|
160
165
|
}
|
|
161
|
-
function onListKeydown(e) {
|
|
162
|
-
if (e.key === 'Tab') {
|
|
163
|
-
vTextFieldRef.value?.focus();
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
166
|
function select(item) {
|
|
167
167
|
if (props.multiple) {
|
|
168
168
|
const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
|
|
@@ -245,34 +245,46 @@ export const VSelect = genericComponent()({
|
|
|
245
245
|
"onMousedown": e => e.preventDefault(),
|
|
246
246
|
"onKeydown": onListKeydown,
|
|
247
247
|
"onFocusin": onFocusin,
|
|
248
|
+
"onScrollPassive": onListScroll,
|
|
248
249
|
"tabindex": "-1"
|
|
249
250
|
}, {
|
|
250
251
|
default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? _createVNode(VListItem, {
|
|
251
252
|
"title": t(props.noDataText)
|
|
252
|
-
}, null)),
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
253
|
+
}, null)), _createVNode(VVirtualScroll, {
|
|
254
|
+
"renderless": true,
|
|
255
|
+
"items": displayItems.value
|
|
256
|
+
}, {
|
|
257
|
+
default: _ref2 => {
|
|
258
|
+
let {
|
|
259
|
+
item,
|
|
260
|
+
index,
|
|
261
|
+
itemRef
|
|
262
|
+
} = _ref2;
|
|
263
|
+
const itemProps = mergeProps(item.props, {
|
|
264
|
+
ref: itemRef,
|
|
265
|
+
key: index,
|
|
266
|
+
onClick: () => select(item)
|
|
267
|
+
});
|
|
268
|
+
return slots.item?.({
|
|
269
|
+
item,
|
|
270
|
+
index,
|
|
271
|
+
props: itemProps
|
|
272
|
+
}) ?? _createVNode(VListItem, itemProps, {
|
|
273
|
+
prepend: _ref3 => {
|
|
274
|
+
let {
|
|
275
|
+
isSelected
|
|
276
|
+
} = _ref3;
|
|
277
|
+
return _createVNode(_Fragment, null, [props.multiple && !props.hideSelected ? _createVNode(VCheckboxBtn, {
|
|
278
|
+
"key": item.value,
|
|
279
|
+
"modelValue": isSelected,
|
|
280
|
+
"ripple": false,
|
|
281
|
+
"tabindex": "-1"
|
|
282
|
+
}, null) : undefined, item.props.prependIcon && _createVNode(VIcon, {
|
|
283
|
+
"icon": item.props.prependIcon
|
|
284
|
+
}, null)]);
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
276
288
|
}), slots['append-item']?.()]
|
|
277
289
|
})]
|
|
278
290
|
}), selections.value.map((item, index) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VSelect.mjs","names":["VDialogTransition","VCheckboxBtn","VChip","VDefaultsProvider","VIcon","VList","VListItem","VMenu","VTextField","makeVTextFieldProps","useForm","forwardRefs","IconValue","makeItemsProps","useItems","useLocale","useProxiedModel","makeTransitionProps","computed","mergeProps","ref","shallowRef","deepEqual","genericComponent","omit","propsFactory","useRender","wrapInArray","makeSelectProps","chips","Boolean","closableChips","eager","hideNoData","hideSelected","menu","menuIcon","type","default","menuProps","Object","multiple","noDataText","String","openOnClear","valueComparator","Function","itemChildren","makeVSelectProps","modelValue","transition","component","VSelect","name","props","emits","focused","val","setup","_ref","slots","t","vTextFieldRef","vMenuRef","_menu","get","value","set","v","ΨopenChildren","items","transformIn","transformOut","model","transformed","form","selections","map","find","item","selected","selection","isFocused","keyboardLookupPrefix","keyboardLookupLastTime","displayItems","filter","some","s","menuDisabled","length","readonly","isReadonly","listRef","onClear","e","onMousedownControl","onKeydown","includes","key","preventDefault","focus","KEYBOARD_LOOKUP_THRESHOLD","checkPrintable","isPrintableChar","noModifier","ctrlKey","metaKey","altKey","now","performance","toLowerCase","title","startsWith","undefined","onListKeydown","select","index","findIndex","splice","onBlur","$el","contains","relatedTarget","onAfterLeave","onFocusin","hasChips","chip","hasList","isDirty","textFieldProps","filterProps","placeholder","label","persistentPlaceholder","_createVNode","_mergeProps","join","$event","externalValue","class","style","_Fragment","itemProps","onClick","prepend","_ref2","isSelected","prependIcon","onChipClose","stopPropagation","slotProps","onMousedown","closable","size","text","_createTextVNode","append-inner","_len","arguments","args","Array","_key"],"sources":["../../../src/components/VSelect/VSelect.tsx"],"sourcesContent":["// Styles\nimport './VSelect.sass'\n\n// Components\nimport { VDialogTransition } from '@/components/transitions'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\nimport { VChip } from '@/components/VChip'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\nimport { VList, VListItem } from '@/components/VList'\nimport { VMenu } from '@/components/VMenu'\nimport { VTextField } from '@/components/VTextField'\nimport { makeVTextFieldProps } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { useForm } from '@/composables/form'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { IconValue } from '@/composables/icons'\nimport { makeItemsProps, useItems } from '@/composables/list-items'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeTransitionProps } from '@/composables/transition'\n\n// Utilities\nimport { computed, mergeProps, ref, shallowRef } from 'vue'\nimport { deepEqual, genericComponent, omit, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { Component, PropType } from 'vue'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\nimport type { ListItem } from '@/composables/list-items'\nimport type { GenericProps } from '@/util'\n\ntype Primitive = string | number | boolean | symbol\n\ntype Val <T, ReturnObject extends boolean> = [T] extends [Primitive]\n ? T\n : (ReturnObject extends true ? T : any)\n\ntype Value <T, ReturnObject extends boolean, Multiple extends boolean> =\n Multiple extends true\n ? readonly Val<T, ReturnObject>[]\n : Val<T, ReturnObject> | null\n\nexport const makeSelectProps = propsFactory({\n chips: Boolean,\n closableChips: Boolean,\n eager: Boolean,\n hideNoData: Boolean,\n hideSelected: Boolean,\n menu: Boolean,\n menuIcon: {\n type: IconValue,\n default: '$dropdown',\n },\n menuProps: {\n type: Object as PropType<VMenu['$props']>,\n },\n multiple: Boolean,\n noDataText: {\n type: String,\n default: '$vuetify.noDataText',\n },\n openOnClear: Boolean,\n valueComparator: {\n type: Function as PropType<typeof deepEqual>,\n default: deepEqual,\n },\n\n ...makeItemsProps({ itemChildren: false }),\n}, 'Select')\n\nexport const makeVSelectProps = propsFactory({\n ...makeSelectProps(),\n ...omit(makeVTextFieldProps({\n modelValue: null,\n }), ['validationValue', 'dirty', 'appendInnerIcon']),\n ...makeTransitionProps({ transition: { component: VDialogTransition as Component } }),\n}, 'VSelect')\n\nexport const VSelect = genericComponent<new <\n T extends readonly any[],\n Item = T extends readonly (infer U)[] ? U : never,\n ReturnObject extends boolean = false,\n Multiple extends boolean = false,\n V extends Value<Item, ReturnObject, Multiple> = Value<Item, ReturnObject, Multiple>\n>(\n props: {\n items?: T\n returnObject?: ReturnObject\n multiple?: Multiple\n modelValue?: V | null\n 'onUpdate:modelValue'?: (val: V) => void\n },\n slots: Omit<VInputSlots & VFieldSlots, 'default'> & {\n item: { item: ListItem<Item>, index: number, props: Record<string, unknown> }\n chip: { item: ListItem<Item>, index: number, props: Record<string, unknown> }\n selection: { item: ListItem<Item>, index: number }\n 'prepend-item': never\n 'append-item': never\n 'no-data': never\n }\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VSelect',\n\n props: makeVSelectProps(),\n\n emits: {\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (val: any) => true,\n 'update:menu': (val: boolean) => true,\n },\n\n setup (props, { slots }) {\n const { t } = useLocale()\n const vTextFieldRef = ref()\n const vMenuRef = ref<VMenu>()\n const _menu = useProxiedModel(props, 'menu')\n const menu = computed({\n get: () => _menu.value,\n set: v => {\n if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return\n _menu.value = v\n },\n })\n const { items, transformIn, transformOut } = useItems(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => transformIn(v === null ? [null] : wrapInArray(v)),\n v => {\n const transformed = transformOut(v)\n return props.multiple ? transformed : (transformed[0] ?? null)\n }\n )\n const form = useForm()\n const selections = computed(() => {\n return model.value.map(v => {\n return items.value.find(item => props.valueComparator(item.value, v.value)) || v\n })\n })\n const selected = computed(() => selections.value.map(selection => selection.props.value))\n const isFocused = shallowRef(false)\n\n let keyboardLookupPrefix = ''\n let keyboardLookupLastTime: number\n\n const displayItems = computed(() => {\n if (props.hideSelected) {\n return items.value.filter(item => !selections.value.some(s => s === item))\n }\n return items.value\n })\n\n const menuDisabled = computed(() => (\n (props.hideNoData && !items.value.length) ||\n props.readonly || form?.isReadonly.value\n ))\n\n const listRef = ref<VList>()\n\n function onClear (e: MouseEvent) {\n if (props.openOnClear) {\n menu.value = true\n }\n }\n function onMousedownControl () {\n if (menuDisabled.value) return\n\n menu.value = !menu.value\n }\n function onKeydown (e: KeyboardEvent) {\n if (props.readonly || form?.isReadonly.value) return\n\n if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {\n e.preventDefault()\n }\n\n if (['Enter', 'ArrowDown', ' '].includes(e.key)) {\n menu.value = true\n }\n\n if (['Escape', 'Tab'].includes(e.key)) {\n menu.value = false\n }\n\n if (e.key === 'Home') {\n listRef.value?.focus('first')\n } else if (e.key === 'End') {\n listRef.value?.focus('last')\n }\n\n // html select hotkeys\n const KEYBOARD_LOOKUP_THRESHOLD = 1000 // milliseconds\n\n function checkPrintable (e: KeyboardEvent) {\n const isPrintableChar = e.key.length === 1\n const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey\n return isPrintableChar && noModifier\n }\n\n if (props.multiple || !checkPrintable(e)) return\n\n const now = performance.now()\n if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {\n keyboardLookupPrefix = ''\n }\n keyboardLookupPrefix += e.key.toLowerCase()\n keyboardLookupLastTime = now\n\n const item = items.value.find(item => item.title.toLowerCase().startsWith(keyboardLookupPrefix))\n if (item !== undefined) {\n model.value = [item]\n }\n }\n function onListKeydown (e: KeyboardEvent) {\n if (e.key === 'Tab') {\n vTextFieldRef.value?.focus()\n }\n }\n function select (item: ListItem) {\n if (props.multiple) {\n const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value))\n\n if (index === -1) {\n model.value = [...model.value, item]\n } else {\n const value = [...model.value]\n value.splice(index, 1)\n model.value = value\n }\n } else {\n model.value = [item]\n menu.value = false\n }\n }\n function onBlur (e: FocusEvent) {\n if (!listRef.value?.$el.contains(e.relatedTarget as HTMLElement)) {\n menu.value = false\n }\n }\n function onAfterLeave () {\n if (isFocused.value) {\n vTextFieldRef.value?.focus()\n }\n }\n function onFocusin (e: FocusEvent) {\n isFocused.value = true\n }\n\n useRender(() => {\n const hasChips = !!(props.chips || slots.chip)\n const hasList = !!(\n (!props.hideNoData || displayItems.value.length) ||\n slots['prepend-item'] ||\n slots['append-item'] ||\n slots['no-data']\n )\n const isDirty = model.value.length > 0\n const [textFieldProps] = VTextField.filterProps(props)\n\n const placeholder = isDirty || (\n !isFocused.value &&\n props.label &&\n !props.persistentPlaceholder\n ) ? undefined : props.placeholder\n\n return (\n <VTextField\n ref={ vTextFieldRef }\n { ...textFieldProps }\n modelValue={ model.value.map(v => v.props.value).join(', ') }\n onUpdate:modelValue={ v => { if (v == null) model.value = [] } }\n v-model:focused={ isFocused.value }\n validationValue={ model.externalValue }\n dirty={ isDirty }\n class={[\n 'v-select',\n {\n 'v-select--active-menu': menu.value,\n 'v-select--chips': !!props.chips,\n [`v-select--${props.multiple ? 'multiple' : 'single'}`]: true,\n 'v-select--selected': model.value.length,\n 'v-select--selection-slot': !!slots.selection,\n },\n props.class,\n ]}\n style={ props.style }\n readonly\n placeholder={ placeholder }\n onClick:clear={ onClear }\n onMousedown:control={ onMousedownControl }\n onBlur={ onBlur }\n onKeydown={ onKeydown }\n >\n {{\n ...slots,\n default: () => (\n <>\n <VMenu\n ref={ vMenuRef }\n v-model={ menu.value }\n activator=\"parent\"\n contentClass=\"v-select__content\"\n disabled={ menuDisabled.value }\n eager={ props.eager }\n maxHeight={ 310 }\n openOnClick={ false }\n closeOnContentClick={ false }\n transition={ props.transition }\n onAfterLeave={ onAfterLeave }\n { ...props.menuProps }\n >\n { hasList && (\n <VList\n ref={ listRef }\n selected={ selected.value }\n selectStrategy={ props.multiple ? 'independent' : 'single-independent' }\n onMousedown={ (e: MouseEvent) => e.preventDefault() }\n onKeydown={ onListKeydown }\n onFocusin={ onFocusin }\n tabindex=\"-1\"\n >\n { slots['prepend-item']?.() }\n\n { !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? (\n <VListItem title={ t(props.noDataText) } />\n ))}\n\n { displayItems.value.map((item, index) => {\n const itemProps = mergeProps(item.props, {\n key: index,\n onClick: () => select(item),\n })\n\n return slots.item?.({\n item,\n index,\n props: itemProps,\n }) ?? (\n <VListItem { ...itemProps }>\n {{\n prepend: ({ isSelected }) => (\n <>\n { props.multiple && !props.hideSelected ? (\n <VCheckboxBtn\n key={ item.value }\n modelValue={ isSelected }\n ripple={ false }\n tabindex=\"-1\"\n />\n ) : undefined }\n\n { item.props.prependIcon && (\n <VIcon icon={ item.props.prependIcon } />\n )}\n </>\n ),\n }}\n </VListItem>\n )\n })}\n\n { slots['append-item']?.() }\n </VList>\n )}\n </VMenu>\n\n { selections.value.map((item, index) => {\n function onChipClose (e: Event) {\n e.stopPropagation()\n e.preventDefault()\n\n select(item)\n }\n\n const slotProps = {\n 'onClick:close': onChipClose,\n onMousedown (e: MouseEvent) {\n e.preventDefault()\n e.stopPropagation()\n },\n modelValue: true,\n 'onUpdate:modelValue': undefined,\n }\n\n return (\n <div key={ item.value } class=\"v-select__selection\">\n { hasChips ? (\n !slots.chip ? (\n <VChip\n key=\"chip\"\n closable={ props.closableChips }\n size=\"small\"\n text={ item.title }\n { ...slotProps }\n />\n ) : (\n <VDefaultsProvider\n key=\"chip-defaults\"\n defaults={{\n VChip: {\n closable: props.closableChips,\n size: 'small',\n text: item.title,\n },\n }}\n >\n { slots.chip?.({ item, index, props: slotProps }) }\n </VDefaultsProvider>\n )\n ) : (\n slots.selection?.({ item, index }) ?? (\n <span class=\"v-select__selection-text\">\n { item.title }\n { props.multiple && (index < selections.value.length - 1) && (\n <span class=\"v-select__selection-comma\">,</span>\n )}\n </span>\n )\n )}\n </div>\n )\n })}\n </>\n ),\n 'append-inner': (...args) => (\n <>\n { slots['append-inner']?.(...args) }\n { props.menuIcon ? (\n <VIcon\n class=\"v-select__menu-icon\"\n icon={ props.menuIcon }\n />\n ) : undefined }\n </>\n ),\n }}\n </VTextField>\n )\n })\n\n return forwardRefs({\n isFocused,\n menu,\n select,\n }, vTextFieldRef)\n },\n})\n\nexport type VSelect = InstanceType<typeof VSelect>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VSelect.mjs","names":["VDialogTransition","VCheckboxBtn","VChip","VDefaultsProvider","VIcon","VList","VListItem","VMenu","makeVTextFieldProps","VTextField","VVirtualScroll","useScrolling","useForm","forwardRefs","IconValue","makeItemsProps","useItems","useLocale","useProxiedModel","makeTransitionProps","computed","mergeProps","ref","shallowRef","deepEqual","genericComponent","omit","propsFactory","useRender","wrapInArray","makeSelectProps","chips","Boolean","closableChips","eager","hideNoData","hideSelected","menu","menuIcon","type","default","menuProps","Object","multiple","noDataText","String","openOnClear","valueComparator","Function","itemChildren","makeVSelectProps","modelValue","transition","component","VSelect","name","props","emits","focused","val","setup","_ref","slots","t","vTextFieldRef","vMenuRef","_menu","get","value","set","v","ΨopenChildren","items","transformIn","transformOut","model","transformed","form","selections","map","find","item","selected","selection","isFocused","keyboardLookupPrefix","keyboardLookupLastTime","displayItems","filter","some","s","menuDisabled","length","readonly","isReadonly","listRef","onListScroll","onListKeydown","onClear","e","onMousedownControl","onKeydown","includes","key","preventDefault","focus","KEYBOARD_LOOKUP_THRESHOLD","checkPrintable","isPrintableChar","noModifier","ctrlKey","metaKey","altKey","now","performance","toLowerCase","title","startsWith","undefined","select","index","findIndex","splice","onBlur","$el","contains","relatedTarget","onAfterLeave","onFocusin","hasChips","chip","hasList","isDirty","textFieldProps","filterProps","placeholder","label","persistentPlaceholder","_createVNode","_mergeProps","join","$event","externalValue","class","style","_Fragment","_ref2","itemRef","itemProps","onClick","prepend","_ref3","isSelected","prependIcon","onChipClose","stopPropagation","slotProps","onMousedown","closable","size","text","_createTextVNode","append-inner","_len","arguments","args","Array","_key"],"sources":["../../../src/components/VSelect/VSelect.tsx"],"sourcesContent":["// Styles\nimport './VSelect.sass'\n\n// Components\nimport { VDialogTransition } from '@/components/transitions'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\nimport { VChip } from '@/components/VChip'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\nimport { VList, VListItem } from '@/components/VList'\nimport { VMenu } from '@/components/VMenu'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\nimport { VVirtualScroll } from '@/components/VVirtualScroll'\n\n// Composables\nimport { useScrolling } from './useScrolling'\nimport { useForm } from '@/composables/form'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { IconValue } from '@/composables/icons'\nimport { makeItemsProps, useItems } from '@/composables/list-items'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeTransitionProps } from '@/composables/transition'\n\n// Utilities\nimport { computed, mergeProps, ref, shallowRef } from 'vue'\nimport { deepEqual, genericComponent, omit, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { Component, PropType } from 'vue'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\nimport type { ListItem } from '@/composables/list-items'\nimport type { GenericProps } from '@/util'\n\ntype Primitive = string | number | boolean | symbol\n\ntype Val <T, ReturnObject extends boolean> = [T] extends [Primitive]\n ? T\n : (ReturnObject extends true ? T : any)\n\ntype Value <T, ReturnObject extends boolean, Multiple extends boolean> =\n Multiple extends true\n ? readonly Val<T, ReturnObject>[]\n : Val<T, ReturnObject> | null\n\nexport const makeSelectProps = propsFactory({\n chips: Boolean,\n closableChips: Boolean,\n eager: Boolean,\n hideNoData: Boolean,\n hideSelected: Boolean,\n menu: Boolean,\n menuIcon: {\n type: IconValue,\n default: '$dropdown',\n },\n menuProps: {\n type: Object as PropType<VMenu['$props']>,\n },\n multiple: Boolean,\n noDataText: {\n type: String,\n default: '$vuetify.noDataText',\n },\n openOnClear: Boolean,\n valueComparator: {\n type: Function as PropType<typeof deepEqual>,\n default: deepEqual,\n },\n\n ...makeItemsProps({ itemChildren: false }),\n}, 'Select')\n\nexport const makeVSelectProps = propsFactory({\n ...makeSelectProps(),\n ...omit(makeVTextFieldProps({\n modelValue: null,\n }), ['validationValue', 'dirty', 'appendInnerIcon']),\n ...makeTransitionProps({ transition: { component: VDialogTransition as Component } }),\n}, 'VSelect')\n\nexport const VSelect = genericComponent<new <\n T extends readonly any[],\n Item = T extends readonly (infer U)[] ? U : never,\n ReturnObject extends boolean = false,\n Multiple extends boolean = false,\n V extends Value<Item, ReturnObject, Multiple> = Value<Item, ReturnObject, Multiple>\n>(\n props: {\n items?: T\n returnObject?: ReturnObject\n multiple?: Multiple\n modelValue?: V | null\n 'onUpdate:modelValue'?: (val: V) => void\n },\n slots: Omit<VInputSlots & VFieldSlots, 'default'> & {\n item: { item: ListItem<Item>, index: number, props: Record<string, unknown> }\n chip: { item: ListItem<Item>, index: number, props: Record<string, unknown> }\n selection: { item: ListItem<Item>, index: number }\n 'prepend-item': never\n 'append-item': never\n 'no-data': never\n }\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VSelect',\n\n props: makeVSelectProps(),\n\n emits: {\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (val: any) => true,\n 'update:menu': (val: boolean) => true,\n },\n\n setup (props, { slots }) {\n const { t } = useLocale()\n const vTextFieldRef = ref()\n const vMenuRef = ref<VMenu>()\n const _menu = useProxiedModel(props, 'menu')\n const menu = computed({\n get: () => _menu.value,\n set: v => {\n if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return\n _menu.value = v\n },\n })\n const { items, transformIn, transformOut } = useItems(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => transformIn(v === null ? [null] : wrapInArray(v)),\n v => {\n const transformed = transformOut(v)\n return props.multiple ? transformed : (transformed[0] ?? null)\n }\n )\n const form = useForm()\n const selections = computed(() => {\n return model.value.map(v => {\n return items.value.find(item => props.valueComparator(item.value, v.value)) || v\n })\n })\n const selected = computed(() => selections.value.map(selection => selection.props.value))\n const isFocused = shallowRef(false)\n\n let keyboardLookupPrefix = ''\n let keyboardLookupLastTime: number\n\n const displayItems = computed(() => {\n if (props.hideSelected) {\n return items.value.filter(item => !selections.value.some(s => s === item))\n }\n return items.value\n })\n\n const menuDisabled = computed(() => (\n (props.hideNoData && !items.value.length) ||\n props.readonly || form?.isReadonly.value\n ))\n\n const listRef = ref<VList>()\n const { onListScroll, onListKeydown } = useScrolling(listRef, vTextFieldRef)\n function onClear (e: MouseEvent) {\n if (props.openOnClear) {\n menu.value = true\n }\n }\n function onMousedownControl () {\n if (menuDisabled.value) return\n\n menu.value = !menu.value\n }\n function onKeydown (e: KeyboardEvent) {\n if (props.readonly || form?.isReadonly.value) return\n\n if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {\n e.preventDefault()\n }\n\n if (['Enter', 'ArrowDown', ' '].includes(e.key)) {\n menu.value = true\n }\n\n if (['Escape', 'Tab'].includes(e.key)) {\n menu.value = false\n }\n\n if (e.key === 'Home') {\n listRef.value?.focus('first')\n } else if (e.key === 'End') {\n listRef.value?.focus('last')\n }\n\n // html select hotkeys\n const KEYBOARD_LOOKUP_THRESHOLD = 1000 // milliseconds\n\n function checkPrintable (e: KeyboardEvent) {\n const isPrintableChar = e.key.length === 1\n const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey\n return isPrintableChar && noModifier\n }\n\n if (props.multiple || !checkPrintable(e)) return\n\n const now = performance.now()\n if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {\n keyboardLookupPrefix = ''\n }\n keyboardLookupPrefix += e.key.toLowerCase()\n keyboardLookupLastTime = now\n\n const item = items.value.find(item => item.title.toLowerCase().startsWith(keyboardLookupPrefix))\n if (item !== undefined) {\n model.value = [item]\n }\n }\n function select (item: ListItem) {\n if (props.multiple) {\n const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value))\n\n if (index === -1) {\n model.value = [...model.value, item]\n } else {\n const value = [...model.value]\n value.splice(index, 1)\n model.value = value\n }\n } else {\n model.value = [item]\n menu.value = false\n }\n }\n function onBlur (e: FocusEvent) {\n if (!listRef.value?.$el.contains(e.relatedTarget as HTMLElement)) {\n menu.value = false\n }\n }\n function onAfterLeave () {\n if (isFocused.value) {\n vTextFieldRef.value?.focus()\n }\n }\n function onFocusin (e: FocusEvent) {\n isFocused.value = true\n }\n\n useRender(() => {\n const hasChips = !!(props.chips || slots.chip)\n const hasList = !!(\n (!props.hideNoData || displayItems.value.length) ||\n slots['prepend-item'] ||\n slots['append-item'] ||\n slots['no-data']\n )\n const isDirty = model.value.length > 0\n const [textFieldProps] = VTextField.filterProps(props)\n\n const placeholder = isDirty || (\n !isFocused.value &&\n props.label &&\n !props.persistentPlaceholder\n ) ? undefined : props.placeholder\n\n return (\n <VTextField\n ref={ vTextFieldRef }\n { ...textFieldProps }\n modelValue={ model.value.map(v => v.props.value).join(', ') }\n onUpdate:modelValue={ v => { if (v == null) model.value = [] } }\n v-model:focused={ isFocused.value }\n validationValue={ model.externalValue }\n dirty={ isDirty }\n class={[\n 'v-select',\n {\n 'v-select--active-menu': menu.value,\n 'v-select--chips': !!props.chips,\n [`v-select--${props.multiple ? 'multiple' : 'single'}`]: true,\n 'v-select--selected': model.value.length,\n 'v-select--selection-slot': !!slots.selection,\n },\n props.class,\n ]}\n style={ props.style }\n readonly\n placeholder={ placeholder }\n onClick:clear={ onClear }\n onMousedown:control={ onMousedownControl }\n onBlur={ onBlur }\n onKeydown={ onKeydown }\n >\n {{\n ...slots,\n default: () => (\n <>\n <VMenu\n ref={ vMenuRef }\n v-model={ menu.value }\n activator=\"parent\"\n contentClass=\"v-select__content\"\n disabled={ menuDisabled.value }\n eager={ props.eager }\n maxHeight={ 310 }\n openOnClick={ false }\n closeOnContentClick={ false }\n transition={ props.transition }\n onAfterLeave={ onAfterLeave }\n { ...props.menuProps }\n >\n { hasList && (\n <VList\n ref={ listRef }\n selected={ selected.value }\n selectStrategy={ props.multiple ? 'independent' : 'single-independent' }\n onMousedown={ (e: MouseEvent) => e.preventDefault() }\n onKeydown={ onListKeydown }\n onFocusin={ onFocusin }\n onScrollPassive={ onListScroll }\n tabindex=\"-1\"\n >\n { slots['prepend-item']?.() }\n\n { !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? (\n <VListItem title={ t(props.noDataText) } />\n ))}\n\n <VVirtualScroll renderless items={ displayItems.value }>\n { ({ item, index, itemRef }) => {\n const itemProps = mergeProps(item.props, {\n ref: itemRef,\n key: index,\n onClick: () => select(item),\n })\n\n return slots.item?.({\n item,\n index,\n props: itemProps,\n }) ?? (\n <VListItem { ...itemProps }>\n {{\n prepend: ({ isSelected }) => (\n <>\n { props.multiple && !props.hideSelected ? (\n <VCheckboxBtn\n key={ item.value }\n modelValue={ isSelected }\n ripple={ false }\n tabindex=\"-1\"\n />\n ) : undefined }\n\n { item.props.prependIcon && (\n <VIcon icon={ item.props.prependIcon } />\n )}\n </>\n ),\n }}\n </VListItem>\n )\n }}\n </VVirtualScroll>\n\n { slots['append-item']?.() }\n </VList>\n )}\n </VMenu>\n\n { selections.value.map((item, index) => {\n function onChipClose (e: Event) {\n e.stopPropagation()\n e.preventDefault()\n\n select(item)\n }\n\n const slotProps = {\n 'onClick:close': onChipClose,\n onMousedown (e: MouseEvent) {\n e.preventDefault()\n e.stopPropagation()\n },\n modelValue: true,\n 'onUpdate:modelValue': undefined,\n }\n\n return (\n <div key={ item.value } class=\"v-select__selection\">\n { hasChips ? (\n !slots.chip ? (\n <VChip\n key=\"chip\"\n closable={ props.closableChips }\n size=\"small\"\n text={ item.title }\n { ...slotProps }\n />\n ) : (\n <VDefaultsProvider\n key=\"chip-defaults\"\n defaults={{\n VChip: {\n closable: props.closableChips,\n size: 'small',\n text: item.title,\n },\n }}\n >\n { slots.chip?.({ item, index, props: slotProps }) }\n </VDefaultsProvider>\n )\n ) : (\n slots.selection?.({ item, index }) ?? (\n <span class=\"v-select__selection-text\">\n { item.title }\n { props.multiple && (index < selections.value.length - 1) && (\n <span class=\"v-select__selection-comma\">,</span>\n )}\n </span>\n )\n )}\n </div>\n )\n })}\n </>\n ),\n 'append-inner': (...args) => (\n <>\n { slots['append-inner']?.(...args) }\n { props.menuIcon ? (\n <VIcon\n class=\"v-select__menu-icon\"\n icon={ props.menuIcon }\n />\n ) : undefined }\n </>\n ),\n }}\n </VTextField>\n )\n })\n\n return forwardRefs({\n isFocused,\n menu,\n select,\n }, vTextFieldRef)\n },\n})\n\nexport type VSelect = InstanceType<typeof VSelect>\n"],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// Utilities
|
|
2
|
+
import { shallowRef, watch } from 'vue';
|
|
3
|
+
|
|
4
|
+
// Types
|
|
5
|
+
|
|
6
|
+
export function useScrolling(listRef, textFieldRef) {
|
|
7
|
+
const isScrolling = shallowRef(false);
|
|
8
|
+
let scrollTimeout;
|
|
9
|
+
function onListScroll(e) {
|
|
10
|
+
cancelAnimationFrame(scrollTimeout);
|
|
11
|
+
isScrolling.value = true;
|
|
12
|
+
scrollTimeout = requestAnimationFrame(() => {
|
|
13
|
+
scrollTimeout = requestAnimationFrame(() => {
|
|
14
|
+
isScrolling.value = false;
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
async function finishScrolling() {
|
|
19
|
+
await new Promise(resolve => requestAnimationFrame(resolve));
|
|
20
|
+
await new Promise(resolve => requestAnimationFrame(resolve));
|
|
21
|
+
await new Promise(resolve => requestAnimationFrame(resolve));
|
|
22
|
+
await new Promise(resolve => {
|
|
23
|
+
if (isScrolling.value) {
|
|
24
|
+
const stop = watch(isScrolling, () => {
|
|
25
|
+
stop();
|
|
26
|
+
resolve();
|
|
27
|
+
});
|
|
28
|
+
} else resolve();
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async function onListKeydown(e) {
|
|
32
|
+
if (e.key === 'Tab') {
|
|
33
|
+
textFieldRef.value?.focus();
|
|
34
|
+
}
|
|
35
|
+
if (!['PageDown', 'PageUp', 'Home', 'End'].includes(e.key)) return;
|
|
36
|
+
const el = listRef.value?.$el;
|
|
37
|
+
if (!el) return;
|
|
38
|
+
if (e.key === 'Home' || e.key === 'End') {
|
|
39
|
+
el.scrollTo({
|
|
40
|
+
top: e.key === 'Home' ? 0 : el.scrollHeight,
|
|
41
|
+
behavior: 'smooth'
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
await finishScrolling();
|
|
45
|
+
const children = el.querySelectorAll(':scope > :not(.v-virtual-scroll__spacer)');
|
|
46
|
+
if (e.key === 'PageDown' || e.key === 'Home') {
|
|
47
|
+
const top = el.getBoundingClientRect().top;
|
|
48
|
+
for (const child of children) {
|
|
49
|
+
if (child.getBoundingClientRect().top >= top) {
|
|
50
|
+
child.focus();
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
} else {
|
|
55
|
+
const bottom = el.getBoundingClientRect().bottom;
|
|
56
|
+
for (const child of [...children].reverse()) {
|
|
57
|
+
if (child.getBoundingClientRect().bottom <= bottom) {
|
|
58
|
+
child.focus();
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
onListScroll,
|
|
66
|
+
onListKeydown
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=useScrolling.mjs.map
|