@vuetify/nightly 3.9.1-dev.2025-07-17 → 3.9.2-master.2025-07-18
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 +3 -14
- package/dist/json/attributes.json +3514 -3534
- package/dist/json/importMap-labs.json +24 -24
- package/dist/json/importMap.json +192 -192
- package/dist/json/tags.json +0 -5
- package/dist/json/web-types.json +19798 -6490
- package/dist/vuetify-labs.cjs +88 -278
- package/dist/vuetify-labs.css +4475 -4477
- package/dist/vuetify-labs.d.ts +64 -126
- package/dist/vuetify-labs.esm.js +88 -278
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +88 -278
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +79 -240
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +2683 -2685
- package/dist/vuetify.d.ts +64 -116
- package/dist/vuetify.esm.js +79 -240
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +79 -240
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +702 -724
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.js +0 -1
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.js +0 -1
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VFileInput/VFileInput.d.ts +0 -15
- package/lib/components/VFileInput/VFileInput.js +9 -38
- package/lib/components/VFileInput/VFileInput.js.map +1 -1
- package/lib/components/VList/VList.js +1 -2
- package/lib/components/VList/VList.js.map +1 -1
- package/lib/components/VList/VListItem.js +1 -7
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.css +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.d.ts +0 -75
- package/lib/components/VProgressLinear/VProgressLinear.js +6 -32
- package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.sass +2 -2
- package/lib/components/VSelect/VSelect.js +0 -1
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VTreeview/VTreeview.js +2 -3
- package/lib/components/VTreeview/VTreeview.js.map +1 -1
- package/lib/components/VTreeview/VTreeviewChildren.js +59 -59
- package/lib/components/VTreeview/VTreeviewChildren.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +64 -64
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VFileUpload/VFileUpload.d.ts +0 -15
- package/lib/labs/VFileUpload/VFileUpload.js +9 -39
- package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
- package/package.json +1 -1
- package/lib/components/VProgressLinear/chunks.d.ts +0 -55
- package/lib/components/VProgressLinear/chunks.js +0 -62
- package/lib/components/VProgressLinear/chunks.js.map +0 -1
- package/lib/composables/fileFilter.d.ts +0 -18
- package/lib/composables/fileFilter.js +0 -38
- package/lib/composables/fileFilter.js.map +0 -1
package/lib/framework.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"framework.js","names":["createDate","DateAdapterSymbol","DateOptionsSymbol","createDefaults","DefaultsSymbol","createDisplay","DisplaySymbol","createGoTo","GoToSymbol","createIcons","IconSymbol","createLocale","LocaleSymbol","createTheme","ThemeSymbol","effectScope","nextTick","reactive","defineComponent","IN_BROWSER","mergeDeep","createVuetify","vuetify","arguments","length","undefined","blueprint","rest","options","aliases","components","directives","scope","run","defaults","display","ssr","theme","icons","locale","date","goTo","install","app","key","directive","component","name","aliasName","appScope","onUnmount","stop","provide","instance","$nuxt","hook","update","mount","vm","__VUE_OPTIONS_API__","mixin","computed","$vuetify","inject","call","unmount","version","$","provides","parent","vnode","appContext"],"sources":["../src/framework.ts"],"sourcesContent":["// Composables\nimport { createDate, DateAdapterSymbol, DateOptionsSymbol } from '@/composables/date/date'\nimport { createDefaults, DefaultsSymbol } from '@/composables/defaults'\nimport { createDisplay, DisplaySymbol } from '@/composables/display'\nimport { createGoTo, GoToSymbol } from '@/composables/goto'\nimport { createIcons, IconSymbol } from '@/composables/icons'\nimport { createLocale, LocaleSymbol } from '@/composables/locale'\nimport { createTheme, ThemeSymbol } from '@/composables/theme'\n\n// Utilities\nimport { effectScope, nextTick, reactive } from 'vue'\nimport { defineComponent, IN_BROWSER, mergeDeep } from '@/util'\n\n// Types\nimport type { App, ComponentPublicInstance, InjectionKey } from 'vue'\nimport type { DateOptions } from '@/composables/date'\nimport type { DefaultsOptions } from '@/composables/defaults'\nimport type { DisplayOptions, SSROptions } from '@/composables/display'\nimport type { GoToOptions } from '@/composables/goto'\nimport type { IconOptions } from '@/composables/icons'\nimport type { LocaleOptions, RtlOptions } from '@/composables/locale'\nimport type { ThemeOptions } from '@/composables/theme'\n\n// Exports\nexport * from './composables'\nexport * from './types'\n\nexport interface VuetifyOptions {\n aliases?: Record<string, any>\n blueprint?: Blueprint\n components?: Record<string, any>\n date?: DateOptions\n directives?: Record<string, any>\n defaults?: DefaultsOptions\n display?: DisplayOptions\n goTo?: GoToOptions\n theme?: ThemeOptions\n icons?: IconOptions\n locale?: LocaleOptions & RtlOptions\n ssr?: SSROptions\n}\n\nexport interface Blueprint extends Omit<VuetifyOptions, 'blueprint'> {}\n\nexport function createVuetify (vuetify: VuetifyOptions = {}) {\n const { blueprint, ...rest } = vuetify\n const options: VuetifyOptions = mergeDeep(blueprint, rest)\n const {\n aliases = {},\n components = {},\n directives = {},\n } = options\n\n const scope = effectScope()\n return scope.run(() => {\n const defaults = createDefaults(options.defaults)\n const display = createDisplay(options.display, options.ssr)\n const theme = createTheme(options.theme)\n const icons = createIcons(options.icons)\n const locale = createLocale(options.locale)\n const date = createDate(options.date, locale)\n const goTo = createGoTo(options.goTo, locale)\n\n function install (app: App) {\n for (const key in directives) {\n app.directive(key, directives[key])\n }\n\n for (const key in components) {\n app.component(key, components[key])\n }\n\n for (const key in aliases) {\n app.component(key, defineComponent({\n ...aliases[key],\n name: key,\n aliasName: aliases[key].name,\n }))\n }\n\n const appScope = effectScope()\n appScope.run(() => {\n theme.install(app)\n })\n app.onUnmount(() => appScope.stop())\n\n app.provide(DefaultsSymbol, defaults)\n app.provide(DisplaySymbol, display)\n app.provide(ThemeSymbol, theme)\n app.provide(IconSymbol, icons)\n app.provide(LocaleSymbol, locale)\n app.provide(DateOptionsSymbol, date.options)\n app.provide(DateAdapterSymbol, date.instance)\n app.provide(GoToSymbol, goTo)\n\n if (IN_BROWSER && options.ssr) {\n if (app.$nuxt) {\n app.$nuxt.hook('app:suspense:resolve', () => {\n display.update()\n })\n } else {\n const { mount } = app\n app.mount = (...args) => {\n const vm = mount(...args)\n nextTick(() => display.update())\n app.mount = mount\n return vm\n }\n }\n }\n\n if (typeof __VUE_OPTIONS_API__ !== 'boolean' || __VUE_OPTIONS_API__) {\n app.mixin({\n computed: {\n $vuetify () {\n return reactive({\n defaults: inject.call(this, DefaultsSymbol),\n display: inject.call(this, DisplaySymbol),\n theme: inject.call(this, ThemeSymbol),\n icons: inject.call(this, IconSymbol),\n locale: inject.call(this, LocaleSymbol),\n date: inject.call(this, DateAdapterSymbol),\n })\n },\n },\n })\n }\n }\n\n function unmount () {\n scope.stop()\n }\n\n return {\n install,\n unmount,\n defaults,\n display,\n theme,\n icons,\n locale,\n date,\n goTo,\n }\n })!\n}\n\nexport const version = __VUETIFY_VERSION__\ncreateVuetify.version = version\n\n// Vue's inject() can only be used in setup\nfunction inject (this: ComponentPublicInstance, key: InjectionKey<any> | string) {\n const vm = this.$\n\n const provides = vm.parent?.provides ?? vm.vnode.appContext?.provides\n\n if (provides && (key as any) in provides) {\n return provides[(key as string)]\n }\n}\n"],"mappings":"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
|
1
|
+
{"version":3,"file":"framework.js","names":["createDate","DateAdapterSymbol","DateOptionsSymbol","createDefaults","DefaultsSymbol","createDisplay","DisplaySymbol","createGoTo","GoToSymbol","createIcons","IconSymbol","createLocale","LocaleSymbol","createTheme","ThemeSymbol","effectScope","nextTick","reactive","defineComponent","IN_BROWSER","mergeDeep","createVuetify","vuetify","arguments","length","undefined","blueprint","rest","options","aliases","components","directives","scope","run","defaults","display","ssr","theme","icons","locale","date","goTo","install","app","key","directive","component","name","aliasName","appScope","onUnmount","stop","provide","instance","$nuxt","hook","update","mount","vm","__VUE_OPTIONS_API__","mixin","computed","$vuetify","inject","call","unmount","version","$","provides","parent","vnode","appContext"],"sources":["../src/framework.ts"],"sourcesContent":["// Composables\nimport { createDate, DateAdapterSymbol, DateOptionsSymbol } from '@/composables/date/date'\nimport { createDefaults, DefaultsSymbol } from '@/composables/defaults'\nimport { createDisplay, DisplaySymbol } from '@/composables/display'\nimport { createGoTo, GoToSymbol } from '@/composables/goto'\nimport { createIcons, IconSymbol } from '@/composables/icons'\nimport { createLocale, LocaleSymbol } from '@/composables/locale'\nimport { createTheme, ThemeSymbol } from '@/composables/theme'\n\n// Utilities\nimport { effectScope, nextTick, reactive } from 'vue'\nimport { defineComponent, IN_BROWSER, mergeDeep } from '@/util'\n\n// Types\nimport type { App, ComponentPublicInstance, InjectionKey } from 'vue'\nimport type { DateOptions } from '@/composables/date'\nimport type { DefaultsOptions } from '@/composables/defaults'\nimport type { DisplayOptions, SSROptions } from '@/composables/display'\nimport type { GoToOptions } from '@/composables/goto'\nimport type { IconOptions } from '@/composables/icons'\nimport type { LocaleOptions, RtlOptions } from '@/composables/locale'\nimport type { ThemeOptions } from '@/composables/theme'\n\n// Exports\nexport * from './composables'\nexport * from './types'\n\nexport interface VuetifyOptions {\n aliases?: Record<string, any>\n blueprint?: Blueprint\n components?: Record<string, any>\n date?: DateOptions\n directives?: Record<string, any>\n defaults?: DefaultsOptions\n display?: DisplayOptions\n goTo?: GoToOptions\n theme?: ThemeOptions\n icons?: IconOptions\n locale?: LocaleOptions & RtlOptions\n ssr?: SSROptions\n}\n\nexport interface Blueprint extends Omit<VuetifyOptions, 'blueprint'> {}\n\nexport function createVuetify (vuetify: VuetifyOptions = {}) {\n const { blueprint, ...rest } = vuetify\n const options: VuetifyOptions = mergeDeep(blueprint, rest)\n const {\n aliases = {},\n components = {},\n directives = {},\n } = options\n\n const scope = effectScope()\n return scope.run(() => {\n const defaults = createDefaults(options.defaults)\n const display = createDisplay(options.display, options.ssr)\n const theme = createTheme(options.theme)\n const icons = createIcons(options.icons)\n const locale = createLocale(options.locale)\n const date = createDate(options.date, locale)\n const goTo = createGoTo(options.goTo, locale)\n\n function install (app: App) {\n for (const key in directives) {\n app.directive(key, directives[key])\n }\n\n for (const key in components) {\n app.component(key, components[key])\n }\n\n for (const key in aliases) {\n app.component(key, defineComponent({\n ...aliases[key],\n name: key,\n aliasName: aliases[key].name,\n }))\n }\n\n const appScope = effectScope()\n appScope.run(() => {\n theme.install(app)\n })\n app.onUnmount(() => appScope.stop())\n\n app.provide(DefaultsSymbol, defaults)\n app.provide(DisplaySymbol, display)\n app.provide(ThemeSymbol, theme)\n app.provide(IconSymbol, icons)\n app.provide(LocaleSymbol, locale)\n app.provide(DateOptionsSymbol, date.options)\n app.provide(DateAdapterSymbol, date.instance)\n app.provide(GoToSymbol, goTo)\n\n if (IN_BROWSER && options.ssr) {\n if (app.$nuxt) {\n app.$nuxt.hook('app:suspense:resolve', () => {\n display.update()\n })\n } else {\n const { mount } = app\n app.mount = (...args) => {\n const vm = mount(...args)\n nextTick(() => display.update())\n app.mount = mount\n return vm\n }\n }\n }\n\n if (typeof __VUE_OPTIONS_API__ !== 'boolean' || __VUE_OPTIONS_API__) {\n app.mixin({\n computed: {\n $vuetify () {\n return reactive({\n defaults: inject.call(this, DefaultsSymbol),\n display: inject.call(this, DisplaySymbol),\n theme: inject.call(this, ThemeSymbol),\n icons: inject.call(this, IconSymbol),\n locale: inject.call(this, LocaleSymbol),\n date: inject.call(this, DateAdapterSymbol),\n })\n },\n },\n })\n }\n }\n\n function unmount () {\n scope.stop()\n }\n\n return {\n install,\n unmount,\n defaults,\n display,\n theme,\n icons,\n locale,\n date,\n goTo,\n }\n })!\n}\n\nexport const version = __VUETIFY_VERSION__\ncreateVuetify.version = version\n\n// Vue's inject() can only be used in setup\nfunction inject (this: ComponentPublicInstance, key: InjectionKey<any> | string) {\n const vm = this.$\n\n const provides = vm.parent?.provides ?? vm.vnode.appContext?.provides\n\n if (provides && (key as any) in provides) {\n return provides[(key as string)]\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -44,7 +44,6 @@ export declare const makeVFileUploadProps: <Defaults extends {
|
|
44
44
|
density?: unknown;
|
45
45
|
closeDelay?: unknown;
|
46
46
|
openDelay?: unknown;
|
47
|
-
filterByType?: unknown;
|
48
47
|
browseText?: unknown;
|
49
48
|
dividerText?: unknown;
|
50
49
|
title?: unknown;
|
@@ -195,10 +194,6 @@ export declare const makeVFileUploadProps: <Defaults extends {
|
|
195
194
|
type: PropType<unknown extends Defaults["openDelay"] ? string | number : string | number | Defaults["openDelay"]>;
|
196
195
|
default: unknown extends Defaults["openDelay"] ? string | number : NonNullable<string | number> | Defaults["openDelay"];
|
197
196
|
};
|
198
|
-
filterByType: unknown extends Defaults["filterByType"] ? StringConstructor : {
|
199
|
-
type: PropType<unknown extends Defaults["filterByType"] ? string : string | Defaults["filterByType"]>;
|
200
|
-
default: unknown extends Defaults["filterByType"] ? string : string | Defaults["filterByType"];
|
201
|
-
};
|
202
197
|
browseText: unknown extends Defaults["browseText"] ? {
|
203
198
|
type: StringConstructor;
|
204
199
|
default: string;
|
@@ -329,7 +324,6 @@ export declare const VFileUpload: {
|
|
329
324
|
openDelay?: string | number | undefined;
|
330
325
|
thickness?: string | number | undefined;
|
331
326
|
subtitle?: string | undefined;
|
332
|
-
filterByType?: string | undefined;
|
333
327
|
} & {
|
334
328
|
$children?: import("vue").VNodeChild | {
|
335
329
|
$stable?: boolean;
|
@@ -394,10 +388,8 @@ export declare const VFileUpload: {
|
|
394
388
|
"v-slot:divider"?: false | (() => import("vue").VNodeChild) | undefined;
|
395
389
|
} & {
|
396
390
|
"onUpdate:modelValue"?: ((files: File[]) => any) | undefined;
|
397
|
-
onRejected?: ((files: File[]) => any) | undefined;
|
398
391
|
}, void, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
399
392
|
'update:modelValue': (files: File[]) => true;
|
400
|
-
rejected: (files: File[]) => true;
|
401
393
|
}, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, {
|
402
394
|
length: string | number;
|
403
395
|
style: import("vue").StyleValue;
|
@@ -480,7 +472,6 @@ export declare const VFileUpload: {
|
|
480
472
|
openDelay?: string | number | undefined;
|
481
473
|
thickness?: string | number | undefined;
|
482
474
|
subtitle?: string | undefined;
|
483
|
-
filterByType?: string | undefined;
|
484
475
|
} & {
|
485
476
|
$children?: import("vue").VNodeChild | {
|
486
477
|
$stable?: boolean;
|
@@ -545,7 +536,6 @@ export declare const VFileUpload: {
|
|
545
536
|
"v-slot:divider"?: false | (() => import("vue").VNodeChild) | undefined;
|
546
537
|
} & {
|
547
538
|
"onUpdate:modelValue"?: ((files: File[]) => any) | undefined;
|
548
|
-
onRejected?: ((files: File[]) => any) | undefined;
|
549
539
|
}, {}, {}, {}, {}, {
|
550
540
|
length: string | number;
|
551
541
|
style: import("vue").StyleValue;
|
@@ -606,7 +596,6 @@ export declare const VFileUpload: {
|
|
606
596
|
openDelay?: string | number | undefined;
|
607
597
|
thickness?: string | number | undefined;
|
608
598
|
subtitle?: string | undefined;
|
609
|
-
filterByType?: string | undefined;
|
610
599
|
} & {
|
611
600
|
$children?: import("vue").VNodeChild | {
|
612
601
|
$stable?: boolean;
|
@@ -671,10 +660,8 @@ export declare const VFileUpload: {
|
|
671
660
|
"v-slot:divider"?: false | (() => import("vue").VNodeChild) | undefined;
|
672
661
|
} & {
|
673
662
|
"onUpdate:modelValue"?: ((files: File[]) => any) | undefined;
|
674
|
-
onRejected?: ((files: File[]) => any) | undefined;
|
675
663
|
}, void, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
676
664
|
'update:modelValue': (files: File[]) => true;
|
677
|
-
rejected: (files: File[]) => true;
|
678
665
|
}, string, {
|
679
666
|
length: string | number;
|
680
667
|
style: import("vue").StyleValue;
|
@@ -758,7 +745,6 @@ export declare const VFileUpload: {
|
|
758
745
|
};
|
759
746
|
closeDelay: (StringConstructor | NumberConstructor)[];
|
760
747
|
openDelay: (StringConstructor | NumberConstructor)[];
|
761
|
-
filterByType: StringConstructor;
|
762
748
|
browseText: {
|
763
749
|
type: StringConstructor;
|
764
750
|
default: string;
|
@@ -837,7 +823,6 @@ export declare const VFileUpload: {
|
|
837
823
|
};
|
838
824
|
closeDelay: (StringConstructor | NumberConstructor)[];
|
839
825
|
openDelay: (StringConstructor | NumberConstructor)[];
|
840
|
-
filterByType: StringConstructor;
|
841
826
|
browseText: {
|
842
827
|
type: StringConstructor;
|
843
828
|
default: string;
|
@@ -13,7 +13,6 @@ import { makeVSheetProps, VSheet } from "../../components/VSheet/VSheet.js"; //
|
|
13
13
|
import { makeDelayProps } from "../../composables/delay.js";
|
14
14
|
import { makeDensityProps, useDensity } from "../../composables/density.js";
|
15
15
|
import { useFileDrop } from "../../composables/fileDrop.js";
|
16
|
-
import { makeFileFilterProps, useFileFilter } from "../../composables/fileFilter.js";
|
17
16
|
import { IconValue } from "../../composables/icons.js";
|
18
17
|
import { useLocale } from "../../composables/locale.js";
|
19
18
|
import { useProxiedModel } from "../../composables/proxiedModel.js"; // Utilities
|
@@ -54,7 +53,6 @@ export const makeVFileUploadProps = propsFactory({
|
|
54
53
|
},
|
55
54
|
showSize: Boolean,
|
56
55
|
name: String,
|
57
|
-
...makeFileFilterProps(),
|
58
56
|
...makeDelayProps(),
|
59
57
|
...makeDensityProps(),
|
60
58
|
...pick(makeVDividerProps({
|
@@ -67,13 +65,11 @@ export const VFileUpload = genericComponent()({
|
|
67
65
|
inheritAttrs: false,
|
68
66
|
props: makeVFileUploadProps(),
|
69
67
|
emits: {
|
70
|
-
'update:modelValue': files => true
|
71
|
-
rejected: files => true
|
68
|
+
'update:modelValue': files => true
|
72
69
|
},
|
73
70
|
setup(props, _ref) {
|
74
71
|
let {
|
75
72
|
attrs,
|
76
|
-
emit,
|
77
73
|
slots
|
78
74
|
} = _ref;
|
79
75
|
const {
|
@@ -82,9 +78,6 @@ export const VFileUpload = genericComponent()({
|
|
82
78
|
const {
|
83
79
|
densityClasses
|
84
80
|
} = useDensity(props);
|
85
|
-
const {
|
86
|
-
filterAccepted
|
87
|
-
} = useFileFilter(props);
|
88
81
|
const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => props.multiple || Array.isArray(props.modelValue) ? val : val[0]);
|
89
82
|
const isDragging = shallowRef(false);
|
90
83
|
const vSheetRef = ref(null);
|
@@ -106,38 +99,14 @@ export const VFileUpload = genericComponent()({
|
|
106
99
|
e.stopImmediatePropagation();
|
107
100
|
isDragging.value = false;
|
108
101
|
if (!inputRef.value) return;
|
109
|
-
const allDroppedFiles = await handleDrop(e);
|
110
|
-
selectAccepted(allDroppedFiles);
|
111
|
-
}
|
112
|
-
function onFileSelection(e) {
|
113
|
-
if (!e.target || e.repack) return; // prevent loop
|
114
|
-
|
115
|
-
if (!props.filterByType) {
|
116
|
-
const target = e.target;
|
117
|
-
model.value = [...(target.files ?? [])];
|
118
|
-
} else {
|
119
|
-
selectAccepted([...e.target.files]);
|
120
|
-
}
|
121
|
-
}
|
122
|
-
function selectAccepted(files) {
|
123
102
|
const dataTransfer = new DataTransfer();
|
124
|
-
const {
|
125
|
-
accepted,
|
126
|
-
rejected
|
127
|
-
} = filterAccepted(files);
|
128
|
-
if (rejected.length) {
|
129
|
-
emit('rejected', rejected);
|
130
|
-
}
|
131
|
-
for (const file of accepted) {
|
103
|
+
for (const file of await handleDrop(e)) {
|
132
104
|
dataTransfer.items.add(file);
|
133
105
|
}
|
134
106
|
inputRef.value.files = dataTransfer.files;
|
135
|
-
|
136
|
-
const event = new Event('change', {
|
107
|
+
inputRef.value.dispatchEvent(new Event('change', {
|
137
108
|
bubbles: true
|
138
|
-
});
|
139
|
-
event.repack = true;
|
140
|
-
inputRef.value.dispatchEvent(event);
|
109
|
+
}));
|
141
110
|
}
|
142
111
|
function onClick() {
|
143
112
|
inputRef.value?.click();
|
@@ -155,16 +124,17 @@ export const VFileUpload = genericComponent()({
|
|
155
124
|
const cardProps = VSheet.filterProps(props);
|
156
125
|
const dividerProps = VDivider.filterProps(props);
|
157
126
|
const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
|
158
|
-
const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false;
|
159
|
-
const inputAccept = expectsDirectory ? undefined : props.filterByType ?? String(attrs.accept);
|
160
127
|
const inputNode = _createElementVNode("input", _mergeProps({
|
161
128
|
"ref": inputRef,
|
162
129
|
"type": "file",
|
163
|
-
"accept": inputAccept,
|
164
130
|
"disabled": props.disabled,
|
165
131
|
"multiple": props.multiple,
|
166
132
|
"name": props.name,
|
167
|
-
"onChange":
|
133
|
+
"onChange": e => {
|
134
|
+
if (!e.target) return;
|
135
|
+
const target = e.target;
|
136
|
+
model.value = [...(target.files ?? [])];
|
137
|
+
}
|
168
138
|
}, inputAttrs), null);
|
169
139
|
return _createElementVNode(_Fragment, null, [_createVNode(VSheet, _mergeProps({
|
170
140
|
"ref": vSheetRef
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"VFileUpload.js","names":["VFileUploadItem","VBtn","VDefaultsProvider","makeVDividerProps","VDivider","VIcon","VOverlay","makeVSheetProps","VSheet","makeDelayProps","makeDensityProps","useDensity","useFileDrop","makeFileFilterProps","useFileFilter","IconValue","useLocale","useProxiedModel","ref","shallowRef","filterInputAttrs","genericComponent","pick","propsFactory","useRender","wrapInArray","makeVFileUploadProps","browseText","type","String","default","dividerText","title","subtitle","icon","modelValue","Array","Object","validator","val","every","v","clearable","Boolean","disabled","hideBrowse","multiple","scrim","showSize","name","length","VFileUpload","inheritAttrs","props","emits","files","rejected","setup","_ref","attrs","emit","slots","t","densityClasses","filterAccepted","model","isArray","isDragging","vSheetRef","inputRef","handleDrop","onDragover","e","preventDefault","stopImmediatePropagation","value","onDragleave","onDrop","allDroppedFiles","selectAccepted","onFileSelection","target","repack","filterByType","dataTransfer","DataTransfer","accepted","file","items","add","event","Event","bubbles","dispatchEvent","onClick","click","onClickRemove","index","newValue","filter","_","i","hasTitle","hasIcon","hasBrowse","browse","density","cardProps","filterProps","dividerProps","rootAttrs","inputAttrs","expectsDirectory","webkitdirectory","undefined","inputAccept","accept","inputNode","_createElementVNode","_mergeProps","_Fragment","_createVNode","class","style","divider","readonly","size","text","variant","input","map","slotProps","onClick:remove","item"],"sources":["../../../src/labs/VFileUpload/VFileUpload.tsx"],"sourcesContent":["// Styles\nimport './VFileUpload.sass'\n\n// Components\nimport { VFileUploadItem } from './VFileUploadItem'\nimport { VBtn } from '@/components/VBtn/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { makeVDividerProps, VDivider } from '@/components/VDivider/VDivider'\nimport { VIcon } from '@/components/VIcon/VIcon'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { makeVSheetProps, VSheet } from '@/components/VSheet/VSheet'\n\n// Composables\nimport { makeDelayProps } from '@/composables/delay'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { useFileDrop } from '@/composables/fileDrop'\nimport { makeFileFilterProps, useFileFilter } from '@/composables/fileFilter'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { ref, shallowRef } from 'vue'\nimport { filterInputAttrs, genericComponent, pick, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, VNode } from 'vue'\n\nexport type VFileUploadSlots = {\n browse: {\n props: { onClick: (e: MouseEvent) => void }\n }\n default: never\n icon: never\n input: {\n inputNode: VNode\n }\n item: {\n file: File\n props: { 'onClick:remove': () => void }\n }\n title: never\n divider: never\n}\n\nexport const makeVFileUploadProps = propsFactory({\n browseText: {\n type: String,\n default: '$vuetify.fileUpload.browse',\n },\n dividerText: {\n type: String,\n default: '$vuetify.fileUpload.divider',\n },\n title: {\n type: String,\n default: '$vuetify.fileUpload.title',\n },\n subtitle: String,\n icon: {\n type: IconValue,\n default: '$upload',\n },\n modelValue: {\n type: [Array, Object] as PropType<File[] | File>,\n default: null,\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n clearable: Boolean,\n disabled: Boolean,\n hideBrowse: Boolean,\n multiple: Boolean,\n scrim: {\n type: [Boolean, String],\n default: true,\n },\n showSize: Boolean,\n name: String,\n\n ...makeFileFilterProps(),\n ...makeDelayProps(),\n ...makeDensityProps(),\n ...pick(makeVDividerProps({\n length: 150,\n }), ['length', 'thickness', 'opacity']),\n ...makeVSheetProps(),\n}, 'VFileUpload')\n\nexport const VFileUpload = genericComponent<VFileUploadSlots>()({\n name: 'VFileUpload',\n\n inheritAttrs: false,\n\n props: makeVFileUploadProps(),\n\n emits: {\n 'update:modelValue': (files: File[]) => true,\n rejected: (files: File[]) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { t } = useLocale()\n const { densityClasses } = useDensity(props)\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(props.modelValue)) ? val : val[0],\n )\n\n const isDragging = shallowRef(false)\n const vSheetRef = ref<InstanceType<typeof VSheet> | null>(null)\n const inputRef = ref<HTMLInputElement | null>(null)\n const { handleDrop } = useFileDrop()\n\n function onDragover (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = true\n }\n\n function onDragleave (e: DragEvent) {\n e.preventDefault()\n isDragging.value = false\n }\n\n async function onDrop (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = false\n\n if (!inputRef.value) 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 function onClick () {\n inputRef.value?.click()\n }\n\n function onClickRemove (index: number) {\n const newValue = model.value.filter((_, i) => i !== index)\n model.value = newValue\n\n if (newValue.length > 0 || !inputRef.value) return\n\n inputRef.value.value = ''\n }\n\n useRender(() => {\n const hasTitle = !!(slots.title || props.title)\n const hasIcon = !!(slots.icon || props.icon)\n const hasBrowse = !!(!props.hideBrowse && (slots.browse || props.density === 'default'))\n const cardProps = VSheet.filterProps(props)\n const dividerProps = VDivider.filterProps(props)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false\n const inputAccept = expectsDirectory ? undefined : (props.filterByType ?? String(attrs.accept))\n\n const inputNode = (\n <input\n ref={ inputRef }\n type=\"file\"\n accept={ inputAccept }\n disabled={ props.disabled }\n multiple={ props.multiple }\n name={ props.name }\n onChange={ onFileSelection }\n { ...inputAttrs }\n />\n )\n\n return (\n <>\n <VSheet\n ref={ vSheetRef }\n { ...cardProps }\n class={[\n 'v-file-upload',\n {\n 'v-file-upload--clickable': !hasBrowse,\n 'v-file-upload--disabled': props.disabled,\n 'v-file-upload--dragging': isDragging.value,\n },\n densityClasses.value,\n props.class,\n ]}\n style={[\n props.style,\n ]}\n onDragleave={ onDragleave }\n onDragover={ onDragover }\n onDrop={ onDrop }\n onClick={ !hasBrowse ? onClick : undefined }\n { ...rootAttrs }\n >\n { hasIcon && (\n <div key=\"icon\" class=\"v-file-upload-icon\">\n { !slots.icon ? (\n <VIcon\n key=\"icon-icon\"\n icon={ props.icon }\n />\n ) : (\n <VDefaultsProvider\n key=\"icon-defaults\"\n defaults={{\n VIcon: {\n icon: props.icon,\n },\n }}\n >\n { slots.icon() }\n </VDefaultsProvider>\n )}\n </div>\n )}\n\n { hasTitle && (\n <div key=\"title\" class=\"v-file-upload-title\">\n { slots.title?.() ?? t(props.title) }\n </div>\n )}\n\n { props.density === 'default' && (\n <>\n <div key=\"upload-divider\" class=\"v-file-upload-divider\">\n { slots.divider?.() ?? (\n <VDivider { ...dividerProps }>\n { t(props.dividerText) }\n </VDivider>\n )}\n </div>\n\n { hasBrowse && (\n <>\n { !slots.browse ? (\n <VBtn\n readonly={ props.disabled }\n size=\"large\"\n text={ t(props.browseText) }\n variant=\"tonal\"\n onClick={ onClick }\n />\n ) : (\n <VDefaultsProvider\n defaults={{\n VBtn: {\n readonly: props.disabled,\n size: 'large',\n text: t(props.browseText),\n variant: 'tonal',\n },\n }}\n >\n { slots.browse({ props: { onClick } }) }\n </VDefaultsProvider>\n )}\n </>\n )}\n\n { props.subtitle && (\n <div class=\"v-file-upload-subtitle\">\n { props.subtitle }\n </div>\n )}\n </>\n )}\n\n <VOverlay\n modelValue={ isDragging.value }\n contained\n scrim={ props.scrim }\n />\n\n { slots.input?.({ inputNode }) ?? inputNode }\n </VSheet>\n\n { model.value.length > 0 && (\n <div class=\"v-file-upload-items\">\n { model.value.map((file, i) => {\n const slotProps = {\n file,\n props: {\n 'onClick:remove': () => onClickRemove(i),\n },\n }\n\n return (\n <VDefaultsProvider\n key={ i }\n defaults={{\n VFileUploadItem: {\n file,\n clearable: props.clearable,\n disabled: props.disabled,\n showSize: props.showSize,\n },\n }}\n >\n { slots.item?.(slotProps) ?? (\n <VFileUploadItem\n key={ i }\n onClick:remove={ () => onClickRemove(i) }\n v-slots={ slots }\n />\n )}\n </VDefaultsProvider>\n )\n })}\n </div>\n )}\n </>\n )\n })\n },\n})\n\nexport type VFileUpload = InstanceType<typeof VFileUpload>\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"file":"VFileUpload.js","names":["VFileUploadItem","VBtn","VDefaultsProvider","makeVDividerProps","VDivider","VIcon","VOverlay","makeVSheetProps","VSheet","makeDelayProps","makeDensityProps","useDensity","useFileDrop","IconValue","useLocale","useProxiedModel","ref","shallowRef","filterInputAttrs","genericComponent","pick","propsFactory","useRender","wrapInArray","makeVFileUploadProps","browseText","type","String","default","dividerText","title","subtitle","icon","modelValue","Array","Object","validator","val","every","v","clearable","Boolean","disabled","hideBrowse","multiple","scrim","showSize","name","length","VFileUpload","inheritAttrs","props","emits","files","setup","_ref","attrs","slots","t","densityClasses","model","isArray","isDragging","vSheetRef","inputRef","handleDrop","onDragover","e","preventDefault","stopImmediatePropagation","value","onDragleave","onDrop","dataTransfer","DataTransfer","file","items","add","dispatchEvent","Event","bubbles","onClick","click","onClickRemove","index","newValue","filter","_","i","hasTitle","hasIcon","hasBrowse","browse","density","cardProps","filterProps","dividerProps","rootAttrs","inputAttrs","inputNode","_createElementVNode","_mergeProps","target","_Fragment","_createVNode","class","style","undefined","divider","readonly","size","text","variant","input","map","slotProps","onClick:remove","item"],"sources":["../../../src/labs/VFileUpload/VFileUpload.tsx"],"sourcesContent":["// Styles\nimport './VFileUpload.sass'\n\n// Components\nimport { VFileUploadItem } from './VFileUploadItem'\nimport { VBtn } from '@/components/VBtn/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { makeVDividerProps, VDivider } from '@/components/VDivider/VDivider'\nimport { VIcon } from '@/components/VIcon/VIcon'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { makeVSheetProps, VSheet } from '@/components/VSheet/VSheet'\n\n// Composables\nimport { makeDelayProps } from '@/composables/delay'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { useFileDrop } from '@/composables/fileDrop'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { ref, shallowRef } from 'vue'\nimport { filterInputAttrs, genericComponent, pick, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, VNode } from 'vue'\n\nexport type VFileUploadSlots = {\n browse: {\n props: { onClick: (e: MouseEvent) => void }\n }\n default: never\n icon: never\n input: {\n inputNode: VNode\n }\n item: {\n file: File\n props: { 'onClick:remove': () => void }\n }\n title: never\n divider: never\n}\n\nexport const makeVFileUploadProps = propsFactory({\n browseText: {\n type: String,\n default: '$vuetify.fileUpload.browse',\n },\n dividerText: {\n type: String,\n default: '$vuetify.fileUpload.divider',\n },\n title: {\n type: String,\n default: '$vuetify.fileUpload.title',\n },\n subtitle: String,\n icon: {\n type: IconValue,\n default: '$upload',\n },\n modelValue: {\n type: [Array, Object] as PropType<File[] | File>,\n default: null,\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n clearable: Boolean,\n disabled: Boolean,\n hideBrowse: Boolean,\n multiple: Boolean,\n scrim: {\n type: [Boolean, String],\n default: true,\n },\n showSize: Boolean,\n name: String,\n\n ...makeDelayProps(),\n ...makeDensityProps(),\n ...pick(makeVDividerProps({\n length: 150,\n }), ['length', 'thickness', 'opacity']),\n ...makeVSheetProps(),\n}, 'VFileUpload')\n\nexport const VFileUpload = genericComponent<VFileUploadSlots>()({\n name: 'VFileUpload',\n\n inheritAttrs: false,\n\n props: makeVFileUploadProps(),\n\n emits: {\n 'update:modelValue': (files: File[]) => true,\n },\n\n setup (props, { attrs, slots }) {\n const { t } = useLocale()\n const { densityClasses } = useDensity(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n props.modelValue,\n val => wrapInArray(val),\n val => (props.multiple || Array.isArray(props.modelValue)) ? val : val[0],\n )\n\n const isDragging = shallowRef(false)\n const vSheetRef = ref<InstanceType<typeof VSheet> | null>(null)\n const inputRef = ref<HTMLInputElement | null>(null)\n const { handleDrop } = useFileDrop()\n\n function onDragover (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = true\n }\n\n function onDragleave (e: DragEvent) {\n e.preventDefault()\n isDragging.value = false\n }\n\n async function onDrop (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = false\n\n if (!inputRef.value) 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 function onClick () {\n inputRef.value?.click()\n }\n\n function onClickRemove (index: number) {\n const newValue = model.value.filter((_, i) => i !== index)\n model.value = newValue\n\n if (newValue.length > 0 || !inputRef.value) return\n\n inputRef.value.value = ''\n }\n\n useRender(() => {\n const hasTitle = !!(slots.title || props.title)\n const hasIcon = !!(slots.icon || props.icon)\n const hasBrowse = !!(!props.hideBrowse && (slots.browse || props.density === 'default'))\n const cardProps = VSheet.filterProps(props)\n const dividerProps = VDivider.filterProps(props)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n const inputNode = (\n <input\n ref={ inputRef }\n type=\"file\"\n disabled={ props.disabled }\n multiple={ props.multiple }\n name={ props.name }\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n }}\n { ...inputAttrs }\n />\n )\n\n return (\n <>\n <VSheet\n ref={ vSheetRef }\n { ...cardProps }\n class={[\n 'v-file-upload',\n {\n 'v-file-upload--clickable': !hasBrowse,\n 'v-file-upload--disabled': props.disabled,\n 'v-file-upload--dragging': isDragging.value,\n },\n densityClasses.value,\n props.class,\n ]}\n style={[\n props.style,\n ]}\n onDragleave={ onDragleave }\n onDragover={ onDragover }\n onDrop={ onDrop }\n onClick={ !hasBrowse ? onClick : undefined }\n { ...rootAttrs }\n >\n { hasIcon && (\n <div key=\"icon\" class=\"v-file-upload-icon\">\n { !slots.icon ? (\n <VIcon\n key=\"icon-icon\"\n icon={ props.icon }\n />\n ) : (\n <VDefaultsProvider\n key=\"icon-defaults\"\n defaults={{\n VIcon: {\n icon: props.icon,\n },\n }}\n >\n { slots.icon() }\n </VDefaultsProvider>\n )}\n </div>\n )}\n\n { hasTitle && (\n <div key=\"title\" class=\"v-file-upload-title\">\n { slots.title?.() ?? t(props.title) }\n </div>\n )}\n\n { props.density === 'default' && (\n <>\n <div key=\"upload-divider\" class=\"v-file-upload-divider\">\n { slots.divider?.() ?? (\n <VDivider { ...dividerProps }>\n { t(props.dividerText) }\n </VDivider>\n )}\n </div>\n\n { hasBrowse && (\n <>\n { !slots.browse ? (\n <VBtn\n readonly={ props.disabled }\n size=\"large\"\n text={ t(props.browseText) }\n variant=\"tonal\"\n onClick={ onClick }\n />\n ) : (\n <VDefaultsProvider\n defaults={{\n VBtn: {\n readonly: props.disabled,\n size: 'large',\n text: t(props.browseText),\n variant: 'tonal',\n },\n }}\n >\n { slots.browse({ props: { onClick } }) }\n </VDefaultsProvider>\n )}\n </>\n )}\n\n { props.subtitle && (\n <div class=\"v-file-upload-subtitle\">\n { props.subtitle }\n </div>\n )}\n </>\n )}\n\n <VOverlay\n modelValue={ isDragging.value }\n contained\n scrim={ props.scrim }\n />\n\n { slots.input?.({ inputNode }) ?? inputNode }\n </VSheet>\n\n { model.value.length > 0 && (\n <div class=\"v-file-upload-items\">\n { model.value.map((file, i) => {\n const slotProps = {\n file,\n props: {\n 'onClick:remove': () => onClickRemove(i),\n },\n }\n\n return (\n <VDefaultsProvider\n key={ i }\n defaults={{\n VFileUploadItem: {\n file,\n clearable: props.clearable,\n disabled: props.disabled,\n showSize: props.showSize,\n },\n }}\n >\n { slots.item?.(slotProps) ?? (\n <VFileUploadItem\n key={ i }\n onClick:remove={ () => onClickRemove(i) }\n v-slots={ slots }\n />\n )}\n </VDefaultsProvider>\n )\n })}\n </div>\n )}\n </>\n )\n })\n },\n})\n\nexport type VFileUpload = InstanceType<typeof VFileUpload>\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
@@ -1,55 +0,0 @@
|
|
1
|
-
import type { MaybeRefOrGetter } from 'vue';
|
2
|
-
export interface ChunksProps {
|
3
|
-
chunkCount: number | string;
|
4
|
-
chunkWidth: number | string;
|
5
|
-
chunkGap: number | string;
|
6
|
-
}
|
7
|
-
export declare const makeChunksProps: <Defaults extends {
|
8
|
-
chunkCount?: unknown;
|
9
|
-
chunkWidth?: unknown;
|
10
|
-
chunkGap?: unknown;
|
11
|
-
} = {}>(defaults?: Defaults | undefined) => {
|
12
|
-
chunkCount: unknown extends Defaults["chunkCount"] ? {
|
13
|
-
type: (StringConstructor | NumberConstructor)[];
|
14
|
-
default: null;
|
15
|
-
} : Omit<{
|
16
|
-
type: (StringConstructor | NumberConstructor)[];
|
17
|
-
default: null;
|
18
|
-
}, "type" | "default"> & {
|
19
|
-
type: import("vue").PropType<unknown extends Defaults["chunkCount"] ? string | number : string | number | Defaults["chunkCount"]>;
|
20
|
-
default: unknown extends Defaults["chunkCount"] ? string | number : NonNullable<string | number> | Defaults["chunkCount"];
|
21
|
-
};
|
22
|
-
chunkWidth: unknown extends Defaults["chunkWidth"] ? {
|
23
|
-
type: (StringConstructor | NumberConstructor)[];
|
24
|
-
default: null;
|
25
|
-
} : Omit<{
|
26
|
-
type: (StringConstructor | NumberConstructor)[];
|
27
|
-
default: null;
|
28
|
-
}, "type" | "default"> & {
|
29
|
-
type: import("vue").PropType<unknown extends Defaults["chunkWidth"] ? string | number : string | number | Defaults["chunkWidth"]>;
|
30
|
-
default: unknown extends Defaults["chunkWidth"] ? string | number : NonNullable<string | number> | Defaults["chunkWidth"];
|
31
|
-
};
|
32
|
-
chunkGap: unknown extends Defaults["chunkGap"] ? {
|
33
|
-
type: (StringConstructor | NumberConstructor)[];
|
34
|
-
default: number;
|
35
|
-
} : Omit<{
|
36
|
-
type: (StringConstructor | NumberConstructor)[];
|
37
|
-
default: number;
|
38
|
-
}, "type" | "default"> & {
|
39
|
-
type: import("vue").PropType<unknown extends Defaults["chunkGap"] ? string | number : string | number | Defaults["chunkGap"]>;
|
40
|
-
default: unknown extends Defaults["chunkGap"] ? string | number : NonNullable<string | number> | Defaults["chunkGap"];
|
41
|
-
};
|
42
|
-
};
|
43
|
-
export declare function useChunks(props: ChunksProps, containerWidth: MaybeRefOrGetter<number | undefined>): {
|
44
|
-
hasChunks: Readonly<import("vue").Ref<boolean, boolean>>;
|
45
|
-
chunksMaskStyles: import("vue").ComputedRef<{
|
46
|
-
maskRepeat?: undefined;
|
47
|
-
maskImage?: undefined;
|
48
|
-
maskSize?: undefined;
|
49
|
-
} | {
|
50
|
-
maskRepeat: string;
|
51
|
-
maskImage: string;
|
52
|
-
maskSize: string;
|
53
|
-
}>;
|
54
|
-
snapValueToChunk: (val: number) => number;
|
55
|
-
};
|
@@ -1,62 +0,0 @@
|
|
1
|
-
// Utilities
|
2
|
-
import { computed, toRef, toValue } from 'vue';
|
3
|
-
import { clamp, convertToUnit, propsFactory } from "../../util/index.js"; // Types
|
4
|
-
// Composables
|
5
|
-
export const makeChunksProps = propsFactory({
|
6
|
-
chunkCount: {
|
7
|
-
type: [Number, String],
|
8
|
-
default: null
|
9
|
-
},
|
10
|
-
chunkWidth: {
|
11
|
-
type: [Number, String],
|
12
|
-
default: null
|
13
|
-
},
|
14
|
-
chunkGap: {
|
15
|
-
type: [Number, String],
|
16
|
-
default: 4
|
17
|
-
}
|
18
|
-
}, 'chunks');
|
19
|
-
export function useChunks(props, containerWidth) {
|
20
|
-
const hasChunks = toRef(() => !!props.chunkCount || !!props.chunkWidth);
|
21
|
-
const chunkWidth = computed(() => {
|
22
|
-
const containerSize = toValue(containerWidth);
|
23
|
-
if (!containerSize) {
|
24
|
-
return 0;
|
25
|
-
}
|
26
|
-
if (!props.chunkCount) {
|
27
|
-
return Number(props.chunkWidth);
|
28
|
-
}
|
29
|
-
const count = Number(props.chunkCount);
|
30
|
-
const availableWidth = containerSize - Number(props.chunkGap) * (count - 1);
|
31
|
-
return availableWidth / count;
|
32
|
-
});
|
33
|
-
const chunkGap = toRef(() => Number(props.chunkGap));
|
34
|
-
const chunksMaskStyles = computed(() => {
|
35
|
-
if (!hasChunks.value) {
|
36
|
-
return {};
|
37
|
-
}
|
38
|
-
const chunkGapPx = convertToUnit(chunkGap.value);
|
39
|
-
const chunkWidthPx = convertToUnit(chunkWidth.value);
|
40
|
-
return {
|
41
|
-
maskRepeat: 'repeat-x',
|
42
|
-
maskImage: `linear-gradient(90deg, #000, #000 ${chunkWidthPx}, transparent ${chunkWidthPx}, transparent)`,
|
43
|
-
maskSize: `calc(${chunkWidthPx} + ${chunkGapPx}) 100%`
|
44
|
-
};
|
45
|
-
});
|
46
|
-
function snapValueToChunk(val) {
|
47
|
-
const containerSize = toValue(containerWidth);
|
48
|
-
if (!containerSize) {
|
49
|
-
return val;
|
50
|
-
}
|
51
|
-
const gapRelativeSize = 100 * chunkGap.value / containerSize;
|
52
|
-
const chunkRelativeSize = 100 * (chunkWidth.value + chunkGap.value) / containerSize;
|
53
|
-
const filledChunks = Math.floor((val + gapRelativeSize) / chunkRelativeSize);
|
54
|
-
return clamp(0, filledChunks * chunkRelativeSize - gapRelativeSize / 2, 100);
|
55
|
-
}
|
56
|
-
return {
|
57
|
-
hasChunks,
|
58
|
-
chunksMaskStyles,
|
59
|
-
snapValueToChunk
|
60
|
-
};
|
61
|
-
}
|
62
|
-
//# sourceMappingURL=chunks.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"chunks.js","names":["computed","toRef","toValue","clamp","convertToUnit","propsFactory","makeChunksProps","chunkCount","type","Number","String","default","chunkWidth","chunkGap","useChunks","props","containerWidth","hasChunks","containerSize","count","availableWidth","chunksMaskStyles","value","chunkGapPx","chunkWidthPx","maskRepeat","maskImage","maskSize","snapValueToChunk","val","gapRelativeSize","chunkRelativeSize","filledChunks","Math","floor"],"sources":["../../../src/components/VProgressLinear/chunks.ts"],"sourcesContent":["// Utilities\nimport { computed, toRef, toValue } from 'vue'\nimport { clamp, convertToUnit, propsFactory } from '@/util'\n\n// Types\nimport type { MaybeRefOrGetter } from 'vue'\n\nexport interface ChunksProps {\n chunkCount: number | string\n chunkWidth: number | string\n chunkGap: number | string\n}\n\n// Composables\nexport const makeChunksProps = propsFactory({\n chunkCount: {\n type: [Number, String],\n default: null,\n },\n chunkWidth: {\n type: [Number, String],\n default: null,\n },\n chunkGap: {\n type: [Number, String],\n default: 4,\n },\n}, 'chunks')\n\nexport function useChunks (\n props: ChunksProps,\n containerWidth: MaybeRefOrGetter<number | undefined>,\n) {\n const hasChunks = toRef(() => !!props.chunkCount || !!props.chunkWidth)\n\n const chunkWidth = computed(() => {\n const containerSize = toValue(containerWidth)\n if (!containerSize) {\n return 0\n }\n\n if (!props.chunkCount) {\n return Number(props.chunkWidth)\n }\n\n const count = Number(props.chunkCount)\n const availableWidth = containerSize - Number(props.chunkGap) * (count - 1)\n return availableWidth / count\n })\n\n const chunkGap = toRef(() => Number(props.chunkGap))\n const chunksMaskStyles = computed(() => {\n if (!hasChunks.value) {\n return {}\n }\n\n const chunkGapPx = convertToUnit(chunkGap.value)\n const chunkWidthPx = convertToUnit(chunkWidth.value)\n\n return {\n maskRepeat: 'repeat-x',\n maskImage: `linear-gradient(90deg, #000, #000 ${chunkWidthPx}, transparent ${chunkWidthPx}, transparent)`,\n maskSize: `calc(${chunkWidthPx} + ${chunkGapPx}) 100%`,\n }\n })\n\n function snapValueToChunk (val: number) {\n const containerSize = toValue(containerWidth)\n if (!containerSize) {\n return val\n }\n\n const gapRelativeSize = 100 * chunkGap.value / containerSize\n const chunkRelativeSize = 100 * (chunkWidth.value + chunkGap.value) / containerSize\n const filledChunks = Math.floor((val + gapRelativeSize) / chunkRelativeSize)\n return clamp(0, filledChunks * chunkRelativeSize - gapRelativeSize / 2, 100)\n }\n\n return {\n hasChunks,\n chunksMaskStyles,\n snapValueToChunk,\n }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,KAAK,EAAEC,OAAO,QAAQ,KAAK;AAAA,SACrCC,KAAK,EAAEC,aAAa,EAAEC,YAAY,+BAE3C;AASA;AACA,OAAO,MAAMC,eAAe,GAAGD,YAAY,CAAC;EAC1CE,UAAU,EAAE;IACVC,IAAI,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAC;IACtBC,OAAO,EAAE;EACX,CAAC;EACDC,UAAU,EAAE;IACVJ,IAAI,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAC;IACtBC,OAAO,EAAE;EACX,CAAC;EACDE,QAAQ,EAAE;IACRL,IAAI,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAC;IACtBC,OAAO,EAAE;EACX;AACF,CAAC,EAAE,QAAQ,CAAC;AAEZ,OAAO,SAASG,SAASA,CACvBC,KAAkB,EAClBC,cAAoD,EACpD;EACA,MAAMC,SAAS,GAAGhB,KAAK,CAAC,MAAM,CAAC,CAACc,KAAK,CAACR,UAAU,IAAI,CAAC,CAACQ,KAAK,CAACH,UAAU,CAAC;EAEvE,MAAMA,UAAU,GAAGZ,QAAQ,CAAC,MAAM;IAChC,MAAMkB,aAAa,GAAGhB,OAAO,CAACc,cAAc,CAAC;IAC7C,IAAI,CAACE,aAAa,EAAE;MAClB,OAAO,CAAC;IACV;IAEA,IAAI,CAACH,KAAK,CAACR,UAAU,EAAE;MACrB,OAAOE,MAAM,CAACM,KAAK,CAACH,UAAU,CAAC;IACjC;IAEA,MAAMO,KAAK,GAAGV,MAAM,CAACM,KAAK,CAACR,UAAU,CAAC;IACtC,MAAMa,cAAc,GAAGF,aAAa,GAAGT,MAAM,CAACM,KAAK,CAACF,QAAQ,CAAC,IAAIM,KAAK,GAAG,CAAC,CAAC;IAC3E,OAAOC,cAAc,GAAGD,KAAK;EAC/B,CAAC,CAAC;EAEF,MAAMN,QAAQ,GAAGZ,KAAK,CAAC,MAAMQ,MAAM,CAACM,KAAK,CAACF,QAAQ,CAAC,CAAC;EACpD,MAAMQ,gBAAgB,GAAGrB,QAAQ,CAAC,MAAM;IACtC,IAAI,CAACiB,SAAS,CAACK,KAAK,EAAE;MACpB,OAAO,CAAC,CAAC;IACX;IAEA,MAAMC,UAAU,GAAGnB,aAAa,CAACS,QAAQ,CAACS,KAAK,CAAC;IAChD,MAAME,YAAY,GAAGpB,aAAa,CAACQ,UAAU,CAACU,KAAK,CAAC;IAEpD,OAAO;MACLG,UAAU,EAAE,UAAU;MACtBC,SAAS,EAAE,qCAAqCF,YAAY,iBAAiBA,YAAY,gBAAgB;MACzGG,QAAQ,EAAE,QAAQH,YAAY,MAAMD,UAAU;IAChD,CAAC;EACH,CAAC,CAAC;EAEF,SAASK,gBAAgBA,CAAEC,GAAW,EAAE;IACtC,MAAMX,aAAa,GAAGhB,OAAO,CAACc,cAAc,CAAC;IAC7C,IAAI,CAACE,aAAa,EAAE;MAClB,OAAOW,GAAG;IACZ;IAEA,MAAMC,eAAe,GAAG,GAAG,GAAGjB,QAAQ,CAACS,KAAK,GAAGJ,aAAa;IAC5D,MAAMa,iBAAiB,GAAG,GAAG,IAAInB,UAAU,CAACU,KAAK,GAAGT,QAAQ,CAACS,KAAK,CAAC,GAAGJ,aAAa;IACnF,MAAMc,YAAY,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACL,GAAG,GAAGC,eAAe,IAAIC,iBAAiB,CAAC;IAC5E,OAAO5B,KAAK,CAAC,CAAC,EAAE6B,YAAY,GAAGD,iBAAiB,GAAGD,eAAe,GAAG,CAAC,EAAE,GAAG,CAAC;EAC9E;EAEA,OAAO;IACLb,SAAS;IACTI,gBAAgB;IAChBO;EACF,CAAC;AACH","ignoreList":[]}
|
@@ -1,18 +0,0 @@
|
|
1
|
-
export interface FileFilterProps {
|
2
|
-
filterByType?: string;
|
3
|
-
}
|
4
|
-
export type FileFilterResult = {
|
5
|
-
accepted: File[];
|
6
|
-
rejected: File[];
|
7
|
-
};
|
8
|
-
export declare const makeFileFilterProps: <Defaults extends {
|
9
|
-
filterByType?: unknown;
|
10
|
-
} = {}>(defaults?: Defaults | undefined) => {
|
11
|
-
filterByType: unknown extends Defaults["filterByType"] ? StringConstructor : {
|
12
|
-
type: import("vue").PropType<unknown extends Defaults["filterByType"] ? string : string | Defaults["filterByType"]>;
|
13
|
-
default: unknown extends Defaults["filterByType"] ? string : string | Defaults["filterByType"];
|
14
|
-
};
|
15
|
-
};
|
16
|
-
export declare function useFileFilter(props: FileFilterProps): {
|
17
|
-
filterAccepted: (files: File[]) => FileFilterResult;
|
18
|
-
};
|
@@ -1,38 +0,0 @@
|
|
1
|
-
// Utilities
|
2
|
-
import { computed } from 'vue';
|
3
|
-
import { propsFactory } from "../util/index.js";
|
4
|
-
// Composables
|
5
|
-
export const makeFileFilterProps = propsFactory({
|
6
|
-
filterByType: String
|
7
|
-
}, 'file-accept');
|
8
|
-
export function useFileFilter(props) {
|
9
|
-
const fileFilter = computed(() => props.filterByType ? createFilter(props.filterByType) : null);
|
10
|
-
function filterAccepted(files) {
|
11
|
-
if (fileFilter.value) {
|
12
|
-
const accepted = files.filter(fileFilter.value);
|
13
|
-
return {
|
14
|
-
accepted,
|
15
|
-
rejected: files.filter(f => !accepted.includes(f))
|
16
|
-
};
|
17
|
-
}
|
18
|
-
return {
|
19
|
-
accepted: files,
|
20
|
-
rejected: []
|
21
|
-
};
|
22
|
-
}
|
23
|
-
return {
|
24
|
-
filterAccepted
|
25
|
-
};
|
26
|
-
}
|
27
|
-
function createFilter(v) {
|
28
|
-
const types = v.split(',').map(x => x.trim().toLowerCase());
|
29
|
-
const extensionsToMatch = types.filter(x => x.startsWith('.'));
|
30
|
-
const wildcards = types.filter(x => x.endsWith('/*'));
|
31
|
-
const typesToMatch = types.filter(x => !extensionsToMatch.includes(x) && !wildcards.includes(x));
|
32
|
-
return file => {
|
33
|
-
const extension = file.name.split('.').at(-1)?.toLowerCase() ?? '';
|
34
|
-
const typeGroup = file.type.split('/').at(0)?.toLowerCase() ?? '';
|
35
|
-
return typesToMatch.includes(file.type) || extensionsToMatch.includes(`.${extension}`) || wildcards.includes(`${typeGroup}/*`);
|
36
|
-
};
|
37
|
-
}
|
38
|
-
//# sourceMappingURL=fileFilter.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"fileFilter.js","names":["computed","propsFactory","makeFileFilterProps","filterByType","String","useFileFilter","props","fileFilter","createFilter","filterAccepted","files","value","accepted","filter","rejected","f","includes","v","types","split","map","x","trim","toLowerCase","extensionsToMatch","startsWith","wildcards","endsWith","typesToMatch","file","extension","name","at","typeGroup","type"],"sources":["../../src/composables/fileFilter.ts"],"sourcesContent":["// Utilities\nimport { computed } from 'vue'\nimport { propsFactory } from '@/util'\n\nexport interface FileFilterProps {\n filterByType?: string\n}\n\nexport type FileFilterResult = {\n accepted: File[]\n rejected: File[]\n}\n\n// Composables\nexport const makeFileFilterProps = propsFactory({\n filterByType: String,\n}, 'file-accept')\n\nexport function useFileFilter (props: FileFilterProps) {\n const fileFilter = computed(() => props.filterByType ? createFilter(props.filterByType) : null)\n\n function filterAccepted (files: File[]): FileFilterResult {\n if (fileFilter.value) {\n const accepted = files.filter(fileFilter.value)\n return {\n accepted,\n rejected: files.filter(f => !accepted.includes(f)),\n }\n }\n return {\n accepted: files,\n rejected: [],\n }\n }\n\n return {\n filterAccepted,\n }\n}\n\nfunction createFilter (v: string): ((v: File) => boolean) {\n const types = v.split(',').map(x => x.trim().toLowerCase())\n const extensionsToMatch = types.filter(x => x.startsWith('.'))\n const wildcards = types.filter(x => x.endsWith('/*'))\n const typesToMatch = types.filter(x => !extensionsToMatch.includes(x) && !wildcards.includes(x))\n\n return (file: File): boolean => {\n const extension = file.name.split('.').at(-1)?.toLowerCase() ?? ''\n const typeGroup = file.type.split('/').at(0)?.toLowerCase() ?? ''\n return typesToMatch.includes(file.type) ||\n extensionsToMatch.includes(`.${extension}`) ||\n wildcards.includes(`${typeGroup}/*`)\n }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,QAAQ,KAAK;AAAA,SACrBC,YAAY;AAWrB;AACA,OAAO,MAAMC,mBAAmB,GAAGD,YAAY,CAAC;EAC9CE,YAAY,EAAEC;AAChB,CAAC,EAAE,aAAa,CAAC;AAEjB,OAAO,SAASC,aAAaA,CAAEC,KAAsB,EAAE;EACrD,MAAMC,UAAU,GAAGP,QAAQ,CAAC,MAAMM,KAAK,CAACH,YAAY,GAAGK,YAAY,CAACF,KAAK,CAACH,YAAY,CAAC,GAAG,IAAI,CAAC;EAE/F,SAASM,cAAcA,CAAEC,KAAa,EAAoB;IACxD,IAAIH,UAAU,CAACI,KAAK,EAAE;MACpB,MAAMC,QAAQ,GAAGF,KAAK,CAACG,MAAM,CAACN,UAAU,CAACI,KAAK,CAAC;MAC/C,OAAO;QACLC,QAAQ;QACRE,QAAQ,EAAEJ,KAAK,CAACG,MAAM,CAACE,CAAC,IAAI,CAACH,QAAQ,CAACI,QAAQ,CAACD,CAAC,CAAC;MACnD,CAAC;IACH;IACA,OAAO;MACLH,QAAQ,EAAEF,KAAK;MACfI,QAAQ,EAAE;IACZ,CAAC;EACH;EAEA,OAAO;IACLL;EACF,CAAC;AACH;AAEA,SAASD,YAAYA,CAAES,CAAS,EAA0B;EACxD,MAAMC,KAAK,GAAGD,CAAC,CAACE,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,CAAC;EAC3D,MAAMC,iBAAiB,GAAGN,KAAK,CAACL,MAAM,CAACQ,CAAC,IAAIA,CAAC,CAACI,UAAU,CAAC,GAAG,CAAC,CAAC;EAC9D,MAAMC,SAAS,GAAGR,KAAK,CAACL,MAAM,CAACQ,CAAC,IAAIA,CAAC,CAACM,QAAQ,CAAC,IAAI,CAAC,CAAC;EACrD,MAAMC,YAAY,GAAGV,KAAK,CAACL,MAAM,CAACQ,CAAC,IAAI,CAACG,iBAAiB,CAACR,QAAQ,CAACK,CAAC,CAAC,IAAI,CAACK,SAAS,CAACV,QAAQ,CAACK,CAAC,CAAC,CAAC;EAEhG,OAAQQ,IAAU,IAAc;IAC9B,MAAMC,SAAS,GAAGD,IAAI,CAACE,IAAI,CAACZ,KAAK,CAAC,GAAG,CAAC,CAACa,EAAE,CAAC,CAAC,CAAC,CAAC,EAAET,WAAW,CAAC,CAAC,IAAI,EAAE;IAClE,MAAMU,SAAS,GAAGJ,IAAI,CAACK,IAAI,CAACf,KAAK,CAAC,GAAG,CAAC,CAACa,EAAE,CAAC,CAAC,CAAC,EAAET,WAAW,CAAC,CAAC,IAAI,EAAE;IACjE,OAAOK,YAAY,CAACZ,QAAQ,CAACa,IAAI,CAACK,IAAI,CAAC,IACrCV,iBAAiB,CAACR,QAAQ,CAAC,IAAIc,SAAS,EAAE,CAAC,IAC3CJ,SAAS,CAACV,QAAQ,CAAC,GAAGiB,SAAS,IAAI,CAAC;EACxC,CAAC;AACH","ignoreList":[]}
|