import { AfterContentInit, ElementRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
import { FormControl } from '@angular/forms';
import { FileDto } from './models/file-dto';
import { FilePickerPermissions } from './models/file-picker-permissions';
import { UploadError } from './models/uploadError';
import * as i0 from "@angular/core";
import * as i1 from "@seniorsistemas/angular-components/common/deprecated-selector";
/**
 * @description Componente de upload de arquivos com suporte a seleção múltipla,
 * validação de tipo/tamanho, controle de permissões (adicionar, ler, remover),
 * download e cancelamento de uploads em andamento.
 *
 * @example
 * ```html
 * <s-file-picker
 *   [multiple]="true"
 *   accept="application/pdf"
 *   [maxFileSize]="5242880"
 *   [files]="arquivos"
 *   (uploadHandler)="onUpload($event)"
 *   (removeFile)="onRemove($event)" />
 * ```
 *
 * @category Inputs
 */
export declare class FilePickerComponent implements OnInit, OnDestroy, AfterContentInit {
    private readonly sanitizer;
    private readonly filePickerService;
    private readonly translate;
    static nextId: number;
    ADD_PERMISSION: FilePickerPermissions;
    READ_PERMISSION: FilePickerPermissions;
    REMOVE_PERMISSION: FilePickerPermissions;
    private readonly inputUpload;
    private readonly anchor;
    /** @description Identificador do componente no DOM. Gerado automaticamente se não informado. */
    id: string;
    /** @description Rótulo do botão de seleção de arquivo. */
    chooseLabel?: string;
    /** @description Rótulo do botão de remoção de arquivo. */
    removeLabel?: string;
    /** @description Rótulo do botão de cancelamento de upload. */
    cancelLabel?: string;
    /** @description Texto do tooltip exibido após upload bem-sucedido. */
    successTooltip?: string;
    /** @description Permite selecionar múltiplos arquivos ao mesmo tempo. */
    multiple?: boolean;
    /** @description Tipos MIME aceitos pelo seletor de arquivo (ex.: `'application/pdf,image/*'`). */
    accept?: string;
    /** @description Lista de extensões de arquivo aceitas para validação (ex.: `['.pdf', '.docx']`). @default [] */
    supportedExtensions: string[];
    /** @description Label ARIA para o nome do arquivo, para leitores de tela. */
    ariaLabelFileName?: string;
    /** @description Tamanho máximo por arquivo em bytes. */
    maxFileSize?: number;
    /** @description Tamanho máximo combinado de todos os arquivos em bytes. */
    maxCombinedFileSize?: number;
    /** @description Número máximo de arquivos que podem ser selecionados. */
    fileLimit?: number;
    /** @description Label ARIA para a barra de progresso do upload. */
    ariaLabelProgress?: string;
    /** @description Label ARIA para o ícone de sucesso. */
    ariaLabelSuccess?: string;
    /** @description Label ARIA para mensagens de erro de validação. */
    ariaLabelError?: string;
    /** @description Label ARIA para o botão de remoção de arquivo. */
    ariaLabelRemove?: string;
    /** @description FormControl externo vinculado ao componente para controle de estado. */
    formControl?: FormControl;
    /** @description Desabilita todas as interações do componente. @default false */
    disabled: boolean;
    /** @description Exibe a data de upload de cada arquivo. @default false */
    showFileUploadDate: boolean;
    /** @description Lista de permissões habilitadas no componente: `'add'`, `'read'`, `'remove'`. @default ALL_PERMISSIONS */
    permissions: FilePickerPermissions[];
    /**
     * @description Lista de arquivos já enviados a serem exibidos no componente.
     * Ao atribuir, os arquivos são processados e suas URLs são geradas para preview.
     */
    set files(files: FileDto[]);
    /** @description Emitido quando o usuário seleciona arquivos válidos para upload. */
    uploadHandler: EventEmitter<{
        files: FileDto[];
    }>;
    /** @description Emitido quando o usuário remove um arquivo da lista. */
    removeFile: EventEmitter<{
        file: File;
    }>;
    /** @description Emitido quando o usuário cancela um upload em andamento. Emite o índice do arquivo cancelado. */
    cancelUpload: EventEmitter<number>;
    /** @description Emitido quando o usuário clica para baixar um arquivo. */
    downloadFile: EventEmitter<{
        index: number;
        anchor: ElementRef;
    }>;
    /** @description Emitido quando um arquivo não passa na validação de tipo, tamanho ou limite. */
    validateErrors: EventEmitter<UploadError>;
    private _files;
    private readonly ngUsubscribe;
    isSmallDevice: boolean;
    inputValue: string;
    modifiedDate?: string;
    ngOnInit(): void;
    ngOnDestroy(): void;
    ngAfterContentInit(): void;
    onResize(): void;
    _onInputFileSelect($event: Event): void;
    onFileSelect(files: FileDto[]): void;
    onRemoveFile(file: FileDto): void;
    onCancelUpload(index: number): void;
    onDowloadFile(index: number): void;
    get files(): FileDto[];
    formatFileSize(size: number): string;
    private update;
    private isFileLimitExceeded;
    private isFileCombinedSizeExceeded;
    private isFileSizeExceeded;
    private isUnsupportedFileExtension;
    private clearFileInput;
    private getUploadDate;
    private setModifiedDate;
    static ɵfac: i0.ɵɵFactoryDeclaration<FilePickerComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<FilePickerComponent, "s-file-picker, s-file-upload", never, { "id": { "alias": "id"; "required": false; }; "chooseLabel": { "alias": "chooseLabel"; "required": false; }; "removeLabel": { "alias": "removeLabel"; "required": false; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; }; "successTooltip": { "alias": "successTooltip"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "supportedExtensions": { "alias": "supportedExtensions"; "required": false; }; "ariaLabelFileName": { "alias": "ariaLabelFileName"; "required": false; }; "maxFileSize": { "alias": "maxFileSize"; "required": false; }; "maxCombinedFileSize": { "alias": "maxCombinedFileSize"; "required": false; }; "fileLimit": { "alias": "fileLimit"; "required": false; }; "ariaLabelProgress": { "alias": "ariaLabelProgress"; "required": false; }; "ariaLabelSuccess": { "alias": "ariaLabelSuccess"; "required": false; }; "ariaLabelError": { "alias": "ariaLabelError"; "required": false; }; "ariaLabelRemove": { "alias": "ariaLabelRemove"; "required": false; }; "formControl": { "alias": "formControl"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "showFileUploadDate": { "alias": "showFileUploadDate"; "required": false; }; "permissions": { "alias": "permissions"; "required": false; }; "files": { "alias": "files"; "required": false; }; }, { "uploadHandler": "uploadHandler"; "removeFile": "removeFile"; "cancelUpload": "cancelUpload"; "downloadFile": "downloadFile"; "validateErrors": "validateErrors"; }, never, never, false, [{ directive: typeof i1.DeprecatedSelectorDirective; inputs: {}; outputs: {}; }]>;
}
