import { EventEmitter, ComponentInterface } from '../../stencil-public-runtime'; export type BcmUploadStatus = 'uploading' | 'uploaded' | 'error'; export interface BcmUploadItem { id: string; file: File; status: BcmUploadStatus; progress?: number; } export interface BcmUploadErrorMessages { /** * Error message shown when a file exceeds the maxSize limit. */ maxSize?: string; /** * Error message shown when file type is not allowed by `accept`. */ type?: string; /** * Error message shown when `maxFileCount` is exceeded. */ maxFileCount?: string; /** * Error message used for `required` validation when no file is selected. */ required?: string; } export declare class BcmFileUpload implements ComponentInterface { host: HTMLElement; internals: ElementInternals; private fileInput?; private uploadTimer?; private uploadZoneRef?; name: string; label: string; caption?: string; multiple: boolean; accept: string; maxSize: number; required: boolean; disabled: boolean; size: 'medium' | 'small'; /** * Reserved for future backend upload integration. * Currently does not affect component behavior. */ uploadUrl?: string; /** * Maximum number of files allowed in total. * Only applied when `multiple` is true. */ maxFileCount?: number; /** * Allows consumers to override default error messages. */ customErrorMessages?: BcmUploadErrorMessages; private files; private dragActive; private maxSizeError; private typeError; private maxFileCountError; bcmFileChange: EventEmitter; bcmFileRemoved: EventEmitter; bcmUploadCanceled: EventEmitter; bcmFocus: EventEmitter; bcmBlur: EventEmitter; private internalMaxSizeInBytes; componentWillLoad(): void; disconnectedCallback(): void; handleMaxSizeChange(): void; /** * Normalize and check a file against the `accept` attribute. */ private isFileAccepted; /** * Update form value and validity state for form-associated behavior. */ private updateFormValueAndValidity; private emitChange; /** * Simulate upload progress. Replace with real upload logic if needed. */ private startFakeUpload; /** * Add files from input or drop. */ private addFiles; private removeFile; private cancelUpload; private onFileInputChange; private downloadFile; private handleDrop; private handleDragOver; private handleDragLeave; private openFileDialog; formResetCallback(): void; /** * When the browser or user calls element.focus(), * move focus to the upload zone. */ focus(options?: FocusOptions): void; private handleFocus; private handleBlur; private renderErrors; private renderUploadZone; private renderFileRow; render(): any; }