From cfc38100100c759e3fe86de859046eebd2c047e3 Mon Sep 17 00:00:00 2001 From: rdjanuar Date: Thu, 14 Nov 2024 23:54:46 +0700 Subject: [PATCH 01/31] wip --- playground/app/app.vue | 3 ++- playground/app/pages/components/file-upload.vue | 9 +++++++++ src/runtime/components/FileUpload.vue | 9 +++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 playground/app/pages/components/file-upload.vue create mode 100644 src/runtime/components/FileUpload.vue diff --git a/playground/app/app.vue b/playground/app/app.vue index be1678ec02..545f078884 100644 --- a/playground/app/app.vue +++ b/playground/app/app.vue @@ -46,7 +46,8 @@ const components = [ 'table', 'textarea', 'toast', - 'tooltip' + 'tooltip', + 'file-upload' ] const items = components.map(component => ({ label: upperName(component), to: `/components/${component}` })) diff --git a/playground/app/pages/components/file-upload.vue b/playground/app/pages/components/file-upload.vue new file mode 100644 index 0000000000..e7e309d340 --- /dev/null +++ b/playground/app/pages/components/file-upload.vue @@ -0,0 +1,9 @@ + + + diff --git a/src/runtime/components/FileUpload.vue b/src/runtime/components/FileUpload.vue new file mode 100644 index 0000000000..3f680e872f --- /dev/null +++ b/src/runtime/components/FileUpload.vue @@ -0,0 +1,9 @@ + + + + + From 062a5025edc8d1a00a3828a10a1342eaa8b2074c Mon Sep 17 00:00:00 2001 From: rdjanuar Date: Sun, 1 Dec 2024 19:58:12 +0700 Subject: [PATCH 02/31] wip --- playground/app/app.vue | 4 +- .../app/pages/components/file-upload.vue | 8 +- src/runtime/components/FileUpload.vue | 120 +++++++++++++++++- src/runtime/components/Input.vue | 2 +- src/runtime/composables/useFileUpload.ts | 109 ++++++++++++++++ src/runtime/types/index.ts | 1 + src/theme/file-upload.ts | 0 7 files changed, 234 insertions(+), 10 deletions(-) create mode 100644 src/runtime/composables/useFileUpload.ts create mode 100644 src/theme/file-upload.ts diff --git a/playground/app/app.vue b/playground/app/app.vue index 545f078884..7fdc173f66 100644 --- a/playground/app/app.vue +++ b/playground/app/app.vue @@ -23,6 +23,7 @@ const components = [ 'dropdown-menu', 'form', 'form-field', + 'file-upload', 'input', 'input-menu', 'kbd', @@ -46,8 +47,7 @@ const components = [ 'table', 'textarea', 'toast', - 'tooltip', - 'file-upload' + 'tooltip' ] const items = components.map(component => ({ label: upperName(component), to: `/components/${component}` })) diff --git a/playground/app/pages/components/file-upload.vue b/playground/app/pages/components/file-upload.vue index e7e309d340..bf542184f6 100644 --- a/playground/app/pages/components/file-upload.vue +++ b/playground/app/pages/components/file-upload.vue @@ -1,9 +1,9 @@ - diff --git a/src/runtime/components/FileUpload.vue b/src/runtime/components/FileUpload.vue index 3f680e872f..1c6ed66ace 100644 --- a/src/runtime/components/FileUpload.vue +++ b/src/runtime/components/FileUpload.vue @@ -1,9 +1,123 @@ - + diff --git a/src/runtime/components/Input.vue b/src/runtime/components/Input.vue index 103a24d74e..d85c0468ae 100644 --- a/src/runtime/components/Input.vue +++ b/src/runtime/components/Input.vue @@ -136,7 +136,7 @@ function onBlur(event: FocusEvent) { } defineExpose({ - inputRef + inputRef: inputRef }) onMounted(() => { diff --git a/src/runtime/composables/useFileUpload.ts b/src/runtime/composables/useFileUpload.ts new file mode 100644 index 0000000000..fb887fa0e1 --- /dev/null +++ b/src/runtime/composables/useFileUpload.ts @@ -0,0 +1,109 @@ +import { ref, type Ref } from 'vue' +import { createEventHook } from '@vueuse/core' + +export interface UseFileUploadOptions { + /** + * @default true + */ + multiple?: boolean + /** + * @default '*' + */ + accept?: string + /** + * Select the input source for the capture file. + * @see [HTMLInputElement Capture](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture) + */ + capture?: 'user' | 'environment' + /** + * Reset when open file dialog. + * @default false + */ + reset?: boolean + /** + * Select directories instead of files. + * @see [HTMLInputElement webkitdirectory](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory) + * @default false + */ + directory?: boolean + /** + * @default 0 + */ + minFileSize?: number + /** + * @default Infinity + */ + maxFileSize?: number + /** + * @default false + */ + disabled?: boolean + /** + * Whether to allow drag and drop in the dropzone element + * @default true + */ + allowDrop?: boolean +} + +const DEFAULT_OPTIONS: UseFileUploadOptions = { + multiple: true, + accept: '*', + reset: false, + directory: false, + minFileSize: 0, + maxFileSize: Infinity, + disabled: false, + allowDrop: true +} + +export interface UseFileDialogReturn { + files: Ref + open: (localOptions?: Partial) => void + reset: () => void +} + +export interface FileUploadEmits { + (e: 'change', value: File): void + (e: 'accept', value: any): void + (e: 'reject', value: unknown): void +} + +export function useFileUpload(options = DEFAULT_OPTIONS) { + let input: HTMLInputElement | undefined + + const files = ref(null) + + const { on: onChange, trigger: changeTrigger } = createEventHook() + const { on: onReject, trigger: rejectTrigger } = createEventHook() + const { on: onAccept, trigger: acceptTrigger } = createEventHook() + const { on: onCancel, trigger: cancelTrigger } = createEventHook() + + if (document) { + input = document.createElement('input') + input.type = 'file' + + input.onchange = (event: Event) => { + const result = event.target as HTMLInputElement + files.value = result.files + changeTrigger(result.files?.[0] as File) + } + + input.oncancel = () => { + cancelTrigger() + } + } + + const open = () => { + input.multiple = options.multiple! + input.accept = options.accept! + input.capture = options.capture! + input.click() + } + + return { + open, + files, + onChange, + onCancel + } +} diff --git a/src/runtime/types/index.ts b/src/runtime/types/index.ts index e14b651409..4f02834abe 100644 --- a/src/runtime/types/index.ts +++ b/src/runtime/types/index.ts @@ -41,6 +41,7 @@ export * from '../components/Tabs.vue' export * from '../components/Textarea.vue' export * from '../components/Toast.vue' export * from '../components/Toaster.vue' +export * from '../components/FileUpload.vue' export * from '../components/Tooltip.vue' export * from './form' export * from './locale' diff --git a/src/theme/file-upload.ts b/src/theme/file-upload.ts new file mode 100644 index 0000000000..e69de29bb2 From 643c1e0c0439cfd8e3b8fa70fe9ebbfdca2c6fda Mon Sep 17 00:00:00 2001 From: rdjanuar Date: Sun, 1 Dec 2024 20:04:05 +0700 Subject: [PATCH 03/31] up --- src/runtime/composables/useFileUpload.ts | 109 ----------------------- 1 file changed, 109 deletions(-) delete mode 100644 src/runtime/composables/useFileUpload.ts diff --git a/src/runtime/composables/useFileUpload.ts b/src/runtime/composables/useFileUpload.ts deleted file mode 100644 index fb887fa0e1..0000000000 --- a/src/runtime/composables/useFileUpload.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { ref, type Ref } from 'vue' -import { createEventHook } from '@vueuse/core' - -export interface UseFileUploadOptions { - /** - * @default true - */ - multiple?: boolean - /** - * @default '*' - */ - accept?: string - /** - * Select the input source for the capture file. - * @see [HTMLInputElement Capture](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture) - */ - capture?: 'user' | 'environment' - /** - * Reset when open file dialog. - * @default false - */ - reset?: boolean - /** - * Select directories instead of files. - * @see [HTMLInputElement webkitdirectory](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory) - * @default false - */ - directory?: boolean - /** - * @default 0 - */ - minFileSize?: number - /** - * @default Infinity - */ - maxFileSize?: number - /** - * @default false - */ - disabled?: boolean - /** - * Whether to allow drag and drop in the dropzone element - * @default true - */ - allowDrop?: boolean -} - -const DEFAULT_OPTIONS: UseFileUploadOptions = { - multiple: true, - accept: '*', - reset: false, - directory: false, - minFileSize: 0, - maxFileSize: Infinity, - disabled: false, - allowDrop: true -} - -export interface UseFileDialogReturn { - files: Ref - open: (localOptions?: Partial) => void - reset: () => void -} - -export interface FileUploadEmits { - (e: 'change', value: File): void - (e: 'accept', value: any): void - (e: 'reject', value: unknown): void -} - -export function useFileUpload(options = DEFAULT_OPTIONS) { - let input: HTMLInputElement | undefined - - const files = ref(null) - - const { on: onChange, trigger: changeTrigger } = createEventHook() - const { on: onReject, trigger: rejectTrigger } = createEventHook() - const { on: onAccept, trigger: acceptTrigger } = createEventHook() - const { on: onCancel, trigger: cancelTrigger } = createEventHook() - - if (document) { - input = document.createElement('input') - input.type = 'file' - - input.onchange = (event: Event) => { - const result = event.target as HTMLInputElement - files.value = result.files - changeTrigger(result.files?.[0] as File) - } - - input.oncancel = () => { - cancelTrigger() - } - } - - const open = () => { - input.multiple = options.multiple! - input.accept = options.accept! - input.capture = options.capture! - input.click() - } - - return { - open, - files, - onChange, - onCancel - } -} From 32fdfb9d7abe7bbba25622e7c2f8ccf932395c4e Mon Sep 17 00:00:00 2001 From: Valentin Chmara Date: Fri, 4 Apr 2025 11:59:08 +0200 Subject: [PATCH 04/31] docs(showcase): fix contrast on light mode --- docs/app/pages/showcase.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/app/pages/showcase.vue b/docs/app/pages/showcase.vue index b0e73f1969..bf94360787 100644 --- a/docs/app/pages/showcase.vue +++ b/docs/app/pages/showcase.vue @@ -60,10 +60,10 @@ useSeoMeta({ />
- + {{ item.name }} - +
From 3542bed60cbbc796df8bd89542e66a2b37a238be Mon Sep 17 00:00:00 2001 From: Valentin Chmara Date: Wed, 7 May 2025 16:49:31 +0200 Subject: [PATCH 05/31] feat: add FileUpload minimal component --- .../app/pages/components/file-upload.vue | 22 +- src/runtime/components/FileUpload.vue | 395 ++++++++++++------ src/theme/file-upload.ts | 68 +++ src/theme/icons.ts | 2 + src/theme/index.ts | 1 + 5 files changed, 356 insertions(+), 132 deletions(-) diff --git a/playground/app/pages/components/file-upload.vue b/playground/app/pages/components/file-upload.vue index bf542184f6..4817d05634 100644 --- a/playground/app/pages/components/file-upload.vue +++ b/playground/app/pages/components/file-upload.vue @@ -1,9 +1,13 @@ - - - + + + diff --git a/src/runtime/components/FileUpload.vue b/src/runtime/components/FileUpload.vue index 1c6ed66ace..8402724878 100644 --- a/src/runtime/components/FileUpload.vue +++ b/src/runtime/components/FileUpload.vue @@ -1,123 +1,272 @@ - - - - - + + + + + diff --git a/src/theme/file-upload.ts b/src/theme/file-upload.ts index e69de29bb2..6d1ab3723a 100644 --- a/src/theme/file-upload.ts +++ b/src/theme/file-upload.ts @@ -0,0 +1,68 @@ +export default { + slots: { + root: 'relative inline-flex items-center', + base: 'bg-default shadow-sm rounded-md divide-y divide-default overflow-y-auto border border-dashed border-accented', + dragging: 'bg-accented/20', + empty: 'flex flex-col items-center justify-center gap-2', + label: 'font-semibold text-highlighted text-center px-2 line-clamp-1', + uploadIcon: 'shrink-0', + files: 'divide-y divide-default', + file: 'text-default flex justify-between items-center gap-2 p-2', + fileLabel: 'text-default font-semibold line-clamp-1', + fileAvatar: 'shrink-0', + fileAvatarSize: '', + fileSize: 'text-muted' + }, + variants: { + size: { + xs: { + base: 'w-56', + empty: 'h-16', + label: 'text-xs', + uploadIcon: 'size-4', + files: 'h-10', + file: 'p-1 text-xs gap-1', + fileAvatarSize: 'xs' + }, + sm: { + base: 'w-60', + empty: 'h-20', + label: 'text-xs', + uploadIcon: 'size-4', + file: 'p-1.5 text-xs gap-1.5', + fileAvatarSize: 'sm' + }, + md: { + base: 'w-64', + empty: 'h-24', + label: 'text-sm', + uploadIcon: 'size-5', + file: 'p-1.5 text-sm gap-1.5', + fileAvatarSize: 'md' + }, + lg: { + base: 'w-72', + empty: 'h-26', + label: 'text-sm', + uploadIcon: 'size-5', + file: 'p-2 text-sm gap-2', + fileAvatarSize: 'lg' + }, + xl: { + base: 'w-82', + empty: 'h-32', + label: 'text-base', + uploadIcon: 'size-6', + file: 'p-2 text-base gap-2', + fileAvatarSize: 'xl' + } + }, + multiple: { + true: '', + false: '' + } + }, + defaultVariants: { + size: 'md' + } +} diff --git a/src/theme/icons.ts b/src/theme/icons.ts index d9477de5a6..76d0600ae2 100644 --- a/src/theme/icons.ts +++ b/src/theme/icons.ts @@ -13,6 +13,8 @@ export default { external: 'i-lucide-arrow-up-right', folder: 'i-lucide-folder', folderOpen: 'i-lucide-folder-open', + upload: 'i-lucide-upload', + file: 'i-lucide-file', loading: 'i-lucide-refresh-cw', minus: 'i-lucide-minus', plus: 'i-lucide-plus', diff --git a/src/theme/index.ts b/src/theme/index.ts index 752065ec45..e0ca34cc8e 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -24,6 +24,7 @@ export { default as formField } from './form-field' export { default as input } from './input' export { default as inputMenu } from './input-menu' export { default as inputNumber } from './input-number' +export { default as fileUpload } from './file-upload' export { default as kbd } from './kbd' export { default as link } from './link' export { default as modal } from './modal' From 686843c34737c71b4faa784362ec02f369a2ea52 Mon Sep 17 00:00:00 2001 From: Valentin Chmara Date: Wed, 7 May 2025 17:08:04 +0200 Subject: [PATCH 06/31] fix: use avatar for image preview and icon --- playground/app/pages/components/file-upload.vue | 11 +++++------ src/runtime/components/FileUpload.vue | 6 +++--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/playground/app/pages/components/file-upload.vue b/playground/app/pages/components/file-upload.vue index 4817d05634..744d0cb7bd 100644 --- a/playground/app/pages/components/file-upload.vue +++ b/playground/app/pages/components/file-upload.vue @@ -1,13 +1,12 @@ diff --git a/src/runtime/components/FileUpload.vue b/src/runtime/components/FileUpload.vue index 8402724878..9580ca90f2 100644 --- a/src/runtime/components/FileUpload.vue +++ b/src/runtime/components/FileUpload.vue @@ -245,10 +245,10 @@ defineExpose({ fileInputRef })
  • - From 5daa76820d409aefde2e992c7f260618f955e8e7 Mon Sep 17 00:00:00 2001 From: Valentin Chmara Date: Wed, 14 May 2025 19:59:27 +0200 Subject: [PATCH 07/31] refactor(FileUpload): cursor-not-allowed when disabled --- playground/app/pages/components/file-upload.vue | 2 +- src/runtime/components/FileUpload.vue | 14 ++++---------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/playground/app/pages/components/file-upload.vue b/playground/app/pages/components/file-upload.vue index 744d0cb7bd..500f572946 100644 --- a/playground/app/pages/components/file-upload.vue +++ b/playground/app/pages/components/file-upload.vue @@ -6,7 +6,7 @@ - +
    diff --git a/src/runtime/components/FileUpload.vue b/src/runtime/components/FileUpload.vue index 9580ca90f2..ebb2c84c32 100644 --- a/src/runtime/components/FileUpload.vue +++ b/src/runtime/components/FileUpload.vue @@ -39,13 +39,6 @@ export interface FileUploadProps { */ multiple?: boolean disabled?: boolean - loading?: boolean - /** - * The icon when the `loading` prop is `true`. - * @defaultValue appConfig.ui.icons.loading - * @IconifyIcon - */ - loadingIcon?: string class?: any ui?: FileUpload['slots'] } @@ -201,7 +194,8 @@ defineExpose({ fileInputRef }) class: [ props.ui?.base, dragging && ui.dragging({ class: props.ui?.dragging }), - !file?.length && 'cursor-pointer' + !file?.length && 'cursor-pointer', + disabled && 'cursor-not-allowed' ] }) " @@ -218,7 +212,7 @@ defineExpose({ fileInputRef }) :accept="accept" :multiple="multiple" :required="required" - :disabled="disabled || loading" + :disabled="disabled" class="hidden" v-bind="{ ...$attrs, ...ariaAttrs }" @blur="onBlur" @@ -226,7 +220,7 @@ defineExpose({ fileInputRef }) @focus="emitFormFocus" > -
    +
    Date: Wed, 14 May 2025 20:19:10 +0200 Subject: [PATCH 08/31] feat(FileUpload): emits drag & drop events --- src/runtime/components/FileUpload.vue | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/runtime/components/FileUpload.vue b/src/runtime/components/FileUpload.vue index ebb2c84c32..29fd2b1707 100644 --- a/src/runtime/components/FileUpload.vue +++ b/src/runtime/components/FileUpload.vue @@ -47,6 +47,7 @@ export interface FileUploadEmits { (e: 'update:modelValue', value: File[]): void (e: 'blur', event: FocusEvent): void (e: 'change', event: Event): void + (e: 'onDrop' | 'onDragOver' | 'onDragLeave', event: DragEvent): void } export interface FileUploadSlots { @@ -177,6 +178,7 @@ function onDrop(event: DragEvent) { if (event.dataTransfer?.files?.length) { handleUpload(event.dataTransfer.files) } + emits('onDrop', event) } function onBlur(event: FocusEvent) { @@ -184,6 +186,17 @@ function onBlur(event: FocusEvent) { emits('blur', event) } +function onDragOver(event: DragEvent) { + event.preventDefault() + dragging.value = true + emits('onDragOver', event) +} +function onDragLeave(event: DragEvent) { + event.preventDefault() + dragging.value = false + emits('onDragLeave', event) +} + defineExpose({ fileInputRef }) @@ -201,8 +214,8 @@ defineExpose({ fileInputRef }) " tabindex="0" @drop="onDrop" - @dragover.prevent="dragging = true" - @dragleave="dragging = false" + @dragover.prevent="onDragOver" + @dragleave="onDragLeave" > Date: Thu, 15 May 2025 11:44:14 +0200 Subject: [PATCH 09/31] test(FileUpload): create tests --- src/runtime/components/FileUpload.vue | 2 +- test/components/FileUpload.spec.ts | 255 ++++++++++++++++++ .../__snapshots__/FileUpload-vue.spec.ts.snap | 105 ++++++++ .../__snapshots__/FileUpload.spec.ts.snap | 105 ++++++++ test/utils/form.ts | 2 + 5 files changed, 468 insertions(+), 1 deletion(-) create mode 100644 test/components/FileUpload.spec.ts create mode 100644 test/components/__snapshots__/FileUpload-vue.spec.ts.snap create mode 100644 test/components/__snapshots__/FileUpload.spec.ts.snap diff --git a/src/runtime/components/FileUpload.vue b/src/runtime/components/FileUpload.vue index 29fd2b1707..02962792d7 100644 --- a/src/runtime/components/FileUpload.vue +++ b/src/runtime/components/FileUpload.vue @@ -269,7 +269,7 @@ defineExpose({ fileInputRef })
    - +
  • diff --git a/test/components/FileUpload.spec.ts b/test/components/FileUpload.spec.ts new file mode 100644 index 0000000000..5bd758f9c0 --- /dev/null +++ b/test/components/FileUpload.spec.ts @@ -0,0 +1,255 @@ +import { describe, it, expect, test } from 'vitest' +import { mount } from '@vue/test-utils' +import FileUpload, { type FileUploadProps, type FileUploadSlots } from '../../src/runtime/components/FileUpload.vue' +import theme from '#build/ui/file-upload' + +import { renderForm } from '../utils/form' +import type { FormInputEvents } from '~/src/module' + +async function setFilesOnInput(input: any, files: File[]) { + // Create a DataTransfer and add files + const data = new DataTransfer() + files.forEach(file => data.items.add(file)) + // Set files property via Object.defineProperty + Object.defineProperty(input.element, 'files', { + value: data.files, + writable: false, + configurable: true + }) + // Trigger change event + await input.trigger('change') +} + +describe('FileUpload', () => { + const sizes = Object.keys(theme.variants.size) as any + + it.each([ + // Props + ['with id', { props: { id: 'id' } }], + ['with name', { props: { name: 'name' } }], + ['with multiple', { props: { multiple: true } }], + ['with accept', { props: { accept: 'png,jpg' } }], + ['with disabled', { props: { disabled: true } }], + ['with required', { props: { required: true } }], + ['with label', { props: { label: 'Label' } }], + ['with placeholder', { props: { placeholder: 'Placeholder' } }], + ...sizes.map((size: string) => [`with size ${size}`, { props: { size } }]) + ])('renders %s correctly', async (nameOrHtml: string, options: { props?: FileUploadProps, slots?: Partial }) => { + const wrapper = mount(FileUpload, { + ...options + }) + expect(wrapper.html()).toMatchSnapshot() + }) + + describe('emits', () => { + test('update:modelValue event', async () => { + const wrapper = mount(FileUpload, { + props: { + modelValue: [] + } + }) + const input = wrapper.find('input[type="file"]') + const file1 = new File(['foo'], 'file1.txt', { type: 'text/plain' }) + const file2 = new File(['bar'], 'file2.txt', { type: 'text/plain' }) + await setFilesOnInput(input, [file1, file2]) + expect(wrapper.emitted('update:modelValue')).toBeTruthy() + }) + test('change event', async () => { + const wrapper = mount(FileUpload, { + props: { + modelValue: [] + } + }) + const input = wrapper.find('input[type="file"]') + const file1 = new File(['foo'], 'file1.txt', { type: 'text/plain' }) + const file2 = new File(['bar'], 'file2.txt', { type: 'text/plain' }) + await setFilesOnInput(input, [file1, file2]) + expect(wrapper.emitted('change')).toBeTruthy() + }) + test('dragover event', async () => { + const wrapper = mount(FileUpload, { + props: { + modelValue: [] + } + }) + const input = wrapper.find('input[type="file"]') + await input.trigger('dragover') + expect(wrapper.emitted('dragover')).toBeTruthy() + } + ) + test('dragleave event', async () => { + const wrapper = mount(FileUpload, { + props: { + modelValue: [] + } + }) + const input = wrapper.find('input[type="file"]') + await input.trigger('dragleave') + expect(wrapper.emitted('dragleave')).toBeTruthy() + } + ) + test('drop event', async () => { + const wrapper = mount(FileUpload, { + props: { + modelValue: [] + } + }) + const input = wrapper.find('input[type="file"]') + await input.trigger('drop') + expect(wrapper.emitted('drop')).toBeTruthy() + } + ) + }) + + describe('form integration', async () => { + async function createForm(validateOn?: FormInputEvents[], eagerValidation?: boolean) { + const wrapper = await renderForm({ + props: { + validateOn, + validateOnInputDelay: 0, + async validate(state: any) { + // state.value is expected to be an array of File(s) + const files: File[] = Array.isArray(state.value) ? state.value : [] + if (!files.length || files.some(f => f.name !== 'valid')) { + return [{ name: 'value', message: 'Error message' }] + } + return [] + } + }, + slotTemplate: ` + + + + `, + slotVars: { + eagerValidation + } + }) + const input = wrapper.find('input[type="file"]') + return { + wrapper, + input + } + } + + test('validate on blur works', async () => { + const { input, wrapper } = await createForm(['blur']) + await setFilesOnInput(input, [new File(['foo'], 'invalid.txt', { type: 'text/plain' })]) + await input.trigger('blur') + expect(wrapper.text()).toContain('Error message') + + await setFilesOnInput(input, [new File(['foo'], 'valid', { type: 'text/plain' })]) + await input.trigger('blur') + expect(wrapper.text()).not.toContain('Error message') + }) + + test('validate on change works', async () => { + const { input, wrapper } = await createForm(['change']) + await setFilesOnInput(input, [new File(['foo'], 'invalid.txt', { type: 'text/plain' })]) + await input.trigger('change') + expect(wrapper.text()).toContain('Error message') + + await setFilesOnInput(input, [new File(['foo'], 'valid', { type: 'text/plain' })]) + await input.trigger('change') + expect(wrapper.text()).not.toContain('Error message') + }) + + test('validate on input works', async () => { + const { input, wrapper } = await createForm(['input'], true) + await setFilesOnInput(input, [new File(['foo'], 'invalid.txt', { type: 'text/plain' })]) + expect(wrapper.text()).toContain('Error message') + + await setFilesOnInput(input, [new File(['foo'], 'valid', { type: 'text/plain' })]) + expect(wrapper.text()).not.toContain('Error message') + }) + + test('validate on input without eager validation works', async () => { + const { input, wrapper } = await createForm(['input']) + + await setFilesOnInput(input, [new File(['foo'], 'invalid.txt', { type: 'text/plain' })]) + expect(wrapper.text()).not.toContain('Error message') + + await input.trigger('blur') + + await setFilesOnInput(input, [new File(['foo'], 'invalid.txt', { type: 'text/plain' })]) + expect(wrapper.text()).toContain('Error message') + + await setFilesOnInput(input, [new File(['foo'], 'valid', { type: 'text/plain' })]) + expect(wrapper.text()).not.toContain('Error message') + }) + }) + + describe('FileUpload advanced behaviors', () => { + test('shows image preview and removes it when file is removed', async () => { + const file = new File(['dummy'], 'test.png', { type: 'image/png', lastModified: 1 }) + const wrapper = mount(FileUpload, { + props: { modelValue: [file] } + }) + await wrapper.vm.$nextTick() + + expect(wrapper.html()).toContain('test.png') + const removeIcon = wrapper.find('#remove-file') + expect(removeIcon).toBeDefined() + await removeIcon!.trigger('click') + + // Check that update:modelValue was emitted with an empty array + const emits = wrapper.emitted('update:modelValue') + expect(emits).toBeTruthy() + expect(emits![emits!.length - 1][0]).toEqual([]) + }) + + test('does not allow interaction when disabled', async () => { + const wrapper = mount(FileUpload, { + props: { disabled: true } + }) + const input = wrapper.find('input[type="file"]') + expect(input.attributes('disabled')).toBeDefined() + await wrapper.find('div[role="presentation"],div').trigger('click') + expect(wrapper.emitted('change')).toBeFalsy() + }) + + test('handles multiple file uploads', async () => { + const file1 = new File(['foo'], 'foo.png', { type: 'image/png', lastModified: 1 }) + const file2 = new File(['bar'], 'bar.jpg', { type: 'image/jpeg', lastModified: 2 }) + const wrapper = mount(FileUpload, { + props: { multiple: true, modelValue: [] } + }) + const input = wrapper.find('input[type="file"]') + await setFilesOnInput(input, [file1, file2]) + expect(wrapper.emitted('update:modelValue')).toBeTruthy() + const lastEmitted = wrapper.emitted('update:modelValue')?.pop()?.[0] + expect(lastEmitted).toHaveLength(2) + }) + + test('accept prop restricts file types', async () => { + const file = new File(['foo'], 'foo.txt', { type: 'text/plain' }) + const wrapper = mount(FileUpload, { + props: { accept: 'image/*', modelValue: [] } + }) + const input = wrapper.find('input[type="file"]') + await setFilesOnInput(input, [file]) + expect(input.attributes('accept')).toBe('image/*') + }) + + test('renders custom empty slot', () => { + const wrapper = mount(FileUpload, { + slots: { + empty: '
    Custom Empty
    ' + } + }) + expect(wrapper.html()).toContain('Custom Empty') + }) + + test('renders custom file slot', async () => { + const file = new File(['foo'], 'foo.png', { type: 'image/png', lastModified: 1 }) + const wrapper = mount(FileUpload, { + props: { modelValue: [file] }, + slots: { + file: '
    {{file.name}}
    ' + } + }) + expect(wrapper.html()).toContain('custom-file') + expect(wrapper.html()).toContain('foo.png') + }) + }) +}) diff --git a/test/components/__snapshots__/FileUpload-vue.spec.ts.snap b/test/components/__snapshots__/FileUpload-vue.spec.ts.snap new file mode 100644 index 0000000000..2a31d32479 --- /dev/null +++ b/test/components/__snapshots__/FileUpload-vue.spec.ts.snap @@ -0,0 +1,105 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`FileUpload > renders with accept correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with disabled correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with id correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with label correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with multiple correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with name correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with placeholder correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with required correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with size lg correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with size md correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with size sm correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with size xl correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with size xs correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; diff --git a/test/components/__snapshots__/FileUpload.spec.ts.snap b/test/components/__snapshots__/FileUpload.spec.ts.snap new file mode 100644 index 0000000000..e482147914 --- /dev/null +++ b/test/components/__snapshots__/FileUpload.spec.ts.snap @@ -0,0 +1,105 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`FileUpload > renders with accept correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with disabled correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with id correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with label correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with multiple correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with name correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with placeholder correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with required correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with size lg correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with size md correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with size sm correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with size xl correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; + +exports[`FileUpload > renders with size xs correctly 1`] = ` +"
    +
    +
    Browse or drop files here
    +
    +
    " +`; diff --git a/test/utils/form.ts b/test/utils/form.ts index 1a8f3b6f3b..5f8d009510 100644 --- a/test/utils/form.ts +++ b/test/utils/form.ts @@ -13,6 +13,7 @@ import { USelectMenu, UInputMenu, UInputNumber, + UFileUpload, USwitch, USlider, UPinInput, @@ -44,6 +45,7 @@ export async function renderForm(options: { UForm, UInput, URadioGroup, + UFileUpload, UTextarea, UCheckbox, USelect, From f6d139d8af62d87e3040e214f099dd979c9b877d Mon Sep 17 00:00:00 2001 From: Valentin Chmara Date: Thu, 15 May 2025 11:58:59 +0200 Subject: [PATCH 10/31] docs(FileUpload): minimal doc --- docs/content/3.components/file-upload.md | 52 ++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 docs/content/3.components/file-upload.md diff --git a/docs/content/3.components/file-upload.md b/docs/content/3.components/file-upload.md new file mode 100644 index 0000000000..7036c08315 --- /dev/null +++ b/docs/content/3.components/file-upload.md @@ -0,0 +1,52 @@ +--- +title: FileUpload +description: A drag-and-drop file upload component. +category: form +links: + - label: GitHub + icon: i-simple-icons-github + to: https://github.com/nuxt/ui/tree/v3/src/runtime/components/FileUpload.vue +navigation.badge: New +--- + +## Usage + +Use the `v-model` directive to control the value of the Input. + +::component-code +--- +ignore: + - modelValue +external: + - modelValue +props: + modelValue: '' +--- +:: + + +## API + +### Props + +:component-props + +### Slots + +:component-slots + +### Emits + +:component-emits + +### Expose + +When accessing the component via a template ref, you can use the following: + +| Name | Type | +| ---- | ---- | +| `fileInputRef`{lang="ts-type"} | `Ref`{lang="ts-type"} | + +## Theme + +:component-theme From a6ced1e4d8a7c6172717ecc982ccf4962667d8a4 Mon Sep 17 00:00:00 2001 From: Valentin Chmara Date: Wed, 21 May 2025 23:08:10 +0200 Subject: [PATCH 11/31] fix: dragging ui depends also on disabled --- src/runtime/components/FileUpload.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/components/FileUpload.vue b/src/runtime/components/FileUpload.vue index 02962792d7..d1c476963a 100644 --- a/src/runtime/components/FileUpload.vue +++ b/src/runtime/components/FileUpload.vue @@ -206,7 +206,7 @@ defineExpose({ fileInputRef }) :class="ui.base({ class: [ props.ui?.base, - dragging && ui.dragging({ class: props.ui?.dragging }), + dragging && !disabled && ui.dragging({ class: props.ui?.dragging }), !file?.length && 'cursor-pointer', disabled && 'cursor-not-allowed' ] From 98ae6cfca48c3488fa7d273f3d70551458b93c43 Mon Sep 17 00:00:00 2001 From: Valentin Chmara Date: Thu, 22 May 2025 00:25:42 +0200 Subject: [PATCH 12/31] fix: avoid firing dragleave event because of nested elements --- src/runtime/components/FileUpload.vue | 124 ++++++++++++++------------ src/theme/file-upload.ts | 2 +- 2 files changed, 68 insertions(+), 58 deletions(-) diff --git a/src/runtime/components/FileUpload.vue b/src/runtime/components/FileUpload.vue index d1c476963a..b70f19f735 100644 --- a/src/runtime/components/FileUpload.vue +++ b/src/runtime/components/FileUpload.vue @@ -214,66 +214,76 @@ defineExpose({ fileInputRef }) " tabindex="0" @drop="onDrop" - @dragover.prevent="onDragOver" - @dragleave="onDragLeave" + @dragover="onDragOver" + @click="!disabled && fileInputRef?.click()" > - - -
    - - - Browse or drop files here - -
    + +
    +
    + + +
    + + + Browse or drop files here + +
    - -
      -
    • - -
      - -
      -

      - {{ f.name }} -

      -

      - {{ (f.size / 1024 / 1024).toFixed(2) }} MB -

      + +
        +
      • + +
        + +
        +

        + {{ f.name }} +

        +

        + {{ (f.size / 1024 / 1024).toFixed(2) }} MB +

        +
        -
      -
      - -
      - -
    • -
    +
    + +
    + + + +
    diff --git a/src/theme/file-upload.ts b/src/theme/file-upload.ts index 6d1ab3723a..b18061de4b 100644 --- a/src/theme/file-upload.ts +++ b/src/theme/file-upload.ts @@ -5,7 +5,7 @@ export default { dragging: 'bg-accented/20', empty: 'flex flex-col items-center justify-center gap-2', label: 'font-semibold text-highlighted text-center px-2 line-clamp-1', - uploadIcon: 'shrink-0', + uploadIcon: 'shrink-0 pointer-events-none', files: 'divide-y divide-default', file: 'text-default flex justify-between items-center gap-2 p-2', fileLabel: 'text-default font-semibold line-clamp-1', From d2f1776ca53269a4b5eed28e8d9ef84e850ae6a5 Mon Sep 17 00:00:00 2001 From: Valentin Chmara Date: Thu, 22 May 2025 00:29:22 +0200 Subject: [PATCH 13/31] test: update FileUpload snapshot --- .../__snapshots__/FileUpload.spec.ts.snap | 104 +++++++++++++----- 1 file changed, 78 insertions(+), 26 deletions(-) diff --git a/test/components/__snapshots__/FileUpload.spec.ts.snap b/test/components/__snapshots__/FileUpload.spec.ts.snap index e482147914..5eba16491b 100644 --- a/test/components/__snapshots__/FileUpload.spec.ts.snap +++ b/test/components/__snapshots__/FileUpload.spec.ts.snap @@ -2,104 +2,156 @@ exports[`FileUpload > renders with accept correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Browse or drop files here
    +
    " `; exports[`FileUpload > renders with disabled correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Browse or drop files here
    +
    " `; exports[`FileUpload > renders with id correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Browse or drop files here
    +
    " `; exports[`FileUpload > renders with label correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Browse or drop files here
    +
    " `; exports[`FileUpload > renders with multiple correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Browse or drop files here
    +
    " `; exports[`FileUpload > renders with name correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Browse or drop files here
    +
    " `; exports[`FileUpload > renders with placeholder correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Browse or drop files here
    +
    " `; exports[`FileUpload > renders with required correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Browse or drop files here
    +
    " `; exports[`FileUpload > renders with size lg correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Browse or drop files here
    +
    " `; exports[`FileUpload > renders with size md correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Browse or drop files here
    +
    " `; exports[`FileUpload > renders with size sm correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Browse or drop files here
    +
    " `; exports[`FileUpload > renders with size xl correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Browse or drop files here
    +
    " `; exports[`FileUpload > renders with size xs correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Browse or drop files here
    +
    " `; From 2a28a11eb9c5d15aca6bfc5f39f864716d8bfd0d Mon Sep 17 00:00:00 2001 From: Valentin Chmara Date: Thu, 22 May 2025 00:36:57 +0200 Subject: [PATCH 14/31] test: udpate vue snapshot --- .../__snapshots__/FileUpload-vue.spec.ts.snap | 104 +++++++++++++----- 1 file changed, 78 insertions(+), 26 deletions(-) diff --git a/test/components/__snapshots__/FileUpload-vue.spec.ts.snap b/test/components/__snapshots__/FileUpload-vue.spec.ts.snap index 2a31d32479..1c43635684 100644 --- a/test/components/__snapshots__/FileUpload-vue.spec.ts.snap +++ b/test/components/__snapshots__/FileUpload-vue.spec.ts.snap @@ -2,104 +2,156 @@ exports[`FileUpload > renders with accept correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    fileInput.empty
    +
    " `; exports[`FileUpload > renders with disabled correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    fileInput.empty
    +
    " `; exports[`FileUpload > renders with id correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    fileInput.empty
    +
    " `; exports[`FileUpload > renders with label correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    Label
    +
    " `; exports[`FileUpload > renders with multiple correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    fileInput.empty
    +
    " `; exports[`FileUpload > renders with name correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    fileInput.empty
    +
    " `; exports[`FileUpload > renders with placeholder correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    fileInput.empty
    +
    " `; exports[`FileUpload > renders with required correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    fileInput.empty
    +
    " `; exports[`FileUpload > renders with size lg correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    fileInput.empty
    +
    " `; exports[`FileUpload > renders with size md correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    fileInput.empty
    +
    " `; exports[`FileUpload > renders with size sm correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    fileInput.empty
    +
    " `; exports[`FileUpload > renders with size xl correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    fileInput.empty
    +
    " `; exports[`FileUpload > renders with size xs correctly 1`] = ` "
    -
    -
    Browse or drop files here
    +
    + +
    +
    +
    fileInput.empty
    +
    " `; From 43a3311d0b701156068e0c91175a6625c0eda423 Mon Sep 17 00:00:00 2001 From: Valentin Chmara Date: Thu, 22 May 2025 00:48:27 +0200 Subject: [PATCH 15/31] feat: add label and default translations --- src/runtime/components/FileUpload.vue | 5 +++- src/runtime/locale/ar.ts | 3 +++ src/runtime/locale/az.ts | 3 +++ src/runtime/locale/bg.ts | 3 +++ src/runtime/locale/bn.ts | 3 +++ src/runtime/locale/ca.ts | 3 +++ src/runtime/locale/ckb.ts | 3 +++ src/runtime/locale/cs.ts | 3 +++ src/runtime/locale/da.ts | 3 +++ src/runtime/locale/de.ts | 3 +++ src/runtime/locale/el.ts | 3 +++ src/runtime/locale/en.ts | 3 +++ src/runtime/locale/es.ts | 3 +++ src/runtime/locale/et.ts | 3 +++ src/runtime/locale/fa_ir.ts | 3 +++ src/runtime/locale/fi.ts | 3 +++ src/runtime/locale/fr.ts | 3 +++ src/runtime/locale/he.ts | 3 +++ src/runtime/locale/hi.ts | 3 +++ src/runtime/locale/hu.ts | 3 +++ src/runtime/locale/hy.ts | 3 +++ src/runtime/locale/id.ts | 3 +++ src/runtime/locale/it.ts | 3 +++ src/runtime/locale/ja.ts | 3 +++ src/runtime/locale/kk.ts | 3 +++ src/runtime/locale/km.ts | 3 +++ src/runtime/locale/ko.ts | 3 +++ src/runtime/locale/lt.ts | 3 +++ src/runtime/locale/ms.ts | 3 +++ src/runtime/locale/nb_no.ts | 3 +++ src/runtime/locale/nl.ts | 3 +++ src/runtime/locale/pl.ts | 3 +++ src/runtime/locale/pt.ts | 3 +++ src/runtime/locale/pt_br.ts | 3 +++ src/runtime/locale/ro.ts | 3 +++ src/runtime/locale/ru.ts | 3 +++ src/runtime/locale/sk.ts | 3 +++ src/runtime/locale/sl.ts | 3 +++ src/runtime/locale/sv.ts | 3 +++ src/runtime/locale/th.ts | 3 +++ src/runtime/locale/tj.ts | 3 +++ src/runtime/locale/tr.ts | 3 +++ src/runtime/locale/ug_cn.ts | 3 +++ src/runtime/locale/uk.ts | 3 +++ src/runtime/locale/ur.ts | 3 +++ src/runtime/locale/uz.ts | 3 +++ src/runtime/locale/vi.ts | 3 +++ src/runtime/locale/zh_cn.ts | 3 +++ src/runtime/locale/zh_tw.ts | 3 +++ src/runtime/types/locale.ts | 3 +++ .../__snapshots__/FileUpload-vue.spec.ts.snap | 24 ++++++++--------- .../__snapshots__/FileUpload.spec.ts.snap | 26 +++++++++---------- 52 files changed, 176 insertions(+), 26 deletions(-) diff --git a/src/runtime/components/FileUpload.vue b/src/runtime/components/FileUpload.vue index b70f19f735..04551a0863 100644 --- a/src/runtime/components/FileUpload.vue +++ b/src/runtime/components/FileUpload.vue @@ -61,11 +61,14 @@ export interface FileUploadSlots { import { ref, computed, watch, onMounted, onUnmounted } from 'vue' import { Primitive } from 'reka-ui' import { useAppConfig } from '#imports' +import { useLocale } from '../composables/useLocale' import { useFormField } from '../composables/useFormField' import { tv } from '../utils/tv' import UIcon from './Icon.vue' import UAvatar from './Avatar.vue' +const { t } = useLocale() + defineOptions({ inheritAttrs: false }) const props = withDefaults(defineProps(), { @@ -249,7 +252,7 @@ defineExpose({ fileInputRef }) :class="ui.label({ class: props.ui?.label })" - > Browse or drop files here + > {{ label || t('fileUpload.empty') }}
    diff --git a/src/runtime/locale/ar.ts b/src/runtime/locale/ar.ts index 0c7de046b9..64adad7b4c 100644 --- a/src/runtime/locale/ar.ts +++ b/src/runtime/locale/ar.ts @@ -21,6 +21,9 @@ export default defineLocale({ increment: 'زيادة', decrement: 'تقليل' }, + fileUpload: { + empty: 'استعرض أو اسحب الملفات هنا' + }, commandPalette: { placeholder: 'اكتب أمرًا أو ابحث...', noMatch: 'لا توجد نتائج مطابقة', diff --git a/src/runtime/locale/az.ts b/src/runtime/locale/az.ts index baeca3ba25..caa99da448 100644 --- a/src/runtime/locale/az.ts +++ b/src/runtime/locale/az.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Artır', decrement: 'Azalt' }, + fileUpload: { + empty: 'Faylları buraya sürükləyin və ya seçin' + }, commandPalette: { placeholder: 'Əmr daxil edin və ya axtarın...', noMatch: 'Uyğun məlumat tapılmadı', diff --git a/src/runtime/locale/bg.ts b/src/runtime/locale/bg.ts index 9282ed294b..556dd15ac9 100644 --- a/src/runtime/locale/bg.ts +++ b/src/runtime/locale/bg.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Увеличаване', decrement: 'Намаляване' }, + fileUpload: { + empty: 'Прегледайте или пуснете файлове тук' + }, commandPalette: { placeholder: 'Въведете команда или потърсете...', noMatch: 'Няма съвпадение на данни', diff --git a/src/runtime/locale/bn.ts b/src/runtime/locale/bn.ts index a4abeecdf9..72ccff8587 100644 --- a/src/runtime/locale/bn.ts +++ b/src/runtime/locale/bn.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'বৃদ্ধি করুন', decrement: 'হ্রাস করুন' }, + fileUpload: { + empty: 'ফাইল ব্রাউজ করুন বা এখানে ড্রপ করুন' + }, commandPalette: { placeholder: 'কমান্ড টাইপ করুন বা অনুসন্ধান করুন...', noMatch: 'কোন মিল পাওয়া যায়নি', diff --git a/src/runtime/locale/ca.ts b/src/runtime/locale/ca.ts index 7660bca021..08d3b048aa 100644 --- a/src/runtime/locale/ca.ts +++ b/src/runtime/locale/ca.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Incrementar', decrement: 'Decrementar' }, + fileUpload: { + empty: 'Explora o arrossega fitxers aquí' + }, commandPalette: { placeholder: 'Escriu una ordre o cerca...', noMatch: 'No hi ha dades coincidents', diff --git a/src/runtime/locale/ckb.ts b/src/runtime/locale/ckb.ts index d4ade9688d..757f507d20 100644 --- a/src/runtime/locale/ckb.ts +++ b/src/runtime/locale/ckb.ts @@ -21,6 +21,9 @@ export default defineLocale({ increment: 'زیادکردن', decrement: 'کەمکردنەوە' }, + fileUpload: { + empty: 'فایلەکان بگەڕێنەوە یان لێرەوە بەرز بکەوە' + }, commandPalette: { placeholder: 'فەرمانێک بنووسە یان بگەڕێ...', noMatch: 'هیچ ئەنجامێک نەدۆزرایەوە', diff --git a/src/runtime/locale/cs.ts b/src/runtime/locale/cs.ts index 8a911d0e28..bd262e70ce 100644 --- a/src/runtime/locale/cs.ts +++ b/src/runtime/locale/cs.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Zvýšit', decrement: 'Snížit' }, + fileUpload: { + empty: 'Procházet nebo přetáhnout soubory sem' + }, commandPalette: { placeholder: 'Zadejte příkaz nebo hledejte...', noMatch: 'Žádná shoda', diff --git a/src/runtime/locale/da.ts b/src/runtime/locale/da.ts index 7a67a020c9..35da82bf0d 100644 --- a/src/runtime/locale/da.ts +++ b/src/runtime/locale/da.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Øg', decrement: 'Reducer' }, + fileUpload: { + empty: 'Gennemse eller træk filer her' + }, commandPalette: { placeholder: 'Skriv en kommando eller søg...', noMatch: 'Ingen matchende data', diff --git a/src/runtime/locale/de.ts b/src/runtime/locale/de.ts index 4664e6fca8..d71757bf59 100644 --- a/src/runtime/locale/de.ts +++ b/src/runtime/locale/de.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Erhöhen', decrement: 'Verringern' }, + fileUpload: { + empty: 'Dateien durchsuchen oder hier ablegen' + }, commandPalette: { placeholder: 'Geben Sie einen Befehl ein oder suchen Sie...', noMatch: 'Nichts gefunden', diff --git a/src/runtime/locale/el.ts b/src/runtime/locale/el.ts index 8cc526abf2..7ba917e840 100644 --- a/src/runtime/locale/el.ts +++ b/src/runtime/locale/el.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Αύξηση', decrement: 'Μείωση' }, + fileUpload: { + empty: 'Αναζητήστε ή σύρετε αρχεία εδώ' + }, commandPalette: { placeholder: 'Πληκτρολογήστε μια εντολή ή αναζητήστε...', noMatch: 'Δεν βρέθηκαν δεδομένα', diff --git a/src/runtime/locale/en.ts b/src/runtime/locale/en.ts index dc35884cf1..2eaaaa3418 100644 --- a/src/runtime/locale/en.ts +++ b/src/runtime/locale/en.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Increment', decrement: 'Decrement' }, + fileUpload: { + empty: 'Browse or drop files here' + }, commandPalette: { placeholder: 'Type a command or search...', noMatch: 'No matching data', diff --git a/src/runtime/locale/es.ts b/src/runtime/locale/es.ts index 31f8ddb6e9..d5f29dd101 100644 --- a/src/runtime/locale/es.ts +++ b/src/runtime/locale/es.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Incremento', decrement: 'Decremento' }, + fileUpload: { + empty: 'Explorar o arrastrar archivos aquí' + }, commandPalette: { placeholder: 'Escribe un comando o busca...', noMatch: 'No hay datos coincidentes', diff --git a/src/runtime/locale/et.ts b/src/runtime/locale/et.ts index 7fd252177d..e108262d89 100644 --- a/src/runtime/locale/et.ts +++ b/src/runtime/locale/et.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Suurenda', decrement: 'Vähenda' }, + fileUpload: { + empty: 'Sirvi või lohista failid siia' + }, commandPalette: { placeholder: 'Sisesta käsk või otsi...', noMatch: 'Pole vastavaid andmeid', diff --git a/src/runtime/locale/fa_ir.ts b/src/runtime/locale/fa_ir.ts index e932640793..bdc4d3885a 100644 --- a/src/runtime/locale/fa_ir.ts +++ b/src/runtime/locale/fa_ir.ts @@ -21,6 +21,9 @@ export default defineLocale({ increment: 'افزایش', decrement: 'کاهش' }, + fileUpload: { + empty: 'فایل‌ها را مرور کنید یا اینجا بکشید و رها کنید' + }, commandPalette: { placeholder: 'یک دستور وارد کنید یا جستجو کنید...', noMatch: 'داده‌ای یافت نشد', diff --git a/src/runtime/locale/fi.ts b/src/runtime/locale/fi.ts index 6588424d30..f4b7afc077 100644 --- a/src/runtime/locale/fi.ts +++ b/src/runtime/locale/fi.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Kasvata', decrement: 'Vähennä' }, + fileUpload: { + empty: 'Selaa tai vedä tiedostoja tähän' + }, commandPalette: { placeholder: 'Kirjoita komento tai hae...', noMatch: 'Ei vastaavia tietoja', diff --git a/src/runtime/locale/fr.ts b/src/runtime/locale/fr.ts index e823efc3ad..af0d09cf67 100644 --- a/src/runtime/locale/fr.ts +++ b/src/runtime/locale/fr.ts @@ -16,6 +16,9 @@ export default defineLocale({ prevMonth: 'Mois précédent', nextMonth: 'Mois suivant' }, + fileUpload: { + empty: 'Parcourir ou déposer des fichiers ici' + }, inputNumber: { increment: 'Augmenter', decrement: 'Diminuer' diff --git a/src/runtime/locale/he.ts b/src/runtime/locale/he.ts index dc305dcde8..16b76fd67c 100644 --- a/src/runtime/locale/he.ts +++ b/src/runtime/locale/he.ts @@ -21,6 +21,9 @@ export default defineLocale({ increment: 'הוסף', decrement: 'הפחת' }, + fileUpload: { + empty: 'עיין בקבצים או גרור ושחרר כאן' + }, commandPalette: { placeholder: 'הקלד פקודה...', noMatch: 'לא נמצאה התאמה', diff --git a/src/runtime/locale/hi.ts b/src/runtime/locale/hi.ts index 501cde1428..3b220a9508 100644 --- a/src/runtime/locale/hi.ts +++ b/src/runtime/locale/hi.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'बढ़ाना', decrement: 'घटाना' }, + fileUpload: { + empty: 'फाइल ब्राउज़ करें या यहाँ ड्रॉप करें' + }, commandPalette: { placeholder: 'एक आदेश या खोज टाइप करें...', noMatch: 'कोई मेल खाता डेटा नहीं', diff --git a/src/runtime/locale/hu.ts b/src/runtime/locale/hu.ts index d7e05fc57c..43599823b0 100644 --- a/src/runtime/locale/hu.ts +++ b/src/runtime/locale/hu.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Növel', decrement: 'Csökkent' }, + fileUpload: { + empty: 'Fájlok böngészése vagy ide húzása' + }, commandPalette: { placeholder: 'Írjon be egy parancsot vagy keressen...', noMatch: 'Nincs találat', diff --git a/src/runtime/locale/hy.ts b/src/runtime/locale/hy.ts index 591d1f1f6f..717157e616 100644 --- a/src/runtime/locale/hy.ts +++ b/src/runtime/locale/hy.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Ավելացնել', decrement: 'Պակասեցնել' }, + fileUpload: { + empty: 'Փնտրել ֆայլեր կամ քաշել այստեղ' + }, commandPalette: { placeholder: 'Մուտքագրեք հրաման կամ որոնեք...', noMatch: 'Համընկնումներ չեն գտնվել', diff --git a/src/runtime/locale/id.ts b/src/runtime/locale/id.ts index f9a212d201..cfc9045a8f 100644 --- a/src/runtime/locale/id.ts +++ b/src/runtime/locale/id.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Tambah', decrement: 'Kurangi' }, + fileUpload: { + empty: 'Telusuri file atau seret ke sini' + }, commandPalette: { placeholder: 'Ketik perintah atau cari...', noMatch: 'Tidak ada data yang cocok', diff --git a/src/runtime/locale/it.ts b/src/runtime/locale/it.ts index afc2ae65a9..872605a18a 100644 --- a/src/runtime/locale/it.ts +++ b/src/runtime/locale/it.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Aumenta', decrement: 'Diminuisci' }, + fileUpload: { + empty: 'Sfoglia o trascina i file qui' + }, commandPalette: { placeholder: 'Digita un comando o cerca...', noMatch: 'Nessun dato corrispondente', diff --git a/src/runtime/locale/ja.ts b/src/runtime/locale/ja.ts index 771674ead6..b3bccf563d 100644 --- a/src/runtime/locale/ja.ts +++ b/src/runtime/locale/ja.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: '増やす', decrement: '減らす' }, + fileUpload: { + empty: 'ファイルを参照するか、ここにドロップしてください' + }, commandPalette: { placeholder: 'コマンドを入力するか検索...', noMatch: '一致するデータがありません', diff --git a/src/runtime/locale/kk.ts b/src/runtime/locale/kk.ts index fd1dcbd793..6ac5000fe9 100644 --- a/src/runtime/locale/kk.ts +++ b/src/runtime/locale/kk.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Арттыру', decrement: 'Азайту' }, + fileUpload: { + empty: 'Файлдарды шолып, немесе мұнда тастау' + }, commandPalette: { placeholder: 'Команда енгізіңіз немесе іздеңіз...', noMatch: 'Сәйкес келетін деректер жоқ', diff --git a/src/runtime/locale/km.ts b/src/runtime/locale/km.ts index 6810ba46d7..fc08c59a9a 100644 --- a/src/runtime/locale/km.ts +++ b/src/runtime/locale/km.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'បង្កើន', decrement: 'បន្ថយ' }, + fileUpload: { + empty: 'ស្វែងរកឯកសារឬទាញយកទីនេះ' + }, commandPalette: { placeholder: 'វាយពាក្យបញ្ជា ឬស្វែងរក...', noMatch: 'មិនមានទិន្នន័យដែលត្រូវគ្នាទេ', diff --git a/src/runtime/locale/ko.ts b/src/runtime/locale/ko.ts index 54b872d2d3..ce8d9f699f 100644 --- a/src/runtime/locale/ko.ts +++ b/src/runtime/locale/ko.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: '증가', decrement: '감소' }, + fileUpload: { + empty: '파일을 선택하거나 여기에 드롭하세요' + }, commandPalette: { placeholder: '명령을 입력하거나 검색...', noMatch: '일치하는 데이터가 없습니다.', diff --git a/src/runtime/locale/lt.ts b/src/runtime/locale/lt.ts index 3be6918a02..86c23b9da3 100644 --- a/src/runtime/locale/lt.ts +++ b/src/runtime/locale/lt.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Padidinti', decrement: 'Sumažinti' }, + fileUpload: { + empty: 'Naršyti failus arba vilkti čia' + }, commandPalette: { placeholder: 'Įveskite komandą arba ieškokite...', noMatch: 'Nėra atitinkančių duomenų', diff --git a/src/runtime/locale/ms.ts b/src/runtime/locale/ms.ts index 668ff3839f..91722f3c87 100644 --- a/src/runtime/locale/ms.ts +++ b/src/runtime/locale/ms.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Naikkan', decrement: 'Kurangkan' }, + fileUpload: { + empty: 'Semak fail atau seret ke sini' + }, commandPalette: { placeholder: 'Taip arahan atau carian...', noMatch: 'Tiada data yang sepadan', diff --git a/src/runtime/locale/nb_no.ts b/src/runtime/locale/nb_no.ts index 634b1cf050..6fe71f91ea 100644 --- a/src/runtime/locale/nb_no.ts +++ b/src/runtime/locale/nb_no.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Øk', decrement: 'Reduser' }, + fileUpload: { + empty: 'Bla gjennom filer eller slipp dem her' + }, commandPalette: { placeholder: 'Skriv inn en kommando eller søk...', noMatch: 'Ingen samsvarende data', diff --git a/src/runtime/locale/nl.ts b/src/runtime/locale/nl.ts index 6f116e829b..45da11ac47 100644 --- a/src/runtime/locale/nl.ts +++ b/src/runtime/locale/nl.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Verhogen', decrement: 'Verlagen' }, + fileUpload: { + empty: 'Blader door bestanden of sleep ze hierheen' + }, commandPalette: { placeholder: 'Typ een commando of zoek...', noMatch: 'Geen overeenkomende gegevens', diff --git a/src/runtime/locale/pl.ts b/src/runtime/locale/pl.ts index 2fec21365d..87b5805d63 100644 --- a/src/runtime/locale/pl.ts +++ b/src/runtime/locale/pl.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Zwiększ', decrement: 'Zmniejsz' }, + fileUpload: { + empty: 'Przeglądaj pliki lub przeciągnij je tutaj' + }, commandPalette: { placeholder: 'Wpisz polecenie lub wyszukaj...', noMatch: 'Brak pasujących danych', diff --git a/src/runtime/locale/pt.ts b/src/runtime/locale/pt.ts index fb5e72f3d7..cdd169a39d 100644 --- a/src/runtime/locale/pt.ts +++ b/src/runtime/locale/pt.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Incrementar', decrement: 'Decrementar' }, + fileUpload: { + empty: 'Navegue ou arraste arquivos aqui' + }, commandPalette: { placeholder: 'Digite um comando ou pesquise...', noMatch: 'Nenhum dado correspondente', diff --git a/src/runtime/locale/pt_br.ts b/src/runtime/locale/pt_br.ts index 052bae6a5e..fcb7348c3d 100644 --- a/src/runtime/locale/pt_br.ts +++ b/src/runtime/locale/pt_br.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Incrementar', decrement: 'Decrementar' }, + fileUpload: { + empty: 'Navegue ou arraste arquivos aqui' + }, commandPalette: { placeholder: 'Digite um comando ou pesquise...', noMatch: 'Nenhum dado correspondente', diff --git a/src/runtime/locale/ro.ts b/src/runtime/locale/ro.ts index dfd9b6a011..4d126c5d3e 100644 --- a/src/runtime/locale/ro.ts +++ b/src/runtime/locale/ro.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Crește', decrement: 'Scade' }, + fileUpload: { + empty: 'Răsfoiește sau trage fișiere aici' + }, commandPalette: { placeholder: 'Tastează o comandă sau caută...', noMatch: 'Nu există date corespunzătoare', diff --git a/src/runtime/locale/ru.ts b/src/runtime/locale/ru.ts index 2df96842ea..e5c9001262 100644 --- a/src/runtime/locale/ru.ts +++ b/src/runtime/locale/ru.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Увеличить', decrement: 'Уменьшить' }, + fileUpload: { + empty: 'Выберите файл или перетащите его сюда' + }, commandPalette: { placeholder: 'Введите команду или выполните поиск...', noMatch: 'Совпадений не найдено', diff --git a/src/runtime/locale/sk.ts b/src/runtime/locale/sk.ts index c57bba0ad8..c221cd557e 100644 --- a/src/runtime/locale/sk.ts +++ b/src/runtime/locale/sk.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Zvýšiť', decrement: 'Znížiť' }, + fileUpload: { + empty: 'Vyberte súbor alebo ho sem presuňte' + }, commandPalette: { placeholder: 'Zadajte príkaz alebo vyhľadajte...', noMatch: 'Žiadna zhoda', diff --git a/src/runtime/locale/sl.ts b/src/runtime/locale/sl.ts index 9df276955c..fec750bb19 100644 --- a/src/runtime/locale/sl.ts +++ b/src/runtime/locale/sl.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Povišaj', decrement: 'Zmanjšaj' }, + fileUpload: { + empty: 'Izberi datoteko ali jo povleci sem' + }, commandPalette: { placeholder: 'Vpiši ukaz ali išči...', noMatch: 'Ni ujemanj', diff --git a/src/runtime/locale/sv.ts b/src/runtime/locale/sv.ts index 3a66ccd821..986d2299e4 100644 --- a/src/runtime/locale/sv.ts +++ b/src/runtime/locale/sv.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Öka', decrement: 'Minska' }, + fileUpload: { + empty: 'Bläddra eller släpp filer här' + }, commandPalette: { placeholder: 'Skriv ett kommando eller sök...', noMatch: 'Inga matchande data', diff --git a/src/runtime/locale/th.ts b/src/runtime/locale/th.ts index 50f258b201..a26da47a47 100644 --- a/src/runtime/locale/th.ts +++ b/src/runtime/locale/th.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'เพิ่ม', decrement: 'ลด' }, + fileUpload: { + empty: 'เลือกไฟล์หรือวางที่นี่' + }, commandPalette: { placeholder: 'พิมพ์คำสั่งหรือค้นหา...', noMatch: 'ไม่พบข้อมูลที่ตรงกัน', diff --git a/src/runtime/locale/tj.ts b/src/runtime/locale/tj.ts index 5fd02adf27..d144a3a351 100644 --- a/src/runtime/locale/tj.ts +++ b/src/runtime/locale/tj.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Зиёд кардан', decrement: 'Кам кардан' }, + fileUpload: { + empty: 'Файлро интихоб кунед ё ин ҷо гузоред' + }, commandPalette: { placeholder: 'Фармонро нависед ё ҷустуҷӯ кунед...', noMatch: 'Маълумоти мувофиқ ёфт нашуд', diff --git a/src/runtime/locale/tr.ts b/src/runtime/locale/tr.ts index e57ed3cdc8..1f8b93f9bf 100644 --- a/src/runtime/locale/tr.ts +++ b/src/runtime/locale/tr.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Arttır', decrement: 'Azalt' }, + fileUpload: { + empty: 'Dosya seçin veya buraya bırakın' + }, commandPalette: { placeholder: 'Bir komut yazın veya arama yapın...', noMatch: 'Eşleşen veri yok', diff --git a/src/runtime/locale/ug_cn.ts b/src/runtime/locale/ug_cn.ts index 0f50b157e6..07db3a4f0d 100644 --- a/src/runtime/locale/ug_cn.ts +++ b/src/runtime/locale/ug_cn.ts @@ -21,6 +21,9 @@ export default defineLocale({ increment: 'كۆپەيتىش', decrement: 'ئازايتىش' }, + fileUpload: { + empty: 'فايىلنى كۆرۈش ياكى بۇ يەرگە تارتىش' + }, commandPalette: { placeholder: 'بۇيرۇق كىرگۈزۈڭ ياكى ئىزدەڭ...', noMatch: 'ماس كېلىدىغان سانلىق مەلۇمات يوق', diff --git a/src/runtime/locale/uk.ts b/src/runtime/locale/uk.ts index 45a3c1d4d5..d0de53f2a3 100644 --- a/src/runtime/locale/uk.ts +++ b/src/runtime/locale/uk.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Збільшити', decrement: 'Зменшити' }, + fileUpload: { + empty: 'Виберіть файл або перетягніть його сюди' + }, commandPalette: { placeholder: 'Введіть команду або шукайте...', noMatch: 'Збігів не знайдено', diff --git a/src/runtime/locale/ur.ts b/src/runtime/locale/ur.ts index f001f4b5df..2729058e5a 100644 --- a/src/runtime/locale/ur.ts +++ b/src/runtime/locale/ur.ts @@ -21,6 +21,9 @@ export default defineLocale({ increment: 'اضافہ', decrement: 'کمی' }, + fileUpload: { + empty: 'فائلوں کو براؤز کریں یا یہاں چھوڑیں' + }, commandPalette: { placeholder: 'کمانڈ ٹائپ کریں یا تلاش کریں...', noMatch: 'کوئی ملتا جلتا ڈیٹا نہیں ملا', diff --git a/src/runtime/locale/uz.ts b/src/runtime/locale/uz.ts index 4b939ee3bb..b15dea64dd 100644 --- a/src/runtime/locale/uz.ts +++ b/src/runtime/locale/uz.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Qoʻshish', decrement: 'Ayirish' }, + fileUpload: { + empty: 'Faylni tanlang yoki bu yerga joylashtiring' + }, commandPalette: { placeholder: 'Buyruq kiriting yoki qidiring...', noMatch: 'Mos keluvchi natija topilmadi', diff --git a/src/runtime/locale/vi.ts b/src/runtime/locale/vi.ts index ee53d8585c..0cbec2d267 100644 --- a/src/runtime/locale/vi.ts +++ b/src/runtime/locale/vi.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: 'Tăng', decrement: 'Giảm' }, + fileUpload: { + empty: 'Chọn tệp hoặc kéo và thả vào đây' + }, commandPalette: { placeholder: 'Nhập lệnh hoặc tìm kiếm...', noMatch: 'Không có kết quả phù hợp', diff --git a/src/runtime/locale/zh_cn.ts b/src/runtime/locale/zh_cn.ts index 4b67a3596f..603fb9e002 100644 --- a/src/runtime/locale/zh_cn.ts +++ b/src/runtime/locale/zh_cn.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: '增加', decrement: '减少' }, + fileUpload: { + empty: '选择文件或拖放到这里' + }, commandPalette: { placeholder: '输入命令或搜索...', noMatch: '没有匹配的数据', diff --git a/src/runtime/locale/zh_tw.ts b/src/runtime/locale/zh_tw.ts index 6f9868c6b5..a3264e47ee 100644 --- a/src/runtime/locale/zh_tw.ts +++ b/src/runtime/locale/zh_tw.ts @@ -20,6 +20,9 @@ export default defineLocale({ increment: '增加', decrement: '減少' }, + fileUpload: { + empty: '選擇檔案或拖放到這裡' + }, commandPalette: { placeholder: '輸入命令或搜尋...', noMatch: '沒有相符的資料', diff --git a/src/runtime/types/locale.ts b/src/runtime/types/locale.ts index 44d63534bb..abe5a9ddca 100644 --- a/src/runtime/types/locale.ts +++ b/src/runtime/types/locale.ts @@ -14,6 +14,9 @@ export type Messages = { increment: string decrement: string } + fileUpload: { + empty: string + } commandPalette: { placeholder: string noMatch: string diff --git a/test/components/__snapshots__/FileUpload-vue.spec.ts.snap b/test/components/__snapshots__/FileUpload-vue.spec.ts.snap index 1c43635684..722b2fa2c2 100644 --- a/test/components/__snapshots__/FileUpload-vue.spec.ts.snap +++ b/test/components/__snapshots__/FileUpload-vue.spec.ts.snap @@ -6,7 +6,7 @@ exports[`FileUpload > renders with accept correctly 1`] = `
    -
    fileInput.empty
    +
    Browse or drop files here
    " @@ -18,7 +18,7 @@ exports[`FileUpload > renders with disabled correctly 1`] = `
    -
    fileInput.empty
    +
    Browse or drop files here
    " @@ -30,7 +30,7 @@ exports[`FileUpload > renders with id correctly 1`] = `
    -
    fileInput.empty
    +
    Browse or drop files here
    " @@ -54,7 +54,7 @@ exports[`FileUpload > renders with multiple correctly 1`] = `
    -
    fileInput.empty
    +
    Browse or drop files here
    " @@ -66,7 +66,7 @@ exports[`FileUpload > renders with name correctly 1`] = `
    -
    fileInput.empty
    +
    Browse or drop files here
    " @@ -78,7 +78,7 @@ exports[`FileUpload > renders with placeholder correctly 1`] = `
    -
    fileInput.empty
    +
    Browse or drop files here
    " @@ -90,7 +90,7 @@ exports[`FileUpload > renders with required correctly 1`] = `
    -
    fileInput.empty
    +
    Browse or drop files here
    " @@ -102,7 +102,7 @@ exports[`FileUpload > renders with size lg correctly 1`] = `
    -
    fileInput.empty
    +
    Browse or drop files here
    " @@ -114,7 +114,7 @@ exports[`FileUpload > renders with size md correctly 1`] = `
    -
    fileInput.empty
    +
    Browse or drop files here
    " @@ -126,7 +126,7 @@ exports[`FileUpload > renders with size sm correctly 1`] = `
    -
    fileInput.empty
    +
    Browse or drop files here
    " @@ -138,7 +138,7 @@ exports[`FileUpload > renders with size xl correctly 1`] = `
    -
    fileInput.empty
    +
    Browse or drop files here
    " @@ -150,7 +150,7 @@ exports[`FileUpload > renders with size xs correctly 1`] = `
    -
    fileInput.empty
    +
    Browse or drop files here
    " diff --git a/test/components/__snapshots__/FileUpload.spec.ts.snap b/test/components/__snapshots__/FileUpload.spec.ts.snap index 5eba16491b..2f3434c8fd 100644 --- a/test/components/__snapshots__/FileUpload.spec.ts.snap +++ b/test/components/__snapshots__/FileUpload.spec.ts.snap @@ -6,7 +6,7 @@ exports[`FileUpload > renders with accept correctly 1`] = `
    -
    Browse or drop files here
    +
    Browse or drop files here
    " @@ -18,7 +18,7 @@ exports[`FileUpload > renders with disabled correctly 1`] = `
    -
    Browse or drop files here
    +
    Browse or drop files here
    " @@ -30,7 +30,7 @@ exports[`FileUpload > renders with id correctly 1`] = `
    -
    Browse or drop files here
    +
    Browse or drop files here
    " @@ -42,7 +42,7 @@ exports[`FileUpload > renders with label correctly 1`] = `
    -
    Browse or drop files here
    +
    Label
    " @@ -54,7 +54,7 @@ exports[`FileUpload > renders with multiple correctly 1`] = `
    -
    Browse or drop files here
    +
    Browse or drop files here
    " @@ -66,7 +66,7 @@ exports[`FileUpload > renders with name correctly 1`] = `
    -
    Browse or drop files here
    +
    Browse or drop files here
    " @@ -78,7 +78,7 @@ exports[`FileUpload > renders with placeholder correctly 1`] = `
    -
    Browse or drop files here
    +
    Browse or drop files here
    " @@ -90,7 +90,7 @@ exports[`FileUpload > renders with required correctly 1`] = `
    -
    Browse or drop files here
    +
    Browse or drop files here
    " @@ -102,7 +102,7 @@ exports[`FileUpload > renders with size lg correctly 1`] = `
    -
    Browse or drop files here
    +
    Browse or drop files here
    " @@ -114,7 +114,7 @@ exports[`FileUpload > renders with size md correctly 1`] = `
    -
    Browse or drop files here
    +
    Browse or drop files here
    " @@ -126,7 +126,7 @@ exports[`FileUpload > renders with size sm correctly 1`] = `
    -
    Browse or drop files here
    +
    Browse or drop files here
    " @@ -138,7 +138,7 @@ exports[`FileUpload > renders with size xl correctly 1`] = `
    -
    Browse or drop files here
    +
    Browse or drop files here
    " @@ -150,7 +150,7 @@ exports[`FileUpload > renders with size xs correctly 1`] = `
    -
    Browse or drop files here
    +
    Browse or drop files here
    " From a5ffe515b470d46ad7dcebfd74a3929cb0357c43 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 May 2025 11:58:19 +0200 Subject: [PATCH 16/31] chore(deps): update nuxt framework to ^3.17.4 (v3) (#4197) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs/package.json | 2 +- package.json | 6 +- playground/package.json | 2 +- pnpm-lock.yaml | 459 +++++++++++++++++++++++----------------- 4 files changed, 270 insertions(+), 199 deletions(-) diff --git a/docs/package.json b/docs/package.json index 9037b3f434..413f5aff6b 100644 --- a/docs/package.json +++ b/docs/package.json @@ -22,7 +22,7 @@ "capture-website": "^4.2.0", "joi": "^17.13.3", "motion-v": "^1.0.2", - "nuxt": "^3.17.3", + "nuxt": "^3.17.4", "nuxt-component-meta": "^0.11.0", "nuxt-llms": "^0.1.2", "nuxt-og-image": "^5.1.3", diff --git a/package.json b/package.json index 213ab57685..80301c27bd 100644 --- a/package.json +++ b/package.json @@ -117,8 +117,8 @@ "@internationalized/number": "^3.6.1", "@nuxt/fonts": "^0.11.4", "@nuxt/icon": "^1.13.0", - "@nuxt/kit": "^3.17.3", - "@nuxt/schema": "^3.17.3", + "@nuxt/kit": "^3.17.4", + "@nuxt/schema": "^3.17.4", "@nuxtjs/color-mode": "^3.5.2", "@standard-schema/spec": "^1.0.0", "@tailwindcss/postcss": "^4.1.7", @@ -164,7 +164,7 @@ "embla-carousel": "^8.6.0", "eslint": "^9.27.0", "happy-dom": "^17.4.7", - "nuxt": "^3.17.3", + "nuxt": "^3.17.4", "release-it": "^19.0.2", "vitest": "^3.1.3", "vitest-environment-nuxt": "^1.0.1", diff --git a/playground/package.json b/playground/package.json index df8e61eab0..95ee94f6a6 100644 --- a/playground/package.json +++ b/playground/package.json @@ -13,7 +13,7 @@ "@iconify-json/simple-icons": "^1.2.34", "@nuxt/ui": "latest", "@nuxthub/core": "^0.8.27", - "nuxt": "^3.17.3", + "nuxt": "^3.17.4", "zod": "^3.24.4" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dd795d5775..15a46209c4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,11 +35,11 @@ importers: specifier: ^1.13.0 version: 1.13.0(magicast@0.3.5)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3)) '@nuxt/kit': - specifier: ^3.17.3 - version: 3.17.3(magicast@0.3.5) + specifier: ^3.17.4 + version: 3.17.4(magicast@0.3.5) '@nuxt/schema': - specifier: ^3.17.3 - version: 3.17.3 + specifier: ^3.17.4 + version: 3.17.4 '@nuxtjs/color-mode': specifier: ^3.5.2 version: 3.5.2(magicast@0.3.5) @@ -144,10 +144,10 @@ importers: version: 2.3.4 unplugin-auto-import: specifier: ^19.2.0 - version: 19.2.0(@nuxt/kit@3.17.3(magicast@0.3.5))(@vueuse/core@13.2.0(vue@3.5.14(typescript@5.8.3))) + version: 19.2.0(@nuxt/kit@3.17.4(magicast@0.3.5))(@vueuse/core@13.2.0(vue@3.5.14(typescript@5.8.3))) unplugin-vue-components: specifier: ^28.5.0 - version: 28.5.0(@babel/parser@7.27.2)(@nuxt/kit@3.17.3(magicast@0.3.5))(vue@3.5.14(typescript@5.8.3)) + version: 28.5.0(@babel/parser@7.27.2)(@nuxt/kit@3.17.4(magicast@0.3.5))(vue@3.5.14(typescript@5.8.3)) valibot: specifier: ^1.0.0 version: 1.1.0(typescript@5.8.3) @@ -192,8 +192,8 @@ importers: specifier: ^17.4.7 version: 17.4.7 nuxt: - specifier: ^3.17.3 - version: 3.17.3(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1) + specifier: ^3.17.4 + version: 3.17.4(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1) release-it: specifier: ^19.0.2 version: 19.0.2(@types/node@22.15.17)(magicast@0.3.5) @@ -268,7 +268,7 @@ importers: version: 13.2.0(axios@1.9.0)(fuse.js@7.1.0)(jwt-decode@4.0.0)(sortablejs@1.15.6)(vue@3.5.14(typescript@5.8.3)) '@vueuse/nuxt': specifier: ^13.2.0 - version: 13.2.0(magicast@0.3.5)(nuxt@3.17.3(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3)) + version: 13.2.0(magicast@0.3.5)(nuxt@3.17.4(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3)) ai: specifier: ^4.3.16 version: 4.3.16(react@19.1.0)(zod@3.24.4) @@ -282,8 +282,8 @@ importers: specifier: ^1.0.2 version: 1.0.2(react@19.1.0)(vue@3.5.14(typescript@5.8.3)) nuxt: - specifier: ^3.17.3 - version: 3.17.3(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1) + specifier: ^3.17.4 + version: 3.17.4(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1) nuxt-component-meta: specifier: ^0.11.0 version: 0.11.0(magicast@0.3.5) @@ -340,8 +340,8 @@ importers: specifier: ^0.8.27 version: 0.8.27(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.6.1)(magicast@0.3.5)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1)) nuxt: - specifier: ^3.17.3 - version: 3.17.3(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1) + specifier: ^3.17.4 + version: 3.17.4(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1) zod: specifier: ^3.24.4 version: 3.24.4 @@ -1239,8 +1239,8 @@ packages: engines: {node: '>=18'} hasBin: true - '@napi-rs/wasm-runtime@0.2.9': - resolution: {integrity: sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==} + '@napi-rs/wasm-runtime@0.2.10': + resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==} '@netlify/binary-info@1.0.0': resolution: {integrity: sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==} @@ -1311,22 +1311,17 @@ packages: '@nuxt/devalue@2.0.2': resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==} - '@nuxt/devtools-kit@2.4.0': - resolution: {integrity: sha512-GdxdxEDN1f6uxJOPooYQTLC6X1QUe5kRs83A0PVH/uD0sqoXCjpKHOw+H0vdhkHOwOIsVIsbL+TdaF4k++p9TA==} - peerDependencies: - vite: '>=6.0' - '@nuxt/devtools-kit@2.4.1': resolution: {integrity: sha512-taA2Nm03JiV3I+SEYS/u1AfjvLm3V9PO8lh0xLsUk/2mlUnL6GZ9xLXrp8VRg11HHt7EPXERGQh8h4iSPU2bSQ==} peerDependencies: vite: '>=6.0' - '@nuxt/devtools-wizard@2.4.0': - resolution: {integrity: sha512-3/5S2zpl79rE1b/lh8M/2lDNsYiYIXXHZmCwsYPuFJA6DilLQo/VY44oq6cY0Q1up32HYB3h1Te/q3ELbsb+ag==} + '@nuxt/devtools-wizard@2.4.1': + resolution: {integrity: sha512-2BaryhfribzQ95UxR7vLLV17Pk1Otxg9ryqH71M1Yp0mybBFs6Z3b0v+RXfCb4BwA10s/tXBhfF13DHSSJF1+A==} hasBin: true - '@nuxt/devtools@2.4.0': - resolution: {integrity: sha512-iXjLoLeWfMa2qWWKRG3z6DKlKVLmbIa3zl7Y8X83BF83m7RW1xVXu6S4tVlLaTi+5tzeKIFlXHo+RO/tJVA72A==} + '@nuxt/devtools@2.4.1': + resolution: {integrity: sha512-2gwjUF1J1Bp/V9ZTsYJe8sS9O3eg80gdf01fT8aEBcilR3wf0PSIxjEyYk+YENtrHPLXcnnUko89jHGq23MHPQ==} hasBin: true peerDependencies: vite: '>=6.0' @@ -1355,8 +1350,8 @@ packages: resolution: {integrity: sha512-/B58GeEmme7bkmQUrXzEw8P9sJb9BkMaYZqLDtq8ZdDLEddE3P4nVya8RQPB+p4b7EdqWajpPqdy1A2ZPLev/A==} engines: {node: '>=18.20.6'} - '@nuxt/kit@3.17.3': - resolution: {integrity: sha512-aw6u6mT3TnM/MmcCRDMv3i9Sbm5/ZMSJgDl+N+WsrWNDIQ2sWmsqdDkjb/HyXF20SNwc2891hRBkaQr3hG2mhA==} + '@nuxt/kit@3.17.4': + resolution: {integrity: sha512-l+hY8sy2XFfg3PigZj+PTu6+KIJzmbACTRimn1ew/gtCz+F38f6KTF4sMRTN5CUxiB8TRENgEonASmkAWfpO9Q==} engines: {node: '>=18.12.0'} '@nuxt/module-builder@1.0.1': @@ -1367,8 +1362,8 @@ packages: '@nuxt/cli': ^3.24.1 typescript: ^5.8.3 - '@nuxt/schema@3.17.3': - resolution: {integrity: sha512-z4hbeTtg8B2/2I8zqnCAQQ9JmIQA/BfFy/8cRkGKRIMNjOaTOdmAqMnNriSpyp9xfzWGpnvxPFgab/5uSjsAgA==} + '@nuxt/schema@3.17.4': + resolution: {integrity: sha512-bsfJdWjKNYLkVQt7Ykr9YsAql1u8Tuo6iecSUOltTIhsvAIYsknRFPHoNKNmaiv/L6FgCQgUgQppPTPUAXiJQQ==} engines: {node: ^14.18.0 || >=16.10.0} '@nuxt/telemetry@2.6.6': @@ -1434,8 +1429,8 @@ packages: zod: optional: true - '@nuxt/vite-builder@3.17.3': - resolution: {integrity: sha512-WK1ESdzbJGRwLGz6s+oyVwM3Ore4V/eYMyquUYsdckFC0rTOnRlV88jdGf0D8Yav0DkrNrG5nZEkL8k+zuXlwQ==} + '@nuxt/vite-builder@3.17.4': + resolution: {integrity: sha512-MRcGe02nEDpu+MnRJcmgVfHdzgt9tWvxVdJbhfd6oyX19plw/CANjgHedlpUNUxqeWXC6CQfGvoVJXn3bQlEqA==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0.0} peerDependencies: vue: ^3.3.4 @@ -1517,85 +1512,91 @@ packages: resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@oxc-parser/binding-darwin-arm64@0.69.0': - resolution: {integrity: sha512-4kmSjKARywwCxQ9udJy8T6XJwe7LzfAf0Yy38O1DsRyK05twKgBGWBca2vfaNi4V8jpNaA6SPJi+KJE5IKLLpw==} + '@oxc-parser/binding-darwin-arm64@0.71.0': + resolution: {integrity: sha512-7R7TuHWL2hZ8BbRdxXlVJTE0os7TM6LL2EX2OkIz41B3421JeIU+2YH+IV55spIUy5E5ynesLk0IdpSSPVZ25Q==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.69.0': - resolution: {integrity: sha512-RQgFiCbv5wTXxFEKgVcUcU2l62zTZZRVXZPUiLtOf4EY0/P/H6pSK6/ATiTVAZVqy72xDE0lWONZbFcUMPwnHw==} + '@oxc-parser/binding-darwin-x64@0.71.0': + resolution: {integrity: sha512-Q7QshRy7cDvpvWAH+qy2U8O9PKo5yEKFqPruD2OSOM8igy/GLIC21dAd6iCcqXRZxaqzN9c4DaXFtEZfq4NWsw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - '@oxc-parser/binding-freebsd-x64@0.69.0': - resolution: {integrity: sha512-LGmg4kVxq910jrvZJLT2vJYScz6+ANMoYSR2EWEbhA4HALo3I3/055dgZ8GV001ALaPPz/L6AbvxaYPVAGPRfQ==} + '@oxc-parser/binding-freebsd-x64@0.71.0': + resolution: {integrity: sha512-z8NNBBseLriz2p+eJ8HWC+A8P+MsO8HCtXie9zaVlVcXSiUuBroRWeXopvHN4r+tLzmN2iLXlXprJdNhXNgobQ==} engines: {node: '>=14.0.0'} cpu: [x64] os: [freebsd] - '@oxc-parser/binding-linux-arm-gnueabihf@0.69.0': - resolution: {integrity: sha512-Q5jWCHy82c9vYBZVQVSB8ZARLAxU5bMgVDZBHRMDB/gQJhphJaZ23wqPQ2b8b2XSoJhssQhYMV0bF600TzAfpg==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.71.0': + resolution: {integrity: sha512-QZQcWMduFRWddqvjgLvsWoeellFjvWqvdI0O1m5hoMEykv2/Ag8d7IZbBwRwFqKBuK4UzpBNt4jZaYzRsv1irg==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.71.0': + resolution: {integrity: sha512-lTDc2WCzllVFXugUHQGR904CksA5BiHc35mcH6nJm6h0FCdoyn9zefW8Pelku5ET39JgO1OENEm/AyNvf/FzIw==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.69.0': - resolution: {integrity: sha512-PsuAduOi5Cz+YdpL3LyVBvN+h5fjHAgMCibaAfGa7ru2zr6tb6r5IAfBBj3KHkFYoyl7ztodQSnWsA2Fka3QPw==} + '@oxc-parser/binding-linux-arm64-gnu@0.71.0': + resolution: {integrity: sha512-mAA6JGS+MB+gbN5y/KuQ095EHYGF7a/FaznM7klk5CaCap/UdiRWCVinVV6xXmejOPZMnrkr6R5Kqi6dHRsm2g==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - '@oxc-parser/binding-linux-arm64-musl@0.69.0': - resolution: {integrity: sha512-vOxh5Hk22YlfxuQvxRmkzT+VrAd901sDz1gkPUf2u+HCNyDMXq+O/jXn68wFQQgbkDKpAfP0z2dZfOJFkkL2Ag==} + '@oxc-parser/binding-linux-arm64-musl@0.71.0': + resolution: {integrity: sha512-PaPmIEM0yldXSrO1Icrx6/DwnMXpEOv0bDVa0LFtwy2I+aiTiX7OVRB3pJCg8FEV9P+L48s9XW0Oaz+Dz3o3sQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - '@oxc-parser/binding-linux-riscv64-gnu@0.69.0': - resolution: {integrity: sha512-5xQpOPaGgxqyUa8T7yOeXPI/tO4o7pmRV++od1XFH+HR8GvidS0J0rC7F69aqz39+i6x6rc5ZxwWADLPtR45rQ==} + '@oxc-parser/binding-linux-riscv64-gnu@0.71.0': + resolution: {integrity: sha512-+AEGO6gOSSEqWTrCCYayNMMPe/qi83o1czQ5bytEFQtyvWdgLwliqqShpJtgSLj1SNWi94HiA/VOfqqZnGE1AQ==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - '@oxc-parser/binding-linux-s390x-gnu@0.69.0': - resolution: {integrity: sha512-btrmwQ/mds4We2nS/GSg03wj9iClgQkbgf6c8WWXhr4l5GmpxLH6t1LnS4s+tHpTWSY7jpegRfOwQalS5D3Y6g==} + '@oxc-parser/binding-linux-s390x-gnu@0.71.0': + resolution: {integrity: sha512-zqFnheBACFzrRl401ylXufNl1YsOdVa8jwS2iSCwJFx4/JdQhE6Y4YWoEjQ/pzeRZXwI5FX4C607rQe2YdhggQ==} engines: {node: '>=14.0.0'} cpu: [s390x] os: [linux] - '@oxc-parser/binding-linux-x64-gnu@0.69.0': - resolution: {integrity: sha512-IfFNgUcdzISFausz7k6gdo1zUydJLExVrwpoCRyDYnsPovgOJHhxVZZ6sbuYbufcRh6PV/aA7G8RIvNmOVjIwQ==} + '@oxc-parser/binding-linux-x64-gnu@0.71.0': + resolution: {integrity: sha512-steSQTwv3W+/hpES4/9E3vNohou1FXJLNWLDbYHDaBI9gZdYJp6zwALC8EShCz0NoQvCu4THD3IBsTBHvFBNyw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - '@oxc-parser/binding-linux-x64-musl@0.69.0': - resolution: {integrity: sha512-dEOj+Lnwy2GNiAzon05Mo1DP1ptpQNbm12Bz+ZVm/vDNHY0Zbgjf7i3MpnnEywFL8NZJ1c6vSDmtDqTdnm2EBw==} + '@oxc-parser/binding-linux-x64-musl@0.71.0': + resolution: {integrity: sha512-mV8j/haQBZRU2QnwZe0UIpnhpPBL9dFk1tgNVSH9tV7cV4xUZPn7pFDqMriAmpD7GLfmxbZMInDkujokd63M7Q==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - '@oxc-parser/binding-wasm32-wasi@0.69.0': - resolution: {integrity: sha512-M7HM82ZIeIIYN3DrbN6gsM6Z2RTv/nEe2CsQdeblxmM9CfXCyi55YOxtxo1+8iYoy8NV5EGUeCOwY7YR1JAt6A==} + '@oxc-parser/binding-wasm32-wasi@0.71.0': + resolution: {integrity: sha512-P8ScINpuihkkBX8BrN/4x4ka2+izncHh7/hHxxuPZDZTVMyNNnL1uSoI80tN9yN7NUtUKoi9aQUaF4h22RQcIA==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-parser/binding-win32-arm64-msvc@0.69.0': - resolution: {integrity: sha512-M5W0p0WGjshiCGUNugoHs+8XWgd5J2CrSHY8rYrEmp632LhHRQUGC9AwI45B6IYvnRXiK6E4zcGj/Bey2Dqhyg==} + '@oxc-parser/binding-win32-arm64-msvc@0.71.0': + resolution: {integrity: sha512-4jrJSdBXHmLYaghi1jvbuJmWu117wxqCpzHHgpEV9xFiRSngtClqZkNqyvcD4907e/VriEwluZ3PO3Mlp0y9cw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.69.0': - resolution: {integrity: sha512-flBEF+3dJOi3Nm3b7kNxVGrtuSBGN7RNs/qWPHvq/FUP6xFEsT3hvcdNBUnzB15hPsyExptlKyihgZjYhfpgpA==} + '@oxc-parser/binding-win32-x64-msvc@0.71.0': + resolution: {integrity: sha512-zF7xF19DOoANym/xwVClYH1tiW3S70W8ZDrMHdrEB7gZiTYLCIKIRMrpLVKaRia6LwEo7X0eduwdBa5QFawxOw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - '@oxc-project/types@0.69.0': - resolution: {integrity: sha512-bu3gzdAlLgncoaqyqWVpMAKx4axo+j3ewvvdAt5iCLtvHB/n3Qeif67NU+2TM/ami1nV5/KVO9lxCH8paPATBA==} + '@oxc-project/types@0.71.0': + resolution: {integrity: sha512-5CwQ4MI+P4MQbjLWXgNurA+igGwu/opNetIE13LBs9+V93R64MLvDKOOLZIXSzEfovU3Zef3q3GjPnMTgJTn2w==} '@parcel/watcher-android-arm64@2.5.1': resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} @@ -1816,6 +1817,9 @@ packages: resolution: {integrity: sha512-FqALmHI8D4o6lk/LRWDnhw95z5eO+eAa6ORjVg09YRR7BkcM6oPHU9uyC0gtQG5vpFLvgpeU4+zEAz2H8APHNw==} engines: {node: '>= 10'} + '@rolldown/pluginutils@1.0.0-beta.9': + resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==} + '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -2439,8 +2443,8 @@ packages: engines: {node: '>=18'} hasBin: true - '@vitejs/plugin-vue-jsx@4.1.2': - resolution: {integrity: sha512-4Rk0GdE0QCdsIkuMmWeg11gmM4x8UmTnZR/LWPm7QJ7+BsK4tq08udrN0isrrWqz5heFy9HLV/7bOLgFS8hUjA==} + '@vitejs/plugin-vue-jsx@4.2.0': + resolution: {integrity: sha512-DSTrmrdLp+0LDNF77fqrKfx7X0ErRbOcUAgJL/HbSesqQwoUvUQ4uYQqaex+rovqgGcoPqVk+AwUh3v9CuiYIw==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 || ^6.0.0 @@ -2992,6 +2996,14 @@ packages: magicast: optional: true + c12@3.0.4: + resolution: {integrity: sha512-t5FaZTYbbCtvxuZq9xxIruYydrAGsJ+8UdP0pZzMiK2xl/gNiSOy0OxhLzHUEEb0m1QXYqfzfvyIFEmz/g9lqg==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -5400,8 +5412,8 @@ packages: nitro-cloudflare-dev@0.2.2: resolution: {integrity: sha512-aZfNTVdgXPQeAmXW0Tw8hm3usAHr4qVG4Bg3WhHBGeZYuXr9OyT04Ztb+STkMzhyaXvfMHViAaPUPg06iAYqag==} - nitropack@2.11.11: - resolution: {integrity: sha512-KnWkajf2ZIsjr7PNeENvDRi87UdMrn8dRTe/D/Ak3Ud6sbC7ZCArVGeosoY7WZvsvLBN1YAwm//34Bq4dKkAaw==} + nitropack@2.11.12: + resolution: {integrity: sha512-e2AdQrEY1IVoNTdyjfEQV93xkqz4SQxAMR0xWF8mZUUHxMLm6S4nPzpscjksmT4OdUxl0N8/DCaGjKQ9ghdodA==} engines: {node: ^16.11.0 || >=17.0.0} hasBin: true peerDependencies: @@ -5529,8 +5541,8 @@ packages: nuxt-site-config@3.1.9: resolution: {integrity: sha512-YB69GX0st8drv1d5xypweseiEWeR22tfGdyVH3U4R+mpUSz8paBx48ArKC6MgV22DKItoQm51LVoapF5pl5bEQ==} - nuxt@3.17.3: - resolution: {integrity: sha512-iaRGGcnOiahdz+rhEiDY+Ep/vgsvcCCSs2tIVwKmteHEZk6O2zcpk/U1rHxPWortTyMlluHHaohC2WngYceh+g==} + nuxt@3.17.4: + resolution: {integrity: sha512-49tkp7/+QVhuEOFoTDVvNV6Pc5+aI7wWjZHXzLUrt3tlWLPFh0yYbNXOc3kaxir1FuhRQHHyHZ7azCPmGukfFg==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0.0} hasBin: true peerDependencies: @@ -5613,8 +5625,8 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - oxc-parser@0.69.0: - resolution: {integrity: sha512-6UYcFCyCIoZ2t7gyYdPHxM0BTIjM7Y5MCCTfZ2obVITcLd0lXdkbjVibMBD/qVVG+7cURF7Lw32uykU0YR3QUg==} + oxc-parser@0.71.0: + resolution: {integrity: sha512-RXmu7qi+67RJ8E5UhKZJdliTI+AqD3gncsJecjujcYvjsCZV9KNIfu42fQAnAfLaYZuzOMRdUYh7LzV3F1C0Gw==} engines: {node: '>=14.0.0'} p-event@5.0.1: @@ -6345,6 +6357,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + send@1.2.0: resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} engines: {node: '>= 18'} @@ -6918,6 +6935,9 @@ packages: unenv@2.0.0-rc.15: resolution: {integrity: sha512-J/rEIZU8w6FOfLNz/hNKsnY+fFHWnu9MH4yRbSZF3xbbGHovcetXPs7sD+9p8L6CeNC//I9bhRYAOsBt2u7/OA==} + unenv@2.0.0-rc.17: + resolution: {integrity: sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==} + unhead@2.0.9: resolution: {integrity: sha512-ZLTNJ51PZPO4/3keW7FHiTMb6K+JmhhVApJA52qWNw7NMYPD8fM2eA+hUEaCA2L5bZtbRg43TT7n/lJ+/9o6pw==} @@ -7166,6 +7186,11 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true + vite-node@3.1.4: + resolution: {integrity: sha512-6enNwYnpyDo4hEgytbmc6mYWHXDHYEn0D1/rw4Q+tnHUGtKTJsn8T1YkX6Q18wI5LCrS8CTYlBaiCqxOy2kvUA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + vite-plugin-checker@0.9.3: resolution: {integrity: sha512-Tf7QBjeBtG7q11zG0lvoF38/2AVUzzhMNu+Wk+mcsJ00Rk/FpJ4rmUviVJpzWkagbU13cGXvKpt7CMiqtxVTbQ==} engines: {node: '>=14.16'} @@ -7874,7 +7899,7 @@ snapshots: '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.1.0)': dependencies: '@types/semver': 7.7.0 - semver: 7.7.1 + semver: 7.7.2 optionalDependencies: conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.1.0 @@ -8440,7 +8465,7 @@ snapshots: nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.7.1 + semver: 7.7.2 tar: 6.2.1 transitivePeerDependencies: - encoding @@ -8453,13 +8478,13 @@ snapshots: https-proxy-agent: 7.0.6 node-fetch: 2.7.0 nopt: 8.1.0 - semver: 7.7.1 + semver: 7.7.2 tar: 7.4.3 transitivePeerDependencies: - encoding - supports-color - '@napi-rs/wasm-runtime@0.2.9': + '@napi-rs/wasm-runtime@0.2.10': dependencies: '@emnapi/core': 1.4.3 '@emnapi/runtime': 1.4.3 @@ -8541,7 +8566,7 @@ snapshots: precinct: 11.0.5 require-package-name: 2.0.1 resolve: 2.0.0-next.5 - semver: 7.7.1 + semver: 7.7.2 tmp-promise: 3.0.3 toml: 3.0.0 unixify: 1.0.0 @@ -8571,7 +8596,7 @@ snapshots: '@nuxt/cli@3.25.1(magicast@0.3.5)': dependencies: - c12: 3.0.3(magicast@0.3.5) + c12: 3.0.4(magicast@0.3.5) chokidar: 3.6.0 citty: 0.1.6 clipboardy: 4.0.0 @@ -8590,7 +8615,7 @@ snapshots: perfect-debounce: 1.0.0 pkg-types: 2.1.0 scule: 1.3.0 - semver: 7.7.1 + semver: 7.7.2 std-env: 3.9.0 tinyexec: 1.0.1 ufo: 1.6.1 @@ -8600,13 +8625,13 @@ snapshots: '@nuxt/content@3.5.1(magicast@0.3.5)(typescript@5.8.3)': dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) '@nuxtjs/mdc': 0.17.0(magicast@0.3.5) '@shikijs/langs': 3.4.0 '@sqlite.org/sqlite-wasm': 3.49.1-build4 '@webcontainer/env': 1.1.1 better-sqlite3: 11.10.0 - c12: 3.0.3(magicast@0.3.5) + c12: 3.0.4(magicast@0.3.5) chokidar: 3.6.0 consola: 3.4.2 db0: 0.3.2(better-sqlite3@11.10.0) @@ -8655,25 +8680,16 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@2.4.0(magicast@0.3.5)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))': - dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) - '@nuxt/schema': 3.17.3 - execa: 8.0.1 - vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1) - transitivePeerDependencies: - - magicast - '@nuxt/devtools-kit@2.4.1(magicast@0.3.5)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))': dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) - '@nuxt/schema': 3.17.3 + '@nuxt/kit': 3.17.4(magicast@0.3.5) + '@nuxt/schema': 3.17.4 execa: 8.0.1 vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1) transitivePeerDependencies: - magicast - '@nuxt/devtools-wizard@2.4.0': + '@nuxt/devtools-wizard@2.4.1': dependencies: consola: 3.4.2 diff: 7.0.0 @@ -8682,13 +8698,13 @@ snapshots: pathe: 2.0.3 pkg-types: 2.1.0 prompts: 2.4.2 - semver: 7.7.1 + semver: 7.7.2 - '@nuxt/devtools@2.4.0(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3))': + '@nuxt/devtools@2.4.1(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3))': dependencies: - '@nuxt/devtools-kit': 2.4.0(magicast@0.3.5)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1)) - '@nuxt/devtools-wizard': 2.4.0 - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/devtools-kit': 2.4.1(magicast@0.3.5)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1)) + '@nuxt/devtools-wizard': 2.4.1 + '@nuxt/kit': 3.17.4(magicast@0.3.5) '@vue/devtools-core': 7.7.6(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3)) '@vue/devtools-kit': 7.7.6 birpc: 2.3.0 @@ -8709,13 +8725,13 @@ snapshots: pathe: 2.0.3 perfect-debounce: 1.0.0 pkg-types: 2.1.0 - semver: 7.7.1 + semver: 7.7.2 simple-git: 3.27.0 sirv: 3.0.1 structured-clone-es: 1.0.0 tinyglobby: 0.2.13 vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1) - vite-plugin-inspect: 11.0.1(@nuxt/kit@3.17.3(magicast@0.3.5))(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1)) + vite-plugin-inspect: 11.0.1(@nuxt/kit@3.17.4(magicast@0.3.5))(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1)) vite-plugin-vue-tracer: 0.1.3(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3)) which: 5.0.0 ws: 8.18.2 @@ -8765,7 +8781,7 @@ snapshots: '@nuxt/fonts@0.11.4(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.6.1)(magicast@0.3.5)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))': dependencies: '@nuxt/devtools-kit': 2.4.1(magicast@0.3.5)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1)) - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) consola: 3.4.2 css-tree: 3.1.0 defu: 6.1.4 @@ -8814,7 +8830,7 @@ snapshots: '@iconify/utils': 2.3.0 '@iconify/vue': 5.0.0(vue@3.5.14(typescript@5.8.3)) '@nuxt/devtools-kit': 2.4.1(magicast@0.3.5)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1)) - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) consola: 3.4.2 local-pkg: 1.1.1 mlly: 1.7.4 @@ -8831,7 +8847,7 @@ snapshots: '@nuxt/image@1.10.0(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.6.1)(magicast@0.3.5)': dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) consola: 3.4.2 defu: 6.1.4 h3: 1.15.3 @@ -8865,9 +8881,9 @@ snapshots: - magicast - uploadthing - '@nuxt/kit@3.17.3(magicast@0.3.5)': + '@nuxt/kit@3.17.4(magicast@0.3.5)': dependencies: - c12: 3.0.3(magicast@0.3.5) + c12: 3.0.4(magicast@0.3.5) consola: 3.4.2 defu: 6.1.4 destr: 2.0.5 @@ -8882,7 +8898,7 @@ snapshots: pathe: 2.0.3 pkg-types: 2.1.0 scule: 1.3.0 - semver: 7.7.1 + semver: 7.7.2 std-env: 3.9.0 tinyglobby: 0.2.13 ufo: 1.6.1 @@ -8915,7 +8931,7 @@ snapshots: - vue - vue-tsc - '@nuxt/schema@3.17.3': + '@nuxt/schema@3.17.4': dependencies: '@vue/shared': 3.5.14 consola: 3.4.2 @@ -8925,7 +8941,7 @@ snapshots: '@nuxt/telemetry@2.6.6(magicast@0.3.5)': dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) citty: 0.1.6 consola: 3.4.2 destr: 2.0.5 @@ -8942,9 +8958,9 @@ snapshots: '@nuxt/test-utils@3.19.0(@types/node@22.15.17)(@vue/test-utils@2.4.6)(happy-dom@17.4.7)(jiti@2.4.2)(lightningcss@1.30.1)(magicast@0.3.5)(playwright-core@1.52.0)(terser@5.39.0)(typescript@5.8.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.17)(happy-dom@17.4.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(yaml@2.7.1)': dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) - '@nuxt/schema': 3.17.3 - c12: 3.0.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) + '@nuxt/schema': 3.17.4 + c12: 3.0.4(magicast@0.3.5) consola: 3.4.2 defu: 6.1.4 destr: 2.0.5 @@ -8991,8 +9007,8 @@ snapshots: '@nuxt/ui-pro@https://pkg.pr.new/@nuxt/ui-pro@9038c43(@babel/parser@7.27.2)(joi@17.13.3)(magicast@0.3.5)(superstruct@2.0.2)(typescript@5.8.3)(valibot@1.1.0(typescript@5.8.3))(vue@3.5.14(typescript@5.8.3))(yup@1.6.1)(zod@3.24.4)': dependencies: '@ai-sdk/vue': 1.2.12(vue@3.5.14(typescript@5.8.3))(zod@3.24.4) - '@nuxt/kit': 3.17.3(magicast@0.3.5) - '@nuxt/schema': 3.17.3 + '@nuxt/kit': 3.17.4(magicast@0.3.5) + '@nuxt/schema': 3.17.4 '@nuxt/ui': 'link:' '@standard-schema/spec': 1.0.0 '@vueuse/core': 13.2.0(vue@3.5.14(typescript@5.8.3)) @@ -9008,8 +9024,8 @@ snapshots: tinyglobby: 0.2.13 typescript: 5.8.3 unplugin: 2.3.4 - unplugin-auto-import: 19.2.0(@nuxt/kit@3.17.3(magicast@0.3.5))(@vueuse/core@13.2.0(vue@3.5.14(typescript@5.8.3))) - unplugin-vue-components: 28.5.0(@babel/parser@7.27.2)(@nuxt/kit@3.17.3(magicast@0.3.5))(vue@3.5.14(typescript@5.8.3)) + unplugin-auto-import: 19.2.0(@nuxt/kit@3.17.4(magicast@0.3.5))(@vueuse/core@13.2.0(vue@3.5.14(typescript@5.8.3))) + unplugin-vue-components: 28.5.0(@babel/parser@7.27.2)(@nuxt/kit@3.17.4(magicast@0.3.5))(vue@3.5.14(typescript@5.8.3)) optionalDependencies: joi: 17.13.3 superstruct: 2.0.2 @@ -9022,12 +9038,12 @@ snapshots: - supports-color - vue - '@nuxt/vite-builder@3.17.3(@types/node@22.15.17)(eslint@9.27.0(jiti@2.4.2))(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vue-tsc@2.2.10(typescript@5.8.3))(vue@3.5.14(typescript@5.8.3))(yaml@2.7.1)': + '@nuxt/vite-builder@3.17.4(@types/node@22.15.17)(eslint@9.27.0(jiti@2.4.2))(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vue-tsc@2.2.10(typescript@5.8.3))(vue@3.5.14(typescript@5.8.3))(yaml@2.7.1)': dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) '@rollup/plugin-replace': 6.0.2(rollup@4.34.9) '@vitejs/plugin-vue': 5.2.4(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3)) - '@vitejs/plugin-vue-jsx': 4.1.2(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3)) + '@vitejs/plugin-vue-jsx': 4.2.0(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3)) autoprefixer: 10.4.21(postcss@8.5.3) consola: 3.4.2 cssnano: 7.0.7(postcss@8.5.3) @@ -9051,10 +9067,10 @@ snapshots: rollup-plugin-visualizer: 5.14.0(rollup@4.34.9) std-env: 3.9.0 ufo: 1.6.1 - unenv: 2.0.0-rc.15 + unenv: 2.0.0-rc.17 unplugin: 2.3.4 vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1) - vite-node: 3.1.3(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1) + vite-node: 3.1.4(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1) vite-plugin-checker: 0.9.3(eslint@9.27.0(jiti@2.4.2))(meow@13.2.0)(optionator@0.9.4)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3)) vue: 3.5.14(typescript@5.8.3) vue-bundle-renderer: 2.1.1 @@ -9087,7 +9103,7 @@ snapshots: dependencies: '@cloudflare/workers-types': 4.20250510.0 '@nuxt/devtools-kit': 2.4.1(magicast@0.3.5)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1)) - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) '@uploadthing/mime-types': 0.3.5 citty: 0.1.6 confbox: 0.2.2 @@ -9128,16 +9144,16 @@ snapshots: '@nuxtjs/color-mode@3.5.2(magicast@0.3.5)': dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) pathe: 1.1.2 pkg-types: 1.3.1 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - magicast '@nuxtjs/mdc@0.17.0(magicast@0.3.5)': dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) '@shikijs/langs': 3.4.0 '@shikijs/themes': 3.4.0 '@shikijs/transformers': 3.4.0 @@ -9186,7 +9202,7 @@ snapshots: '@nuxtjs/plausible@1.2.0(magicast@0.3.5)': dependencies: '@barbapapazes/plausible-tracker': 0.5.6 - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) defu: 6.1.4 ufo: 1.6.1 transitivePeerDependencies: @@ -9264,48 +9280,51 @@ snapshots: '@opentelemetry/api@1.9.0': {} - '@oxc-parser/binding-darwin-arm64@0.69.0': + '@oxc-parser/binding-darwin-arm64@0.71.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.71.0': optional: true - '@oxc-parser/binding-darwin-x64@0.69.0': + '@oxc-parser/binding-freebsd-x64@0.71.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.69.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.71.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.69.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.71.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.69.0': + '@oxc-parser/binding-linux-arm64-gnu@0.71.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.69.0': + '@oxc-parser/binding-linux-arm64-musl@0.71.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.69.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.71.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.69.0': + '@oxc-parser/binding-linux-s390x-gnu@0.71.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.69.0': + '@oxc-parser/binding-linux-x64-gnu@0.71.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.69.0': + '@oxc-parser/binding-linux-x64-musl@0.71.0': optional: true - '@oxc-parser/binding-wasm32-wasi@0.69.0': + '@oxc-parser/binding-wasm32-wasi@0.71.0': dependencies: - '@napi-rs/wasm-runtime': 0.2.9 + '@napi-rs/wasm-runtime': 0.2.10 optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.69.0': + '@oxc-parser/binding-win32-arm64-msvc@0.71.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.69.0': + '@oxc-parser/binding-win32-x64-msvc@0.71.0': optional: true - '@oxc-project/types@0.69.0': {} + '@oxc-project/types@0.71.0': {} '@parcel/watcher-android-arm64@2.5.1': optional: true @@ -9397,7 +9416,7 @@ snapshots: extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 - semver: 7.7.1 + semver: 7.7.2 tar-fs: 3.0.8 unbzip2-stream: 1.4.3 yargs: 17.7.2 @@ -9412,7 +9431,7 @@ snapshots: conventional-recommended-bump: 10.0.0 git-semver-tags: 8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.1.0) release-it: 19.0.2(@types/node@22.15.17)(magicast@0.3.5) - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - conventional-commits-filter - conventional-commits-parser @@ -9487,6 +9506,8 @@ snapshots: '@resvg/resvg-wasm@2.6.2': {} + '@rolldown/pluginutils@1.0.0-beta.9': {} + '@rollup/plugin-alias@5.1.1(rollup@4.34.9)': optionalDependencies: rollup: 4.34.9 @@ -9914,7 +9935,7 @@ snapshots: debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.7.1 + semver: 7.7.2 tsutils: 3.21.0(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 @@ -9929,7 +9950,7 @@ snapshots: fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 + semver: 7.7.2 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -10028,7 +10049,7 @@ snapshots: '@unrs/resolver-binding-wasm32-wasi@1.7.2': dependencies: - '@napi-rs/wasm-runtime': 0.2.9 + '@napi-rs/wasm-runtime': 0.2.10 optional: true '@unrs/resolver-binding-win32-arm64-msvc@1.7.2': @@ -10080,10 +10101,11 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-vue-jsx@4.1.2(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3))': + '@vitejs/plugin-vue-jsx@4.2.0(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3))': dependencies: '@babel/core': 7.27.1 '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.1) + '@rolldown/pluginutils': 1.0.0-beta.9 '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.27.1) vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1) vue: 3.5.14(typescript@5.8.3) @@ -10335,13 +10357,13 @@ snapshots: '@vueuse/metadata@13.2.0': {} - '@vueuse/nuxt@13.2.0(magicast@0.3.5)(nuxt@3.17.3(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3))': + '@vueuse/nuxt@13.2.0(magicast@0.3.5)(nuxt@3.17.4(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3))': dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) '@vueuse/core': 13.2.0(vue@3.5.14(typescript@5.8.3)) '@vueuse/metadata': 13.2.0 local-pkg: 1.1.1 - nuxt: 3.17.3(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1) + nuxt: 3.17.4(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1) vue: 3.5.14(typescript@5.8.3) transitivePeerDependencies: - magicast @@ -10723,6 +10745,23 @@ snapshots: optionalDependencies: magicast: 0.3.5 + c12@3.0.4(magicast@0.3.5): + dependencies: + chokidar: 3.6.0 + confbox: 0.2.2 + defu: 6.1.4 + dotenv: 16.5.0 + exsolve: 1.0.5 + giget: 2.0.0 + jiti: 2.4.2 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 1.0.0 + pkg-types: 2.1.0 + rc9: 2.1.2 + optionalDependencies: + magicast: 0.3.5 + cac@6.7.14: {} call-bind-apply-helpers@1.0.2: @@ -11010,7 +11049,7 @@ snapshots: conventional-commits-filter: 5.0.0 handlebars: 4.7.8 meow: 13.2.0 - semver: 7.7.1 + semver: 7.7.2 conventional-changelog@6.0.0(conventional-commits-filter@5.0.0): dependencies: @@ -11386,7 +11425,7 @@ snapshots: '@one-ini/wasm': 0.1.1 commander: 10.0.1 minimatch: 9.0.1 - semver: 7.7.1 + semver: 7.7.2 ee-first@1.1.1: {} @@ -11578,7 +11617,7 @@ snapshots: get-tsconfig: 4.10.0 is-glob: 4.0.3 minimatch: 10.0.1 - semver: 7.7.1 + semver: 7.7.2 stable-hash: 0.0.5 tslib: 2.8.1 unrs-resolver: 1.7.2 @@ -11597,7 +11636,7 @@ snapshots: espree: 10.3.0 esquery: 1.6.0 parse-imports-exports: 0.2.4 - semver: 7.7.1 + semver: 7.7.2 spdx-expression-parse: 4.0.0 transitivePeerDependencies: - supports-color @@ -11631,7 +11670,7 @@ snapshots: pluralize: 8.0.0 regexp-tree: 0.1.27 regjsparser: 0.12.0 - semver: 7.7.1 + semver: 7.7.2 strip-indent: 4.0.0 eslint-plugin-vue@10.1.0(eslint@9.27.0(jiti@2.4.2))(vue-eslint-parser@10.1.3(eslint@9.27.0(jiti@2.4.2))): @@ -11641,7 +11680,7 @@ snapshots: natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 - semver: 7.7.1 + semver: 7.7.2 vue-eslint-parser: 10.1.3(eslint@9.27.0(jiti@2.4.2)) xml-name-validator: 4.0.0 @@ -13371,7 +13410,7 @@ snapshots: pkg-types: 2.1.0 postcss: 8.5.3 postcss-nested: 7.0.2(postcss@8.5.3) - semver: 7.7.1 + semver: 7.7.2 tinyglobby: 0.2.13 optionalDependencies: typescript: 5.8.3 @@ -13459,7 +13498,7 @@ snapshots: mlly: 1.7.4 pkg-types: 2.1.0 - nitropack@2.11.11(better-sqlite3@11.10.0): + nitropack@2.11.12(better-sqlite3@11.10.0): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 '@netlify/functions': 3.1.8(rollup@4.34.9) @@ -13472,7 +13511,7 @@ snapshots: '@rollup/plugin-terser': 0.4.4(rollup@4.34.9) '@vercel/nft': 0.29.2(rollup@4.34.9) archiver: 7.0.1 - c12: 3.0.3(magicast@0.3.5) + c12: 3.0.4(magicast@0.3.5) chokidar: 3.6.0 citty: 0.1.6 compatx: 0.2.0 @@ -13515,7 +13554,7 @@ snapshots: rollup: 4.34.9 rollup-plugin-visualizer: 5.14.0(rollup@4.34.9) scule: 1.3.0 - semver: 7.7.1 + semver: 7.7.2 serve-placeholder: 2.0.2 serve-static: 2.2.0 source-map: 0.7.4 @@ -13524,7 +13563,7 @@ snapshots: ultrahtml: 1.6.0 uncrypto: 0.1.3 unctx: 2.4.1 - unenv: 2.0.0-rc.15 + unenv: 2.0.0-rc.17 unimport: 4.1.1 unplugin-utils: 0.2.4 unstorage: 1.16.0(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.6.1) @@ -13561,7 +13600,7 @@ snapshots: node-abi@3.75.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 node-addon-api@6.1.0: optional: true @@ -13616,7 +13655,7 @@ snapshots: normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.1 + semver: 7.7.2 validate-npm-package-license: 3.0.4 normalize-path@2.1.1: @@ -13649,7 +13688,7 @@ snapshots: nuxt-component-meta@0.11.0(magicast@0.3.5): dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) citty: 0.1.6 mlly: 1.7.4 ohash: 2.0.11 @@ -13662,14 +13701,14 @@ snapshots: nuxt-llms@0.1.2(magicast@0.3.5): dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) transitivePeerDependencies: - magicast nuxt-og-image@5.1.3(@unhead/vue@2.0.9(vue@3.5.14(typescript@5.8.3)))(magicast@0.3.5)(unstorage@1.16.0(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.6.1))(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3)): dependencies: '@nuxt/devtools-kit': 2.4.1(magicast@0.3.5)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1)) - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) '@resvg/resvg-js': 2.6.2 '@resvg/resvg-wasm': 2.6.2 '@unhead/vue': 2.0.9(vue@3.5.14(typescript@5.8.3)) @@ -13708,7 +13747,7 @@ snapshots: nuxt-site-config-kit@3.1.9(magicast@0.3.5)(vue@3.5.14(typescript@5.8.3)): dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) pkg-types: 2.1.0 site-config-stack: 3.1.9(vue@3.5.14(typescript@5.8.3)) std-env: 3.9.0 @@ -13719,7 +13758,7 @@ snapshots: nuxt-site-config@3.1.9(magicast@0.3.5)(vue@3.5.14(typescript@5.8.3)): dependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) nuxt-site-config-kit: 3.1.9(magicast@0.3.5)(vue@3.5.14(typescript@5.8.3)) pathe: 2.0.3 pkg-types: 2.1.0 @@ -13730,18 +13769,18 @@ snapshots: - magicast - vue - nuxt@3.17.3(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1): + nuxt@3.17.4(@parcel/watcher@2.5.1)(@types/node@22.15.17)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(eslint@9.27.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.7.1): dependencies: '@nuxt/cli': 3.25.1(magicast@0.3.5) '@nuxt/devalue': 2.0.2 - '@nuxt/devtools': 2.4.0(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3)) - '@nuxt/kit': 3.17.3(magicast@0.3.5) - '@nuxt/schema': 3.17.3 + '@nuxt/devtools': 2.4.1(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.14(typescript@5.8.3)) + '@nuxt/kit': 3.17.4(magicast@0.3.5) + '@nuxt/schema': 3.17.4 '@nuxt/telemetry': 2.6.6(magicast@0.3.5) - '@nuxt/vite-builder': 3.17.3(@types/node@22.15.17)(eslint@9.27.0(jiti@2.4.2))(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vue-tsc@2.2.10(typescript@5.8.3))(vue@3.5.14(typescript@5.8.3))(yaml@2.7.1) + '@nuxt/vite-builder': 3.17.4(@types/node@22.15.17)(eslint@9.27.0(jiti@2.4.2))(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.3)(vue-tsc@2.2.10(typescript@5.8.3))(vue@3.5.14(typescript@5.8.3))(yaml@2.7.1) '@unhead/vue': 2.0.9(vue@3.5.14(typescript@5.8.3)) '@vue/shared': 3.5.14 - c12: 3.0.3(magicast@0.3.5) + c12: 3.0.4(magicast@0.3.5) chokidar: 3.6.0 compatx: 0.2.0 consola: 3.4.2 @@ -13766,18 +13805,18 @@ snapshots: mlly: 1.7.4 mocked-exports: 0.1.1 nanotar: 0.2.0 - nitropack: 2.11.11(better-sqlite3@11.10.0) + nitropack: 2.11.12(better-sqlite3@11.10.0) nypm: 0.6.0 ofetch: 1.4.1 ohash: 2.0.11 on-change: 5.0.1 - oxc-parser: 0.69.0 + oxc-parser: 0.71.0 pathe: 2.0.3 perfect-debounce: 1.0.0 pkg-types: 2.1.0 radix3: 1.1.2 scule: 1.3.0 - semver: 7.7.1 + semver: 7.7.2 std-env: 3.9.0 strip-literal: 3.0.0 tinyglobby: 0.2.13 @@ -13941,23 +13980,24 @@ snapshots: os-tmpdir@1.0.2: {} - oxc-parser@0.69.0: + oxc-parser@0.71.0: dependencies: - '@oxc-project/types': 0.69.0 + '@oxc-project/types': 0.71.0 optionalDependencies: - '@oxc-parser/binding-darwin-arm64': 0.69.0 - '@oxc-parser/binding-darwin-x64': 0.69.0 - '@oxc-parser/binding-freebsd-x64': 0.69.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.69.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.69.0 - '@oxc-parser/binding-linux-arm64-musl': 0.69.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.69.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.69.0 - '@oxc-parser/binding-linux-x64-gnu': 0.69.0 - '@oxc-parser/binding-linux-x64-musl': 0.69.0 - '@oxc-parser/binding-wasm32-wasi': 0.69.0 - '@oxc-parser/binding-win32-arm64-msvc': 0.69.0 - '@oxc-parser/binding-win32-x64-msvc': 0.69.0 + '@oxc-parser/binding-darwin-arm64': 0.71.0 + '@oxc-parser/binding-darwin-x64': 0.71.0 + '@oxc-parser/binding-freebsd-x64': 0.71.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.71.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.71.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.71.0 + '@oxc-parser/binding-linux-arm64-musl': 0.71.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.71.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.71.0 + '@oxc-parser/binding-linux-x64-gnu': 0.71.0 + '@oxc-parser/binding-linux-x64-musl': 0.71.0 + '@oxc-parser/binding-wasm32-wasi': 0.71.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.71.0 + '@oxc-parser/binding-win32-x64-msvc': 0.71.0 p-event@5.0.1: dependencies: @@ -14827,6 +14867,8 @@ snapshots: semver@7.7.1: {} + semver@7.7.2: {} + send@1.2.0: dependencies: debug: 4.3.7 @@ -14870,7 +14912,7 @@ snapshots: detect-libc: 2.0.4 node-addon-api: 6.1.0 prebuild-install: 7.1.3 - semver: 7.7.1 + semver: 7.7.2 simple-get: 4.0.1 tar-fs: 3.0.8 tunnel-agent: 0.6.0 @@ -14882,7 +14924,7 @@ snapshots: dependencies: color: 4.2.3 detect-libc: 2.0.4 - semver: 7.7.1 + semver: 7.7.2 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.5 '@img/sharp-darwin-x64': 0.33.5 @@ -15469,6 +15511,14 @@ snapshots: pathe: 2.0.3 ufo: 1.6.1 + unenv@2.0.0-rc.17: + dependencies: + defu: 6.1.4 + exsolve: 1.0.5 + ohash: 2.0.11 + pathe: 2.0.3 + ufo: 1.6.1 + unhead@2.0.9: dependencies: hookable: 5.5.3 @@ -15559,7 +15609,7 @@ snapshots: dependencies: normalize-path: 2.1.1 - unplugin-auto-import@19.2.0(@nuxt/kit@3.17.3(magicast@0.3.5))(@vueuse/core@13.2.0(vue@3.5.14(typescript@5.8.3))): + unplugin-auto-import@19.2.0(@nuxt/kit@3.17.4(magicast@0.3.5))(@vueuse/core@13.2.0(vue@3.5.14(typescript@5.8.3))): dependencies: local-pkg: 1.1.1 magic-string: 0.30.17 @@ -15568,7 +15618,7 @@ snapshots: unplugin: 2.3.4 unplugin-utils: 0.2.4 optionalDependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) '@vueuse/core': 13.2.0(vue@3.5.14(typescript@5.8.3)) unplugin-utils@0.2.4: @@ -15576,7 +15626,7 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.2 - unplugin-vue-components@28.5.0(@babel/parser@7.27.2)(@nuxt/kit@3.17.3(magicast@0.3.5))(vue@3.5.14(typescript@5.8.3)): + unplugin-vue-components@28.5.0(@babel/parser@7.27.2)(@nuxt/kit@3.17.4(magicast@0.3.5))(vue@3.5.14(typescript@5.8.3)): dependencies: chokidar: 3.6.0 debug: 4.3.7 @@ -15589,7 +15639,7 @@ snapshots: vue: 3.5.14(typescript@5.8.3) optionalDependencies: '@babel/parser': 7.27.2 - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) transitivePeerDependencies: - supports-color @@ -15769,6 +15819,27 @@ snapshots: - tsx - yaml + vite-node@3.1.4(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1): + dependencies: + cac: 6.7.14 + debug: 4.3.7 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vite-plugin-checker@0.9.3(eslint@9.27.0(jiti@2.4.2))(meow@13.2.0)(optionator@0.9.4)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.10(typescript@5.8.3)): dependencies: '@babel/code-frame': 7.27.1 @@ -15788,7 +15859,7 @@ snapshots: typescript: 5.8.3 vue-tsc: 2.2.10(typescript@5.8.3) - vite-plugin-inspect@11.0.1(@nuxt/kit@3.17.3(magicast@0.3.5))(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1)): + vite-plugin-inspect@11.0.1(@nuxt/kit@3.17.4(magicast@0.3.5))(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1)): dependencies: ansis: 3.17.0 debug: 4.3.7 @@ -15801,7 +15872,7 @@ snapshots: vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1) vite-dev-rpc: 1.0.7(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.0)(yaml@2.7.1)) optionalDependencies: - '@nuxt/kit': 3.17.3(magicast@0.3.5) + '@nuxt/kit': 3.17.4(magicast@0.3.5) transitivePeerDependencies: - supports-color @@ -15932,7 +16003,7 @@ snapshots: espree: 10.3.0 esquery: 1.6.0 lodash: 4.17.21 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - supports-color From a50ca6b55ac4620deaea57f65cda43823a89ca31 Mon Sep 17 00:00:00 2001 From: Valentin Chmara Date: Thu, 22 May 2025 12:38:06 +0200 Subject: [PATCH 17/31] feat: custom file upload item generic type --- .../app/pages/components/file-upload.vue | 8 ++- src/runtime/components/FileUpload.vue | 66 +++++++++++-------- 2 files changed, 43 insertions(+), 31 deletions(-) diff --git a/playground/app/pages/components/file-upload.vue b/playground/app/pages/components/file-upload.vue index 500f572946..5049122780 100644 --- a/playground/app/pages/components/file-upload.vue +++ b/playground/app/pages/components/file-upload.vue @@ -1,10 +1,14 @@