/**
 * Drop zone + file picker for selecting files with optional type/size validation.
 *
 * **Emits:** see {@link UiFileUploadBoxEmits}.
 * @category Form Inputs
 * @useCases file upload area, drag and drop attachments
 * @keywords file, upload, drag, drop, attachment
 * @related UiFileItem, UiButton
 */
export interface UiFileUploadBoxProps {
    /** HTML `accept` string (MIME and/or extensions). */
    accept?: string;
    /** Allow multiple files in the picker and from drop. */
    multiple?: boolean;
    /** Reject files larger than this (bytes). */
    maxFileSizeBytes?: number;
    /** Disables the drop zone, file picker, and drag feedback. */
    disabled?: boolean;
    /**
     * Footer left line (e.g. supported types). Clear or omit to hide.
     * Override the default footer with the **`footer`** slot for fully custom markup.
     */
    supportedTypesLabel?: string;
    /**
     * Footer right line (max size hint). If blank/whitespace-only and `maxFileSizeBytes` is set,
     * shows `Max size: …` from that limit. Set any non-empty string to replace that auto text (editable in Storybook Controls).
     */
    maxSizeLabel?: string;
    /** Heading inside the drop zone. */
    dropLabel?: string;
    /** Label for the secondary button. */
    chooseLabel?: string;
    /** Accessible name for the drop region. */
    ariaLabel?: string;
}
/**
 * Payload for the **error** emit when a file fails `accept` or size validation.
 */
export interface UiFileUploadBoxErrorPayload {
    /** Human-readable reason (for example unsupported type or oversize). */
    message: string;
    /** The file that failed validation, when available. */
    file?: File;
}
/**
 * Event map for {@link UiFileUploadBoxProps}. Use with `defineEmits<UiFileUploadBoxEmits>()`.
 */
export interface UiFileUploadBoxEmits {
    /**
     * Emitted with files that passed validation after pick or drop.
     * In single-file mode, the array contains at most one item.
     */
    'update:files': [files: File[]];
    /**
     * Emitted once per file that fails validation (wrong type or over max size).
     * Valid files in the same batch still emit **update:files** separately.
     */
    error: [payload: UiFileUploadBoxErrorPayload];
    /** Re-emitted from the drop zone when a drag gesture enters its bounds. */
    dragenter: [event: DragEvent];
    /** Re-emitted from the drop zone when a drag gesture leaves its bounds. */
    dragleave: [event: DragEvent];
    /** Re-emitted while dragging over the drop zone (use to customize `dropEffect`). */
    dragover: [event: DragEvent];
    /** Re-emitted when files are dropped; processing runs after this emit. */
    drop: [event: DragEvent];
    /** Emitted for clicks on the drop zone (before opening the picker unless the target is the choose button). */
    click: [event: MouseEvent];
    /** Emitted for keydown on the drop zone (Enter/Space opens the picker when enabled). */
    keydown: [event: KeyboardEvent];
    /** Emitted when the drop zone receives focus. */
    focus: [event: FocusEvent];
    /** Emitted when the drop zone loses focus. */
    blur: [event: FocusEvent];
    /** Emitted from the hidden file input after the user picks files (before validation). */
    change: [event: Event];
    /**
     * Emitted immediately before the native file picker opens (zone click, choose button, or keyboard).
     * Useful for analytics or closing overlays.
     */
    pickerOpen: [];
}
