/**
 * Configuração base compartilhada por **todos** os tipos de campo do DynamicForm.
 *
 * Toda interface específica de campo (ex: TextFieldConfig, SelectFieldConfig) estende esta interface.
 * As propriedades aqui definidas estão disponíveis em qualquer campo do formulário.
 */
export interface FieldConfig {
    /**
     * Tipo do campo. Deve ser um dos valores registrados em `FieldTypeMap`.
     * Exemplos: `'string'`, `'enum'`, `'date'`, `'lookup'`, `'boolean'`, etc.
     * Para tipos opcionais (ex: `'editor'`), o provider correspondente deve ser registrado no `AppConfig` ou `AppModule`.
     */
    type: FieldType;
    /**
     * Função que retorna se o campo é obrigatório dinamicamente.
     * Use uma função para que a obrigatoriedade possa mudar em resposta ao estado do formulário.
     * @example () => this.model.ativo === true
     */
    required?: () => boolean;
    /**
     * ID HTML do elemento de input gerado. Útil para testes automatizados e acessibilidade.
     */
    id?: string;
    /**
     * Nome do campo no modelo de dados. Deve corresponder à chave da propriedade no objeto de dados do formulário.
     * @example 'nomeCompleto'
     */
    name: string;
    /**
     * Rótulo exibido acima ou ao lado do campo no formulário.
     * Se omitido, o campo é exibido sem label.
     */
    label?: string;
    /**
     * Ícone de informação exibido ao lado do campo. Aceita classes de ícone (ex: `'ph ph-info'`).
     */
    infoSign?: string;
    /**
     * Texto do tooltip exibido ao passar o mouse sobre o campo ou sobre o infoSign.
     */
    tooltip?: string;
    /**
     * Texto de placeholder exibido enquanto o campo estiver vazio.
     */
    placeholder?: string;
    /**
     * Tempo em milissegundos para exibir automaticamente o infoSign quando o campo está focado.
     * Útil para orientar o usuário após um curto intervalo de inatividade.
     */
    displayTimeInfoSign?: number;
    /**
     * Quando `true`, o infoSign usa a referência do input focado como âncora do tooltip.
     * Útil para garantir que o tooltip apareça próximo ao campo correto em layouts complexos.
     */
    useInfoSignFocusedInputRef?: boolean;
    /**
     * ID do passo do Spotlight Tour associado a este campo.
     * Quando definido, o campo é automaticamente registrado no `SpotlightTourService`
     * e pode ser usado como alvo de um passo de tour ou destaque.
     * @example 'produto-nome'
     */
    spotlightStepId?: string;
}
export interface FieldTypeMap {
}
export type FieldType = keyof FieldTypeMap;
export type DynamicType = FieldTypeMap[keyof FieldTypeMap];
