import { EventEmitter } from '@angular/core'; import { FormArray, FormControl, FormGroup } from '@angular/forms'; import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'; import { FileSelectEvent, FileUpload } from 'primeng/fileupload'; import * as i0 from "@angular/core"; type ButtonType = 'success' | 'success-outlined' | 'default' | 'default-filled' | 'default-outlined' | 'default-outlined-gray' | 'default-outlined-gray-icon-red' | 'default-outlined-gray-icon-gray' | 'cancel' | 'cancel-filled' | 'light-outline'; export type InputFileButtonConfig = { label?: string; type?: ButtonType; leftIcon?: string; rightIcon?: string; }; export declare const INPUT_FILE_ACCEPT_EXTENSIONS: readonly ["PDF", "DOC", "DOCX", "XLS", "XLSX", "PPT", "PPTX", "TXT", "CSV", "RTF", "JPG", "JPEG", "PNG", "GIF", "BMP", "WEBP", "SVG", "ZIP", "RAR", "JSON", "XML"]; export type InputFileAcceptExtension = (typeof INPUT_FILE_ACCEPT_EXTENSIONS)[number]; export type UploadSingleFormValue = { originalFileName: string; friendlyFileName: string; fileExtension: string; fileSize: number; contentType: string; lastModified: number; convertedData: string | FormData | null; }; export type UploadSingleFormControls = { originalFileName: FormControl; friendlyFileName: FormControl; fileExtension: FormControl; fileSize: FormControl; contentType: FormControl; lastModified: FormControl; convertedData: FormControl; }; export type UploadSingleFormGroup = FormGroup; export type UploadMultipleFormArray = FormArray; /** * Callback dos botões. Em modo single recebe um valor único; em modo multiple recebe a lista. * O componente decide qual formato passar com base em `uploadType`. */ export type InputFileButtonEvent = (value: UploadSingleFormValue | UploadSingleFormValue[]) => void | Promise; /** Cria FormGroup vazio para modo single (ou item de FormArray no modo multiple). */ export declare function createUploadSingleForm(): UploadSingleFormGroup; /** Cria FormArray vazio para modo multiple. */ export declare function createUploadMultipleForm(): UploadMultipleFormArray; export declare class InputFileComponent { private sanitizer; /** Modo do upload: `'single'` = 1 arquivo (usa FormGroup) · `'multiple'` = vários (usa FormArray). Default: `'single'`. */ uploadType: 'single' | 'multiple'; /** Formato salvo em `convertedData`: `'base64'` (data URL string) ou `'formData'` (FormData pronto para POST). Default: `'formData'`. */ uploadFormat: 'formData' | 'base64'; /** Criação de formulário: Single → `UploadSingleFormGroup` (use `createUploadSingleForm()`) · Multiple → `UploadMultipleFormArray` (use `createUploadMultipleForm()`). Se omitido, usa form interno. */ control?: UploadSingleFormGroup | UploadMultipleFormArray; /** * Extensões aceitas, ex: `['PDF', 'JPG']` (vira `accept=".pdf,.jpg"`). Arquivos com outra extensão * são bloqueados na seleção, com toast de aviso. Array vazio = aceita qualquer extensão * de {@link INPUT_FILE_ACCEPT_EXTENSIONS}. */ acceptExtensions: InputFileAcceptExtension[]; /** Tamanho máximo por arquivo em **MB** (ex: `5` = 5MB). `null` = sem limite. Convertido internamente pra bytes. */ maxFileSize: number | null; private _maxFileNumberUploaded; /** * Quantidade máxima de arquivos no modo multiple (1 à 10). Ignorado em single (sempre 1). Default: `10`. * Valores acima de {@link MAX_FILE_NUMBER_UPLOADED} são reduzidos ao teto do componente e geram um toast de aviso. */ set maxFileNumberUploaded(value: number); get maxFileNumberUploaded(): number; /** Renderiza o botão "Enviar" ao lado de "Anexar". Default: `false`. */ uploadButtonSendEnabled: boolean; /** Renderiza o botão "Cancelar" (limpa todos os arquivos ao clicar). Default: `false`. */ uploadButtonCancelEnabled: boolean; /** Callback disparado após clicar em "Anexar" e o picker do SO fechar. Recebe o valor atual do form (objeto em single, array em multiple). */ uploadButtonAttachEvent?: InputFileButtonEvent; /** Callback do botão "Enviar". Enquanto a Promise retornada não resolve, `internalSending` fica `true` (botão em loading e demais desabilitados). */ uploadButtonSendEvent?: InputFileButtonEvent; /** Callback do botão "Cancelar". Chamado **após** o form já ter sido limpo — útil para notificar o consumidor. */ uploadButtonCancelEvent?: InputFileButtonEvent; /** Habilita clique na badge do arquivo para abrir modal de preview (imagem ou PDF). Default: `false`. */ enableModalView: boolean; fileSelected: EventEmitter; fileRemoved: EventEmitter; fileUploadRef?: FileUpload; internalSending: boolean; isModalViewOpen: boolean; /** Índice do arquivo que está sendo visualizado no modal (só usado em modo multiple). */ modalViewIndex: number | null; private _internalForm; private _internalArray; /** Single: arquivo original (antes das conversões) + objectURL para preview. */ private _selectedFile; private _previewObjectUrl; /** Multiple: arquivos originais por índice + objectURLs por índice, paralelo ao FormArray. */ private _multipleFiles; private _multiplePreviewObjectUrls; private readonly messageService; constructor(sanitizer: DomSanitizer); private _uploadButtonAttach; /** Customiza o botão "Anexar" (`label`, `type`, `leftIcon`, `rightIcon`). */ set uploadButtonAttach(value: InputFileButtonConfig | undefined | null); get uploadButtonAttach(): Required; private _uploadButtonSend; /** Customiza o botão "Enviar". (`label`, `type`, `leftIcon`, `rightIcon`) */ set uploadButtonSend(value: InputFileButtonConfig | undefined | null); get uploadButtonSend(): Required; private _uploadButtonCancel; /** Customiza o botão "Cancelar". (`label`, `type`, `leftIcon`, `rightIcon`). Só aparece se `uploadButtonCancelEnabled === true`. */ set uploadButtonCancel(value: InputFileButtonConfig | undefined | null); get uploadButtonCancel(): Required; get uploadForm(): UploadSingleFormGroup; get uploadArray(): UploadMultipleFormArray; /** True se tem arquivo(s) — funciona pros dois modos. */ get hasFile(): boolean; /** Send habilitado se: single com arquivo, ou multiple com pelo menos 1 arquivo. */ get canSend(): boolean; /** Limite atingido — desabilita Attach em modo multiple. */ get isAttachAtLimit(): boolean; /** Tooltip da badge do arquivo, no formato `nome-do-arquivo.png (1.2MB)`. */ fileTooltip(control: UploadSingleFormGroup): string; /** Bytes → MB. Usa 2 casas abaixo de 0.1MB para arquivos pequenos não virarem `0.0MB`. */ private formatFileSizeMb; get acceptString(): string; /** * Extensões efetivamente aceitas: as configuradas em `acceptExtensions` ou, quando nada * foi configurado, todas as que o componente suporta. */ get allowedExtensions(): readonly InputFileAcceptExtension[]; get maxFileSizeBytes(): number; /** Passado para o p-fileUpload — 1 em modo single, o input em modo multiple. */ get effectiveFileLimit(): number; handleAttachClick(event: MouseEvent): Promise; handleSendClick(): Promise; handleCancelClick(): Promise; private currentEmitValue; resetUploadForm(): void; /** Remove um item específico do FormArray (modo multiple). */ removeUploadArrayItem(index: number): void; onPrimeFileSelect(event: FileSelectEvent): Promise; /** * Abre o modal de preview. Em single, chama sem índice. Em multiple, passa o índice. */ openModalView(index?: number): void; closeModalView(): void; /** FormGroup do arquivo atualmente sendo visualizado (single ou item do array). */ private currentPreviewControl; get previewFileName(): string; get isImagePreview(): boolean; get isPdfPreview(): boolean; get previewUrl(): string; get safePreviewUrl(): SafeResourceUrl; private triggerAttach; private rejectDisallowedExtensions; private notifyDisallowedExtensions; private fileNameList; private normalizedExtension; /** Descarta os arquivos que excedem `maxFileSize` e notifica o usuário. */ private rejectOversizedFiles; private notifyOversizedFiles; private rejectFilesOverLimit; private notifyFileNumberExceeded; private notifyConfiguredLimitExceeded; private buildValueFromFile; private toFriendlyName; private extractExtension; private stripExtension; private convertFile; private fileToBase64; private fileToFormData; private revokePreviewObjectUrl; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } export {};