import type { Slot } from 'vue'; import type { AvInteractiveProps } from '../../../../types/interfaces.types.js'; /** * AvFileUpload component props. */ export interface AvFileUploadProps extends AvInteractiveProps { /** * Unique identifier for the file upload component. * If not specified, a random ID is generated. * @default `file-upload-${crypto.randomUUID()}` */ id?: string; /** * ARIA label for file upload button. * @default '' */ ariaLabel?: string; /** * Accepted file types, specified as a string (like HTML `accept` attribute) * or an array of strings (which will be transformed into a string). * @default undefined */ accept?: string | string[]; /** * Maximum allowed file size in megabytes, or a function returning the limit for a given file. * @default undefined */ maxFileSizeMb?: number | ((file: File) => number | undefined); /** * Maximum number of files allowed (only applies when `enableMultiple` is true). * @default undefined */ maxFiles?: number; /** * Error message to be displayed in case of upload problem. * @default '' */ error?: string; /** * Message indicating that the uploaded file is valid. * @default '' */ validMessage?: string; /** * Array of selected files. * @default null */ modelValue?: File[] | null; /** * Max width of the component. * @default undefined */ maxWidth?: string; /** * Title of the file upload section. */ title: string; /** * Description of the file upload section. */ description: string; /** * Delete button label. * @default 'Remove' */ deleteButtonLabel?: string; /** * Name of the file to display as default (e.g., for server-persisted uploads). * @default undefined */ fileName?: string; /** * Label for the file count display. Displayed when multiple files are enabled. * You do not need to include the file count in this label; it will * be automatically prefixed with the number of selected files. * @example 'files selected' */ countLabel?: string; /** * Display in compact mode with file pills. * @default false */ compact?: boolean; /** * Enable multiple file uploads. * @default false */ enableMultiple?: boolean; /** * Prefix for the download button label in AvFilePill. If not provided, the default label will be "Download {name}". * @default 'Download' */ filePillDownloadPrefixLabel?: string; /** * Prefix for the delete button label in AvFilePill. If not provided, the default label will be "Delete {name}". * @default 'Delete' */ filePillDeletePrefixLabel?: string; /** * Ask for confirmation before deleting selected files. * @default false */ confirmDelete?: boolean; /** * Title for the confirmation modal when deleting files. * @default 'Are you sure you want to delete this(these) file(s)?' */ confirmDeleteModalTitle?: string; /** * Label for the confirm button in the delete confirmation modal. * @default 'Delete' */ confirmDeleteModalConfirmLabel?: string; /** * Label for the cancel button in the delete confirmation modal. * @default 'Cancel' */ confirmDeleteModalCancelLabel?: string; } type __VLS_Props = AvFileUploadProps; type __VLS_Slots = { /** * Slot for the hint description. */ hint?: Slot; /** * Slot for the left content. */ left?: Slot; /** * Slot for the confirm delete modal body. */ confirmDeleteModalBody?: Slot<{ files: (File | { name: string; })[]; }>; /** * Default slot for global content between the left and right icons. */ default?: Slot; }; type __VLS_PublicProps = __VLS_Props & { modelValue?: File[] | null; }; declare const __VLS_component: import("vue").DefineComponent<__VLS_PublicProps, { pendingDeleteFilesCount: import("vue").ComputedRef; }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, { "update:modelValue": (value: File[] | null | undefined) => any; } & { change: (payload: File[] | FileList) => any; "update:modelValue": (payload: File[] | null) => any; acceptTypeError: () => any; fileSizeError: () => any; maxFilesError: () => any; "update:validMessage": (payload: string | null) => any; "update:error": (payload: string | null) => any; deleteFile: (payload?: number | File | undefined) => any; }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{ onChange?: ((payload: File[] | FileList) => any) | undefined; "onUpdate:modelValue"?: ((payload: File[] | null) => any) | undefined; onAcceptTypeError?: (() => any) | undefined; onFileSizeError?: (() => any) | undefined; onMaxFilesError?: (() => any) | undefined; "onUpdate:validMessage"?: ((payload: string | null) => any) | undefined; "onUpdate:error"?: ((payload: string | null) => any) | undefined; onDeleteFile?: ((payload?: number | File | undefined) => any) | undefined; }>, { id: string; disabled: boolean; error: string; validMessage: string; ariaLabel: string; accept: string | string[]; confirmDelete: boolean; fileName: string; maxFileSizeMb: number | ((file: File) => number | undefined); enableMultiple: boolean; maxFiles: number; maxWidth: string; deleteButtonLabel: string; compact: boolean; filePillDownloadPrefixLabel: string; filePillDeletePrefixLabel: string; confirmDeleteModalTitle: string; confirmDeleteModalConfirmLabel: string; confirmDeleteModalCancelLabel: string; }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>; declare const _default: __VLS_WithSlots; export default _default; type __VLS_WithSlots = T & { new (): { $slots: S; }; };