import { ElementRef, EventEmitter, OnInit } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { ConfirmationTexts, CropperLabelsConfig, FileValidationErrors, ProfilePicturePickerData } from './models/index';
import * as i0 from "@angular/core";
/**
 * @description Componente para seleção, edição e remoção de foto de perfil do usuário.
 * Permite ao usuário fazer upload de uma imagem, recortá-la com o {@link ImageCropperService}
 * e confirmar ou remover a foto atual. Implementa {@link ControlValueAccessor} para uso
 * em formulários reativos e template-driven do Angular.
 *
 * @example
 * ```html
 * <s-profile-picture-picker
 *   formControlName="avatar"
 *   subtitle="Formatos aceitos: JPG e PNG"
 *   [maxFileSize]="2097152"
 *   accept="image/jpeg,image/png"
 *   (imageChange)="onImageChange($event)"
 *   (removedImage)="onImageRemoved()" />
 * ```
 *
 * @category Inputs
 */
export declare class ProfilePicturePickerComponent implements OnInit, ControlValueAccessor {
    private readonly imageCropperService;
    private readonly confirmationService;
    private readonly translateService;
    /**
     * @description Título simples exibido quando nenhuma imagem está selecionada.
     */
    simpleTitle: string;
    /**
     * @description Título de ação exibido como label principal do botão de upload.
     */
    actionTitle: string;
    /**
     * @description Legenda exibida abaixo do título, descrevendo formatos suportados
     * ou outras orientações para o usuário. Campo obrigatório.
     */
    subtitle: string;
    /**
     * @description Proporção (aspect ratio) do recorte da imagem.
     * Por exemplo, `1` para quadrado, `16/9` para widescreen.
     *
     * @default 1
     */
    aspectRatio: number;
    /**
     * @description Configurações de rótulos exibidos no componente de recorte de imagem (cropper).
     * Permite sobrescrever os textos padrão dos botões e instruções do cropper.
     */
    cropperLabelsConfig?: CropperLabelsConfig;
    /**
     * @description Texto do botão de remoção da foto atual.
     * Se não informado, utiliza o label padrão de remoção.
     */
    removeButtonLabel?: string;
    /**
     * @description Texto do botão de troca da foto atual.
     * Se não informado, utiliza o label padrão de alteração.
     */
    changeButtonLabel?: string;
    /**
     * @description Textos personalizados exibidos no diálogo de confirmação
     * ao remover ou substituir a foto. Permite sobrescrever título, mensagem e botões.
     */
    confirmationTexts?: ConfirmationTexts;
    /**
     * @description Tamanho máximo permitido para o arquivo de imagem, em bytes.
     * Quando o arquivo excede esse limite, o output `invalidFile` é emitido.
     */
    maxFileSize?: number;
    /**
     * @description Tipos MIME aceitos pelo input de arquivo.
     * Exemplo: `"image/jpeg,image/png"`.
     */
    accept?: string;
    /**
     * @description Lista de extensões de arquivo aceitas para validação.
     * Exemplo: `['.jpg', '.jpeg', '.png']`.
     *
     * @default []
     */
    supportedExtensions: string[];
    /**
     * @description Imagem atual do componente. Pode ser uma string base64, um objeto
     * {@link ProfilePicturePickerData} com metadados, ou `null` para sem imagem.
     *
     * @default null
     */
    image: string | ProfilePicturePickerData | null;
    uploadPicture: ElementRef | null;
    info: ElementRef | null;
    thumbnail: ElementRef | null;
    fileInput: ElementRef | null;
    /**
     * @deprecated Use `imageChange` em vez deste output.
     * @description Emitido ao selecionar ou recortar uma nova imagem. Emite a string base64 da imagem.
     */
    changedImage: EventEmitter<string>;
    /**
     * @description Emitido ao selecionar, recortar ou alterar a imagem.
     * Emite a string base64 ou um objeto {@link ProfilePicturePickerData} com os dados da imagem.
     */
    imageChange: EventEmitter<string | ProfilePicturePickerData>;
    /**
     * @description Emitido quando o usuário confirma a remoção da foto atual.
     */
    removedImage: EventEmitter<any>;
    /**
     * @description Emitido quando o arquivo selecionado não passa na validação.
     * Emite um objeto {@link FileValidationErrors} descrevendo os erros encontrados
     * (ex.: tamanho excedido, extensão inválida).
     */
    invalidFile: EventEmitter<FileValidationErrors>;
    get imageBase64(): string;
    private _onChange?;
    private _onTouched?;
    writeValue(value: string | ProfilePicturePickerData): void;
    registerOnChange(onChange: (value: string | ProfilePicturePickerData) => void): void;
    registerOnTouched(onTouched: () => void): void;
    ngOnInit(): void;
    onDragOver(event: DragEvent): void;
    onDragLeave(event: DragEvent): void;
    onDrop(event: DragEvent): void;
    onResize(): void;
    selectPhoto(): void;
    removePhoto(): void;
    photoSelected(event: any): void;
    private _showImageCropper;
    private _normalizeSuportedExtensions;
    private _validateData;
    private _validateFileExtension;
    private _validateFileSize;
    private _getWidthElement;
    static ɵfac: i0.ɵɵFactoryDeclaration<ProfilePicturePickerComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<ProfilePicturePickerComponent, "s-profile-picture-picker", never, { "simpleTitle": { "alias": "simpleTitle"; "required": false; }; "actionTitle": { "alias": "actionTitle"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": true; }; "aspectRatio": { "alias": "aspectRatio"; "required": false; }; "cropperLabelsConfig": { "alias": "cropperLabelsConfig"; "required": false; }; "removeButtonLabel": { "alias": "removeButtonLabel"; "required": false; }; "changeButtonLabel": { "alias": "changeButtonLabel"; "required": false; }; "confirmationTexts": { "alias": "confirmationTexts"; "required": false; }; "maxFileSize": { "alias": "maxFileSize"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "supportedExtensions": { "alias": "supportedExtensions"; "required": false; }; "image": { "alias": "image"; "required": false; }; }, { "changedImage": "changedImage"; "imageChange": "imageChange"; "removedImage": "removedImage"; "invalidFile": "invalidFile"; }, never, never, false, never>;
}
