@vuetify/nightly 3.9.0-dev.2025-07-15 → 3.9.0-dev.2025-07-16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -3
- package/dist/json/attributes.json +3261 -3241
- package/dist/json/importMap-labs.json +24 -24
- package/dist/json/importMap.json +202 -202
- package/dist/json/tags.json +5 -0
- package/dist/json/web-types.json +6129 -6059
- package/dist/vuetify-labs.cjs +204 -25
- package/dist/vuetify-labs.css +4800 -4798
- package/dist/vuetify-labs.d.ts +129 -67
- package/dist/vuetify-labs.esm.js +204 -25
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +204 -25
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +166 -16
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3987 -3985
- package/dist/vuetify.d.ts +119 -67
- package/dist/vuetify.esm.js +166 -16
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +166 -16
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +710 -688
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VFileInput/VFileInput.d.ts +15 -0
- package/lib/components/VFileInput/VFileInput.js +38 -9
- package/lib/components/VFileInput/VFileInput.js.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.css +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.d.ts +75 -0
- package/lib/components/VProgressLinear/VProgressLinear.js +32 -6
- package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.sass +2 -2
- package/lib/components/VProgressLinear/chunks.d.ts +55 -0
- package/lib/components/VProgressLinear/chunks.js +62 -0
- package/lib/components/VProgressLinear/chunks.js.map +1 -0
- package/lib/composables/fileFilter.d.ts +18 -0
- package/lib/composables/fileFilter.js +38 -0
- package/lib/composables/fileFilter.js.map +1 -0
- package/lib/entry-bundler.js +1 -1
- package/lib/framework.d.ts +67 -67
- package/lib/framework.js +1 -1
- package/lib/labs/VFileUpload/VFileUpload.d.ts +15 -0
- package/lib/labs/VFileUpload/VFileUpload.js +39 -9
- package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
- package/package.json +1 -1
@@ -40,6 +40,7 @@ export declare const makeVFileInputProps: <Defaults extends {
|
|
40
40
|
'onClick:clear'?: unknown;
|
41
41
|
'onClick:appendInner'?: unknown;
|
42
42
|
'onClick:prependInner'?: unknown;
|
43
|
+
filterByType?: unknown;
|
43
44
|
modelValue?: unknown;
|
44
45
|
focused?: unknown;
|
45
46
|
'onUpdate:focused'?: unknown;
|
@@ -233,6 +234,10 @@ export declare const makeVFileInputProps: <Defaults extends {
|
|
233
234
|
type: PropType<unknown extends Defaults["onClick:prependInner"] ? (args_0: MouseEvent) => void : ((args_0: MouseEvent) => void) | Defaults["onClick:prependInner"]>;
|
234
235
|
default: unknown extends Defaults["onClick:prependInner"] ? (args_0: MouseEvent) => void : ((args_0: MouseEvent) => void) | Defaults["onClick:prependInner"];
|
235
236
|
};
|
237
|
+
filterByType: unknown extends Defaults["filterByType"] ? StringConstructor : {
|
238
|
+
type: PropType<unknown extends Defaults["filterByType"] ? string : string | Defaults["filterByType"]>;
|
239
|
+
default: unknown extends Defaults["filterByType"] ? string : string | Defaults["filterByType"];
|
240
|
+
};
|
236
241
|
modelValue: unknown extends Defaults["modelValue"] ? {
|
237
242
|
type: PropType<File[] | File | null>;
|
238
243
|
default: (props: any) => never[] | null;
|
@@ -506,6 +511,7 @@ export declare const VFileInput: {
|
|
506
511
|
centerAffix?: boolean | undefined;
|
507
512
|
hint?: string | undefined;
|
508
513
|
hideDetails?: boolean | "auto" | undefined;
|
514
|
+
filterByType?: string | undefined;
|
509
515
|
} & {
|
510
516
|
$children?: import("vue").VNodeChild | {
|
511
517
|
default?: ((arg: import("../VInput/VInput.js").VInputSlot & import("../VField/VField.js").VFieldSlot) => import("vue").VNodeChild) | undefined;
|
@@ -580,6 +586,7 @@ export declare const VFileInput: {
|
|
580
586
|
"onUpdate:modelValue"?: ((files: File | File[]) => any) | undefined;
|
581
587
|
"onClick:control"?: ((e: MouseEvent) => any) | undefined;
|
582
588
|
"onMousedown:control"?: ((e: MouseEvent) => any) | undefined;
|
589
|
+
onRejected?: ((files: File[]) => any) | undefined;
|
583
590
|
}, Omit<Omit<{
|
584
591
|
$: import("vue").ComponentInternalInstance;
|
585
592
|
$data: {};
|
@@ -816,6 +823,7 @@ export declare const VFileInput: {
|
|
816
823
|
'mousedown:control': (e: MouseEvent) => true;
|
817
824
|
'update:focused': (focused: boolean) => true;
|
818
825
|
'update:modelValue': (files: File | File[]) => true;
|
826
|
+
rejected: (files: File[]) => true;
|
819
827
|
}, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, {
|
820
828
|
flat: boolean;
|
821
829
|
reverse: boolean;
|
@@ -944,6 +952,7 @@ export declare const VFileInput: {
|
|
944
952
|
centerAffix?: boolean | undefined;
|
945
953
|
hint?: string | undefined;
|
946
954
|
hideDetails?: boolean | "auto" | undefined;
|
955
|
+
filterByType?: string | undefined;
|
947
956
|
} & {
|
948
957
|
$children?: import("vue").VNodeChild | {
|
949
958
|
default?: ((arg: import("../VInput/VInput.js").VInputSlot & import("../VField/VField.js").VFieldSlot) => import("vue").VNodeChild) | undefined;
|
@@ -1018,6 +1027,7 @@ export declare const VFileInput: {
|
|
1018
1027
|
"onUpdate:modelValue"?: ((files: File | File[]) => any) | undefined;
|
1019
1028
|
"onClick:control"?: ((e: MouseEvent) => any) | undefined;
|
1020
1029
|
"onMousedown:control"?: ((e: MouseEvent) => any) | undefined;
|
1030
|
+
onRejected?: ((files: File[]) => any) | undefined;
|
1021
1031
|
}, Omit<Omit<{
|
1022
1032
|
$: import("vue").ComponentInternalInstance;
|
1023
1033
|
$data: {};
|
@@ -1352,6 +1362,7 @@ export declare const VFileInput: {
|
|
1352
1362
|
centerAffix?: boolean | undefined;
|
1353
1363
|
hint?: string | undefined;
|
1354
1364
|
hideDetails?: boolean | "auto" | undefined;
|
1365
|
+
filterByType?: string | undefined;
|
1355
1366
|
} & {
|
1356
1367
|
$children?: import("vue").VNodeChild | {
|
1357
1368
|
default?: ((arg: import("../VInput/VInput.js").VInputSlot & import("../VField/VField.js").VFieldSlot) => import("vue").VNodeChild) | undefined;
|
@@ -1426,6 +1437,7 @@ export declare const VFileInput: {
|
|
1426
1437
|
"onUpdate:modelValue"?: ((files: File | File[]) => any) | undefined;
|
1427
1438
|
"onClick:control"?: ((e: MouseEvent) => any) | undefined;
|
1428
1439
|
"onMousedown:control"?: ((e: MouseEvent) => any) | undefined;
|
1440
|
+
onRejected?: ((files: File[]) => any) | undefined;
|
1429
1441
|
}, Omit<Omit<{
|
1430
1442
|
$: import("vue").ComponentInternalInstance;
|
1431
1443
|
$data: {};
|
@@ -1662,6 +1674,7 @@ export declare const VFileInput: {
|
|
1662
1674
|
'mousedown:control': (e: MouseEvent) => true;
|
1663
1675
|
'update:focused': (focused: boolean) => true;
|
1664
1676
|
'update:modelValue': (files: File | File[]) => true;
|
1677
|
+
rejected: (files: File[]) => true;
|
1665
1678
|
}, string, {
|
1666
1679
|
flat: boolean;
|
1667
1680
|
reverse: boolean;
|
@@ -1772,6 +1785,7 @@ export declare const VFileInput: {
|
|
1772
1785
|
'onClick:clear': PropType<(args_0: MouseEvent) => void>;
|
1773
1786
|
'onClick:appendInner': PropType<(args_0: MouseEvent) => void>;
|
1774
1787
|
'onClick:prependInner': PropType<(args_0: MouseEvent) => void>;
|
1788
|
+
filterByType: StringConstructor;
|
1775
1789
|
modelValue: {
|
1776
1790
|
type: PropType<File[] | File | null>;
|
1777
1791
|
default: (props: any) => never[] | null;
|
@@ -1896,6 +1910,7 @@ export declare const VFileInput: {
|
|
1896
1910
|
'onClick:clear': PropType<(args_0: MouseEvent) => void>;
|
1897
1911
|
'onClick:appendInner': PropType<(args_0: MouseEvent) => void>;
|
1898
1912
|
'onClick:prependInner': PropType<(args_0: MouseEvent) => void>;
|
1913
|
+
filterByType: StringConstructor;
|
1899
1914
|
modelValue: {
|
1900
1915
|
type: PropType<File[] | File | null>;
|
1901
1916
|
default: (props: any) => never[] | null;
|
@@ -9,6 +9,7 @@ import { VField } from "../VField/index.js";
|
|
9
9
|
import { makeVFieldProps } from "../VField/VField.js";
|
10
10
|
import { makeVInputProps, VInput } from "../VInput/VInput.js"; // Composables
|
11
11
|
import { useFileDrop } from "../../composables/fileDrop.js";
|
12
|
+
import { makeFileFilterProps, useFileFilter } from "../../composables/fileFilter.js";
|
12
13
|
import { useFocus } from "../../composables/focus.js";
|
13
14
|
import { forwardRefs } from "../../composables/forwardRefs.js";
|
14
15
|
import { useLocale } from "../../composables/locale.js";
|
@@ -45,6 +46,7 @@ export const makeVFileInputProps = propsFactory({
|
|
45
46
|
return wrapInArray(val).every(v => v != null && typeof v === 'object');
|
46
47
|
}
|
47
48
|
},
|
49
|
+
...makeFileFilterProps(),
|
48
50
|
...makeVFieldProps({
|
49
51
|
clearable: true
|
50
52
|
})
|
@@ -57,7 +59,8 @@ export const VFileInput = genericComponent()({
|
|
57
59
|
'click:control': e => true,
|
58
60
|
'mousedown:control': e => true,
|
59
61
|
'update:focused': focused => true,
|
60
|
-
'update:modelValue': files => true
|
62
|
+
'update:modelValue': files => true,
|
63
|
+
rejected: files => true
|
61
64
|
},
|
62
65
|
setup(props, _ref) {
|
63
66
|
let {
|
@@ -68,6 +71,9 @@ export const VFileInput = genericComponent()({
|
|
68
71
|
const {
|
69
72
|
t
|
70
73
|
} = useLocale();
|
74
|
+
const {
|
75
|
+
filterAccepted
|
76
|
+
} = useFileFilter(props);
|
71
77
|
const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => !props.multiple && Array.isArray(val) ? val[0] : val);
|
72
78
|
const {
|
73
79
|
isFocused,
|
@@ -141,14 +147,38 @@ export const VFileInput = genericComponent()({
|
|
141
147
|
e.stopImmediatePropagation();
|
142
148
|
isDragging.value = false;
|
143
149
|
if (!inputRef.value || !hasFilesOrFolders(e)) return;
|
150
|
+
const allDroppedFiles = await handleDrop(e);
|
151
|
+
selectAccepted(allDroppedFiles);
|
152
|
+
}
|
153
|
+
function onFileSelection(e) {
|
154
|
+
if (!e.target || e.repack) return; // prevent loop
|
155
|
+
|
156
|
+
if (!props.filterByType) {
|
157
|
+
const target = e.target;
|
158
|
+
model.value = [...(target.files ?? [])];
|
159
|
+
} else {
|
160
|
+
selectAccepted([...e.target.files]);
|
161
|
+
}
|
162
|
+
}
|
163
|
+
function selectAccepted(files) {
|
144
164
|
const dataTransfer = new DataTransfer();
|
145
|
-
|
165
|
+
const {
|
166
|
+
accepted,
|
167
|
+
rejected
|
168
|
+
} = filterAccepted(files);
|
169
|
+
if (rejected.length) {
|
170
|
+
emit('rejected', rejected);
|
171
|
+
}
|
172
|
+
for (const file of accepted) {
|
146
173
|
dataTransfer.items.add(file);
|
147
174
|
}
|
148
175
|
inputRef.value.files = dataTransfer.files;
|
149
|
-
|
176
|
+
model.value = [...dataTransfer.files];
|
177
|
+
const event = new Event('change', {
|
150
178
|
bubbles: true
|
151
|
-
})
|
179
|
+
});
|
180
|
+
event.repack = true;
|
181
|
+
inputRef.value.dispatchEvent(event);
|
152
182
|
}
|
153
183
|
watch(model, newValue => {
|
154
184
|
const hasModelReset = !Array.isArray(newValue) || !newValue.length;
|
@@ -165,6 +195,8 @@ export const VFileInput = genericComponent()({
|
|
165
195
|
...inputProps
|
166
196
|
} = VInput.filterProps(props);
|
167
197
|
const fieldProps = VField.filterProps(props);
|
198
|
+
const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false;
|
199
|
+
const inputAccept = expectsDirectory ? undefined : props.filterByType ?? String(attrs.accept);
|
168
200
|
return _createVNode(VInput, _mergeProps({
|
169
201
|
"ref": vInputRef,
|
170
202
|
"modelValue": props.multiple ? model.value : model.value[0],
|
@@ -218,6 +250,7 @@ export const VFileInput = genericComponent()({
|
|
218
250
|
return _createElementVNode(_Fragment, null, [_createElementVNode("input", _mergeProps({
|
219
251
|
"ref": inputRef,
|
220
252
|
"type": "file",
|
253
|
+
"accept": inputAccept,
|
221
254
|
"readonly": isReadonly.value,
|
222
255
|
"disabled": isDisabled.value,
|
223
256
|
"multiple": props.multiple,
|
@@ -227,11 +260,7 @@ export const VFileInput = genericComponent()({
|
|
227
260
|
if (isReadonly.value) e.preventDefault();
|
228
261
|
onFocus();
|
229
262
|
},
|
230
|
-
"onChange":
|
231
|
-
if (!e.target) return;
|
232
|
-
const target = e.target;
|
233
|
-
model.value = [...(target.files ?? [])];
|
234
|
-
},
|
263
|
+
"onChange": onFileSelection,
|
235
264
|
"onDragleave": onDragleave,
|
236
265
|
"onFocus": onFocus,
|
237
266
|
"onBlur": blur
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"VFileInput.js","names":["VChip","VCounter","VField","makeVFieldProps","makeVInputProps","VInput","useFileDrop","useFocus","forwardRefs","useLocale","useProxiedModel","computed","nextTick","ref","shallowRef","toRef","watch","callEvent","filterInputAttrs","genericComponent","humanReadableFileSize","propsFactory","useRender","wrapInArray","makeVFileInputProps","chips","Boolean","counter","counterSizeString","type","String","default","counterString","hideInput","multiple","showSize","Number","validator","v","includes","prependIcon","modelValue","Array","Object","props","val","every","clearable","VFileInput","name","inheritAttrs","emits","e","focused","files","setup","_ref","attrs","emit","slots","t","model","isArray","isFocused","focus","blur","base","undefined","totalBytes","value","reduce","bytes","_ref2","size","totalBytesReadable","fileNames","map","file","counterValue","fileCount","length","vInputRef","vFieldRef","inputRef","isActive","active","isPlainOrUnderlined","variant","isDragging","handleDrop","hasFilesOrFolders","onFocus","document","activeElement","onClickPrepend","click","onControlMousedown","onControlClick","onClear","stopPropagation","onDragover","preventDefault","stopImmediatePropagation","onDragleave","onDrop","dataTransfer","DataTransfer","items","add","dispatchEvent","Event","bubbles","newValue","hasModelReset","hasCounter","hasDetails","details","rootAttrs","inputAttrs","_","inputProps","filterProps","fieldProps","_createVNode","_mergeProps","class","style","_ref3","id","isDisabled","isDirty","isReadonly","isValid","dirty","_ref4","fieldClass","slotProps","_createElementVNode","_Fragment","target","_normalizeClass","selection","text","join","disabled"],"sources":["../../../src/components/VFileInput/VFileInput.tsx"],"sourcesContent":["// Styles\nimport './VFileInput.sass'\n\n// Components\nimport { VChip } from '@/components/VChip'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\nimport { makeVFieldProps } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { useFileDrop } from '@/composables/fileDrop'\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref, shallowRef, toRef, watch } from 'vue'\nimport {\n callEvent,\n filterInputAttrs,\n genericComponent,\n humanReadableFileSize,\n propsFactory,\n useRender,\n wrapInArray,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nexport type VFileInputSlots = VInputSlots & VFieldSlots & {\n counter: never\n selection: {\n fileNames: string[]\n totalBytes: number\n totalBytesReadable: string\n }\n}\n\nexport const makeVFileInputProps = propsFactory({\n chips: Boolean,\n counter: Boolean,\n counterSizeString: {\n type: String,\n default: '$vuetify.fileInput.counterSize',\n },\n counterString: {\n type: String,\n default: '$vuetify.fileInput.counter',\n },\n hideInput: Boolean,\n multiple: Boolean,\n showSize: {\n type: [Boolean, Number, String] as PropType<boolean | 1000 | 1024>,\n default: false,\n validator: (v: boolean | number) => {\n return (\n typeof v === 'boolean' ||\n [1000, 1024].includes(Number(v))\n )\n },\n },\n\n ...makeVInputProps({ prependIcon: '$file' }),\n\n modelValue: {\n type: [Array, Object] as PropType<File[] | File | null>,\n default: (props: any) => props.multiple ? [] : null,\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n\n ...makeVFieldProps({ clearable: true }),\n}, 'VFileInput')\n\nexport const VFileInput = genericComponent<VFileInputSlots>()({\n name: 'VFileInput',\n\n inheritAttrs: false,\n\n props: makeVFileInputProps(),\n\n emits: {\n 'click:control': (e: MouseEvent) => true,\n 'mousedown:control': (e: MouseEvent) => true,\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (files: File | File[]) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { t } = useLocale()\n const model = useProxiedModel(\n props,\n 'modelValue',\n props.modelValue,\n val => wrapInArray(val),\n val => (!props.multiple && Array.isArray(val)) ? val[0] : val,\n )\n const { isFocused, focus, blur } = useFocus(props)\n const base = computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined)\n const totalBytes = computed(() => (model.value ?? []).reduce((bytes, { size = 0 }) => bytes + size, 0))\n const totalBytesReadable = computed(() => humanReadableFileSize(totalBytes.value, base.value))\n\n const fileNames = computed(() => (model.value ?? []).map(file => {\n const { name = '', size = 0 } = file\n\n return !props.showSize\n ? name\n : `${name} (${humanReadableFileSize(size, base.value)})`\n }))\n\n const counterValue = computed(() => {\n const fileCount = model.value?.length ?? 0\n if (props.showSize) return t(props.counterSizeString, fileCount, totalBytesReadable.value)\n else return t(props.counterString, fileCount)\n })\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VInput>()\n const inputRef = ref<HTMLInputElement>()\n const isActive = toRef(() => isFocused.value || props.active)\n const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n const isDragging = shallowRef(false)\n const { handleDrop, hasFilesOrFolders } = useFileDrop()\n\n function onFocus () {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n\n if (!isFocused.value) focus()\n }\n function onClickPrepend (e: MouseEvent) {\n inputRef.value?.click()\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n }\n function onControlClick (e: MouseEvent) {\n inputRef.value?.click()\n\n emit('click:control', e)\n }\n function onClear (e: MouseEvent) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n model.value = []\n\n callEvent(props['onClick:clear'], e)\n })\n }\n function onDragover (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = true\n }\n function onDragleave (e: DragEvent) {\n e.preventDefault()\n isDragging.value = false\n }\n async function onDrop (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = false\n\n if (!inputRef.value || !hasFilesOrFolders(e)) return\n\n const dataTransfer = new DataTransfer()\n for (const file of await handleDrop(e)) {\n dataTransfer.items.add(file)\n }\n\n inputRef.value.files = dataTransfer.files\n inputRef.value.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n watch(model, newValue => {\n const hasModelReset = !Array.isArray(newValue) || !newValue.length\n\n if (hasModelReset && inputRef.value) {\n inputRef.value.value = ''\n }\n })\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter)\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 modelValue={ props.multiple ? model.value : model.value[0] }\n class={[\n 'v-file-input',\n {\n 'v-file-input--chips': !!props.chips,\n 'v-file-input--dragging': isDragging.value,\n 'v-file-input--hide': props.hideInput,\n 'v-input--plain-underlined': isPlainOrUnderlined.value,\n },\n props.class,\n ]}\n style={ props.style }\n onClick:prepend={ onClickPrepend }\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 }) => (\n <VField\n ref={ vFieldRef }\n prepend-icon={ props.prependIcon }\n onMousedown={ onControlMousedown }\n onClick={ onControlClick }\n onClick:clear={ onClear }\n onClick:prependInner={ props['onClick:prependInner'] }\n onClick:appendInner={ props['onClick:appendInner'] }\n { ...fieldProps }\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 error={ isValid.value === false }\n onDragover={ onDragover }\n onDrop={ onDrop }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n }) => (\n <>\n <input\n ref={ inputRef }\n type=\"file\"\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n multiple={ props.multiple }\n name={ props.name }\n onClick={ e => {\n e.stopPropagation()\n\n if (isReadonly.value) e.preventDefault()\n\n onFocus()\n }}\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n }}\n onDragleave={ onDragleave }\n onFocus={ onFocus }\n onBlur={ blur }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n <div class={ fieldClass }>\n { !!model.value?.length && !props.hideInput && (\n slots.selection ? slots.selection({\n fileNames: fileNames.value,\n totalBytes: totalBytes.value,\n totalBytesReadable: totalBytesReadable.value,\n })\n : props.chips ? fileNames.value.map(text => (\n <VChip\n key={ text }\n size=\"small\"\n text={ text }\n />\n ))\n : fileNames.value.join(', ')\n )}\n </div>\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={ !!model.value?.length }\n value={ counterValue.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 VFileInput = InstanceType<typeof VFileInput>\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"file":"VFileInput.js","names":["VChip","VCounter","VField","makeVFieldProps","makeVInputProps","VInput","useFileDrop","makeFileFilterProps","useFileFilter","useFocus","forwardRefs","useLocale","useProxiedModel","computed","nextTick","ref","shallowRef","toRef","watch","callEvent","filterInputAttrs","genericComponent","humanReadableFileSize","propsFactory","useRender","wrapInArray","makeVFileInputProps","chips","Boolean","counter","counterSizeString","type","String","default","counterString","hideInput","multiple","showSize","Number","validator","v","includes","prependIcon","modelValue","Array","Object","props","val","every","clearable","VFileInput","name","inheritAttrs","emits","e","focused","files","rejected","setup","_ref","attrs","emit","slots","t","filterAccepted","model","isArray","isFocused","focus","blur","base","undefined","totalBytes","value","reduce","bytes","_ref2","size","totalBytesReadable","fileNames","map","file","counterValue","fileCount","length","vInputRef","vFieldRef","inputRef","isActive","active","isPlainOrUnderlined","variant","isDragging","handleDrop","hasFilesOrFolders","onFocus","document","activeElement","onClickPrepend","click","onControlMousedown","onControlClick","onClear","stopPropagation","onDragover","preventDefault","stopImmediatePropagation","onDragleave","onDrop","allDroppedFiles","selectAccepted","onFileSelection","target","repack","filterByType","dataTransfer","DataTransfer","accepted","items","add","event","Event","bubbles","dispatchEvent","newValue","hasModelReset","hasCounter","hasDetails","details","rootAttrs","inputAttrs","_","inputProps","filterProps","fieldProps","expectsDirectory","webkitdirectory","inputAccept","accept","_createVNode","_mergeProps","class","style","_ref3","id","isDisabled","isDirty","isReadonly","isValid","dirty","_ref4","fieldClass","slotProps","_createElementVNode","_Fragment","_normalizeClass","selection","text","join","disabled"],"sources":["../../../src/components/VFileInput/VFileInput.tsx"],"sourcesContent":["// Styles\nimport './VFileInput.sass'\n\n// Components\nimport { VChip } from '@/components/VChip'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\nimport { makeVFieldProps } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { useFileDrop } from '@/composables/fileDrop'\nimport { makeFileFilterProps, useFileFilter } from '@/composables/fileFilter'\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref, shallowRef, toRef, watch } from 'vue'\nimport {\n callEvent,\n filterInputAttrs,\n genericComponent,\n humanReadableFileSize,\n propsFactory,\n useRender,\n wrapInArray,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nexport type VFileInputSlots = VInputSlots & VFieldSlots & {\n counter: never\n selection: {\n fileNames: string[]\n totalBytes: number\n totalBytesReadable: string\n }\n}\n\nexport const makeVFileInputProps = propsFactory({\n chips: Boolean,\n counter: Boolean,\n counterSizeString: {\n type: String,\n default: '$vuetify.fileInput.counterSize',\n },\n counterString: {\n type: String,\n default: '$vuetify.fileInput.counter',\n },\n hideInput: Boolean,\n multiple: Boolean,\n showSize: {\n type: [Boolean, Number, String] as PropType<boolean | 1000 | 1024>,\n default: false,\n validator: (v: boolean | number) => {\n return (\n typeof v === 'boolean' ||\n [1000, 1024].includes(Number(v))\n )\n },\n },\n\n ...makeVInputProps({ prependIcon: '$file' }),\n\n modelValue: {\n type: [Array, Object] as PropType<File[] | File | null>,\n default: (props: any) => props.multiple ? [] : null,\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n\n ...makeFileFilterProps(),\n ...makeVFieldProps({ clearable: true }),\n}, 'VFileInput')\n\nexport const VFileInput = genericComponent<VFileInputSlots>()({\n name: 'VFileInput',\n\n inheritAttrs: false,\n\n props: makeVFileInputProps(),\n\n emits: {\n 'click:control': (e: MouseEvent) => true,\n 'mousedown:control': (e: MouseEvent) => true,\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (files: File | File[]) => true,\n rejected: (files: File[]) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { t } = useLocale()\n const { filterAccepted } = useFileFilter(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n props.modelValue,\n val => wrapInArray(val),\n val => (!props.multiple && Array.isArray(val)) ? val[0] : val,\n )\n const { isFocused, focus, blur } = useFocus(props)\n const base = computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined)\n const totalBytes = computed(() => (model.value ?? []).reduce((bytes, { size = 0 }) => bytes + size, 0))\n const totalBytesReadable = computed(() => humanReadableFileSize(totalBytes.value, base.value))\n\n const fileNames = computed(() => (model.value ?? []).map(file => {\n const { name = '', size = 0 } = file\n\n return !props.showSize\n ? name\n : `${name} (${humanReadableFileSize(size, base.value)})`\n }))\n\n const counterValue = computed(() => {\n const fileCount = model.value?.length ?? 0\n if (props.showSize) return t(props.counterSizeString, fileCount, totalBytesReadable.value)\n else return t(props.counterString, fileCount)\n })\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VInput>()\n const inputRef = ref<HTMLInputElement>()\n const isActive = toRef(() => isFocused.value || props.active)\n const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n const isDragging = shallowRef(false)\n const { handleDrop, hasFilesOrFolders } = useFileDrop()\n\n function onFocus () {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n\n if (!isFocused.value) focus()\n }\n function onClickPrepend (e: MouseEvent) {\n inputRef.value?.click()\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n }\n function onControlClick (e: MouseEvent) {\n inputRef.value?.click()\n\n emit('click:control', e)\n }\n function onClear (e: MouseEvent) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n model.value = []\n\n callEvent(props['onClick:clear'], e)\n })\n }\n function onDragover (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = true\n }\n function onDragleave (e: DragEvent) {\n e.preventDefault()\n isDragging.value = false\n }\n async function onDrop (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = false\n\n if (!inputRef.value || !hasFilesOrFolders(e)) return\n\n const allDroppedFiles = await handleDrop(e)\n selectAccepted(allDroppedFiles)\n }\n\n function onFileSelection (e: Event) {\n if (!e.target || (e as any).repack) return // prevent loop\n\n if (!props.filterByType) {\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n } else {\n selectAccepted([...(e as any).target.files])\n }\n }\n\n function selectAccepted (files: File[]) {\n const dataTransfer = new DataTransfer()\n const { accepted, rejected } = filterAccepted(files)\n\n if (rejected.length) {\n emit('rejected', rejected)\n }\n\n for (const file of accepted) {\n dataTransfer.items.add(file)\n }\n\n inputRef.value!.files = dataTransfer.files\n model.value = [...dataTransfer.files]\n\n const event = new Event('change', { bubbles: true }) as any\n event.repack = true\n inputRef.value!.dispatchEvent(event)\n }\n\n watch(model, newValue => {\n const hasModelReset = !Array.isArray(newValue) || !newValue.length\n\n if (hasModelReset && inputRef.value) {\n inputRef.value.value = ''\n }\n })\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter)\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 const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false\n const inputAccept = expectsDirectory ? undefined : (props.filterByType ?? String(attrs.accept))\n\n return (\n <VInput\n ref={ vInputRef }\n modelValue={ props.multiple ? model.value : model.value[0] }\n class={[\n 'v-file-input',\n {\n 'v-file-input--chips': !!props.chips,\n 'v-file-input--dragging': isDragging.value,\n 'v-file-input--hide': props.hideInput,\n 'v-input--plain-underlined': isPlainOrUnderlined.value,\n },\n props.class,\n ]}\n style={ props.style }\n onClick:prepend={ onClickPrepend }\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 }) => (\n <VField\n ref={ vFieldRef }\n prepend-icon={ props.prependIcon }\n onMousedown={ onControlMousedown }\n onClick={ onControlClick }\n onClick:clear={ onClear }\n onClick:prependInner={ props['onClick:prependInner'] }\n onClick:appendInner={ props['onClick:appendInner'] }\n { ...fieldProps }\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 error={ isValid.value === false }\n onDragover={ onDragover }\n onDrop={ onDrop }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n }) => (\n <>\n <input\n ref={ inputRef }\n type=\"file\"\n accept={ inputAccept }\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n multiple={ props.multiple }\n name={ props.name }\n onClick={ e => {\n e.stopPropagation()\n\n if (isReadonly.value) e.preventDefault()\n\n onFocus()\n }}\n onChange={ onFileSelection }\n onDragleave={ onDragleave }\n onFocus={ onFocus }\n onBlur={ blur }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n <div class={ fieldClass }>\n { !!model.value?.length && !props.hideInput && (\n slots.selection ? slots.selection({\n fileNames: fileNames.value,\n totalBytes: totalBytes.value,\n totalBytesReadable: totalBytesReadable.value,\n })\n : props.chips ? fileNames.value.map(text => (\n <VChip\n key={ text }\n size=\"small\"\n text={ text }\n />\n ))\n : fileNames.value.join(', ')\n )}\n </div>\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={ !!model.value?.length }\n value={ counterValue.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 VFileInput = InstanceType<typeof VFileInput>\n"],"mappings":"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","ignoreList":[]}
|
@@ -6,6 +6,9 @@ export declare const makeVProgressLinearProps: <Defaults extends {
|
|
6
6
|
location?: unknown;
|
7
7
|
class?: unknown;
|
8
8
|
style?: unknown;
|
9
|
+
chunkCount?: unknown;
|
10
|
+
chunkWidth?: unknown;
|
11
|
+
chunkGap?: unknown;
|
9
12
|
absolute?: unknown;
|
10
13
|
active?: unknown;
|
11
14
|
bgColor?: unknown;
|
@@ -77,6 +80,36 @@ export declare const makeVProgressLinearProps: <Defaults extends {
|
|
77
80
|
type: import("vue").PropType<unknown extends Defaults["style"] ? import("vue").StyleValue : import("vue").StyleValue | Defaults["style"]>;
|
78
81
|
default: unknown extends Defaults["style"] ? import("vue").StyleValue : NonNullable<import("vue").StyleValue> | Defaults["style"];
|
79
82
|
};
|
83
|
+
chunkCount: unknown extends Defaults["chunkCount"] ? {
|
84
|
+
type: (StringConstructor | NumberConstructor)[];
|
85
|
+
default: null;
|
86
|
+
} : Omit<{
|
87
|
+
type: (StringConstructor | NumberConstructor)[];
|
88
|
+
default: null;
|
89
|
+
}, "type" | "default"> & {
|
90
|
+
type: import("vue").PropType<unknown extends Defaults["chunkCount"] ? string | number : string | number | Defaults["chunkCount"]>;
|
91
|
+
default: unknown extends Defaults["chunkCount"] ? string | number : NonNullable<string | number> | Defaults["chunkCount"];
|
92
|
+
};
|
93
|
+
chunkWidth: unknown extends Defaults["chunkWidth"] ? {
|
94
|
+
type: (StringConstructor | NumberConstructor)[];
|
95
|
+
default: null;
|
96
|
+
} : Omit<{
|
97
|
+
type: (StringConstructor | NumberConstructor)[];
|
98
|
+
default: null;
|
99
|
+
}, "type" | "default"> & {
|
100
|
+
type: import("vue").PropType<unknown extends Defaults["chunkWidth"] ? string | number : string | number | Defaults["chunkWidth"]>;
|
101
|
+
default: unknown extends Defaults["chunkWidth"] ? string | number : NonNullable<string | number> | Defaults["chunkWidth"];
|
102
|
+
};
|
103
|
+
chunkGap: unknown extends Defaults["chunkGap"] ? {
|
104
|
+
type: (StringConstructor | NumberConstructor)[];
|
105
|
+
default: number;
|
106
|
+
} : Omit<{
|
107
|
+
type: (StringConstructor | NumberConstructor)[];
|
108
|
+
default: number;
|
109
|
+
}, "type" | "default"> & {
|
110
|
+
type: import("vue").PropType<unknown extends Defaults["chunkGap"] ? string | number : string | number | Defaults["chunkGap"]>;
|
111
|
+
default: unknown extends Defaults["chunkGap"] ? string | number : NonNullable<string | number> | Defaults["chunkGap"];
|
112
|
+
};
|
80
113
|
absolute: unknown extends Defaults["absolute"] ? BooleanConstructor : {
|
81
114
|
type: import("vue").PropType<unknown extends Defaults["absolute"] ? boolean : boolean | Defaults["absolute"]>;
|
82
115
|
default: unknown extends Defaults["absolute"] ? boolean : boolean | Defaults["absolute"];
|
@@ -194,6 +227,9 @@ export declare const VProgressLinear: {
|
|
194
227
|
indeterminate: boolean;
|
195
228
|
modelValue: string | number;
|
196
229
|
tile: boolean;
|
230
|
+
chunkCount: string | number;
|
231
|
+
chunkWidth: string | number;
|
232
|
+
chunkGap: string | number;
|
197
233
|
bufferValue: string | number;
|
198
234
|
clickable: boolean;
|
199
235
|
striped: boolean;
|
@@ -247,6 +283,9 @@ export declare const VProgressLinear: {
|
|
247
283
|
modelValue: string | number;
|
248
284
|
rounded: string | number | boolean;
|
249
285
|
tile: boolean;
|
286
|
+
chunkCount: string | number;
|
287
|
+
chunkWidth: string | number;
|
288
|
+
chunkGap: string | number;
|
250
289
|
bufferValue: string | number;
|
251
290
|
clickable: boolean;
|
252
291
|
striped: boolean;
|
@@ -276,6 +315,9 @@ export declare const VProgressLinear: {
|
|
276
315
|
indeterminate: boolean;
|
277
316
|
modelValue: string | number;
|
278
317
|
tile: boolean;
|
318
|
+
chunkCount: string | number;
|
319
|
+
chunkWidth: string | number;
|
320
|
+
chunkGap: string | number;
|
279
321
|
bufferValue: string | number;
|
280
322
|
clickable: boolean;
|
281
323
|
striped: boolean;
|
@@ -327,6 +369,9 @@ export declare const VProgressLinear: {
|
|
327
369
|
modelValue: string | number;
|
328
370
|
rounded: string | number | boolean;
|
329
371
|
tile: boolean;
|
372
|
+
chunkCount: string | number;
|
373
|
+
chunkWidth: string | number;
|
374
|
+
chunkGap: string | number;
|
330
375
|
bufferValue: string | number;
|
331
376
|
clickable: boolean;
|
332
377
|
striped: boolean;
|
@@ -348,6 +393,9 @@ export declare const VProgressLinear: {
|
|
348
393
|
indeterminate: boolean;
|
349
394
|
modelValue: string | number;
|
350
395
|
tile: boolean;
|
396
|
+
chunkCount: string | number;
|
397
|
+
chunkWidth: string | number;
|
398
|
+
chunkGap: string | number;
|
351
399
|
bufferValue: string | number;
|
352
400
|
clickable: boolean;
|
353
401
|
striped: boolean;
|
@@ -401,6 +449,9 @@ export declare const VProgressLinear: {
|
|
401
449
|
modelValue: string | number;
|
402
450
|
rounded: string | number | boolean;
|
403
451
|
tile: boolean;
|
452
|
+
chunkCount: string | number;
|
453
|
+
chunkWidth: string | number;
|
454
|
+
chunkGap: string | number;
|
404
455
|
bufferValue: string | number;
|
405
456
|
clickable: boolean;
|
406
457
|
striped: boolean;
|
@@ -430,6 +481,18 @@ export declare const VProgressLinear: {
|
|
430
481
|
type: import("vue").PropType<import("vue").StyleValue>;
|
431
482
|
default: null;
|
432
483
|
};
|
484
|
+
chunkCount: {
|
485
|
+
type: (StringConstructor | NumberConstructor)[];
|
486
|
+
default: null;
|
487
|
+
};
|
488
|
+
chunkWidth: {
|
489
|
+
type: (StringConstructor | NumberConstructor)[];
|
490
|
+
default: null;
|
491
|
+
};
|
492
|
+
chunkGap: {
|
493
|
+
type: (StringConstructor | NumberConstructor)[];
|
494
|
+
default: number;
|
495
|
+
};
|
433
496
|
absolute: BooleanConstructor;
|
434
497
|
active: {
|
435
498
|
type: BooleanConstructor;
|
@@ -483,6 +546,18 @@ export declare const VProgressLinear: {
|
|
483
546
|
type: import("vue").PropType<import("vue").StyleValue>;
|
484
547
|
default: null;
|
485
548
|
};
|
549
|
+
chunkCount: {
|
550
|
+
type: (StringConstructor | NumberConstructor)[];
|
551
|
+
default: null;
|
552
|
+
};
|
553
|
+
chunkWidth: {
|
554
|
+
type: (StringConstructor | NumberConstructor)[];
|
555
|
+
default: null;
|
556
|
+
};
|
557
|
+
chunkGap: {
|
558
|
+
type: (StringConstructor | NumberConstructor)[];
|
559
|
+
default: number;
|
560
|
+
};
|
486
561
|
absolute: BooleanConstructor;
|
487
562
|
active: {
|
488
563
|
type: BooleanConstructor;
|
@@ -9,10 +9,13 @@ import { useIntersectionObserver } from "../../composables/intersectionObserver.
|
|
9
9
|
import { useRtl } from "../../composables/locale.js";
|
10
10
|
import { makeLocationProps, useLocation } from "../../composables/location.js";
|
11
11
|
import { useProxiedModel } from "../../composables/proxiedModel.js";
|
12
|
+
import { useResizeObserver } from "../../composables/resizeObserver.js";
|
12
13
|
import { makeRoundedProps, useRounded } from "../../composables/rounded.js";
|
13
14
|
import { makeTagProps } from "../../composables/tag.js";
|
14
|
-
import { makeThemeProps, provideTheme } from "../../composables/theme.js";
|
15
|
-
import {
|
15
|
+
import { makeThemeProps, provideTheme } from "../../composables/theme.js";
|
16
|
+
import { useToggleScope } from "../../composables/toggleScope.js"; // Utilities
|
17
|
+
import { computed, ref, shallowRef, Transition, watchEffect } from 'vue';
|
18
|
+
import { makeChunksProps, useChunks } from "./chunks.js";
|
16
19
|
import { clamp, convertToUnit, genericComponent, IN_BROWSER, propsFactory, useRender } from "../../util/index.js";
|
17
20
|
export const makeVProgressLinearProps = propsFactory({
|
18
21
|
absolute: Boolean,
|
@@ -48,6 +51,7 @@ export const makeVProgressLinearProps = propsFactory({
|
|
48
51
|
stream: Boolean,
|
49
52
|
striped: Boolean,
|
50
53
|
roundedBar: Boolean,
|
54
|
+
...makeChunksProps(),
|
51
55
|
...makeComponentProps(),
|
52
56
|
...makeLocationProps({
|
53
57
|
location: 'top'
|
@@ -66,6 +70,7 @@ export const VProgressLinear = genericComponent()({
|
|
66
70
|
let {
|
67
71
|
slots
|
68
72
|
} = _ref;
|
73
|
+
const root = ref();
|
69
74
|
const progress = useProxiedModel(props, 'modelValue');
|
70
75
|
const {
|
71
76
|
isRtl,
|
@@ -107,6 +112,24 @@ export const VProgressLinear = genericComponent()({
|
|
107
112
|
const isReversed = computed(() => isRtl.value !== props.reverse);
|
108
113
|
const transition = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition');
|
109
114
|
const isForcedColorsModeActive = IN_BROWSER && window.matchMedia?.('(forced-colors: active)').matches;
|
115
|
+
const containerWidth = shallowRef(0);
|
116
|
+
const {
|
117
|
+
hasChunks,
|
118
|
+
chunksMaskStyles,
|
119
|
+
snapValueToChunk
|
120
|
+
} = useChunks(props, containerWidth);
|
121
|
+
useToggleScope(hasChunks, () => {
|
122
|
+
const {
|
123
|
+
resizeRef
|
124
|
+
} = useResizeObserver(entries => containerWidth.value = entries[0].contentRect.width);
|
125
|
+
watchEffect(() => resizeRef.value = root.value);
|
126
|
+
});
|
127
|
+
const bufferWidth = computed(() => {
|
128
|
+
return hasChunks.value ? snapValueToChunk(normalizedBuffer.value) : normalizedBuffer.value;
|
129
|
+
});
|
130
|
+
const barWidth = computed(() => {
|
131
|
+
return hasChunks.value ? snapValueToChunk(normalizedValue.value) : normalizedValue.value;
|
132
|
+
});
|
110
133
|
function handleClick(e) {
|
111
134
|
if (!intersectionRef.value) return;
|
112
135
|
const {
|
@@ -117,8 +140,11 @@ export const VProgressLinear = genericComponent()({
|
|
117
140
|
const value = isReversed.value ? width - e.clientX + (right - width) : e.clientX - left;
|
118
141
|
progress.value = Math.round(value / width * max.value);
|
119
142
|
}
|
143
|
+
watchEffect(() => {
|
144
|
+
intersectionRef.value = root.value;
|
145
|
+
});
|
120
146
|
useRender(() => _createVNode(props.tag, {
|
121
|
-
"ref":
|
147
|
+
"ref": root,
|
122
148
|
"class": _normalizeClass(['v-progress-linear', {
|
123
149
|
'v-progress-linear--absolute': props.absolute,
|
124
150
|
'v-progress-linear--active': props.active && isIntersecting.value,
|
@@ -133,7 +159,7 @@ export const VProgressLinear = genericComponent()({
|
|
133
159
|
height: props.active ? convertToUnit(height.value) : 0,
|
134
160
|
'--v-progress-linear-height': convertToUnit(height.value),
|
135
161
|
...(props.absolute ? locationStyles.value : {})
|
136
|
-
}, props.style]),
|
162
|
+
}, chunksMaskStyles.value, props.style]),
|
137
163
|
"role": "progressbar",
|
138
164
|
"aria-hidden": props.active ? 'false' : 'true',
|
139
165
|
"aria-valuemin": "0",
|
@@ -163,7 +189,7 @@ export const VProgressLinear = genericComponent()({
|
|
163
189
|
"class": _normalizeClass(['v-progress-linear__buffer', !isForcedColorsModeActive ? bufferColorClasses.value : undefined]),
|
164
190
|
"style": _normalizeStyle([bufferColorStyles.value, {
|
165
191
|
opacity: parseFloat(props.bufferOpacity),
|
166
|
-
width: convertToUnit(
|
192
|
+
width: convertToUnit(bufferWidth.value, '%')
|
167
193
|
}])
|
168
194
|
}, null), _createVNode(Transition, {
|
169
195
|
"name": transition.value
|
@@ -171,7 +197,7 @@ export const VProgressLinear = genericComponent()({
|
|
171
197
|
default: () => [!props.indeterminate ? _createElementVNode("div", {
|
172
198
|
"class": _normalizeClass(['v-progress-linear__determinate', !isForcedColorsModeActive ? barColorClasses.value : undefined]),
|
173
199
|
"style": _normalizeStyle([barColorStyles.value, {
|
174
|
-
width: convertToUnit(
|
200
|
+
width: convertToUnit(barWidth.value, '%')
|
175
201
|
}])
|
176
202
|
}, null) : _createElementVNode("div", {
|
177
203
|
"class": "v-progress-linear__indeterminate"
|