import { AfterViewInit, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
import { ControlValueAccessor, FormControl, FormGroup, Validator } from '@angular/forms';
import { BehaviorSubject, Observable } from 'rxjs';
import { DynamicStructure, DynamicType, StructureType } from '@seniorsistemas/angular-components/dynamic-form';
import { CustomFieldsResponse } from './models';
import * as i0 from "@angular/core";
/**
 * @description Componente que carrega e renderiza campos customizados dinamicamente
 * a partir da API de customização de campos do Senior. Realiza chamadas HTTP para
 * obter a configuração dos campos, gera o formulário reativamente via {@link DynamicFormComponent}
 * e implementa {@link ControlValueAccessor} e {@link Validator} para integração completa
 * com formulários Angular.
 *
 * @example
 * ```html
 * <s-custom-fields
 *   formControlName="camposCustomizados"
 *   domain="plataforma"
 *   service="servico"
 *   entity="entidade" />
 * ```
 *
 * @category Inputs
 */
export declare class CustomFieldsComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator, OnChanges, AfterViewInit {
    private readonly customFieldsService;
    private readonly localeService;
    private readonly sanitizer;
    private readonly translateService;
    private readonly controlContainer;
    /** @description Domínio utilizado para buscar os campos customizados na API. Campo obrigatório. */
    domain: string;
    /** @description Nome do serviço utilizado para identificar os campos customizados. Campo obrigatório. */
    service: string;
    /** @description Nome da entidade para a qual os campos customizados são carregados. Campo obrigatório. */
    entity: string;
    /** @description Mensagem de erro exibida quando algum campo customizado está inválido. @default '' */
    invalidErrorLabel: string;
    /** @description Objeto com dados pré-carregados da entidade, evitando chamadas extras à API. */
    entityObject?: CustomFieldsResponse;
    /** @description Endpoint para buscar a configuração dos campos customizados. */
    customFieldsEndpoint: string;
    /** @description Endpoint para solicitar o upload de arquivos em campos do tipo blob. */
    fileLocationEndpoint: string;
    /** @description Endpoint para solicitar acesso a arquivos já enviados. */
    requestAccessEndpoint: string;
    /** @description Mensagem de erro exibida quando um campo obrigatório não está preenchido. @default '' */
    requiredErrorMessage: string;
    /** @description Tempo em ms após o qual o info-sign de campos do tipo data é exibido. @default 0 */
    displayTimeInfoSign: number;
    /** @description Exibe a data de upload nos campos do tipo arquivo. @default false */
    showFileUploadDate: boolean;
    /** @description Observable que sinaliza quando o componente deve iniciar o carregamento dos campos. @default null */
    ready$: BehaviorSubject<boolean> | null;
    /** @description Quando `true`, todos os campos customizados são desabilitados. */
    disableFields: boolean | undefined;
    protected rowType: StructureType;
    fields: DynamicType[];
    formGroup: FormGroup;
    protected dynamicStructure: DynamicStructure[];
    private ready;
    private onChange;
    private onTouched;
    private value;
    private readonly ngUsubscribe;
    private uploadCanceled;
    private hasBlob;
    private hasUploaded;
    constructor();
    get hasCustomFields(): boolean;
    get parentForm(): FormGroup;
    get parentControl(): FormControl;
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngOnDestroy(): void;
    registerOnChange(fn: Function): void;
    registerOnTouched(fn: Function): void;
    writeValue(value: any): void;
    setDisabledState(isDisabled: boolean): void;
    getCustomFields(): Observable<CustomFieldsResponse>;
    validate(): any;
    cleanFields(): void;
    private enableOrDisableFields;
    private _validateInputs;
    private _createForm;
    private parseValuesForFields;
    /**
     * Algumas equipes só setam valor no formulário, após o carregamento da tela
     * Como é bem padrão isso, foi necessário criar esse método para gerar o file
     * após setar o valor no formulário
     */
    private createFilesIfSetFormValuesAfterInit;
    private parseFieldsValues;
    private getDynamicType;
    private getSelectParameters;
    private getBooleanParameters;
    private getBlobParameters;
    /**
     * É necessário criar o fieldCustomization quando há um Blob na entidade para gerar o
     * com os fields inseridos e deletados.
     */
    private createFieldCustomization;
    private createBlobToFileUpload;
    private downloadFile;
    private uploadFile;
    private removeFile;
    private cancelUpload;
    private defaltCatchError;
    private getTranslateLabel;
    private addDisplayTimeInfoSignToFields;
    static ɵfac: i0.ɵɵFactoryDeclaration<CustomFieldsComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<CustomFieldsComponent, "s-custom-fields", never, { "domain": { "alias": "domain"; "required": true; }; "service": { "alias": "service"; "required": true; }; "entity": { "alias": "entity"; "required": true; }; "invalidErrorLabel": { "alias": "invalidErrorLabel"; "required": false; }; "entityObject": { "alias": "entityObject"; "required": false; }; "customFieldsEndpoint": { "alias": "customFieldsEndpoint"; "required": false; }; "fileLocationEndpoint": { "alias": "fileLocationEndpoint"; "required": false; }; "requestAccessEndpoint": { "alias": "requestAccessEndpoint"; "required": false; }; "requiredErrorMessage": { "alias": "requiredErrorMessage"; "required": false; }; "displayTimeInfoSign": { "alias": "displayTimeInfoSign"; "required": false; }; "showFileUploadDate": { "alias": "showFileUploadDate"; "required": false; }; "ready$": { "alias": "ready$"; "required": false; }; "disableFields": { "alias": "disableFields"; "required": false; }; }, {}, never, never, false, never>;
}
