import { ConnectedPosition } from '@angular/cdk/overlay';
import { OnInit } from '@angular/core';
import { AbstractControl, ControlValueAccessor, NgControl, ValidationErrors, Validator } from '@angular/forms';
import type { CalendarDay, DatePickerMode, DateRange } from './models';
import * as i0 from "@angular/core";
type DatepickerValue = Date | DateRange | Date[] | null;
type PickerView = 'calendar' | 'months' | 'years';
export declare class DatepickerComponent implements ControlValueAccessor, Validator, OnInit {
    private static idCounter;
    private static readonly DAYS_IN_WEEK;
    private static readonly MONTHS_IN_YEAR;
    private static readonly MONTHS_PER_ROW;
    private static readonly YEARS_PER_GRID;
    private static readonly YEARS_PER_ROW;
    private static readonly DEFAULT_MINUTE_STEP;
    private static readonly MAX_HOURS;
    private static readonly MAX_MINUTES;
    private static readonly HOURS_PER_MERIDIEM;
    private static nextId;
    /** HTML `id` aplicado ao elemento `<input>`. Auto-gerado quando omitido. */
    readonly inputId: import("@angular/core").InputSignal<string>;
    /** Atributo `name` do `<input>` nativo. */
    readonly name: import("@angular/core").InputSignal<string | undefined>;
    /** Texto exibido quando nenhum valor está selecionado. */
    readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
    /**
     * Modo de seleção do componente.
     * - `'date'` — seleção de data única (padrão)
     * - `'month'` — seleção de mês/ano
     * - `'datetime'` — data com hora (requer confirmação)
     * - `'time'` — apenas seleção de hora
     * - `'range'` — intervalo entre duas datas
     */
    readonly mode: import("@angular/core").InputSignal<DatePickerMode>;
    /**
     * Modo de seleção quando `mode` é `'date'`.
     * - `'single'` — seleção de uma única data (padrão)
     * - `'multiple'` — seleção de múltiplas datas avulsas
     */
    readonly selectionMode: import("@angular/core").InputSignal<"single" | "multiple">;
    /** Separador exibido entre as datas no modo `selectionMode = 'multiple'`. */
    readonly multipleSeparator: import("@angular/core").InputSignal<string>;
    /** Quando `true`, exibe o botão de ícone ao lado do campo. */
    readonly showIcon: import("@angular/core").InputSignal<boolean>;
    /**
     * Classe do ícone exibido no botão do campo.
     * Quando `mode` é `'time'`, o padrão muda automaticamente para `'fas fa-clock'`.
     */
    readonly icon: import("@angular/core").InputSignal<string>;
    /** Data mínima selecionável. Dias/meses anteriores ficam desabilitados. */
    readonly min: import("@angular/core").InputSignal<Date | null>;
    /** Data máxima selecionável. Dias/meses posteriores ficam desabilitados. */
    readonly max: import("@angular/core").InputSignal<Date | null>;
    /** Data exibida ao abrir o calendário quando nenhuma data está selecionada. */
    readonly defaultDate: import("@angular/core").InputSignal<Date | null>;
    /** Formato de exibição da data no campo (usado apenas para display). */
    readonly dateFormat: import("@angular/core").InputSignal<string>;
    /** Formato de exibição das horas: `'12'` ou `'24'`. */
    readonly hourFormat: import("@angular/core").InputSignal<"12" | "24">;
    /** Incremento em minutos ao usar as setas do time picker. */
    readonly minuteStep: import("@angular/core").InputSignal<number>;
    /** Quando `true`, exibe o campo de segundos no time picker. */
    readonly showSeconds: import("@angular/core").InputSignal<boolean>;
    /** Separador exibido entre as datas no modo `'range'`. */
    readonly rangeSeparator: import("@angular/core").InputSignal<string>;
    /** Abre o painel ao focar o input; foco permanece no input, não pula para o dropdown. */
    readonly showOnFocus: import("@angular/core").InputSignal<boolean>;
    /** Impede digitação manual; valor só pode ser selecionado pelo calendário. */
    readonly readonlyInput: import("@angular/core").InputSignal<boolean>;
    /** Primeiro dia da semana (0 = domingo, 1 = segunda-feira, ..., 6 = sábado). */
    readonly firstDayOfWeek: import("@angular/core").InputSignal<number>;
    /** Exibe/oculta a barra de botões Hoje e Limpar no rodapé. */
    readonly showButtonBar: import("@angular/core").InputSignal<boolean>;
    /** Exibe ícone de limpar inline no campo de input. */
    readonly showClear: import("@angular/core").InputSignal<boolean>;
    /** Exibe dias de meses adjacentes na grade do calendário. */
    readonly showOtherMonths: import("@angular/core").InputSignal<boolean>;
    /** Permite selecionar dias de meses adjacentes na grade do calendário. */
    readonly selectOtherMonths: import("@angular/core").InputSignal<boolean>;
    /** Fecha o painel após selecionar uma data no modo `datetime`. */
    readonly hideOnDateTimeSelect: import("@angular/core").InputSignal<boolean>;
    /** Incremento de horas no time picker. */
    readonly stepHour: import("@angular/core").InputSignal<number>;
    /** Incremento de segundos no time picker. */
    readonly stepSecond: import("@angular/core").InputSignal<number>;
    /** Índice de tab do campo de input. */
    readonly tabindex: import("@angular/core").InputSignal<number | undefined>;
    /** Foca automaticamente o campo ao carregar o componente. */
    readonly autofocus: import("@angular/core").InputSignal<boolean>;
    /** Datas específicas desabilitadas no calendário. */
    readonly disabledDates: import("@angular/core").InputSignal<Date[]>;
    /** Dias da semana desabilitados (0 = domingo, ..., 6 = sábado). */
    readonly disabledDays: import("@angular/core").InputSignal<number[]>;
    /** Estado desabilitado do componente. */
    readonly disabled: import("@angular/core").ModelSignal<boolean>;
    /** Emitido quando o campo perde o foco. */
    readonly blurred: import("@angular/core").OutputEmitterRef<Event>;
    /** Emitido quando o campo recebe o foco. */
    readonly focused: import("@angular/core").OutputEmitterRef<Event>;
    /** Emitido ao selecionar uma data, mês, horário ou intervalo. */
    readonly selected: import("@angular/core").OutputEmitterRef<DatepickerValue>;
    /** Emitido quando o painel do calendário fecha. Emite o elemento do painel. */
    readonly closed: import("@angular/core").OutputEmitterRef<HTMLElement>;
    /** Emitido ao clicar no botão "Hoje". */
    readonly todayClick: import("@angular/core").OutputEmitterRef<Date>;
    /** Emitido ao clicar no botão "Limpar" ou no ícone de limpar inline. */
    readonly clearClick: import("@angular/core").OutputEmitterRef<MouseEvent>;
    /** Emitido quando o mês visualizado muda. */
    readonly monthChange: import("@angular/core").OutputEmitterRef<{
        month: number;
        year: number;
    }>;
    /** Emitido quando o ano visualizado muda. */
    readonly yearChange: import("@angular/core").OutputEmitterRef<{
        month: number;
        year: number;
    }>;
    /** Emitido quando o painel do calendário abre. */
    readonly show: import("@angular/core").OutputEmitterRef<void>;
    /** Emitido quando o usuário digita manualmente no campo. */
    readonly valueInput: import("@angular/core").OutputEmitterRef<Event>;
    protected readonly maxHours = 24;
    protected readonly maxMinutes = 60;
    protected readonly timeInputMaxLength = 2;
    protected inputDate: string;
    protected ngControl: NgControl | null;
    protected readonly value: import("@angular/core").WritableSignal<Date | null>;
    protected readonly isOpen: import("@angular/core").WritableSignal<boolean>;
    protected readonly isFocused: import("@angular/core").WritableSignal<boolean>;
    protected readonly viewDate: import("@angular/core").WritableSignal<Date>;
    protected readonly pickerView: import("@angular/core").WritableSignal<PickerView>;
    protected readonly hours: import("@angular/core").WritableSignal<number>;
    protected readonly minutes: import("@angular/core").WritableSignal<number>;
    protected readonly seconds: import("@angular/core").WritableSignal<number>;
    protected readonly rangeValue: import("@angular/core").WritableSignal<DateRange | null>;
    protected readonly multipleValues: import("@angular/core").WritableSignal<Date[]>;
    protected readonly pendingRangeStart: import("@angular/core").WritableSignal<Date | null>;
    protected readonly hoverDate: import("@angular/core").WritableSignal<Date | null>;
    private _hasFormatError;
    private _isBadInput;
    private onValidatorChange;
    private _onChange;
    private _onTouched;
    private readonly popupPanel;
    private readonly increaseHourButton;
    private readonly iconButton;
    private readonly injector;
    private readonly hostElement;
    protected readonly resolvedIcon: import("@angular/core").Signal<string>;
    /** Indica se o time picker deve usar o formato de 12 horas com seletor AM/PM. */
    protected readonly is12HourFormat: import("@angular/core").Signal<boolean>;
    /** Hora exibida no time picker: 1–12 no formato 12h, 0–23 no formato 24h. */
    protected readonly displayHours: import("@angular/core").Signal<number>;
    /** Meridiano atual derivado da hora interna (0–23). */
    protected readonly amPm: import("@angular/core").Signal<"AM" | "PM">;
    protected readonly positions: ConnectedPosition[];
    protected readonly popupId: import("@angular/core").Signal<string>;
    protected readonly currentMonthIndex: import("@angular/core").Signal<number>;
    protected readonly currentYear: import("@angular/core").Signal<number>;
    protected readonly currentMonthKey: import("@angular/core").Signal<string>;
    protected readonly showCalendar: import("@angular/core").Signal<boolean>;
    protected readonly showTimePicker: import("@angular/core").Signal<boolean>;
    /** Seleção múltipla ativa: apenas no modo `date` com `selectionMode = 'multiple'`. */
    protected readonly isMultipleMode: import("@angular/core").Signal<boolean>;
    protected readonly orderedWeekDayKeys: import("@angular/core").Signal<string[]>;
    protected readonly inputType: import("@angular/core").Signal<"date" | "month" | "time" | "text" | "datetime-local">;
    protected readonly dialogAriaLabelKey: import("@angular/core").Signal<"platform.angular_components.datepicker_select_range" | "platform.angular_components.datepicker_select_date">;
    protected readonly placeholderKey: import("@angular/core").Signal<string>;
    protected readonly effectiveRange: import("@angular/core").Signal<{
        start: Date | null;
        end: Date | null;
    }>;
    protected readonly calendarWeeks: import("@angular/core").Signal<CalendarDay[][]>;
    protected readonly monthsGrid: import("@angular/core").Signal<{
        key: string;
        index: number;
    }[][]>;
    protected readonly currentDecadeStart: import("@angular/core").Signal<number>;
    protected readonly yearsGrid: import("@angular/core").Signal<number[][]>;
    protected readonly prevDisabled: import("@angular/core").Signal<boolean>;
    protected readonly nextDisabled: import("@angular/core").Signal<boolean>;
    protected readonly weekDayKeys: string[];
    protected readonly monthKeys: string[];
    ngOnInit(): void;
    writeValue(value: DatepickerValue): void;
    registerOnChange(fn: (value: DatepickerValue) => void): void;
    registerOnTouched(fn: () => void): void;
    setDisabledState(isDisabled: boolean): void;
    validate(control: AbstractControl): ValidationErrors | null;
    registerOnValidatorChange(fn: () => void): void;
    protected open(): void;
    /** Abre o painel sem transferir o foco para o dropdown (usado pelo showOnFocus). */
    private openOnFocus;
    /**
     * Define a view inicial do painel e posiciona o calendário no `defaultDate`
     * quando nenhum valor está selecionado.
     */
    private prepareOpenView;
    private focusBestCalendarTarget;
    protected closePanel(): void;
    protected toggle(): void;
    protected handleOverlayKeydown(event: KeyboardEvent): void;
    protected handleInputClick(): void;
    protected handleInputFocus(event: Event): void;
    protected handleNativeInput(event: Event): void;
    protected handleInputBlur(event: Event): void;
    protected handleInputChange(raw: string): void;
    protected handleTriggerKeydown(event: KeyboardEvent): void;
    protected navigatePrev(): void;
    protected navigateNext(): void;
    protected handleCalendarGridKeydown(event: KeyboardEvent): void;
    private static findEnabled;
    protected switchToMonths(): void;
    protected backToCalendar(): void;
    protected selectDate(day: CalendarDay): void;
    /** Adiciona/remove uma data da seleção múltipla. O painel permanece aberto. */
    private toggleMultipleDate;
    protected selectYear(year: number): void;
    protected selectMonth(monthIndex: number): void;
    protected selectToday(): void;
    protected clearValue(event: MouseEvent): void;
    protected confirm(): void;
    protected incrementHours(): void;
    protected decrementHours(): void;
    protected incrementMinutes(): void;
    protected decrementMinutes(): void;
    protected incrementSeconds(): void;
    protected decrementSeconds(): void;
    protected handleHoursKeydown(event: KeyboardEvent): void;
    protected handleMinutesKeydown(event: KeyboardEvent): void;
    protected handleSecondsKeydown(event: KeyboardEvent): void;
    protected handleHoursInput(event: Event): void;
    /** Alterna entre AM e PM somando/subtraindo 12 horas da hora interna. */
    protected toggleAmPm(): void;
    protected handleMinutesInput(event: Event): void;
    protected handleSecondsInput(event: Event): void;
    protected onDayHover(date: Date | null): void;
    protected isDateDisabled(date: Date): boolean;
    protected isYearSelected(year: number): boolean;
    protected isYearDisabled(year: number): boolean;
    protected isCurrentYear(year: number): boolean;
    protected isMonthSelected(monthIndex: number): boolean;
    protected isMonthDisabled(monthIndex: number): boolean;
    protected padTime(value: number): string;
    protected formatDayAriaLabel(date: Date): string;
    /** Formata o valor para exibição no input, aplicando rangeSeparator, dateFormat e multipleSeparator. */
    private formatForDisplay;
    private syncTimeToValue;
    private buildCalendarDay;
    private computeValidationErrors;
    private isDateRange;
    static ɵfac: i0.ɵɵFactoryDeclaration<DatepickerComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DatepickerComponent, "s-datepicker", never, { "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "multipleSeparator": { "alias": "multipleSeparator"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "defaultDate": { "alias": "defaultDate"; "required": false; "isSignal": true; }; "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; "hourFormat": { "alias": "hourFormat"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "rangeSeparator": { "alias": "rangeSeparator"; "required": false; "isSignal": true; }; "showOnFocus": { "alias": "showOnFocus"; "required": false; "isSignal": true; }; "readonlyInput": { "alias": "readonlyInput"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "showButtonBar": { "alias": "showButtonBar"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "showOtherMonths": { "alias": "showOtherMonths"; "required": false; "isSignal": true; }; "selectOtherMonths": { "alias": "selectOtherMonths"; "required": false; "isSignal": true; }; "hideOnDateTimeSelect": { "alias": "hideOnDateTimeSelect"; "required": false; "isSignal": true; }; "stepHour": { "alias": "stepHour"; "required": false; "isSignal": true; }; "stepSecond": { "alias": "stepSecond"; "required": false; "isSignal": true; }; "tabindex": { "alias": "tabindex"; "required": false; "isSignal": true; }; "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "disabledDates": { "alias": "disabledDates"; "required": false; "isSignal": true; }; "disabledDays": { "alias": "disabledDays"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "blurred": "blurred"; "focused": "focused"; "selected": "selected"; "closed": "closed"; "todayClick": "todayClick"; "clearClick": "clearClick"; "monthChange": "monthChange"; "yearChange": "yearChange"; "show": "show"; "valueInput": "valueInput"; }, never, never, true, never>;
}
export {};
