import { CalendarLocaleOptions } from '@seniorsistemas/angular-components/locale';
import { FieldConfig } from './field';
/**
 * Configuração para campos de data e hora.
 *
 * Quatro variantes disponíveis:
 * - `'date'` — apenas data (dia/mês/ano)
 * - `'time'` — apenas hora (hora:minuto[:segundo])
 * - `'dateTime'` — data com horário com timezone (UTC)
 * - `'localDateTime'` — data com horário sem timezone (local da máquina)
 *
 * Suporta restrições de intervalo, modo de visualização (dia/mês/ano), seleção múltipla
 * e localização de labels do calendário.
 */
export interface CalendarFieldConfig extends FieldConfig {
    /**
     * `'date'` — campo de data apenas.
     * `'time'` — campo de hora apenas.
     * `'dateTime'` — data e hora com timezone UTC.
     * `'localDateTime'` — data e hora sem timezone (local).
     */
    type: 'dateTime' | 'localDateTime' | 'time' | 'date';
    /**
     * Modo de visualização inicial do calendário.
     * `'date'` — grade de dias (padrão).
     * `'month'` — selector de mês.
     * `'year'` — seletor de ano.
     */
    view?: 'date' | 'month' | 'year';
    /**
     * Data mínima selecionável. Datas anteriores serão desabilitadas no calendário.
     */
    minDate?: Date;
    /**
     * Data máxima selecionável. Datas posteriores serão desabilitadas no calendário.
     */
    maxDate?: Date;
    /**
     * Data exibida inicialmente ao abrir o calendário quando nenhuma data está selecionada.
     */
    defaultDate?: Date;
    /**
     * Elemento DOM ao qual o painel do calendário será anexado.
     * Use `'body'` para evitar problemas de overflow em containers com `overflow: hidden`.
     */
    appendTo?: string;
    /**
     * Quando `true`, o calendário abre automaticamente ao focar o campo.
     * @default true
     */
    showOnFocus?: boolean;
    /**
     * Opções de localização do calendário (nomes de dias da semana, meses, etc.).
     * Se omitido, usa o locale padrão da aplicação.
     */
    calendarLocaleOptions?: CalendarLocaleOptions;
    /** Callback chamado quando o campo perde o foco. */
    onBlur?: (event: Event) => void;
    /** Callback chamado quando o campo recebe foco. */
    onFocus?: (event: Event) => void;
    /** Callback chamado quando o usuário seleciona uma data. */
    onSelect?: (event: any) => void;
    /** Callback chamado quando o usuário digita manualmente no campo. */
    onInput?: (event: any) => void;
    /** Callback chamado quando o painel do calendário é fechado. */
    onClose?: (event: any) => void;
    /** Callback chamado quando o usuário clica no botão "Hoje". */
    onTodayClick?: (event: any) => void;
    /** Callback chamado quando o usuário clica no botão "Limpar". */
    onClearClick?: (event: any) => void;
    /** Callback chamado quando o mês visualizado muda. */
    onMonthChange?: (event: any) => void;
    /** Callback chamado quando o ano visualizado muda. */
    onYearChange?: (event: any) => void;
    /**
     * Modo de seleção de datas.
     * `'single'` — seleção de uma data (padrão).
     * `'multiple'` — seleção de múltiplas datas incompatíveis.
     */
    selectionMode?: 'single' | 'multiple';
    /**
     * Separador exibido entre as datas de início e fim quando `selectionMode = 'range'`.
     * @default ' - '
     */
    rangeSeparator?: string;
    /**
     * Quando `true`, exibe o seletor de segundos no modo de hora.
     */
    showSeconds?: boolean;
}
declare module './field' {
    interface FieldTypeMap {
        dateTime: CalendarFieldConfig;
        localDateTime: CalendarFieldConfig;
        time: CalendarFieldConfig;
        date: CalendarFieldConfig;
    }
}
