vuetify 3.10.5 → 3.10.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/README.md +0 -6
- package/dist/json/attributes.json +3488 -3512
- package/dist/json/importMap-labs.json +20 -20
- package/dist/json/importMap.json +176 -176
- package/dist/json/tags.json +3 -9
- package/dist/json/web-types.json +6467 -6520
- package/dist/vuetify-labs.cjs +190 -82
- package/dist/vuetify-labs.css +4945 -4895
- package/dist/vuetify-labs.d.ts +117 -172
- package/dist/vuetify-labs.esm.js +190 -82
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +190 -82
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +171 -72
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3926 -3898
- package/dist/vuetify.d.ts +117 -137
- package/dist/vuetify.esm.js +171 -72
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +171 -72
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +118 -107
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +0 -61
- package/lib/components/VAutocomplete/VAutocomplete.js +15 -12
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VChipGroup/VChipGroup.d.ts +37 -0
- package/lib/components/VChipGroup/VChipGroup.js +3 -1
- package/lib/components/VChipGroup/VChipGroup.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.d.ts +6 -67
- package/lib/components/VCombobox/VCombobox.js +29 -30
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VCounter/VCounter.css +1 -0
- package/lib/components/VCounter/VCounter.sass +1 -0
- package/lib/components/VDatePicker/VDatePicker.js +1 -1
- package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
- package/lib/components/VFileInput/VFileInput.js +3 -2
- package/lib/components/VFileInput/VFileInput.js.map +1 -1
- package/lib/components/VList/VListItem.css +14 -12
- package/lib/components/VList/VListItem.js +4 -2
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VList/VListItem.sass +20 -18
- package/lib/components/VMenu/VMenu.js +22 -4
- package/lib/components/VMenu/VMenu.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.css +8 -0
- package/lib/components/VNumberInput/VNumberInput.js +5 -2
- package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.sass +10 -4
- package/lib/components/VSelect/VSelect.js +2 -1
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSkeletonLoader/VSkeletonLoader.css +17 -0
- package/lib/components/VSkeletonLoader/VSkeletonLoader.js +3 -3
- package/lib/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
- package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +7 -0
- package/lib/components/VSlideGroup/VSlideGroup.d.ts +25 -0
- package/lib/components/VSlideGroup/VSlideGroup.js +5 -1
- package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
- package/lib/components/VTabs/VTabs.d.ts +25 -0
- package/lib/components/VTextField/VTextField.js +3 -5
- package/lib/components/VTextField/VTextField.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.css +2 -2
- package/lib/components/VTextarea/VTextarea.d.ts +3 -3
- package/lib/components/VTextarea/VTextarea.js +23 -3
- package/lib/components/VTextarea/VTextarea.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.sass +4 -2
- package/lib/components/VWindow/VWindow.js +39 -3
- package/lib/components/VWindow/VWindow.js.map +1 -1
- package/lib/composables/date/date.js +1 -1
- package/lib/composables/date/date.js.map +1 -1
- package/lib/composables/group.js +1 -1
- package/lib/composables/group.js.map +1 -1
- package/lib/composables/nested/nested.js +12 -2
- package/lib/composables/nested/nested.js.map +1 -1
- package/lib/composables/virtual.js +2 -2
- package/lib/composables/virtual.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/framework.d.ts +60 -60
- package/lib/framework.js +1 -1
- package/lib/labs/VColorInput/VColorInput.d.ts +0 -40
- package/lib/labs/VColorInput/VColorInput.js +2 -2
- package/lib/labs/VColorInput/VColorInput.js.map +1 -1
- package/lib/labs/VDateInput/VDateInput.d.ts +0 -30
- package/lib/labs/VDateInput/VDateInput.js +16 -7
- package/lib/labs/VDateInput/VDateInput.js.map +1 -1
- package/lib/labs/VIconBtn/VIconBtn.css +22 -0
- package/lib/labs/VIconBtn/VIconBtn.scss +32 -0
- package/lib/labs/VMaskInput/VMaskInput.js +1 -1
- package/lib/labs/VMaskInput/VMaskInput.js.map +1 -1
- package/lib/labs/rules/rules.js +1 -1
- package/lib/labs/rules/rules.js.map +1 -1
- package/lib/util/helpers.js +4 -2
- package/lib/util/helpers.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode,
|
|
1
|
+
import { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, mergeProps as _mergeProps, Fragment as _Fragment } from "vue";
|
|
2
2
|
// Styles
|
|
3
3
|
import "./VSkeletonLoader.css";
|
|
4
4
|
|
|
@@ -134,12 +134,12 @@ export const VSkeletonLoader = genericComponent()({
|
|
|
134
134
|
ariaLabel: t(props.loadingText),
|
|
135
135
|
role: 'alert'
|
|
136
136
|
};
|
|
137
|
-
return
|
|
137
|
+
return isLoading ? _createElementVNode("div", _mergeProps({
|
|
138
138
|
"class": ['v-skeleton-loader', {
|
|
139
139
|
'v-skeleton-loader--boilerplate': props.boilerplate
|
|
140
140
|
}, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
|
|
141
141
|
"style": [backgroundColorStyles.value, dimensionStyles.value]
|
|
142
|
-
}, loadingProps, attrs), [items.value]) : slots.default?.()]);
|
|
142
|
+
}, loadingProps, attrs), [items.value]) : _createElementVNode(_Fragment, null, [slots.default?.()]);
|
|
143
143
|
});
|
|
144
144
|
return {};
|
|
145
145
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VSkeletonLoader.js","names":["useBackgroundColor","makeDimensionProps","useDimension","makeElevationProps","useElevation","useLocale","makeThemeProps","provideTheme","computed","genericComponent","propsFactory","useRender","wrapInArray","rootTypes","actions","article","avatar","button","card","chip","divider","heading","image","ossein","paragraph","sentences","subtitle","table","text","genBone","type","children","arguments","length","undefined","_createElementVNode","_normalizeClass","genBones","bone","split","Array","from","map","genStructure","includes","mapBones","push","bones","replace","makeVSkeletonLoaderProps","boilerplate","Boolean","color","String","loading","loadingText","default","VSkeletonLoader","name","inheritAttrs","props","setup","_ref","attrs","slots","backgroundColorClasses","backgroundColorStyles","dimensionStyles","elevationClasses","themeClasses","t","items","join","isLoading","loadingProps","ariaLive","ariaLabel","role","_Fragment","_mergeProps","value"],"sources":["../../../src/components/VSkeletonLoader/VSkeletonLoader.tsx"],"sourcesContent":["// Styles\nimport './VSkeletonLoader.sass'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { useLocale } from '@/composables/locale'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, VNode } from 'vue'\n\ntype VSkeletonBone<T> = T | VSkeletonBone<T>[]\n\nexport type VSkeletonBones = VSkeletonBone<VNode>\nexport type VSkeletonLoaderType = keyof typeof rootTypes\n\nexport const rootTypes = {\n actions: 'button@2',\n article: 'heading, paragraph',\n avatar: 'avatar',\n button: 'button',\n card: 'image, heading',\n 'card-avatar': 'image, list-item-avatar',\n chip: 'chip',\n 'date-picker': 'list-item, heading, divider, date-picker-options, date-picker-days, actions',\n 'date-picker-options': 'text, avatar@2',\n 'date-picker-days': 'avatar@28',\n divider: 'divider',\n heading: 'heading',\n image: 'image',\n 'list-item': 'text',\n 'list-item-avatar': 'avatar, text',\n 'list-item-two-line': 'sentences',\n 'list-item-avatar-two-line': 'avatar, sentences',\n 'list-item-three-line': 'paragraph',\n 'list-item-avatar-three-line': 'avatar, paragraph',\n ossein: 'ossein',\n paragraph: 'text@3',\n sentences: 'text@2',\n subtitle: 'text',\n table: 'table-heading, table-thead, table-tbody, table-tfoot',\n 'table-heading': 'chip, text',\n 'table-thead': 'heading@6',\n 'table-tbody': 'table-row-divider@6',\n 'table-row-divider': 'table-row, divider',\n 'table-row': 'text@6',\n 'table-tfoot': 'text@2, avatar@2',\n text: 'text',\n} as const\n\nfunction genBone (type: string, children: VSkeletonBones = []) {\n return (\n <div\n class={[\n 'v-skeleton-loader__bone',\n `v-skeleton-loader__${type}`,\n ]}\n >\n { children }\n </div>\n )\n}\n\nfunction genBones (bone: string) {\n // e.g. 'text@3'\n const [type, length] = bone.split('@') as [VSkeletonLoaderType, number]\n\n // Generate a length array based upon\n // value after @ in the bone string\n return Array.from({ length }).map(() => genStructure(type))\n}\n\nfunction genStructure (type?: string): VSkeletonBones {\n let children: VSkeletonBones = []\n\n if (!type) return children\n\n // TODO: figure out a better way to type this\n const bone = (rootTypes as Record<string, string>)[type]\n\n // End of recursion, do nothing\n /* eslint-disable-next-line no-empty, brace-style */\n if (type === bone) {}\n // Array of values - e.g. 'heading, paragraph, text@2'\n else if (type.includes(',')) return mapBones(type)\n // Array of values - e.g. 'paragraph@4'\n else if (type.includes('@')) return genBones(type)\n // Array of values - e.g. 'card@2'\n else if (bone.includes(',')) children = mapBones(bone)\n // Array of values - e.g. 'list-item@2'\n else if (bone.includes('@')) children = genBones(bone)\n // Single value - e.g. 'card-heading'\n else if (bone) children.push(genStructure(bone))\n\n return [genBone(type, children)]\n}\n\nfunction mapBones (bones: string) {\n // Remove spaces and return array of structures\n return bones.replace(/\\s/g, '').split(',').map(genStructure)\n}\n\nexport const makeVSkeletonLoaderProps = propsFactory({\n boilerplate: Boolean,\n color: String,\n loading: Boolean,\n loadingText: {\n type: String,\n default: '$vuetify.loading',\n },\n type: {\n type: [String, Array] as PropType<\n | VSkeletonLoaderType | (string & {})\n | ReadonlyArray<VSkeletonLoaderType | (string & {})>\n >,\n default: 'ossein',\n },\n\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeThemeProps(),\n}, 'VSkeletonLoader')\n\nexport const VSkeletonLoader = genericComponent()({\n name: 'VSkeletonLoader',\n\n inheritAttrs: false,\n\n props: makeVSkeletonLoaderProps(),\n\n setup (props, { attrs, slots }) {\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { themeClasses } = provideTheme(props)\n const { t } = useLocale()\n\n const items = computed(() => genStructure(wrapInArray(props.type).join(',')))\n\n useRender(() => {\n const isLoading = !slots.default || props.loading\n const loadingProps = (props.boilerplate || !isLoading) ? {} : {\n ariaLive: 'polite',\n ariaLabel: t(props.loadingText),\n role: 'alert',\n }\n\n return (\n <>\n { isLoading\n ? (\n <div\n class={[\n 'v-skeleton-loader',\n {\n 'v-skeleton-loader--boilerplate': props.boilerplate,\n },\n themeClasses.value,\n backgroundColorClasses.value,\n elevationClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n dimensionStyles.value,\n ]}\n { ...loadingProps }\n { ...attrs }\n >\n { items.value }\n </div>\n )\n : slots.default?.()\n }\n </>\n )\n })\n\n return {}\n },\n})\n\nexport type VSkeletonLoader = InstanceType<typeof VSkeletonLoader>\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"VSkeletonLoader.js","names":["useBackgroundColor","makeDimensionProps","useDimension","makeElevationProps","useElevation","useLocale","makeThemeProps","provideTheme","computed","genericComponent","propsFactory","useRender","wrapInArray","rootTypes","actions","article","avatar","button","card","chip","divider","heading","image","ossein","paragraph","sentences","subtitle","table","text","genBone","type","children","arguments","length","undefined","_createElementVNode","_normalizeClass","genBones","bone","split","Array","from","map","genStructure","includes","mapBones","push","bones","replace","makeVSkeletonLoaderProps","boilerplate","Boolean","color","String","loading","loadingText","default","VSkeletonLoader","name","inheritAttrs","props","setup","_ref","attrs","slots","backgroundColorClasses","backgroundColorStyles","dimensionStyles","elevationClasses","themeClasses","t","items","join","isLoading","loadingProps","ariaLive","ariaLabel","role","_mergeProps","value","_Fragment"],"sources":["../../../src/components/VSkeletonLoader/VSkeletonLoader.tsx"],"sourcesContent":["// Styles\nimport './VSkeletonLoader.sass'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { useLocale } from '@/composables/locale'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, VNode } from 'vue'\n\ntype VSkeletonBone<T> = T | VSkeletonBone<T>[]\n\nexport type VSkeletonBones = VSkeletonBone<VNode>\nexport type VSkeletonLoaderType = keyof typeof rootTypes\n\nexport const rootTypes = {\n actions: 'button@2',\n article: 'heading, paragraph',\n avatar: 'avatar',\n button: 'button',\n card: 'image, heading',\n 'card-avatar': 'image, list-item-avatar',\n chip: 'chip',\n 'date-picker': 'list-item, heading, divider, date-picker-options, date-picker-days, actions',\n 'date-picker-options': 'text, avatar@2',\n 'date-picker-days': 'avatar@28',\n divider: 'divider',\n heading: 'heading',\n image: 'image',\n 'list-item': 'text',\n 'list-item-avatar': 'avatar, text',\n 'list-item-two-line': 'sentences',\n 'list-item-avatar-two-line': 'avatar, sentences',\n 'list-item-three-line': 'paragraph',\n 'list-item-avatar-three-line': 'avatar, paragraph',\n ossein: 'ossein',\n paragraph: 'text@3',\n sentences: 'text@2',\n subtitle: 'text',\n table: 'table-heading, table-thead, table-tbody, table-tfoot',\n 'table-heading': 'chip, text',\n 'table-thead': 'heading@6',\n 'table-tbody': 'table-row-divider@6',\n 'table-row-divider': 'table-row, divider',\n 'table-row': 'text@6',\n 'table-tfoot': 'text@2, avatar@2',\n text: 'text',\n} as const\n\nfunction genBone (type: string, children: VSkeletonBones = []) {\n return (\n <div\n class={[\n 'v-skeleton-loader__bone',\n `v-skeleton-loader__${type}`,\n ]}\n >\n { children }\n </div>\n )\n}\n\nfunction genBones (bone: string) {\n // e.g. 'text@3'\n const [type, length] = bone.split('@') as [VSkeletonLoaderType, number]\n\n // Generate a length array based upon\n // value after @ in the bone string\n return Array.from({ length }).map(() => genStructure(type))\n}\n\nfunction genStructure (type?: string): VSkeletonBones {\n let children: VSkeletonBones = []\n\n if (!type) return children\n\n // TODO: figure out a better way to type this\n const bone = (rootTypes as Record<string, string>)[type]\n\n // End of recursion, do nothing\n /* eslint-disable-next-line no-empty, brace-style */\n if (type === bone) {}\n // Array of values - e.g. 'heading, paragraph, text@2'\n else if (type.includes(',')) return mapBones(type)\n // Array of values - e.g. 'paragraph@4'\n else if (type.includes('@')) return genBones(type)\n // Array of values - e.g. 'card@2'\n else if (bone.includes(',')) children = mapBones(bone)\n // Array of values - e.g. 'list-item@2'\n else if (bone.includes('@')) children = genBones(bone)\n // Single value - e.g. 'card-heading'\n else if (bone) children.push(genStructure(bone))\n\n return [genBone(type, children)]\n}\n\nfunction mapBones (bones: string) {\n // Remove spaces and return array of structures\n return bones.replace(/\\s/g, '').split(',').map(genStructure)\n}\n\nexport const makeVSkeletonLoaderProps = propsFactory({\n boilerplate: Boolean,\n color: String,\n loading: Boolean,\n loadingText: {\n type: String,\n default: '$vuetify.loading',\n },\n type: {\n type: [String, Array] as PropType<\n | VSkeletonLoaderType | (string & {})\n | ReadonlyArray<VSkeletonLoaderType | (string & {})>\n >,\n default: 'ossein',\n },\n\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeThemeProps(),\n}, 'VSkeletonLoader')\n\nexport const VSkeletonLoader = genericComponent()({\n name: 'VSkeletonLoader',\n\n inheritAttrs: false,\n\n props: makeVSkeletonLoaderProps(),\n\n setup (props, { attrs, slots }) {\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { themeClasses } = provideTheme(props)\n const { t } = useLocale()\n\n const items = computed(() => genStructure(wrapInArray(props.type).join(',')))\n\n useRender(() => {\n const isLoading = !slots.default || props.loading\n const loadingProps = (props.boilerplate || !isLoading) ? {} : {\n ariaLive: 'polite',\n ariaLabel: t(props.loadingText),\n role: 'alert',\n }\n\n return isLoading\n ? (\n <div\n class={[\n 'v-skeleton-loader',\n {\n 'v-skeleton-loader--boilerplate': props.boilerplate,\n },\n themeClasses.value,\n backgroundColorClasses.value,\n elevationClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n dimensionStyles.value,\n ]}\n { ...loadingProps }\n { ...attrs }\n >\n { items.value }\n </div>\n )\n : <>{ slots.default?.() }</>\n })\n\n return {}\n },\n})\n\nexport type VSkeletonLoader = InstanceType<typeof VSkeletonLoader>\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -29,6 +29,9 @@
|
|
|
29
29
|
.v-skeleton-loader__text
|
|
30
30
|
background: $skeleton-loader-text-background
|
|
31
31
|
|
|
32
|
+
@media (forced-colors: active)
|
|
33
|
+
background: canvastext
|
|
34
|
+
|
|
32
35
|
.v-skeleton-loader__list-item,
|
|
33
36
|
.v-skeleton-loader__list-item-avatar,
|
|
34
37
|
.v-skeleton-loader__list-item-text,
|
|
@@ -54,6 +57,10 @@
|
|
|
54
57
|
z-index: 1
|
|
55
58
|
@include tools.absolute(true)
|
|
56
59
|
|
|
60
|
+
@media (forced-colors: active)
|
|
61
|
+
@media (pointer: fine)
|
|
62
|
+
cursor: progress
|
|
63
|
+
|
|
57
64
|
&__avatar
|
|
58
65
|
border-radius: 50%
|
|
59
66
|
flex: 0 1 auto
|
|
@@ -30,6 +30,7 @@ export declare const makeVSlideGroupProps: <Defaults extends {
|
|
|
30
30
|
selectedClass?: unknown;
|
|
31
31
|
disabled?: unknown;
|
|
32
32
|
centerActive?: unknown;
|
|
33
|
+
scrollToActive?: unknown;
|
|
33
34
|
contentClass?: unknown;
|
|
34
35
|
direction?: unknown;
|
|
35
36
|
symbol?: unknown;
|
|
@@ -121,6 +122,16 @@ export declare const makeVSlideGroupProps: <Defaults extends {
|
|
|
121
122
|
type: PropType<unknown extends Defaults["centerActive"] ? boolean : boolean | Defaults["centerActive"]>;
|
|
122
123
|
default: unknown extends Defaults["centerActive"] ? boolean : boolean | Defaults["centerActive"];
|
|
123
124
|
};
|
|
125
|
+
scrollToActive: unknown extends Defaults["scrollToActive"] ? {
|
|
126
|
+
type: BooleanConstructor;
|
|
127
|
+
default: boolean;
|
|
128
|
+
} : Omit<{
|
|
129
|
+
type: BooleanConstructor;
|
|
130
|
+
default: boolean;
|
|
131
|
+
}, "default" | "type"> & {
|
|
132
|
+
type: PropType<unknown extends Defaults["scrollToActive"] ? boolean : boolean | Defaults["scrollToActive"]>;
|
|
133
|
+
default: unknown extends Defaults["scrollToActive"] ? boolean : boolean | Defaults["scrollToActive"];
|
|
134
|
+
};
|
|
124
135
|
contentClass: unknown extends Defaults["contentClass"] ? null : {
|
|
125
136
|
type: PropType<unknown extends Defaults["contentClass"] ? any : any>;
|
|
126
137
|
default: unknown extends Defaults["contentClass"] ? any : any;
|
|
@@ -185,6 +196,7 @@ export declare const VSlideGroup: {
|
|
|
185
196
|
selectedClass: string;
|
|
186
197
|
disabled: boolean;
|
|
187
198
|
centerActive: boolean;
|
|
199
|
+
scrollToActive: boolean;
|
|
188
200
|
direction: "horizontal" | "vertical";
|
|
189
201
|
symbol: any;
|
|
190
202
|
nextIcon: IconValue;
|
|
@@ -213,6 +225,7 @@ export declare const VSlideGroup: {
|
|
|
213
225
|
selectedClass: string;
|
|
214
226
|
disabled: boolean;
|
|
215
227
|
centerActive: boolean;
|
|
228
|
+
scrollToActive: boolean;
|
|
216
229
|
direction: "horizontal" | "vertical";
|
|
217
230
|
symbol: any;
|
|
218
231
|
nextIcon: IconValue;
|
|
@@ -242,6 +255,7 @@ export declare const VSlideGroup: {
|
|
|
242
255
|
selectedClass: string;
|
|
243
256
|
disabled: boolean;
|
|
244
257
|
centerActive: boolean;
|
|
258
|
+
scrollToActive: boolean;
|
|
245
259
|
direction: "horizontal" | "vertical";
|
|
246
260
|
symbol: any;
|
|
247
261
|
nextIcon: IconValue;
|
|
@@ -268,6 +282,7 @@ export declare const VSlideGroup: {
|
|
|
268
282
|
selectedClass: string;
|
|
269
283
|
disabled: boolean;
|
|
270
284
|
centerActive: boolean;
|
|
285
|
+
scrollToActive: boolean;
|
|
271
286
|
direction: "horizontal" | "vertical";
|
|
272
287
|
symbol: any;
|
|
273
288
|
nextIcon: IconValue;
|
|
@@ -284,6 +299,7 @@ export declare const VSlideGroup: {
|
|
|
284
299
|
selectedClass: string;
|
|
285
300
|
disabled: boolean;
|
|
286
301
|
centerActive: boolean;
|
|
302
|
+
scrollToActive: boolean;
|
|
287
303
|
direction: "horizontal" | "vertical";
|
|
288
304
|
symbol: any;
|
|
289
305
|
nextIcon: IconValue;
|
|
@@ -312,6 +328,7 @@ export declare const VSlideGroup: {
|
|
|
312
328
|
selectedClass: string;
|
|
313
329
|
disabled: boolean;
|
|
314
330
|
centerActive: boolean;
|
|
331
|
+
scrollToActive: boolean;
|
|
315
332
|
direction: "horizontal" | "vertical";
|
|
316
333
|
symbol: any;
|
|
317
334
|
nextIcon: IconValue;
|
|
@@ -363,6 +380,10 @@ export declare const VSlideGroup: {
|
|
|
363
380
|
};
|
|
364
381
|
disabled: BooleanConstructor;
|
|
365
382
|
centerActive: BooleanConstructor;
|
|
383
|
+
scrollToActive: {
|
|
384
|
+
type: BooleanConstructor;
|
|
385
|
+
default: boolean;
|
|
386
|
+
};
|
|
366
387
|
contentClass: null;
|
|
367
388
|
direction: {
|
|
368
389
|
type: PropType<"horizontal" | "vertical">;
|
|
@@ -415,6 +436,10 @@ export declare const VSlideGroup: {
|
|
|
415
436
|
};
|
|
416
437
|
disabled: BooleanConstructor;
|
|
417
438
|
centerActive: BooleanConstructor;
|
|
439
|
+
scrollToActive: {
|
|
440
|
+
type: BooleanConstructor;
|
|
441
|
+
default: boolean;
|
|
442
|
+
};
|
|
418
443
|
contentClass: null;
|
|
419
444
|
direction: {
|
|
420
445
|
type: PropType<"horizontal" | "vertical">;
|
|
@@ -19,6 +19,10 @@ import { focusableChildren, genericComponent, IN_BROWSER, propsFactory, useRende
|
|
|
19
19
|
export const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
|
|
20
20
|
export const makeVSlideGroupProps = propsFactory({
|
|
21
21
|
centerActive: Boolean,
|
|
22
|
+
scrollToActive: {
|
|
23
|
+
type: Boolean,
|
|
24
|
+
default: true
|
|
25
|
+
},
|
|
22
26
|
contentClass: null,
|
|
23
27
|
direction: {
|
|
24
28
|
type: String,
|
|
@@ -107,7 +111,7 @@ export const VSlideGroup = genericComponent()({
|
|
|
107
111
|
contentSize.value = contentRect.value[sizeProperty];
|
|
108
112
|
isOverflowing.value = containerSize.value + 1 < contentSize.value;
|
|
109
113
|
}
|
|
110
|
-
if (firstSelectedIndex.value >= 0 && contentRef.el) {
|
|
114
|
+
if (props.scrollToActive && firstSelectedIndex.value >= 0 && contentRef.el) {
|
|
111
115
|
// TODO: Is this too naive? Should we store element references in group composable?
|
|
112
116
|
const selectedElement = contentRef.el.children[lastSelectedIndex.value];
|
|
113
117
|
scrollToChildren(selectedElement, props.centerActive);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VSlideGroup.js","names":["VFadeTransition","VIcon","makeComponentProps","makeDisplayProps","useDisplay","useGoTo","makeGroupProps","useGroup","IconValue","useRtl","useResizeObserver","makeTagProps","computed","shallowRef","watch","calculateCenteredTarget","calculateUpdatedTarget","getClientSize","getOffsetSize","getScrollPosition","getScrollSize","focusableChildren","genericComponent","IN_BROWSER","propsFactory","useRender","VSlideGroupSymbol","Symbol","for","makeVSlideGroupProps","centerActive","Boolean","contentClass","direction","type","String","default","symbol","nextIcon","prevIcon","showArrows","validator","v","includes","mobile","selectedClass","VSlideGroup","name","props","emits","value","setup","_ref","slots","isRtl","displayClasses","group","isOverflowing","scrollOffset","containerSize","contentSize","isHorizontal","resizeRef","containerRef","contentRect","containerRect","contentRef","goTo","goToOptions","container","el","duration","easing","firstSelectedIndex","selected","length","items","findIndex","item","id","lastSelectedIndex","frame","cancelAnimationFrame","requestAnimationFrame","sizeProperty","selectedElement","children","scrollToChildren","isFocused","center","target","containerElement","scrollToPosition","newPosition","offsetSize","scrollPosition","scrollSize","Math","abs","scrollWidth","offsetWidth","containerWidth","horizontal","onScroll","e","scrollTop","scrollLeft","onFocusin","composedPath","onFocusout","ignoreFocusEvent","onFocus","relatedTarget","contains","focus","onFocusAffixes","onKeydown","toFocus","location","preventDefault","key","getSiblingElement","undefined","sibling","hasAttribute","focusable","querySelector","firstElementChild","lastElementChild","preventScroll","scrollTo","offsetStep","slotProps","next","prev","select","isSelected","hasOverflowOrScroll","hasAffixes","hasPrev","hasNext","clientSize","scrollSizeMax","_createVNode","tag","_normalizeClass","class","_normalizeStyle","style","_createElementVNode","onClick"],"sources":["../../../src/components/VSlideGroup/VSlideGroup.tsx"],"sourcesContent":["// Styles\nimport './VSlideGroup.sass'\n\n// Components\nimport { VFadeTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { useGoTo } from '@/composables/goto'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { IconValue } from '@/composables/icons'\nimport { useRtl } from '@/composables/locale'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, shallowRef, watch } from 'vue'\nimport {\n calculateCenteredTarget,\n calculateUpdatedTarget,\n getClientSize,\n getOffsetSize,\n getScrollPosition,\n getScrollSize,\n} from './helpers'\nimport { focusableChildren, genericComponent, IN_BROWSER, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType } from 'vue'\nimport type { GoToOptions } from '@/composables/goto'\nimport type { GroupProvide } from '@/composables/group'\nimport type { GenericProps } from '@/util'\n\nexport const VSlideGroupSymbol: InjectionKey<GroupProvide> = Symbol.for('vuetify:v-slide-group')\n\ninterface SlideGroupSlot {\n next: GroupProvide['next']\n prev: GroupProvide['prev']\n select: GroupProvide['select']\n isSelected: GroupProvide['isSelected']\n}\n\ntype VSlideGroupSlots = {\n default: SlideGroupSlot\n prev: SlideGroupSlot\n next: SlideGroupSlot\n}\n\nexport const makeVSlideGroupProps = propsFactory({\n centerActive: Boolean,\n contentClass: null,\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n },\n symbol: {\n type: null,\n default: VSlideGroupSymbol,\n },\n nextIcon: {\n type: IconValue,\n default: '$next',\n },\n prevIcon: {\n type: IconValue,\n default: '$prev',\n },\n showArrows: {\n type: [Boolean, String],\n validator: (v: any) => (\n typeof v === 'boolean' || [\n 'always',\n 'desktop',\n 'mobile',\n ].includes(v)\n ),\n },\n\n ...makeComponentProps(),\n ...makeDisplayProps({ mobile: null }),\n ...makeTagProps(),\n ...makeGroupProps({\n selectedClass: 'v-slide-group-item--active',\n }),\n}, 'VSlideGroup')\n\nexport const VSlideGroup = genericComponent<new <T>(\n props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (value: T) => void\n },\n slots: VSlideGroupSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VSlideGroup',\n\n props: makeVSlideGroupProps(),\n\n emits: {\n 'update:modelValue': (value: any) => true,\n },\n\n setup (props, { slots }) {\n const { isRtl } = useRtl()\n const { displayClasses, mobile } = useDisplay(props)\n const group = useGroup(props, props.symbol)\n const isOverflowing = shallowRef(false)\n const scrollOffset = shallowRef(0)\n const containerSize = shallowRef(0)\n const contentSize = shallowRef(0)\n const isHorizontal = computed(() => props.direction === 'horizontal')\n\n const { resizeRef: containerRef, contentRect: containerRect } = useResizeObserver()\n const { resizeRef: contentRef, contentRect } = useResizeObserver()\n\n const goTo = useGoTo()\n const goToOptions = computed<Partial<GoToOptions>>(() => {\n return {\n container: containerRef.el,\n duration: 200,\n easing: 'easeOutQuart',\n }\n })\n\n const firstSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1\n\n return group.items.value.findIndex(item => item.id === group.selected.value[0])\n })\n\n const lastSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1\n\n return group.items.value.findIndex(item => item.id === group.selected.value[group.selected.value.length - 1])\n })\n\n if (IN_BROWSER) {\n let frame = -1\n watch(() => [group.selected.value, containerRect.value, contentRect.value, isHorizontal.value], () => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n if (containerRect.value && contentRect.value) {\n const sizeProperty = isHorizontal.value ? 'width' : 'height'\n\n containerSize.value = containerRect.value[sizeProperty]\n contentSize.value = contentRect.value[sizeProperty]\n\n isOverflowing.value = containerSize.value + 1 < contentSize.value\n }\n\n if (firstSelectedIndex.value >= 0 && contentRef.el) {\n // TODO: Is this too naive? Should we store element references in group composable?\n const selectedElement = contentRef.el.children[lastSelectedIndex.value] as HTMLElement\n\n scrollToChildren(selectedElement, props.centerActive)\n }\n })\n })\n }\n\n const isFocused = shallowRef(false)\n\n function scrollToChildren (children: HTMLElement, center?: boolean) {\n let target = 0\n\n if (center) {\n target = calculateCenteredTarget({\n containerElement: containerRef.el!,\n isHorizontal: isHorizontal.value,\n selectedElement: children,\n })\n } else {\n target = calculateUpdatedTarget({\n containerElement: containerRef.el!,\n isHorizontal: isHorizontal.value,\n isRtl: isRtl.value,\n selectedElement: children,\n })\n }\n\n scrollToPosition(target)\n }\n\n function scrollToPosition (newPosition: number) {\n if (!IN_BROWSER || !containerRef.el) return\n\n const offsetSize = getOffsetSize(isHorizontal.value, containerRef.el)\n const scrollPosition = getScrollPosition(isHorizontal.value, isRtl.value, containerRef.el)\n const scrollSize = getScrollSize(isHorizontal.value, containerRef.el)\n\n if (\n scrollSize <= offsetSize ||\n // Prevent scrolling by only a couple of pixels, which doesn't look smooth\n Math.abs(newPosition - scrollPosition) < 16\n ) return\n\n if (isHorizontal.value && isRtl.value && containerRef.el) {\n const { scrollWidth, offsetWidth: containerWidth } = containerRef.el!\n\n newPosition = (scrollWidth - containerWidth) - newPosition\n }\n\n if (isHorizontal.value) {\n goTo.horizontal(newPosition, goToOptions.value)\n } else {\n goTo(newPosition, goToOptions.value)\n }\n }\n\n function onScroll (e: Event) {\n const { scrollTop, scrollLeft } = e.target as HTMLElement\n\n scrollOffset.value = isHorizontal.value ? scrollLeft : scrollTop\n }\n\n function onFocusin (e: FocusEvent) {\n isFocused.value = true\n\n if (!isOverflowing.value || !contentRef.el) return\n\n // Focused element is likely to be the root of an item, so a\n // breadth-first search will probably find it in the first iteration\n for (const el of e.composedPath()) {\n for (const item of contentRef.el.children) {\n if (item === el) {\n scrollToChildren(item as HTMLElement)\n return\n }\n }\n }\n }\n\n function onFocusout (e: FocusEvent) {\n isFocused.value = false\n }\n\n // Affix clicks produce onFocus that we have to ignore to avoid extra scrollToChildren\n let ignoreFocusEvent = false\n function onFocus (e: FocusEvent) {\n if (\n !ignoreFocusEvent &&\n !isFocused.value &&\n !(e.relatedTarget && contentRef.el?.contains(e.relatedTarget as Node))\n ) focus()\n\n ignoreFocusEvent = false\n }\n\n function onFocusAffixes () {\n ignoreFocusEvent = true\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (!contentRef.el) return\n\n function toFocus (location: Parameters<typeof focus>[0]) {\n e.preventDefault()\n focus(location)\n }\n\n if (isHorizontal.value) {\n if (e.key === 'ArrowRight') {\n toFocus(isRtl.value ? 'prev' : 'next')\n } else if (e.key === 'ArrowLeft') {\n toFocus(isRtl.value ? 'next' : 'prev')\n }\n } else {\n if (e.key === 'ArrowDown') {\n toFocus('next')\n } else if (e.key === 'ArrowUp') {\n toFocus('prev')\n }\n }\n\n if (e.key === 'Home') {\n toFocus('first')\n } else if (e.key === 'End') {\n toFocus('last')\n }\n }\n\n function getSiblingElement (el: HTMLElement | null, location: 'next' | 'prev') {\n if (!el) return undefined\n let sibling: HTMLElement | null = el\n do {\n sibling = sibling?.[location === 'next' ? 'nextElementSibling' : 'previousElementSibling'] as HTMLElement | null\n } while (sibling?.hasAttribute('disabled'))\n return sibling\n }\n\n function focus (location?: 'next' | 'prev' | 'first' | 'last') {\n if (!contentRef.el) return\n\n let el: HTMLElement | null | undefined\n\n if (!location) {\n const focusable = focusableChildren(contentRef.el)\n el = focusable[0]\n } else if (location === 'next') {\n el = getSiblingElement(contentRef.el.querySelector(':focus'), location)\n\n if (!el) return focus('first')\n } else if (location === 'prev') {\n el = getSiblingElement(contentRef.el.querySelector(':focus'), location)\n\n if (!el) return focus('last')\n } else if (location === 'first') {\n el = (contentRef.el.firstElementChild as HTMLElement)\n\n if (el?.hasAttribute('disabled')) el = getSiblingElement(el, 'next')\n } else if (location === 'last') {\n el = (contentRef.el.lastElementChild as HTMLElement)\n\n if (el?.hasAttribute('disabled')) el = getSiblingElement(el, 'prev')\n }\n\n if (el) {\n el.focus({ preventScroll: true })\n }\n }\n\n function scrollTo (location: 'prev' | 'next') {\n const direction = isHorizontal.value && isRtl.value ? -1 : 1\n\n const offsetStep = (location === 'prev' ? -direction : direction) * containerSize.value\n\n let newPosition = scrollOffset.value + offsetStep\n\n // TODO: improve it\n if (isHorizontal.value && isRtl.value && containerRef.el) {\n const { scrollWidth, offsetWidth: containerWidth } = containerRef.el!\n\n newPosition += scrollWidth - containerWidth\n }\n\n scrollToPosition(newPosition)\n }\n\n const slotProps = computed(() => ({\n next: group.next,\n prev: group.prev,\n select: group.select,\n isSelected: group.isSelected,\n }))\n\n const hasOverflowOrScroll = computed(() => isOverflowing.value || Math.abs(scrollOffset.value) > 0)\n\n const hasAffixes = computed(() => {\n switch (props.showArrows) {\n // Always show arrows on desktop & mobile\n case 'always': return true\n\n // Always show arrows on desktop\n case 'desktop': return !mobile.value\n\n // Show arrows on mobile when overflowing.\n // This matches the default 2.2 behavior\n case true: return hasOverflowOrScroll.value\n\n // Always show on mobile\n case 'mobile': return (\n mobile.value ||\n hasOverflowOrScroll.value\n )\n\n // https://material.io/components/tabs#scrollable-tabs\n // Always show arrows when\n // overflowed on desktop\n default: return (\n !mobile.value &&\n hasOverflowOrScroll.value\n )\n }\n })\n\n const hasPrev = computed(() => {\n // 1 pixel in reserve, may be lost after rounding\n return Math.abs(scrollOffset.value) > 1\n })\n\n const hasNext = computed(() => {\n if (!containerRef.value || !hasOverflowOrScroll.value) return false\n\n const scrollSize = getScrollSize(isHorizontal.value, containerRef.el)\n const clientSize = getClientSize(isHorizontal.value, containerRef.el)\n\n const scrollSizeMax = scrollSize - clientSize\n\n // 1 pixel in reserve, may be lost after rounding\n return scrollSizeMax - Math.abs(scrollOffset.value) > 1\n })\n\n useRender(() => (\n <props.tag\n class={[\n 'v-slide-group',\n {\n 'v-slide-group--vertical': !isHorizontal.value,\n 'v-slide-group--has-affixes': hasAffixes.value,\n 'v-slide-group--is-overflowing': isOverflowing.value,\n },\n displayClasses.value,\n props.class,\n ]}\n style={ props.style }\n tabindex={ (isFocused.value || group.selected.value.length) ? -1 : 0 }\n onFocus={ onFocus }\n >\n { hasAffixes.value && (\n <div\n key=\"prev\"\n class={[\n 'v-slide-group__prev',\n { 'v-slide-group__prev--disabled': !hasPrev.value },\n ]}\n onMousedown={ onFocusAffixes }\n onClick={ () => hasPrev.value && scrollTo('prev') }\n >\n { slots.prev?.(slotProps.value) ?? (\n <VFadeTransition>\n <VIcon icon={ isRtl.value ? props.nextIcon : props.prevIcon }></VIcon>\n </VFadeTransition>\n )}\n </div>\n )}\n\n <div\n key=\"container\"\n ref={ containerRef }\n class={[\n 'v-slide-group__container',\n props.contentClass,\n ]}\n onScroll={ onScroll }\n >\n <div\n ref={ contentRef }\n class=\"v-slide-group__content\"\n onFocusin={ onFocusin }\n onFocusout={ onFocusout }\n onKeydown={ onKeydown }\n >\n { slots.default?.(slotProps.value) }\n </div>\n </div>\n\n { hasAffixes.value && (\n <div\n key=\"next\"\n class={[\n 'v-slide-group__next',\n { 'v-slide-group__next--disabled': !hasNext.value },\n ]}\n onMousedown={ onFocusAffixes }\n onClick={ () => hasNext.value && scrollTo('next') }\n >\n { slots.next?.(slotProps.value) ?? (\n <VFadeTransition>\n <VIcon icon={ isRtl.value ? props.prevIcon : props.nextIcon }></VIcon>\n </VFadeTransition>\n )}\n </div>\n )}\n </props.tag>\n ))\n\n return {\n selected: group.selected,\n scrollTo,\n scrollOffset,\n focus,\n hasPrev,\n hasNext,\n }\n },\n})\n\nexport type VSlideGroup = InstanceType<typeof VSlideGroup>\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"VSlideGroup.js","names":["VFadeTransition","VIcon","makeComponentProps","makeDisplayProps","useDisplay","useGoTo","makeGroupProps","useGroup","IconValue","useRtl","useResizeObserver","makeTagProps","computed","shallowRef","watch","calculateCenteredTarget","calculateUpdatedTarget","getClientSize","getOffsetSize","getScrollPosition","getScrollSize","focusableChildren","genericComponent","IN_BROWSER","propsFactory","useRender","VSlideGroupSymbol","Symbol","for","makeVSlideGroupProps","centerActive","Boolean","scrollToActive","type","default","contentClass","direction","String","symbol","nextIcon","prevIcon","showArrows","validator","v","includes","mobile","selectedClass","VSlideGroup","name","props","emits","value","setup","_ref","slots","isRtl","displayClasses","group","isOverflowing","scrollOffset","containerSize","contentSize","isHorizontal","resizeRef","containerRef","contentRect","containerRect","contentRef","goTo","goToOptions","container","el","duration","easing","firstSelectedIndex","selected","length","items","findIndex","item","id","lastSelectedIndex","frame","cancelAnimationFrame","requestAnimationFrame","sizeProperty","selectedElement","children","scrollToChildren","isFocused","center","target","containerElement","scrollToPosition","newPosition","offsetSize","scrollPosition","scrollSize","Math","abs","scrollWidth","offsetWidth","containerWidth","horizontal","onScroll","e","scrollTop","scrollLeft","onFocusin","composedPath","onFocusout","ignoreFocusEvent","onFocus","relatedTarget","contains","focus","onFocusAffixes","onKeydown","toFocus","location","preventDefault","key","getSiblingElement","undefined","sibling","hasAttribute","focusable","querySelector","firstElementChild","lastElementChild","preventScroll","scrollTo","offsetStep","slotProps","next","prev","select","isSelected","hasOverflowOrScroll","hasAffixes","hasPrev","hasNext","clientSize","scrollSizeMax","_createVNode","tag","_normalizeClass","class","_normalizeStyle","style","_createElementVNode","onClick"],"sources":["../../../src/components/VSlideGroup/VSlideGroup.tsx"],"sourcesContent":["// Styles\nimport './VSlideGroup.sass'\n\n// Components\nimport { VFadeTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { useGoTo } from '@/composables/goto'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { IconValue } from '@/composables/icons'\nimport { useRtl } from '@/composables/locale'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, shallowRef, watch } from 'vue'\nimport {\n calculateCenteredTarget,\n calculateUpdatedTarget,\n getClientSize,\n getOffsetSize,\n getScrollPosition,\n getScrollSize,\n} from './helpers'\nimport { focusableChildren, genericComponent, IN_BROWSER, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType } from 'vue'\nimport type { GoToOptions } from '@/composables/goto'\nimport type { GroupProvide } from '@/composables/group'\nimport type { GenericProps } from '@/util'\n\nexport const VSlideGroupSymbol: InjectionKey<GroupProvide> = Symbol.for('vuetify:v-slide-group')\n\ninterface SlideGroupSlot {\n next: GroupProvide['next']\n prev: GroupProvide['prev']\n select: GroupProvide['select']\n isSelected: GroupProvide['isSelected']\n}\n\ntype VSlideGroupSlots = {\n default: SlideGroupSlot\n prev: SlideGroupSlot\n next: SlideGroupSlot\n}\n\nexport const makeVSlideGroupProps = propsFactory({\n centerActive: Boolean,\n scrollToActive: {\n type: Boolean,\n default: true,\n },\n contentClass: null,\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n },\n symbol: {\n type: null,\n default: VSlideGroupSymbol,\n },\n nextIcon: {\n type: IconValue,\n default: '$next',\n },\n prevIcon: {\n type: IconValue,\n default: '$prev',\n },\n showArrows: {\n type: [Boolean, String],\n validator: (v: any) => (\n typeof v === 'boolean' || [\n 'always',\n 'desktop',\n 'mobile',\n ].includes(v)\n ),\n },\n\n ...makeComponentProps(),\n ...makeDisplayProps({ mobile: null }),\n ...makeTagProps(),\n ...makeGroupProps({\n selectedClass: 'v-slide-group-item--active',\n }),\n}, 'VSlideGroup')\n\nexport const VSlideGroup = genericComponent<new <T>(\n props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (value: T) => void\n },\n slots: VSlideGroupSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VSlideGroup',\n\n props: makeVSlideGroupProps(),\n\n emits: {\n 'update:modelValue': (value: any) => true,\n },\n\n setup (props, { slots }) {\n const { isRtl } = useRtl()\n const { displayClasses, mobile } = useDisplay(props)\n const group = useGroup(props, props.symbol)\n const isOverflowing = shallowRef(false)\n const scrollOffset = shallowRef(0)\n const containerSize = shallowRef(0)\n const contentSize = shallowRef(0)\n const isHorizontal = computed(() => props.direction === 'horizontal')\n\n const { resizeRef: containerRef, contentRect: containerRect } = useResizeObserver()\n const { resizeRef: contentRef, contentRect } = useResizeObserver()\n\n const goTo = useGoTo()\n const goToOptions = computed<Partial<GoToOptions>>(() => {\n return {\n container: containerRef.el,\n duration: 200,\n easing: 'easeOutQuart',\n }\n })\n\n const firstSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1\n\n return group.items.value.findIndex(item => item.id === group.selected.value[0])\n })\n\n const lastSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1\n\n return group.items.value.findIndex(item => item.id === group.selected.value[group.selected.value.length - 1])\n })\n\n if (IN_BROWSER) {\n let frame = -1\n watch(() => [group.selected.value, containerRect.value, contentRect.value, isHorizontal.value], () => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n if (containerRect.value && contentRect.value) {\n const sizeProperty = isHorizontal.value ? 'width' : 'height'\n\n containerSize.value = containerRect.value[sizeProperty]\n contentSize.value = contentRect.value[sizeProperty]\n\n isOverflowing.value = containerSize.value + 1 < contentSize.value\n }\n\n if (props.scrollToActive && firstSelectedIndex.value >= 0 && contentRef.el) {\n // TODO: Is this too naive? Should we store element references in group composable?\n const selectedElement = contentRef.el.children[lastSelectedIndex.value] as HTMLElement\n\n scrollToChildren(selectedElement, props.centerActive)\n }\n })\n })\n }\n\n const isFocused = shallowRef(false)\n\n function scrollToChildren (children: HTMLElement, center?: boolean) {\n let target = 0\n\n if (center) {\n target = calculateCenteredTarget({\n containerElement: containerRef.el!,\n isHorizontal: isHorizontal.value,\n selectedElement: children,\n })\n } else {\n target = calculateUpdatedTarget({\n containerElement: containerRef.el!,\n isHorizontal: isHorizontal.value,\n isRtl: isRtl.value,\n selectedElement: children,\n })\n }\n\n scrollToPosition(target)\n }\n\n function scrollToPosition (newPosition: number) {\n if (!IN_BROWSER || !containerRef.el) return\n\n const offsetSize = getOffsetSize(isHorizontal.value, containerRef.el)\n const scrollPosition = getScrollPosition(isHorizontal.value, isRtl.value, containerRef.el)\n const scrollSize = getScrollSize(isHorizontal.value, containerRef.el)\n\n if (\n scrollSize <= offsetSize ||\n // Prevent scrolling by only a couple of pixels, which doesn't look smooth\n Math.abs(newPosition - scrollPosition) < 16\n ) return\n\n if (isHorizontal.value && isRtl.value && containerRef.el) {\n const { scrollWidth, offsetWidth: containerWidth } = containerRef.el!\n\n newPosition = (scrollWidth - containerWidth) - newPosition\n }\n\n if (isHorizontal.value) {\n goTo.horizontal(newPosition, goToOptions.value)\n } else {\n goTo(newPosition, goToOptions.value)\n }\n }\n\n function onScroll (e: Event) {\n const { scrollTop, scrollLeft } = e.target as HTMLElement\n\n scrollOffset.value = isHorizontal.value ? scrollLeft : scrollTop\n }\n\n function onFocusin (e: FocusEvent) {\n isFocused.value = true\n\n if (!isOverflowing.value || !contentRef.el) return\n\n // Focused element is likely to be the root of an item, so a\n // breadth-first search will probably find it in the first iteration\n for (const el of e.composedPath()) {\n for (const item of contentRef.el.children) {\n if (item === el) {\n scrollToChildren(item as HTMLElement)\n return\n }\n }\n }\n }\n\n function onFocusout (e: FocusEvent) {\n isFocused.value = false\n }\n\n // Affix clicks produce onFocus that we have to ignore to avoid extra scrollToChildren\n let ignoreFocusEvent = false\n function onFocus (e: FocusEvent) {\n if (\n !ignoreFocusEvent &&\n !isFocused.value &&\n !(e.relatedTarget && contentRef.el?.contains(e.relatedTarget as Node))\n ) focus()\n\n ignoreFocusEvent = false\n }\n\n function onFocusAffixes () {\n ignoreFocusEvent = true\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (!contentRef.el) return\n\n function toFocus (location: Parameters<typeof focus>[0]) {\n e.preventDefault()\n focus(location)\n }\n\n if (isHorizontal.value) {\n if (e.key === 'ArrowRight') {\n toFocus(isRtl.value ? 'prev' : 'next')\n } else if (e.key === 'ArrowLeft') {\n toFocus(isRtl.value ? 'next' : 'prev')\n }\n } else {\n if (e.key === 'ArrowDown') {\n toFocus('next')\n } else if (e.key === 'ArrowUp') {\n toFocus('prev')\n }\n }\n\n if (e.key === 'Home') {\n toFocus('first')\n } else if (e.key === 'End') {\n toFocus('last')\n }\n }\n\n function getSiblingElement (el: HTMLElement | null, location: 'next' | 'prev') {\n if (!el) return undefined\n let sibling: HTMLElement | null = el\n do {\n sibling = sibling?.[location === 'next' ? 'nextElementSibling' : 'previousElementSibling'] as HTMLElement | null\n } while (sibling?.hasAttribute('disabled'))\n return sibling\n }\n\n function focus (location?: 'next' | 'prev' | 'first' | 'last') {\n if (!contentRef.el) return\n\n let el: HTMLElement | null | undefined\n\n if (!location) {\n const focusable = focusableChildren(contentRef.el)\n el = focusable[0]\n } else if (location === 'next') {\n el = getSiblingElement(contentRef.el.querySelector(':focus'), location)\n\n if (!el) return focus('first')\n } else if (location === 'prev') {\n el = getSiblingElement(contentRef.el.querySelector(':focus'), location)\n\n if (!el) return focus('last')\n } else if (location === 'first') {\n el = (contentRef.el.firstElementChild as HTMLElement)\n\n if (el?.hasAttribute('disabled')) el = getSiblingElement(el, 'next')\n } else if (location === 'last') {\n el = (contentRef.el.lastElementChild as HTMLElement)\n\n if (el?.hasAttribute('disabled')) el = getSiblingElement(el, 'prev')\n }\n\n if (el) {\n el.focus({ preventScroll: true })\n }\n }\n\n function scrollTo (location: 'prev' | 'next') {\n const direction = isHorizontal.value && isRtl.value ? -1 : 1\n\n const offsetStep = (location === 'prev' ? -direction : direction) * containerSize.value\n\n let newPosition = scrollOffset.value + offsetStep\n\n // TODO: improve it\n if (isHorizontal.value && isRtl.value && containerRef.el) {\n const { scrollWidth, offsetWidth: containerWidth } = containerRef.el!\n\n newPosition += scrollWidth - containerWidth\n }\n\n scrollToPosition(newPosition)\n }\n\n const slotProps = computed(() => ({\n next: group.next,\n prev: group.prev,\n select: group.select,\n isSelected: group.isSelected,\n }))\n\n const hasOverflowOrScroll = computed(() => isOverflowing.value || Math.abs(scrollOffset.value) > 0)\n\n const hasAffixes = computed(() => {\n switch (props.showArrows) {\n // Always show arrows on desktop & mobile\n case 'always': return true\n\n // Always show arrows on desktop\n case 'desktop': return !mobile.value\n\n // Show arrows on mobile when overflowing.\n // This matches the default 2.2 behavior\n case true: return hasOverflowOrScroll.value\n\n // Always show on mobile\n case 'mobile': return (\n mobile.value ||\n hasOverflowOrScroll.value\n )\n\n // https://material.io/components/tabs#scrollable-tabs\n // Always show arrows when\n // overflowed on desktop\n default: return (\n !mobile.value &&\n hasOverflowOrScroll.value\n )\n }\n })\n\n const hasPrev = computed(() => {\n // 1 pixel in reserve, may be lost after rounding\n return Math.abs(scrollOffset.value) > 1\n })\n\n const hasNext = computed(() => {\n if (!containerRef.value || !hasOverflowOrScroll.value) return false\n\n const scrollSize = getScrollSize(isHorizontal.value, containerRef.el)\n const clientSize = getClientSize(isHorizontal.value, containerRef.el)\n\n const scrollSizeMax = scrollSize - clientSize\n\n // 1 pixel in reserve, may be lost after rounding\n return scrollSizeMax - Math.abs(scrollOffset.value) > 1\n })\n\n useRender(() => (\n <props.tag\n class={[\n 'v-slide-group',\n {\n 'v-slide-group--vertical': !isHorizontal.value,\n 'v-slide-group--has-affixes': hasAffixes.value,\n 'v-slide-group--is-overflowing': isOverflowing.value,\n },\n displayClasses.value,\n props.class,\n ]}\n style={ props.style }\n tabindex={ (isFocused.value || group.selected.value.length) ? -1 : 0 }\n onFocus={ onFocus }\n >\n { hasAffixes.value && (\n <div\n key=\"prev\"\n class={[\n 'v-slide-group__prev',\n { 'v-slide-group__prev--disabled': !hasPrev.value },\n ]}\n onMousedown={ onFocusAffixes }\n onClick={ () => hasPrev.value && scrollTo('prev') }\n >\n { slots.prev?.(slotProps.value) ?? (\n <VFadeTransition>\n <VIcon icon={ isRtl.value ? props.nextIcon : props.prevIcon }></VIcon>\n </VFadeTransition>\n )}\n </div>\n )}\n\n <div\n key=\"container\"\n ref={ containerRef }\n class={[\n 'v-slide-group__container',\n props.contentClass,\n ]}\n onScroll={ onScroll }\n >\n <div\n ref={ contentRef }\n class=\"v-slide-group__content\"\n onFocusin={ onFocusin }\n onFocusout={ onFocusout }\n onKeydown={ onKeydown }\n >\n { slots.default?.(slotProps.value) }\n </div>\n </div>\n\n { hasAffixes.value && (\n <div\n key=\"next\"\n class={[\n 'v-slide-group__next',\n { 'v-slide-group__next--disabled': !hasNext.value },\n ]}\n onMousedown={ onFocusAffixes }\n onClick={ () => hasNext.value && scrollTo('next') }\n >\n { slots.next?.(slotProps.value) ?? (\n <VFadeTransition>\n <VIcon icon={ isRtl.value ? props.prevIcon : props.nextIcon }></VIcon>\n </VFadeTransition>\n )}\n </div>\n )}\n </props.tag>\n ))\n\n return {\n selected: group.selected,\n scrollTo,\n scrollOffset,\n focus,\n hasPrev,\n hasNext,\n }\n },\n})\n\nexport type VSlideGroup = InstanceType<typeof VSlideGroup>\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -31,6 +31,7 @@ export declare const makeVTabsProps: <Defaults extends {
|
|
|
31
31
|
disabled?: unknown;
|
|
32
32
|
spaced?: unknown;
|
|
33
33
|
centerActive?: unknown;
|
|
34
|
+
scrollToActive?: unknown;
|
|
34
35
|
contentClass?: unknown;
|
|
35
36
|
direction?: unknown;
|
|
36
37
|
symbol?: unknown;
|
|
@@ -160,6 +161,16 @@ export declare const makeVTabsProps: <Defaults extends {
|
|
|
160
161
|
type: PropType<unknown extends Defaults["centerActive"] ? boolean : boolean | Defaults["centerActive"]>;
|
|
161
162
|
default: unknown extends Defaults["centerActive"] ? boolean : boolean | Defaults["centerActive"];
|
|
162
163
|
};
|
|
164
|
+
scrollToActive: unknown extends Defaults["scrollToActive"] ? {
|
|
165
|
+
type: BooleanConstructor;
|
|
166
|
+
default: boolean;
|
|
167
|
+
} : Omit<{
|
|
168
|
+
type: BooleanConstructor;
|
|
169
|
+
default: boolean;
|
|
170
|
+
}, "default" | "type"> & {
|
|
171
|
+
type: PropType<unknown extends Defaults["scrollToActive"] ? boolean : boolean | Defaults["scrollToActive"]>;
|
|
172
|
+
default: unknown extends Defaults["scrollToActive"] ? boolean : boolean | Defaults["scrollToActive"];
|
|
173
|
+
};
|
|
163
174
|
contentClass: unknown extends Defaults["contentClass"] ? null : {
|
|
164
175
|
type: PropType<unknown extends Defaults["contentClass"] ? any : any>;
|
|
165
176
|
default: unknown extends Defaults["contentClass"] ? any : any;
|
|
@@ -284,6 +295,7 @@ export declare const VTabs: {
|
|
|
284
295
|
selectedClass: string;
|
|
285
296
|
disabled: boolean;
|
|
286
297
|
centerActive: boolean;
|
|
298
|
+
scrollToActive: boolean;
|
|
287
299
|
direction: "horizontal" | "vertical";
|
|
288
300
|
symbol: any;
|
|
289
301
|
nextIcon: import("../../composables/icons.js").IconValue;
|
|
@@ -320,6 +332,7 @@ export declare const VTabs: {
|
|
|
320
332
|
selectedClass: string;
|
|
321
333
|
disabled: boolean;
|
|
322
334
|
centerActive: boolean;
|
|
335
|
+
scrollToActive: boolean;
|
|
323
336
|
direction: "horizontal" | "vertical";
|
|
324
337
|
symbol: any;
|
|
325
338
|
nextIcon: import("../../composables/icons.js").IconValue;
|
|
@@ -366,6 +379,7 @@ export declare const VTabs: {
|
|
|
366
379
|
selectedClass: string;
|
|
367
380
|
disabled: boolean;
|
|
368
381
|
centerActive: boolean;
|
|
382
|
+
scrollToActive: boolean;
|
|
369
383
|
direction: "horizontal" | "vertical";
|
|
370
384
|
symbol: any;
|
|
371
385
|
nextIcon: import("../../composables/icons.js").IconValue;
|
|
@@ -400,6 +414,7 @@ export declare const VTabs: {
|
|
|
400
414
|
selectedClass: string;
|
|
401
415
|
disabled: boolean;
|
|
402
416
|
centerActive: boolean;
|
|
417
|
+
scrollToActive: boolean;
|
|
403
418
|
direction: "horizontal" | "vertical";
|
|
404
419
|
symbol: any;
|
|
405
420
|
nextIcon: import("../../composables/icons.js").IconValue;
|
|
@@ -424,6 +439,7 @@ export declare const VTabs: {
|
|
|
424
439
|
selectedClass: string;
|
|
425
440
|
disabled: boolean;
|
|
426
441
|
centerActive: boolean;
|
|
442
|
+
scrollToActive: boolean;
|
|
427
443
|
direction: "horizontal" | "vertical";
|
|
428
444
|
symbol: any;
|
|
429
445
|
nextIcon: import("../../composables/icons.js").IconValue;
|
|
@@ -460,6 +476,7 @@ export declare const VTabs: {
|
|
|
460
476
|
selectedClass: string;
|
|
461
477
|
disabled: boolean;
|
|
462
478
|
centerActive: boolean;
|
|
479
|
+
scrollToActive: boolean;
|
|
463
480
|
direction: "horizontal" | "vertical";
|
|
464
481
|
symbol: any;
|
|
465
482
|
nextIcon: import("../../composables/icons.js").IconValue;
|
|
@@ -536,6 +553,10 @@ export declare const VTabs: {
|
|
|
536
553
|
disabled: BooleanConstructor;
|
|
537
554
|
spaced: PropType<"both" | "end" | "start">;
|
|
538
555
|
centerActive: BooleanConstructor;
|
|
556
|
+
scrollToActive: {
|
|
557
|
+
type: BooleanConstructor;
|
|
558
|
+
default: boolean;
|
|
559
|
+
};
|
|
539
560
|
contentClass: null;
|
|
540
561
|
direction: {
|
|
541
562
|
type: PropType<"horizontal" | "vertical">;
|
|
@@ -619,6 +640,10 @@ export declare const VTabs: {
|
|
|
619
640
|
disabled: BooleanConstructor;
|
|
620
641
|
spaced: PropType<"both" | "end" | "start">;
|
|
621
642
|
centerActive: BooleanConstructor;
|
|
643
|
+
scrollToActive: {
|
|
644
|
+
type: BooleanConstructor;
|
|
645
|
+
default: boolean;
|
|
646
|
+
};
|
|
622
647
|
contentClass: null;
|
|
623
648
|
direction: {
|
|
624
649
|
type: PropType<"horizontal" | "vertical">;
|
|
@@ -100,7 +100,6 @@ export const VTextField = genericComponent()({
|
|
|
100
100
|
e.stopPropagation();
|
|
101
101
|
onFocus();
|
|
102
102
|
nextTick(() => {
|
|
103
|
-
model.value = null;
|
|
104
103
|
reset();
|
|
105
104
|
callEvent(props['onClick:clear'], e);
|
|
106
105
|
});
|
|
@@ -155,8 +154,6 @@ export const VTextField = genericComponent()({
|
|
|
155
154
|
"onMousedown": onControlMousedown,
|
|
156
155
|
"onClick": onControlClick,
|
|
157
156
|
"onClick:clear": e => onClear(e, reset),
|
|
158
|
-
"onClick:prependInner": props['onClick:prependInner'],
|
|
159
|
-
"onClick:appendInner": props['onClick:appendInner'],
|
|
160
157
|
"role": props.role
|
|
161
158
|
}, omit(fieldProps, ['onClick:clear']), {
|
|
162
159
|
"id": id.value,
|
|
@@ -173,10 +170,11 @@ export const VTextField = genericComponent()({
|
|
|
173
170
|
props: {
|
|
174
171
|
class: fieldClass,
|
|
175
172
|
...slotProps
|
|
176
|
-
}
|
|
173
|
+
},
|
|
174
|
+
controlRef
|
|
177
175
|
} = _ref3;
|
|
178
176
|
const inputNode = _withDirectives(_createElementVNode("input", _mergeProps({
|
|
179
|
-
"ref": inputRef,
|
|
177
|
+
"ref": val => inputRef.value = controlRef.value = val,
|
|
180
178
|
"value": model.value,
|
|
181
179
|
"onInput": onInput,
|
|
182
180
|
"autofocus": props.autofocus,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VTextField.js","names":["VCounter","makeVFieldProps","VField","makeVInputProps","VInput","makeAutocompleteProps","useAutocomplete","useAutofocus","useFocus","forwardRefs","useProxiedModel","vIntersect","cloneVNode","computed","nextTick","ref","callEvent","filterInputAttrs","genericComponent","omit","propsFactory","useRender","activeTypes","makeVTextFieldProps","autofocus","Boolean","counter","Number","String","counterValue","Function","prefix","placeholder","persistentPlaceholder","persistentCounter","suffix","role","type","default","modelModifiers","Object","VTextField","name","directives","inheritAttrs","props","emits","e","focused","val","setup","_ref","attrs","emit","slots","model","isFocused","focus","blur","onIntersect","value","toString","length","max","maxlength","undefined","isPlainOrUnderlined","includes","variant","vInputRef","vFieldRef","inputRef","autocomplete","isActive","active","onFocus","isSuppressing","update","document","activeElement","onControlMousedown","target","preventDefault","onControlClick","onClear","reset","stopPropagation","onInput","el","trim","caretPosition","selectionStart","selectionEnd","hasCounter","hasDetails","details","rootAttrs","inputAttrs","modelValue","_","inputProps","filterProps","fieldProps","_createVNode","_mergeProps","$event","class","style","_ref2","id","isDisabled","isDirty","isReadonly","isValid","dirty","_ref3","fieldClass","slotProps","inputNode","_withDirectives","_createElementVNode","fieldName","fieldAutocomplete","handler","once","_Fragment","_normalizeClass","disabled"],"sources":["../../../src/components/VTextField/VTextField.tsx"],"sourcesContent":["// Styles\nimport './VTextField.sass'\n\n// Components\nimport { VCounter } from '@/components/VCounter/VCounter'\nimport { makeVFieldProps, VField } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { makeAutocompleteProps, useAutocomplete } from '@/composables/autocomplete'\nimport { useAutofocus } from '@/composables/autofocus'\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport vIntersect from '@/directives/intersect'\n\n// Utilities\nimport { cloneVNode, computed, nextTick, ref } from 'vue'\nimport { callEvent, filterInputAttrs, genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VCounterSlot } from '@/components/VCounter/VCounter'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nconst activeTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month']\n\nexport const makeVTextFieldProps = propsFactory({\n autofocus: Boolean,\n counter: [Boolean, Number, String],\n counterValue: [Number, Function] as PropType<number | ((value: any) => number)>,\n prefix: String,\n placeholder: String,\n persistentPlaceholder: Boolean,\n persistentCounter: Boolean,\n suffix: String,\n role: String,\n type: {\n type: String,\n default: 'text',\n },\n modelModifiers: Object as PropType<Record<string, boolean>>,\n\n ...makeAutocompleteProps(),\n ...makeVInputProps(),\n ...makeVFieldProps(),\n}, 'VTextField')\n\nexport type VTextFieldSlots = Omit<VInputSlots & VFieldSlots, 'default'> & {\n default: never\n counter: VCounterSlot\n}\n\nexport const VTextField = genericComponent<VTextFieldSlots>()({\n name: 'VTextField',\n\n directives: { vIntersect },\n\n inheritAttrs: false,\n\n props: makeVTextFieldProps(),\n\n emits: {\n 'click:control': (e: MouseEvent) => true,\n 'mousedown:control': (e: MouseEvent) => true,\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const { isFocused, focus, blur } = useFocus(props)\n const { onIntersect } = useAutofocus(props)\n const counterValue = computed(() => {\n return typeof props.counterValue === 'function' ? props.counterValue(model.value)\n : typeof props.counterValue === 'number' ? props.counterValue\n : (model.value ?? '').toString().length\n })\n const max = computed(() => {\n if (attrs.maxlength) return attrs.maxlength as unknown as undefined\n\n if (\n !props.counter ||\n (typeof props.counter !== 'number' &&\n typeof props.counter !== 'string')\n ) return undefined\n\n return props.counter\n })\n\n const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VField>()\n const inputRef = ref<HTMLInputElement>()\n const autocomplete = useAutocomplete(props)\n const isActive = computed(() => (\n activeTypes.includes(props.type) ||\n props.persistentPlaceholder ||\n isFocused.value ||\n props.active\n ))\n function onFocus () {\n if (autocomplete.isSuppressing.value) {\n autocomplete.update()\n }\n\n if (!isFocused.value) focus()\n\n nextTick(() => {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n })\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n\n if (e.target === inputRef.value) return\n\n onFocus()\n e.preventDefault()\n }\n function onControlClick (e: MouseEvent) {\n emit('click:control', e)\n }\n function onClear (e: MouseEvent, reset: () => void) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n model.value = null\n reset()\n\n callEvent(props['onClick:clear'], e)\n })\n }\n function onInput (e: Event) {\n const el = e.target as HTMLInputElement\n model.value = el.value\n if (\n props.modelModifiers?.trim &&\n ['text', 'search', 'password', 'tel', 'url'].includes(props.type)\n ) {\n const caretPosition = [el.selectionStart, el.selectionEnd]\n nextTick(() => {\n el.selectionStart = caretPosition[0]\n el.selectionEnd = caretPosition[1]\n })\n }\n }\n\n useRender(() => {\n const hasCounter = !!(slots.counter || (props.counter !== false && props.counter != null))\n const hasDetails = !!(hasCounter || slots.details)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const { modelValue: _, ...inputProps } = VInput.filterProps(props)\n const fieldProps = VField.filterProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class={[\n 'v-text-field',\n {\n 'v-text-field--prefixed': props.prefix,\n 'v-text-field--suffixed': props.suffix,\n 'v-input--plain-underlined': isPlainOrUnderlined.value,\n },\n props.class,\n ]}\n style={ props.style }\n { ...rootAttrs }\n { ...inputProps }\n centerAffix={ !isPlainOrUnderlined.value }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({\n id,\n isDisabled,\n isDirty,\n isReadonly,\n isValid,\n hasDetails,\n reset,\n }) => (\n <VField\n ref={ vFieldRef }\n onMousedown={ onControlMousedown }\n onClick={ onControlClick }\n onClick:clear={ (e: MouseEvent) => onClear(e, reset) }\n onClick:prependInner={ props['onClick:prependInner'] }\n onClick:appendInner={ props['onClick:appendInner'] }\n role={ props.role }\n { ...omit(fieldProps, ['onClick:clear']) }\n id={ id.value }\n active={ isActive.value || isDirty.value }\n dirty={ isDirty.value || props.dirty }\n disabled={ isDisabled.value }\n focused={ isFocused.value }\n details={ hasDetails.value }\n error={ isValid.value === false }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n }) => {\n const inputNode = (\n <input\n ref={ inputRef }\n value={ model.value }\n onInput={ onInput }\n v-intersect={[{\n handler: onIntersect,\n }, null, ['once']]}\n autofocus={ props.autofocus }\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n name={ autocomplete.fieldName.value }\n autocomplete={ autocomplete.fieldAutocomplete.value }\n placeholder={ props.placeholder }\n size={ 1 }\n role={ props.role }\n type={ props.type }\n onFocus={ focus }\n onBlur={ blur }\n { ...slotProps }\n { ...inputAttrs }\n />\n )\n\n return (\n <>\n { props.prefix && (\n <span class=\"v-text-field__prefix\">\n <span class=\"v-text-field__prefix__text\">\n { props.prefix }\n </span>\n </span>\n )}\n\n { slots.default ? (\n <div\n class={ fieldClass }\n data-no-activator=\"\"\n >\n { slots.default() }\n { inputNode }\n </div>\n ) : cloneVNode(inputNode, { class: fieldClass })}\n\n { props.suffix && (\n <span class=\"v-text-field__suffix\">\n <span class=\"v-text-field__suffix__text\">\n { props.suffix }\n </span>\n </span>\n )}\n </>\n )\n },\n }}\n </VField>\n ),\n details: hasDetails ? slotProps => (\n <>\n { slots.details?.(slotProps) }\n\n { hasCounter && (\n <>\n <span />\n\n <VCounter\n active={ props.persistentCounter || isFocused.value }\n value={ counterValue.value }\n max={ max.value }\n disabled={ props.disabled }\n v-slots:default={ slots.counter }\n />\n </>\n )}\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return forwardRefs({}, vInputRef, vFieldRef, inputRef)\n },\n})\n\nexport type VTextField = InstanceType<typeof VTextField>\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"VTextField.js","names":["VCounter","makeVFieldProps","VField","makeVInputProps","VInput","makeAutocompleteProps","useAutocomplete","useAutofocus","useFocus","forwardRefs","useProxiedModel","vIntersect","cloneVNode","computed","nextTick","ref","callEvent","filterInputAttrs","genericComponent","omit","propsFactory","useRender","activeTypes","makeVTextFieldProps","autofocus","Boolean","counter","Number","String","counterValue","Function","prefix","placeholder","persistentPlaceholder","persistentCounter","suffix","role","type","default","modelModifiers","Object","VTextField","name","directives","inheritAttrs","props","emits","e","focused","val","setup","_ref","attrs","emit","slots","model","isFocused","focus","blur","onIntersect","value","toString","length","max","maxlength","undefined","isPlainOrUnderlined","includes","variant","vInputRef","vFieldRef","inputRef","autocomplete","isActive","active","onFocus","isSuppressing","update","document","activeElement","onControlMousedown","target","preventDefault","onControlClick","onClear","reset","stopPropagation","onInput","el","trim","caretPosition","selectionStart","selectionEnd","hasCounter","hasDetails","details","rootAttrs","inputAttrs","modelValue","_","inputProps","filterProps","fieldProps","_createVNode","_mergeProps","$event","class","style","_ref2","id","isDisabled","isDirty","isReadonly","isValid","dirty","_ref3","fieldClass","slotProps","controlRef","inputNode","_withDirectives","_createElementVNode","fieldName","fieldAutocomplete","handler","once","_Fragment","_normalizeClass","disabled"],"sources":["../../../src/components/VTextField/VTextField.tsx"],"sourcesContent":["// Styles\nimport './VTextField.sass'\n\n// Components\nimport { VCounter } from '@/components/VCounter/VCounter'\nimport { makeVFieldProps, VField } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { makeAutocompleteProps, useAutocomplete } from '@/composables/autocomplete'\nimport { useAutofocus } from '@/composables/autofocus'\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport vIntersect from '@/directives/intersect'\n\n// Utilities\nimport { cloneVNode, computed, nextTick, ref } from 'vue'\nimport { callEvent, filterInputAttrs, genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VCounterSlot } from '@/components/VCounter/VCounter'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nconst activeTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month']\n\nexport const makeVTextFieldProps = propsFactory({\n autofocus: Boolean,\n counter: [Boolean, Number, String],\n counterValue: [Number, Function] as PropType<number | ((value: any) => number)>,\n prefix: String,\n placeholder: String,\n persistentPlaceholder: Boolean,\n persistentCounter: Boolean,\n suffix: String,\n role: String,\n type: {\n type: String,\n default: 'text',\n },\n modelModifiers: Object as PropType<Record<string, boolean>>,\n\n ...makeAutocompleteProps(),\n ...makeVInputProps(),\n ...makeVFieldProps(),\n}, 'VTextField')\n\nexport type VTextFieldSlots = Omit<VInputSlots & VFieldSlots, 'default'> & {\n default: never\n counter: VCounterSlot\n}\n\nexport const VTextField = genericComponent<VTextFieldSlots>()({\n name: 'VTextField',\n\n directives: { vIntersect },\n\n inheritAttrs: false,\n\n props: makeVTextFieldProps(),\n\n emits: {\n 'click:control': (e: MouseEvent) => true,\n 'mousedown:control': (e: MouseEvent) => true,\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const { isFocused, focus, blur } = useFocus(props)\n const { onIntersect } = useAutofocus(props)\n const counterValue = computed(() => {\n return typeof props.counterValue === 'function' ? props.counterValue(model.value)\n : typeof props.counterValue === 'number' ? props.counterValue\n : (model.value ?? '').toString().length\n })\n const max = computed(() => {\n if (attrs.maxlength) return attrs.maxlength as unknown as undefined\n\n if (\n !props.counter ||\n (typeof props.counter !== 'number' &&\n typeof props.counter !== 'string')\n ) return undefined\n\n return props.counter\n })\n\n const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VField>()\n const inputRef = ref<HTMLInputElement>()\n const autocomplete = useAutocomplete(props)\n const isActive = computed(() => (\n activeTypes.includes(props.type) ||\n props.persistentPlaceholder ||\n isFocused.value ||\n props.active\n ))\n function onFocus () {\n if (autocomplete.isSuppressing.value) {\n autocomplete.update()\n }\n\n if (!isFocused.value) focus()\n\n nextTick(() => {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n })\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n\n if (e.target === inputRef.value) return\n\n onFocus()\n e.preventDefault()\n }\n function onControlClick (e: MouseEvent) {\n emit('click:control', e)\n }\n function onClear (e: MouseEvent, reset: () => void) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n reset()\n\n callEvent(props['onClick:clear'], e)\n })\n }\n function onInput (e: Event) {\n const el = e.target as HTMLInputElement\n model.value = el.value\n if (\n props.modelModifiers?.trim &&\n ['text', 'search', 'password', 'tel', 'url'].includes(props.type)\n ) {\n const caretPosition = [el.selectionStart, el.selectionEnd]\n nextTick(() => {\n el.selectionStart = caretPosition[0]\n el.selectionEnd = caretPosition[1]\n })\n }\n }\n\n useRender(() => {\n const hasCounter = !!(slots.counter || (props.counter !== false && props.counter != null))\n const hasDetails = !!(hasCounter || slots.details)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const { modelValue: _, ...inputProps } = VInput.filterProps(props)\n const fieldProps = VField.filterProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class={[\n 'v-text-field',\n {\n 'v-text-field--prefixed': props.prefix,\n 'v-text-field--suffixed': props.suffix,\n 'v-input--plain-underlined': isPlainOrUnderlined.value,\n },\n props.class,\n ]}\n style={ props.style }\n { ...rootAttrs }\n { ...inputProps }\n centerAffix={ !isPlainOrUnderlined.value }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({\n id,\n isDisabled,\n isDirty,\n isReadonly,\n isValid,\n hasDetails,\n reset,\n }) => (\n <VField\n ref={ vFieldRef }\n onMousedown={ onControlMousedown }\n onClick={ onControlClick }\n onClick:clear={ (e: MouseEvent) => onClear(e, reset) }\n role={ props.role }\n { ...omit(fieldProps, ['onClick:clear']) }\n id={ id.value }\n active={ isActive.value || isDirty.value }\n dirty={ isDirty.value || props.dirty }\n disabled={ isDisabled.value }\n focused={ isFocused.value }\n details={ hasDetails.value }\n error={ isValid.value === false }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n controlRef,\n }) => {\n const inputNode = (\n <input\n ref={ val => inputRef.value = controlRef.value = val as HTMLInputElement }\n value={ model.value }\n onInput={ onInput }\n v-intersect={[{\n handler: onIntersect,\n }, null, ['once']]}\n autofocus={ props.autofocus }\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n name={ autocomplete.fieldName.value }\n autocomplete={ autocomplete.fieldAutocomplete.value }\n placeholder={ props.placeholder }\n size={ 1 }\n role={ props.role }\n type={ props.type }\n onFocus={ focus }\n onBlur={ blur }\n { ...slotProps }\n { ...inputAttrs }\n />\n )\n\n return (\n <>\n { props.prefix && (\n <span class=\"v-text-field__prefix\">\n <span class=\"v-text-field__prefix__text\">\n { props.prefix }\n </span>\n </span>\n )}\n\n { slots.default ? (\n <div\n class={ fieldClass }\n data-no-activator=\"\"\n >\n { slots.default() }\n { inputNode }\n </div>\n ) : cloneVNode(inputNode, { class: fieldClass })}\n\n { props.suffix && (\n <span class=\"v-text-field__suffix\">\n <span class=\"v-text-field__suffix__text\">\n { props.suffix }\n </span>\n </span>\n )}\n </>\n )\n },\n }}\n </VField>\n ),\n details: hasDetails ? slotProps => (\n <>\n { slots.details?.(slotProps) }\n\n { hasCounter && (\n <>\n <span />\n\n <VCounter\n active={ props.persistentCounter || isFocused.value }\n value={ counterValue.value }\n max={ max.value }\n disabled={ props.disabled }\n v-slots:default={ slots.counter }\n />\n </>\n )}\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return forwardRefs({}, vInputRef, vFieldRef, inputRef)\n },\n})\n\nexport type VTextField = InstanceType<typeof VTextField>\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
.v-textarea .v-field__input {
|
|
8
8
|
flex: 1 1 auto;
|
|
9
9
|
outline: none;
|
|
10
|
-
-webkit-mask-image: linear-gradient(to bottom, transparent, transparent calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) - 6px), black calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) + 4px));
|
|
11
|
-
mask-image: linear-gradient(to bottom, transparent, transparent calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) - 6px), black calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) + 4px));
|
|
10
|
+
-webkit-mask-image: linear-gradient(to bottom, transparent, transparent calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) - 6px), black calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) + 4px)), linear-gradient(to right, transparent, transparent calc(100% - var(--v-textarea-scroll-bar-width, 16px)), black calc(100% - var(--v-textarea-scroll-bar-width, 16px)));
|
|
11
|
+
mask-image: linear-gradient(to bottom, transparent, transparent calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) - 6px), black calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) + 4px)), linear-gradient(to right, transparent, transparent calc(100% - var(--v-textarea-scroll-bar-width, 16px)), black calc(100% - var(--v-textarea-scroll-bar-width, 16px)));
|
|
12
12
|
}
|
|
13
13
|
.v-textarea .v-field__input.v-textarea__sizer {
|
|
14
14
|
visibility: hidden;
|