{"version":3,"file":"seniorsistemas-angular-components-datepicker.mjs","sources":["../../projects/angular-components/datepicker/src/lib/datepicker/date.utils.ts","../../projects/angular-components/datepicker/src/lib/datepicker/datepicker.component.ts","../../projects/angular-components/datepicker/src/lib/datepicker/datepicker.component.html","../../projects/angular-components/datepicker/src/seniorsistemas-angular-components-datepicker.ts"],"sourcesContent":["import type { DateRange } from './models';\n\nexport type { DateRange };\n\nconst DAY_MATCH_GROUP = 3;\nconst MINUTES_MATCH_GROUP = 5;\nconst MAX_MONTH_INDEX = 11;\n\nexport function formatNativeDate(date: Date): string {\n    const year = date.getFullYear();\n    const month = String(date.getMonth() + 1).padStart(2, '0');\n    const day = String(date.getDate()).padStart(2, '0');\n    return `${year}-${month}-${day}`;\n}\n\n/**\n * Formata uma data segundo um padrão simples contendo os tokens `dd`, `MM` e `yyyy`.\n * Usado apenas para exibição em campos `type=\"text\"` (modo `range`), onde o browser\n * não controla o formato. Para `type=\"date\"` nativo o formato é definido pelo browser.\n */\nexport function formatWithPattern(date: Date, pattern: string): string {\n    const dd = String(date.getDate()).padStart(2, '0');\n    const MM = String(date.getMonth() + 1).padStart(2, '0');\n    const yyyy = String(date.getFullYear());\n    const yy = yyyy.slice(-2);\n    return pattern\n        .replace('yyyy', yyyy)\n        .replace('yy', yy)   // must come after yyyy\n        .replace('dd', dd)\n        .replace('MM', MM)\n        .replace('mm', MM);  // PrimeNG compat: lowercase mm = month\n}\n\nexport function formatTime(h: number, m: number, s?: number): string {\n    const base = `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`;\n    return s !== undefined ? `${base}:${String(s).padStart(2, '0')}` : base;\n}\n\n/** Parses yyyy-MM-dd. Returns null when invalid. */\nexport function parseDate(raw: string): Date | null {\n    const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(raw.trim());\n    if (!match) {\n        return null;\n    }\n    const year = parseInt(match[1], 10);\n    const month = parseInt(match[2], 10) - 1;\n    const day = parseInt(match[DAY_MATCH_GROUP], 10);\n    if (year < 1000) {\n        return null;\n    }\n    const date = new Date(year, month, day);\n    if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {\n        return null;\n    }\n    return date;\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n    return (\n        a.getFullYear() === b.getFullYear() &&\n        a.getMonth() === b.getMonth() &&\n        a.getDate() === b.getDate()\n    );\n}\n\nexport function stripTime(date: Date): number {\n    return new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n}\n\nexport function parseRangeInput(raw: string, separator = '—'): DateRange | null {\n    const trimmedSeparator = separator.trim() || '—';\n    const parts = raw.split(trimmedSeparator).map((part) => part.trim());\n    if (parts.length !== 2) {\n        return null;\n    }\n    const start = parseDate(parts[0]);\n    const end = parseDate(parts[1]);\n    if (!start || !end) {\n        return null;\n    }\n    return { start, end };\n}\n\nexport function parseTimeInput(\n    raw: string,\n    base: Date | null,\n    maxHours: number,\n    maxMinutes: number,\n): Date | null {\n    const match = /^(\\d{1,2}):(\\d{2})$/.exec(raw.trim());\n    if (!match) {\n        return null;\n    }\n    const hours = parseInt(match[1], 10);\n    const mins = parseInt(match[2], 10);\n    if (hours >= maxHours || mins >= maxMinutes) {\n        return null;\n    }\n    const baseDate = base ?? new Date();\n    return new Date(baseDate.getFullYear(), baseDate.getMonth(), baseDate.getDate(), hours, mins);\n}\n\nexport function parseYearInput(raw: string): Date | null {\n    const match = /^(\\d{4})$/.exec(raw.trim());\n    if (!match) {\n        return null;\n    }\n    const year = parseInt(match[1], 10);\n    if (year < 1000) {\n        return null;\n    }\n    return new Date(year, 0, 1);\n}\n\nexport function parseMonthInput(raw: string): Date | null {\n    const match = /^(\\d{4})-(\\d{2})$/.exec(raw.trim());\n    if (!match) {\n        return null;\n    }\n    const year = parseInt(match[1], 10);\n    const month = parseInt(match[2], 10) - 1;\n    if (year < 1000) {\n        return null;\n    }\n    if (month < 0 || month > MAX_MONTH_INDEX) {\n        return null;\n    }\n    return new Date(year, month, 1);\n}\n\nexport function parseDateTimeInput(raw: string): Date | null {\n    const match = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})$/.exec(raw.trim());\n    if (!match) {\n        return null;\n    }\n    const year = parseInt(match[1], 10);\n    const month = parseInt(match[2], 10) - 1;\n    const day = parseInt(match[DAY_MATCH_GROUP], 10);\n    const hours = parseInt(match[4], 10);\n    const mins = parseInt(match[MINUTES_MATCH_GROUP], 10);\n    if (year < 1000 || hours >= 24 || mins >= 60) {\n        return null;\n    }\n    const date = new Date(year, month, day, hours, mins);\n    if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {\n        return null;\n    }\n    return date;\n}\n\nexport function parseInput(\n    mode: string,\n    raw: string,\n    base: Date | null,\n    maxHours: number,\n    maxMinutes: number,\n    rangeSeparator = '—',\n): Date | DateRange | null {\n    if (!raw?.trim()) {\n        return null;\n    }\n    switch (mode) {\n        case 'range':\n            return parseRangeInput(raw, rangeSeparator);\n        case 'time':\n            return parseTimeInput(raw, base, maxHours, maxMinutes);\n        case 'month':\n            return parseMonthInput(raw);\n        case 'year':\n            return parseYearInput(raw);\n        case 'datetime':\n            return parseDateTimeInput(raw);\n        default:\n            return parseDate(raw);\n    }\n}\n\nexport function formatValueForInput(\n    mode: string,\n    value: Date | DateRange | Date[] | null,\n    rangeSeparator = ' — ',\n    dateFormat?: string,\n    multipleSeparator = ', ',\n): string {\n    if (!value) {\n        return '';\n    }\n    const formatPart = (date: Date): string =>\n        dateFormat ? formatWithPattern(date, dateFormat) : formatNativeDate(date);\n    if (Array.isArray(value)) {\n        return value.map(formatPart).join(multipleSeparator);\n    }\n    if (mode === 'range') {\n        const range = value as DateRange;\n        if (!range.start) {\n            return '';\n        }\n        return range.end\n            ? `${formatPart(range.start)}${rangeSeparator}${formatPart(range.end)}`\n            : formatPart(range.start);\n    }\n    if (!(value instanceof Date)) {\n        return '';\n    }\n    switch (mode) {\n        case 'time':\n            return formatTime(value.getHours(), value.getMinutes());\n        case 'month': {\n            const month = String(value.getMonth() + 1).padStart(2, '0');\n            return `${value.getFullYear()}-${month}`;\n        }\n        case 'year':\n            return String(value.getFullYear());\n        case 'datetime':\n            return `${formatNativeDate(value)}T${formatTime(value.getHours(), value.getMinutes())}`;\n        default:\n            return formatNativeDate(value);\n    }\n}\n","import { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { NgClass } from '@angular/common';\nimport {\n    afterNextRender,\n    Component,\n    computed,\n    ElementRef,\n    inject,\n    Injector,\n    input,\n    model,\n    OnInit,\n    output,\n    signal,\n    viewChild,\n} from '@angular/core';\nimport {\n    AbstractControl,\n    ControlValueAccessor,\n    FormsModule,\n    NG_VALIDATORS,\n    NG_VALUE_ACCESSOR,\n    NgControl,\n    ReactiveFormsModule,\n    ValidationErrors,\n    Validator,\n    Validators,\n} from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { formatValueForInput, isSameDay, parseInput, stripTime } from './date.utils';\nimport type { CalendarDay, DatePickerMode, DateRange } from './models';\n\ntype DatepickerValue = Date | DateRange | Date[] | null;\ntype PickerView = 'calendar' | 'months' | 'years';\n\nfunction numericKeysOnly(): MethodDecorator {\n    return (_target, _key, descriptor: PropertyDescriptor) => {\n        const original: (event: KeyboardEvent) => void = descriptor.value;\n        descriptor.value = function (this: unknown, event: KeyboardEvent): void {\n            const isValidKey =\n                ['ArrowUp', 'ArrowDown', 'Backspace', 'Delete', 'Tab'].includes(event.key) || /^\\d$/.test(event.key);\n            if (!isValidKey) {\n                event.preventDefault();\n            } else {\n                original.call(this, event);\n            }\n        };\n        return descriptor;\n    };\n}\n\n@Component({\n    selector: 's-datepicker',\n    standalone: true,\n    imports: [\n        NgClass,\n        TranslateModule,\n        CdkTrapFocus,\n        CdkOverlayOrigin,\n        CdkConnectedOverlay,\n        FormsModule,\n        ReactiveFormsModule,\n    ],\n    templateUrl: './datepicker.component.html',\n    styleUrl: './datepicker.component.scss',\n    host: {\n        '[class.no-icon]': '!showIcon()',\n    },\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: DatepickerComponent,\n            multi: true,\n        },\n        {\n            provide: NG_VALIDATORS,\n            useExisting: DatepickerComponent,\n            multi: true,\n        },\n    ],\n})\nexport class DatepickerComponent implements ControlValueAccessor, Validator, OnInit {\n    private static idCounter = 0;\n    private static readonly DAYS_IN_WEEK = 7;\n    private static readonly MONTHS_IN_YEAR = 12;\n    private static readonly MONTHS_PER_ROW = 3;\n    private static readonly YEARS_PER_GRID = 12;\n    private static readonly YEARS_PER_ROW = 3;\n    private static readonly DEFAULT_MINUTE_STEP = 5;\n    private static readonly MAX_HOURS = 24;\n    private static readonly MAX_MINUTES = 60;\n    private static readonly HOURS_PER_MERIDIEM = 12;\n\n    private static nextId(): string {\n        DatepickerComponent.idCounter++;\n        return `s-datepicker-${DatepickerComponent.idCounter}`;\n    }\n\n    // ── Inputs ────────────────────────────────────────────────────────────\n\n    /** HTML `id` aplicado ao elemento `<input>`. Auto-gerado quando omitido. */\n    readonly inputId = input<string>(DatepickerComponent.nextId());\n\n    /** Atributo `name` do `<input>` nativo. */\n    readonly name = input<string>();\n\n    /** Texto exibido quando nenhum valor está selecionado. */\n    readonly placeholder = input<string>();\n\n    /**\n     * Modo de seleção do componente.\n     * - `'date'` — seleção de data única (padrão)\n     * - `'month'` — seleção de mês/ano\n     * - `'datetime'` — data com hora (requer confirmação)\n     * - `'time'` — apenas seleção de hora\n     * - `'range'` — intervalo entre duas datas\n     */\n    readonly mode = input<DatePickerMode>('date');\n\n    /**\n     * Modo de seleção quando `mode` é `'date'`.\n     * - `'single'` — seleção de uma única data (padrão)\n     * - `'multiple'` — seleção de múltiplas datas avulsas\n     */\n    readonly selectionMode = input<'single' | 'multiple'>('single');\n\n    /** Separador exibido entre as datas no modo `selectionMode = 'multiple'`. */\n    readonly multipleSeparator = input<string>(', ');\n\n    /** Quando `true`, exibe o botão de ícone ao lado do campo. */\n    readonly showIcon = input<boolean>(true);\n\n    /**\n     * Classe do ícone exibido no botão do campo.\n     * Quando `mode` é `'time'`, o padrão muda automaticamente para `'fas fa-clock'`.\n     */\n    readonly icon = input<string>('fas fa-calendar');\n\n    /** Data mínima selecionável. Dias/meses anteriores ficam desabilitados. */\n    readonly min = input<Date | null>(null);\n\n    /** Data máxima selecionável. Dias/meses posteriores ficam desabilitados. */\n    readonly max = input<Date | null>(null);\n\n    /** Data exibida ao abrir o calendário quando nenhuma data está selecionada. */\n    readonly defaultDate = input<Date | null>(null);\n\n    /** Formato de exibição da data no campo (usado apenas para display). */\n    readonly dateFormat = input<string>('dd/MM/yyyy');\n\n    /** Formato de exibição das horas: `'12'` ou `'24'`. */\n    readonly hourFormat = input<'12' | '24'>('24');\n\n    /** Incremento em minutos ao usar as setas do time picker. */\n    readonly minuteStep = input<number>(DatepickerComponent.DEFAULT_MINUTE_STEP);\n\n    /** Quando `true`, exibe o campo de segundos no time picker. */\n    readonly showSeconds = input<boolean>(false);\n\n    /** Separador exibido entre as datas no modo `'range'`. */\n    readonly rangeSeparator = input<string>(' — ');\n\n    /** Abre o painel ao focar o input; foco permanece no input, não pula para o dropdown. */\n    readonly showOnFocus = input<boolean>(true);\n\n    /** Impede digitação manual; valor só pode ser selecionado pelo calendário. */\n    readonly readonlyInput = input<boolean>(false);\n\n    /** Primeiro dia da semana (0 = domingo, 1 = segunda-feira, ..., 6 = sábado). */\n    readonly firstDayOfWeek = input<number>(0);\n\n    /** Exibe/oculta a barra de botões Hoje e Limpar no rodapé. */\n    readonly showButtonBar = input<boolean>(true);\n\n    /** Exibe ícone de limpar inline no campo de input. */\n    readonly showClear = input<boolean>(false);\n\n    /** Exibe dias de meses adjacentes na grade do calendário. */\n    readonly showOtherMonths = input<boolean>(true);\n\n    /** Permite selecionar dias de meses adjacentes na grade do calendário. */\n    readonly selectOtherMonths = input<boolean>(false);\n\n    /** Fecha o painel após selecionar uma data no modo `datetime`. */\n    readonly hideOnDateTimeSelect = input<boolean>(false);\n\n    /** Incremento de horas no time picker. */\n    readonly stepHour = input<number>(1);\n\n    /** Incremento de segundos no time picker. */\n    readonly stepSecond = input<number>(1);\n\n    /** Índice de tab do campo de input. */\n    readonly tabindex = input<number>();\n\n    /** Foca automaticamente o campo ao carregar o componente. */\n    readonly autofocus = input<boolean>(false);\n\n    /** Datas específicas desabilitadas no calendário. */\n    readonly disabledDates = input<Date[]>([]);\n\n    /** Dias da semana desabilitados (0 = domingo, ..., 6 = sábado). */\n    readonly disabledDays = input<number[]>([]);\n\n    // ── Two-way models ────────────────────────────────────────────────────\n\n    /** Estado desabilitado do componente. */\n    readonly disabled = model<boolean>(false);\n\n    // ── Outputs ───────────────────────────────────────────────────────────\n\n    /** Emitido quando o campo perde o foco. */\n    readonly blurred = output<Event>();\n\n    /** Emitido quando o campo recebe o foco. */\n    readonly focused = output<Event>();\n\n    /** Emitido ao selecionar uma data, mês, horário ou intervalo. */\n    readonly selected = output<DatepickerValue>();\n\n    /** Emitido quando o painel do calendário fecha. Emite o elemento do painel. */\n    readonly closed = output<HTMLElement>();\n\n    /** Emitido ao clicar no botão \"Hoje\". */\n    readonly todayClick = output<Date>();\n\n    /** Emitido ao clicar no botão \"Limpar\" ou no ícone de limpar inline. */\n    readonly clearClick = output<MouseEvent>();\n\n    /** Emitido quando o mês visualizado muda. */\n    readonly monthChange = output<{ month: number; year: number }>();\n\n    /** Emitido quando o ano visualizado muda. */\n    readonly yearChange = output<{ month: number; year: number }>();\n\n    /** Emitido quando o painel do calendário abre. */\n    readonly show = output<void>();\n\n    /** Emitido quando o usuário digita manualmente no campo. */\n    readonly valueInput = output<Event>();\n\n    // ── Internal state ────────────────────────────────────────────────────\n\n    protected readonly maxHours = DatepickerComponent.MAX_HOURS;\n    protected readonly maxMinutes = DatepickerComponent.MAX_MINUTES;\n    protected readonly timeInputMaxLength = 2;\n\n    protected inputDate = '';\n\n    protected ngControl: NgControl | null = null;\n\n    protected readonly value = signal<Date | null>(null);\n    protected readonly isOpen = signal(false);\n    protected readonly viewDate = signal(new Date());\n    protected readonly pickerView = signal<PickerView>('calendar');\n    protected readonly hours = signal(0);\n    protected readonly minutes = signal(0);\n    protected readonly seconds = signal(0);\n    protected readonly rangeValue = signal<DateRange | null>(null);\n    protected readonly multipleValues = signal<Date[]>([]);\n    protected readonly pendingRangeStart = signal<Date | null>(null);\n    protected readonly hoverDate = signal<Date | null>(null);\n    private _hasFormatError = false;\n    private _isBadInput = false;\n    private onValidatorChange: () => void = () => {};\n    private _onChange: (value: DatepickerValue) => void = () => {};\n    private _onTouched: () => void = () => {};\n\n    private readonly popupPanel = viewChild('popupPanel', { read: ElementRef });\n    private readonly increaseHourButton = viewChild('increaseHourButton', { read: ElementRef });\n    private readonly iconButton = viewChild('iconButton', { read: ElementRef });\n    private readonly injector = inject(Injector);\n    private readonly hostElement = inject(ElementRef);\n\n    // ── Computed ──────────────────────────────────────────────────────────\n\n    protected readonly resolvedIcon = computed(() => (this.mode() === 'time' ? 'fas fa-clock' : this.icon()));\n\n    /** Indica se o time picker deve usar o formato de 12 horas com seletor AM/PM. */\n    protected readonly is12HourFormat = computed(() => this.hourFormat() === '12');\n\n    /** Hora exibida no time picker: 1–12 no formato 12h, 0–23 no formato 24h. */\n    protected readonly displayHours = computed(() => {\n        if (!this.is12HourFormat()) return this.hours();\n        const h12 = this.hours() % DatepickerComponent.HOURS_PER_MERIDIEM;\n        return h12 === 0 ? DatepickerComponent.HOURS_PER_MERIDIEM : h12;\n    });\n\n    /** Meridiano atual derivado da hora interna (0–23). */\n    protected readonly amPm = computed<'AM' | 'PM'>(() =>\n        this.hours() < DatepickerComponent.HOURS_PER_MERIDIEM ? 'AM' : 'PM',\n    );\n\n    protected readonly positions: ConnectedPosition[] = [\n        { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n        { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n    ];\n\n    protected readonly popupId = computed(() => `${this.inputId()}-popup`);\n\n    protected readonly currentMonthIndex = computed(() => this.viewDate().getMonth());\n    protected readonly currentYear = computed(() => this.viewDate().getFullYear());\n    protected readonly currentMonthKey = computed(() => this.monthKeys[this.currentMonthIndex()]);\n\n    protected readonly showCalendar = computed(() => this.mode() !== 'time');\n    protected readonly showTimePicker = computed(() => this.mode() === 'datetime' || this.mode() === 'time');\n\n    /** Seleção múltipla ativa: apenas no modo `date` com `selectionMode = 'multiple'`. */\n    protected readonly isMultipleMode = computed(() => this.selectionMode() === 'multiple' && this.mode() === 'date');\n\n    protected readonly orderedWeekDayKeys = computed(() => {\n        const start = this.firstDayOfWeek();\n        return [...this.weekDayKeys.slice(start), ...this.weekDayKeys.slice(0, start)];\n    });\n\n    protected readonly inputType = computed(() => {\n        if (this.isMultipleMode()) return 'text';\n        const mode = this.mode();\n        if (mode === 'datetime') return 'datetime-local';\n        if (mode === 'range' || mode === 'year') return 'text';\n        return mode;\n    });\n\n    protected readonly dialogAriaLabelKey = computed(() =>\n        this.mode() === 'range'\n            ? 'platform.angular_components.datepicker_select_range'\n            : 'platform.angular_components.datepicker_select_date',\n    );\n\n    protected readonly placeholderKey = computed(() => {\n        const mode = this.mode();\n        return `platform.angular_components.datepicker_placeholder_${mode}`;\n    });\n\n    protected readonly effectiveRange = computed((): { start: Date | null; end: Date | null } => {\n        const pending = this.pendingRangeStart();\n        const hover = this.hoverDate();\n        if (pending) {\n            if (hover) {\n                const [start, end] = pending.getTime() <= hover.getTime() ? [pending, hover] : [hover, pending];\n                return { start, end };\n            }\n            return { start: pending, end: null };\n        }\n        return this.rangeValue() ?? { start: null, end: null };\n    });\n\n    protected readonly calendarWeeks = computed((): CalendarDay[][] => {\n        const year = this.currentYear();\n        const month = this.currentMonthIndex();\n        const today = new Date();\n        const selected = this.value();\n        const range = this.effectiveRange();\n        const rangeStartTime = range.start ? stripTime(range.start) : null;\n        const rangeEndTime = range.end ? stripTime(range.end) : null;\n\n        const firstDayOfMonth = new Date(year, month, 1);\n        const startWeekDay = firstDayOfMonth.getDay();\n        const adjustedStartDay = (startWeekDay - this.firstDayOfWeek() + 7) % 7;\n        const daysInMonth = new Date(year, month + 1, 0).getDate();\n        const daysInPrevMonth = new Date(year, month, 0).getDate();\n\n        const allDays: CalendarDay[] = [];\n\n        for (let i = adjustedStartDay - 1; i >= 0; i--) {\n            const date = new Date(year, month - 1, daysInPrevMonth - i);\n            allDays.push(this.buildCalendarDay(date, false, today, selected, range, rangeStartTime, rangeEndTime));\n        }\n\n        for (let d = 1; d <= daysInMonth; d++) {\n            const date = new Date(year, month, d);\n            allDays.push(this.buildCalendarDay(date, true, today, selected, range, rangeStartTime, rangeEndTime));\n        }\n\n        const totalCells =\n            Math.ceil(allDays.length / DatepickerComponent.DAYS_IN_WEEK) * DatepickerComponent.DAYS_IN_WEEK;\n        let nextDay = 1;\n        while (allDays.length < totalCells) {\n            const date = new Date(year, month + 1, nextDay);\n            nextDay++;\n            allDays.push(this.buildCalendarDay(date, false, today, selected, range, rangeStartTime, rangeEndTime));\n        }\n\n        const weeks: CalendarDay[][] = [];\n        for (let i = 0; i < allDays.length; i += DatepickerComponent.DAYS_IN_WEEK) {\n            weeks.push(allDays.slice(i, i + DatepickerComponent.DAYS_IN_WEEK));\n        }\n        return weeks;\n    });\n\n    protected readonly monthsGrid = computed(() => {\n        const rows: { key: string; index: number }[][] = [];\n        for (let i = 0; i < DatepickerComponent.MONTHS_IN_YEAR; i += DatepickerComponent.MONTHS_PER_ROW) {\n            rows.push([\n                { key: this.monthKeys[i], index: i },\n                { key: this.monthKeys[i + 1], index: i + 1 },\n                { key: this.monthKeys[i + 2], index: i + 2 },\n            ]);\n        }\n        return rows;\n    });\n\n    protected readonly currentDecadeStart = computed(() => Math.floor(this.currentYear() / 10) * 10);\n\n    protected readonly yearsGrid = computed(() => {\n        const start = this.currentDecadeStart();\n        const rows: number[][] = [];\n        for (let i = 0; i < DatepickerComponent.YEARS_PER_GRID; i += DatepickerComponent.YEARS_PER_ROW) {\n            rows.push([start + i, start + i + 1, start + i + 2]);\n        }\n        return rows;\n    });\n\n    protected readonly prevDisabled = computed(() => {\n        const min = this.min();\n        if (!min) return false;\n        const view = this.viewDate();\n        if (this.pickerView() === 'years') {\n            return this.currentDecadeStart() <= min.getFullYear();\n        }\n        if (this.pickerView() === 'months') {\n            return view.getFullYear() <= min.getFullYear();\n        }\n        return (\n            view.getFullYear() < min.getFullYear() ||\n            (view.getFullYear() === min.getFullYear() && view.getMonth() <= min.getMonth())\n        );\n    });\n\n    protected readonly nextDisabled = computed(() => {\n        const max = this.max();\n        if (!max) return false;\n        const view = this.viewDate();\n        if (this.pickerView() === 'years') {\n            return this.currentDecadeStart() + DatepickerComponent.YEARS_PER_GRID - 1 >= max.getFullYear();\n        }\n        if (this.pickerView() === 'months') {\n            return view.getFullYear() >= max.getFullYear();\n        }\n        return (\n            view.getFullYear() > max.getFullYear() ||\n            (view.getFullYear() === max.getFullYear() && view.getMonth() >= max.getMonth())\n        );\n    });\n\n    // ── Translation keys ──────────────────────────────────────────────────\n\n    protected readonly weekDayKeys = [\n        'platform.angular_components.datepicker_day_sun',\n        'platform.angular_components.datepicker_day_mon',\n        'platform.angular_components.datepicker_day_tue',\n        'platform.angular_components.datepicker_day_wed',\n        'platform.angular_components.datepicker_day_thu',\n        'platform.angular_components.datepicker_day_fri',\n        'platform.angular_components.datepicker_day_sat',\n    ];\n\n    protected readonly monthKeys = [\n        'platform.angular_components.datepicker_month_jan',\n        'platform.angular_components.datepicker_month_feb',\n        'platform.angular_components.datepicker_month_mar',\n        'platform.angular_components.datepicker_month_apr',\n        'platform.angular_components.datepicker_month_may',\n        'platform.angular_components.datepicker_month_jun',\n        'platform.angular_components.datepicker_month_jul',\n        'platform.angular_components.datepicker_month_aug',\n        'platform.angular_components.datepicker_month_sep',\n        'platform.angular_components.datepicker_month_oct',\n        'platform.angular_components.datepicker_month_nov',\n        'platform.angular_components.datepicker_month_dec',\n    ];\n\n    // ── Lifecycle ─────────────────────────────────────────────────────────\n\n    public ngOnInit(): void {\n        this.ngControl = this.injector.get(NgControl, null, { self: true, optional: true });\n        afterNextRender(() => {\n            const d = this.defaultDate();\n            if (d && !this.value() && !this.rangeValue() && this.multipleValues().length === 0) {\n                this.value.set(d);\n                this.inputDate = this.formatForDisplay(d);\n                this.viewDate.set(new Date(d.getFullYear(), d.getMonth(), 1));\n                this._onChange(d);\n            }\n        }, { injector: this.injector });\n    }\n\n    // ── ControlValueAccessor ──────────────────────────────────────────────\n\n    public writeValue(value: DatepickerValue): void {\n        if (!value || (Array.isArray(value) && value.length === 0)) {\n            this.value.set(null);\n            this.rangeValue.set(null);\n            this.multipleValues.set([]);\n            this.inputDate = '';\n            return;\n        }\n        if (Array.isArray(value)) {\n            const sorted = [...value].sort((a, b) => a.getTime() - b.getTime());\n            this.multipleValues.set(sorted);\n            this.inputDate = this.formatForDisplay(sorted);\n            const first = sorted[0];\n            this.viewDate.set(new Date(first.getFullYear(), first.getMonth(), 1));\n            return;\n        }\n        if (this.isDateRange(value)) {\n            this.rangeValue.set(value);\n            this.inputDate = this.formatForDisplay(value);\n            if (value.start) {\n                this.viewDate.set(new Date(value.start.getFullYear(), value.start.getMonth(), 1));\n            }\n            return;\n        }\n        this.value.set(value as Date);\n        this.inputDate = this.formatForDisplay(value as Date);\n        const d = value as Date;\n        this.viewDate.set(new Date(d.getFullYear(), d.getMonth(), 1));\n        this.hours.set(d.getHours());\n        this.minutes.set(d.getMinutes());\n        this.seconds.set(d.getSeconds());\n    }\n\n    public registerOnChange(fn: (value: DatepickerValue) => void): void {\n        this._onChange = fn;\n    }\n\n    public registerOnTouched(fn: () => void): void {\n        this._onTouched = fn;\n    }\n\n    public setDisabledState(isDisabled: boolean): void {\n        this.disabled.set(isDisabled);\n    }\n\n    // ── Validator ─────────────────────────────────────────────────────────\n\n    public validate(control: AbstractControl): ValidationErrors | null {\n        let value: DatepickerValue;\n        if (this.isMultipleMode()) {\n            value = this.multipleValues();\n        } else if (this.mode() === 'range') {\n            value = this.rangeValue();\n        } else {\n            value = this.value();\n        }\n        return this.computeValidationErrors(value, control);\n    }\n\n    public registerOnValidatorChange(fn: () => void): void {\n        this.onValidatorChange = fn;\n    }\n\n    // ── Public actions ────────────────────────────────────────────────────\n\n    protected open(): void {\n        if (this.disabled()) return;\n        this.isOpen.set(true);\n        this.prepareOpenView();\n        this.show.emit();\n        if (this.mode() === 'time') {\n            afterNextRender(() => this.increaseHourButton()?.nativeElement.focus(), { injector: this.injector });\n        } else {\n            this.focusBestCalendarTarget();\n        }\n    }\n\n    /** Abre o painel sem transferir o foco para o dropdown (usado pelo showOnFocus). */\n    private openOnFocus(): void {\n        if (this.disabled() || this.isOpen()) return;\n        this.isOpen.set(true);\n        this.prepareOpenView();\n        this.show.emit();\n        // Foco permanece no input — não chama focusBestCalendarTarget()\n    }\n\n    /**\n     * Define a view inicial do painel e posiciona o calendário no `defaultDate`\n     * quando nenhum valor está selecionado.\n     */\n    private prepareOpenView(): void {\n        const defaultDate = this.defaultDate();\n        if (defaultDate && !this.value() && !this.rangeValue()) {\n            this.viewDate.set(new Date(defaultDate.getFullYear(), defaultDate.getMonth(), 1));\n        }\n        if (this.mode() === 'month') {\n            this.pickerView.set('months');\n        } else if (this.mode() === 'year') {\n            this.pickerView.set('years');\n        } else {\n            this.pickerView.set('calendar');\n        }\n    }\n\n    private focusBestCalendarTarget(): void {\n        afterNextRender(\n            () => {\n                const panel = this.popupPanel()?.nativeElement as HTMLElement | undefined;\n                if (!panel) return;\n                const target =\n                    panel.querySelector<HTMLElement>('[data-focus=\"selected\"]') ??\n                    panel.querySelector<HTMLElement>('[data-focus=\"today\"]') ??\n                    panel.querySelector<HTMLElement>('button:not([disabled])');\n                target?.focus();\n            },\n            { injector: this.injector },\n        );\n    }\n\n    protected closePanel(): void {\n        const panel = (this.popupPanel()?.nativeElement ?? this.hostElement.nativeElement) as HTMLElement;\n        this.isOpen.set(false);\n        this.pendingRangeStart.set(null);\n        this.hoverDate.set(null);\n        this._onTouched();\n        this.closed.emit(panel);\n\n        afterNextRender(\n            () => {\n                this.iconButton()?.nativeElement.focus();\n            },\n            { injector: this.injector },\n        );\n    }\n\n    protected toggle(): void {\n        if (this.isOpen()) {\n            this.closePanel();\n        } else {\n            this.open();\n        }\n    }\n\n    protected handleOverlayKeydown(event: KeyboardEvent): void {\n        if (event.key === 'Escape') {\n            this.closePanel();\n        }\n    }\n\n    protected handleInputClick(): void {}\n\n    protected handleInputFocus(event: Event): void {\n        this.focused.emit(event);\n        if (this.showOnFocus()) {\n            this.openOnFocus();\n        }\n    }\n\n    protected handleNativeInput(event: Event): void {\n        this.valueInput.emit(event);\n    }\n\n    protected handleInputBlur(event: Event): void {\n        this.blurred.emit(event);\n        const input = event.target as HTMLInputElement;\n        this._isBadInput = input.validity?.badInput ?? false;\n        if (!input.value?.trim()) {\n            this.onValidatorChange();\n        }\n        if (this.isOpen()) {\n            const relatedTarget = (event as FocusEvent).relatedTarget as HTMLElement | null;\n            const panel = this.popupPanel()?.nativeElement as HTMLElement | undefined;\n            if (!relatedTarget || !panel?.contains(relatedTarget)) {\n                if (this.mode() === 'time') {\n                    this.increaseHourButton()?.nativeElement.focus();\n                } else {\n                    const target =\n                        panel?.querySelector<HTMLElement>('[data-focus=\"selected\"]') ??\n                        panel?.querySelector<HTMLElement>('[data-focus=\"today\"]') ??\n                        panel?.querySelector<HTMLElement>('button:not([disabled])');\n                    target?.focus();\n                }\n            }\n        }\n    }\n\n    protected handleInputChange(raw: string): void {\n        if (!raw?.trim()) {\n            this.value.set(null);\n            this.rangeValue.set(null);\n            this._hasFormatError = false;\n            this.onValidatorChange();\n            this._onChange(null);\n            return;\n        }\n        const parsed = parseInput(this.mode(), raw, this.value(), this.maxHours, this.maxMinutes, this.rangeSeparator());\n        if (parsed === null) {\n            this._hasFormatError = true;\n            this.onValidatorChange();\n            return;\n        }\n        this._hasFormatError = false;\n        this._isBadInput = false;\n        this.onValidatorChange();\n        if (this.isDateRange(parsed)) {\n            this.rangeValue.set(parsed);\n            this._onChange(parsed);\n        } else {\n            const d = parsed as Date;\n            this.value.set(d);\n            this.viewDate.set(new Date(d.getFullYear(), d.getMonth(), 1));\n            this.hours.set(d.getHours());\n            this.minutes.set(d.getMinutes());\n            this._onChange(d);\n        }\n    }\n\n    protected handleTriggerKeydown(event: KeyboardEvent): void {\n        if (event.key === 'Enter' || event.key === ' ') {\n            event.preventDefault();\n            this.open();\n        }\n    }\n\n    // ── Navigation ────────────────────────────────────────────────────────\n\n    protected navigatePrev(): void {\n        const view = this.viewDate();\n        if (this.pickerView() === 'years') {\n            this.viewDate.set(new Date(view.getFullYear() - 10, view.getMonth(), 1));\n            this.yearChange.emit({ month: view.getMonth(), year: view.getFullYear() - 10 });\n        } else if (this.pickerView() === 'months') {\n            this.viewDate.set(new Date(view.getFullYear() - 1, view.getMonth(), 1));\n            this.yearChange.emit({ month: view.getMonth(), year: view.getFullYear() - 1 });\n        } else {\n            const newDate = new Date(view.getFullYear(), view.getMonth() - 1, 1);\n            this.viewDate.set(newDate);\n            this.monthChange.emit({ month: newDate.getMonth(), year: newDate.getFullYear() });\n        }\n    }\n\n    protected navigateNext(): void {\n        const view = this.viewDate();\n        if (this.pickerView() === 'years') {\n            this.viewDate.set(new Date(view.getFullYear() + 10, view.getMonth(), 1));\n            this.yearChange.emit({ month: view.getMonth(), year: view.getFullYear() + 10 });\n        } else if (this.pickerView() === 'months') {\n            this.viewDate.set(new Date(view.getFullYear() + 1, view.getMonth(), 1));\n            this.yearChange.emit({ month: view.getMonth(), year: view.getFullYear() + 1 });\n        } else {\n            const newDate = new Date(view.getFullYear(), view.getMonth() + 1, 1);\n            this.viewDate.set(newDate);\n            this.monthChange.emit({ month: newDate.getMonth(), year: newDate.getFullYear() });\n        }\n    }\n\n    protected handleCalendarGridKeydown(event: KeyboardEvent): void {\n        const ARROWS = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'];\n        if (!ARROWS.includes(event.key)) return;\n\n        event.preventDefault();\n\n        const grid = event.currentTarget as HTMLElement;\n        const buttons = Array.from(grid.querySelectorAll<HTMLButtonElement>('button[role=\"gridcell\"]'));\n        const currentIdx = buttons.indexOf(event.target as HTMLButtonElement);\n        if (currentIdx === -1) return;\n\n        let delta = 0;\n        if (event.key === 'ArrowRight') delta = 1;\n        else if (event.key === 'ArrowLeft') delta = -1;\n        else if (event.key === 'ArrowDown') delta = DatepickerComponent.DAYS_IN_WEEK;\n        else if (event.key === 'ArrowUp') delta = -DatepickerComponent.DAYS_IN_WEEK;\n\n        const nextIdx = currentIdx + delta;\n\n        if (nextIdx < 0) {\n            if (this.prevDisabled()) return;\n            this.navigatePrev();\n            afterNextRender(\n                () => {\n                    const panel = this.popupPanel()?.nativeElement as HTMLElement;\n                    const btns = Array.from(\n                        panel?.querySelectorAll<HTMLButtonElement>('button[role=\"gridcell\"]') ?? [],\n                    );\n                    const targetIdx = Math.max(0, btns.length + nextIdx);\n                    const target =\n                        DatepickerComponent.findEnabled(btns, targetIdx, -1) ??\n                        DatepickerComponent.findEnabled(btns, targetIdx, 1);\n                    target?.focus();\n                },\n                { injector: this.injector },\n            );\n            return;\n        }\n\n        if (nextIdx >= buttons.length) {\n            if (this.nextDisabled()) return;\n            this.navigateNext();\n            afterNextRender(\n                () => {\n                    const panel = this.popupPanel()?.nativeElement as HTMLElement;\n                    const btns = Array.from(\n                        panel?.querySelectorAll<HTMLButtonElement>('button[role=\"gridcell\"]') ?? [],\n                    );\n                    const targetIdx = Math.min(nextIdx - buttons.length, btns.length - 1);\n                    const target =\n                        DatepickerComponent.findEnabled(btns, targetIdx, 1) ??\n                        DatepickerComponent.findEnabled(btns, targetIdx, -1);\n                    target?.focus();\n                },\n                { injector: this.injector },\n            );\n            return;\n        }\n\n        if (!buttons[nextIdx]?.disabled) {\n            buttons[nextIdx].focus();\n        }\n    }\n\n    private static findEnabled(\n        buttons: HTMLButtonElement[],\n        startIdx: number,\n        direction: 1 | -1,\n    ): HTMLButtonElement | null {\n        for (let i = startIdx; i >= 0 && i < buttons.length; i += direction) {\n            if (!buttons[i].disabled) return buttons[i];\n        }\n        return null;\n    }\n\n    protected switchToMonths(): void {\n        this.pickerView.set('months');\n        this.focusBestCalendarTarget();\n    }\n\n    protected backToCalendar(): void {\n        this.pickerView.set('calendar');\n        this.focusBestCalendarTarget();\n    }\n\n    // ── Selection ─────────────────────────────────────────────────────────\n\n    protected selectDate(day: CalendarDay): void {\n        if (day.isDisabled) return;\n        if (this.isMultipleMode()) {\n            this.toggleMultipleDate(day.date);\n            return;\n        }\n        if (this.mode() === 'range') {\n            const pending = this.pendingRangeStart();\n            if (!pending) {\n                this.pendingRangeStart.set(day.date);\n            } else {\n                const [start, end] =\n                    pending.getTime() <= day.date.getTime() ? [pending, day.date] : [day.date, pending];\n                const range: DateRange = { start, end };\n                this.rangeValue.set(range);\n                this.inputDate = this.formatForDisplay(range);\n                this._onChange(range);\n                this.selected.emit(range);\n                this.closePanel();\n            }\n            return;\n        }\n        const newDate = new Date(\n            day.date.getFullYear(),\n            day.date.getMonth(),\n            day.date.getDate(),\n            this.hours(),\n            this.minutes(),\n            this.showSeconds() ? this.seconds() : 0,\n        );\n        this.value.set(newDate);\n        if (this.mode() === 'date') {\n            this.inputDate = this.formatForDisplay(newDate);\n            this._onChange(newDate);\n            this.selected.emit(newDate);\n            this.closePanel();\n        } else if (this.mode() === 'datetime') {\n            this.inputDate = this.formatForDisplay(newDate);\n            this._onChange(newDate);\n            this.selected.emit(newDate);\n            if (this.hideOnDateTimeSelect()) {\n                this.closePanel();\n            }\n        }\n    }\n\n    /** Adiciona/remove uma data da seleção múltipla. O painel permanece aberto. */\n    private toggleMultipleDate(date: Date): void {\n        const normalized = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n        const existing = this.multipleValues();\n        const index = existing.findIndex((d) => isSameDay(d, normalized));\n        const next =\n            index >= 0\n                ? existing.filter((_, i) => i !== index)\n                : [...existing, normalized].sort((a, b) => a.getTime() - b.getTime());\n        this.multipleValues.set(next);\n        this.inputDate = this.formatForDisplay(next);\n        const emitValue = next.length ? next : null;\n        this.onValidatorChange();\n        this._onChange(emitValue);\n        this.selected.emit(emitValue);\n    }\n\n    protected selectYear(year: number): void {\n        if (this.isYearDisabled(year)) return;\n        const newDate = new Date(year, 0, 1);\n        this.value.set(newDate);\n        this.inputDate = this.formatForDisplay(newDate);\n        this._onChange(newDate);\n        this.selected.emit(newDate);\n        this.closePanel();\n    }\n\n    protected selectMonth(monthIndex: number): void {\n        if (this.isMonthDisabled(monthIndex)) return;\n        const year = this.currentYear();\n        const newViewDate = new Date(year, monthIndex, 1);\n        if (this.mode() === 'month') {\n            this.value.set(newViewDate);\n            this.inputDate = this.formatForDisplay(newViewDate);\n            this._onChange(newViewDate);\n            this.selected.emit(newViewDate);\n            this.closePanel();\n        } else {\n            this.viewDate.set(newViewDate);\n            this.pickerView.set('calendar');\n            this.focusBestCalendarTarget();\n        }\n    }\n\n    protected selectToday(): void {\n        const today = new Date();\n        if (!this.isDateDisabled(today)) {\n            const calDay: CalendarDay = {\n                date: today,\n                dayOfMonth: today.getDate(),\n                isCurrentMonth: true,\n                isToday: true,\n                isSelected: false,\n                isDisabled: false,\n                isRangeStart: false,\n                isRangeEnd: false,\n                isInRange: false,\n            };\n            this.selectDate(calDay);\n            this.todayClick.emit(today);\n        }\n    }\n\n    protected clearValue(event: MouseEvent): void {\n        this.value.set(null);\n        this.hours.set(0);\n        this.minutes.set(0);\n        this.seconds.set(0);\n        this.rangeValue.set(null);\n        this.multipleValues.set([]);\n        this.pendingRangeStart.set(null);\n        this.inputDate = '';\n        this._onChange(null);\n        this.clearClick.emit(event);\n        this.closePanel();\n    }\n\n    protected confirm(): void {\n        const current = this.value() ?? new Date();\n        const confirmed = new Date(\n            current.getFullYear(),\n            current.getMonth(),\n            current.getDate(),\n            this.hours(),\n            this.minutes(),\n            this.showSeconds() ? this.seconds() : 0,\n        );\n        this.value.set(confirmed);\n        this.inputDate = this.formatForDisplay(confirmed);\n        this._onChange(confirmed);\n        this.selected.emit(confirmed);\n        this.closePanel();\n    }\n\n    // ── Time picker ───────────────────────────────────────────────────────\n\n    protected incrementHours(): void {\n        this.hours.set((this.hours() + this.stepHour()) % this.maxHours);\n        this.syncTimeToValue();\n    }\n\n    protected decrementHours(): void {\n        this.hours.set((this.hours() - this.stepHour() + this.maxHours) % this.maxHours);\n        this.syncTimeToValue();\n    }\n\n    protected incrementMinutes(): void {\n        this.minutes.set((this.minutes() + this.minuteStep()) % this.maxMinutes);\n        this.syncTimeToValue();\n    }\n\n    protected decrementMinutes(): void {\n        this.minutes.set((this.minutes() - this.minuteStep() + this.maxMinutes) % this.maxMinutes);\n        this.syncTimeToValue();\n    }\n\n    protected incrementSeconds(): void {\n        this.seconds.set((this.seconds() + this.stepSecond()) % 60);\n        this.syncTimeToValue();\n    }\n\n    protected decrementSeconds(): void {\n        this.seconds.set((this.seconds() - this.stepSecond() + 60) % 60);\n        this.syncTimeToValue();\n    }\n\n    @numericKeysOnly()\n    protected handleHoursKeydown(event: KeyboardEvent): void {\n        if (event.key === 'ArrowUp') {\n            event.preventDefault();\n            this.incrementHours();\n        } else if (event.key === 'ArrowDown') {\n            event.preventDefault();\n            this.decrementHours();\n        }\n    }\n\n    @numericKeysOnly()\n    protected handleMinutesKeydown(event: KeyboardEvent): void {\n        if (event.key === 'ArrowUp') {\n            event.preventDefault();\n            this.incrementMinutes();\n        } else if (event.key === 'ArrowDown') {\n            event.preventDefault();\n            this.decrementMinutes();\n        }\n    }\n\n    @numericKeysOnly()\n    protected handleSecondsKeydown(event: KeyboardEvent): void {\n        if (event.key === 'ArrowUp') {\n            event.preventDefault();\n            this.incrementSeconds();\n        } else if (event.key === 'ArrowDown') {\n            event.preventDefault();\n            this.decrementSeconds();\n        }\n    }\n\n    protected handleHoursInput(event: Event): void {\n        const raw = (event.target as HTMLInputElement).value;\n        const parsed = parseInt(raw, 10);\n        if (isNaN(parsed)) return;\n        if (this.is12HourFormat()) {\n            const half = DatepickerComponent.HOURS_PER_MERIDIEM;\n            const h12 = Math.min(half, Math.max(1, parsed));\n            const base = h12 % half;\n            this.hours.set(this.amPm() === 'PM' ? base + half : base);\n        } else {\n            this.hours.set(Math.min(this.maxHours - 1, Math.max(0, parsed)));\n        }\n        this.syncTimeToValue();\n    }\n\n    /** Alterna entre AM e PM somando/subtraindo 12 horas da hora interna. */\n    protected toggleAmPm(): void {\n        const half = DatepickerComponent.HOURS_PER_MERIDIEM;\n        this.hours.set(this.hours() < half ? this.hours() + half : this.hours() - half);\n        this.syncTimeToValue();\n    }\n\n    protected handleMinutesInput(event: Event): void {\n        const raw = (event.target as HTMLInputElement).value;\n        const parsed = parseInt(raw, 10);\n        if (!isNaN(parsed)) {\n            this.minutes.set(Math.min(this.maxMinutes - 1, Math.max(0, parsed)));\n            this.syncTimeToValue();\n        }\n    }\n\n    protected handleSecondsInput(event: Event): void {\n        const raw = (event.target as HTMLInputElement).value;\n        const parsed = parseInt(raw, 10);\n        if (!isNaN(parsed)) {\n            this.seconds.set(Math.min(59, Math.max(0, parsed)));\n            this.syncTimeToValue();\n        }\n    }\n\n    protected onDayHover(date: Date | null): void {\n        if (this.mode() === 'range') {\n            this.hoverDate.set(date);\n        }\n    }\n\n    // ── Helpers ───────────────────────────────────────────────────────────\n\n    protected isDateDisabled(date: Date): boolean {\n        const min = this.min();\n        const max = this.max();\n        if (min && stripTime(date) < stripTime(min)) return true;\n        if (max && stripTime(date) > stripTime(max)) return true;\n        const disabledDays = this.disabledDays();\n        if (disabledDays.length && disabledDays.includes(date.getDay())) return true;\n        const disabledDates = this.disabledDates();\n        if (disabledDates.length && disabledDates.some(d => isSameDay(d, date))) return true;\n        return false;\n    }\n\n    protected isYearSelected(year: number): boolean {\n        const selected = this.value();\n        return !!selected && selected.getFullYear() === year;\n    }\n\n    protected isYearDisabled(year: number): boolean {\n        const min = this.min();\n        const max = this.max();\n        if (min && year < min.getFullYear()) return true;\n        if (max && year > max.getFullYear()) return true;\n        return false;\n    }\n\n    protected isCurrentYear(year: number): boolean {\n        return year === new Date().getFullYear();\n    }\n\n    protected isMonthSelected(monthIndex: number): boolean {\n        const selected = this.value();\n        return !!selected && selected.getMonth() === monthIndex && selected.getFullYear() === this.currentYear();\n    }\n\n    protected isMonthDisabled(monthIndex: number): boolean {\n        const year = this.currentYear();\n        const min = this.min();\n        const max = this.max();\n        if (min && (year < min.getFullYear() || (year === min.getFullYear() && monthIndex < min.getMonth()))) {\n            return true;\n        }\n        if (max && (year > max.getFullYear() || (year === max.getFullYear() && monthIndex > max.getMonth()))) {\n            return true;\n        }\n        return false;\n    }\n\n    protected padTime(value: number): string {\n        return String(value).padStart(2, '0');\n    }\n\n    protected formatDayAriaLabel(date: Date): string {\n        return date.toLocaleDateString(undefined, {\n            weekday: 'long',\n            year: 'numeric',\n            month: 'long',\n            day: 'numeric',\n        });\n    }\n\n    /** Formata o valor para exibição no input, aplicando rangeSeparator, dateFormat e multipleSeparator. */\n    private formatForDisplay(value: Date | DateRange | Date[] | null): string {\n        return formatValueForInput(\n            this.mode(),\n            value,\n            this.rangeSeparator(),\n            this.dateFormat(),\n            this.multipleSeparator(),\n        );\n    }\n\n    private syncTimeToValue(): void {\n        const date = this.value() ?? new Date();\n        const newDate = new Date(\n            date.getFullYear(),\n            date.getMonth(),\n            date.getDate(),\n            this.hours(),\n            this.minutes(),\n            this.showSeconds() ? this.seconds() : 0,\n        );\n        this.value.set(newDate);\n        this.inputDate = this.formatForDisplay(newDate);\n        if (this.mode() === 'time') {\n            this._onChange(newDate);\n        }\n    }\n\n    private buildCalendarDay(\n        date: Date,\n        isCurrentMonth: boolean,\n        today: Date,\n        selected: Date | null,\n        range: { start: Date | null; end: Date | null },\n        rangeStartTime: number | null,\n        rangeEndTime: number | null,\n    ): CalendarDay {\n        const isRangeStart = range.start ? isSameDay(date, range.start) : false;\n        const isRangeEnd = range.end ? isSameDay(date, range.end) : false;\n        const dateTime = stripTime(date);\n        const isInRange =\n            rangeStartTime !== null && rangeEndTime !== null\n                ? dateTime > rangeStartTime && dateTime < rangeEndTime\n                : false;\n        const isSelected = this.isMultipleMode()\n            ? this.multipleValues().some((d) => isSameDay(d, date))\n            : selected\n              ? isSameDay(date, selected)\n              : false;\n        return {\n            dayOfMonth: date.getDate(),\n            isToday: isSameDay(date, today),\n            isSelected,\n            isDisabled: this.isDateDisabled(date) || (!isCurrentMonth && !this.selectOtherMonths()),\n            date,\n            isCurrentMonth,\n            isRangeStart,\n            isRangeEnd,\n            isInRange,\n        };\n    }\n\n    private computeValidationErrors(value: DatepickerValue, control: AbstractControl): ValidationErrors | null {\n        if (this._hasFormatError) return { invalidFormat: true };\n        if (this._isBadInput) return { badInput: true };\n        if (!value || (Array.isArray(value) && value.length === 0)) return Validators.nullValidator(control);\n        const min = this.min();\n        const max = this.max();\n        if (Array.isArray(value)) {\n            for (const d of value) {\n                if (min && stripTime(d) < stripTime(min)) return { min: { min, actual: d } };\n                if (max && stripTime(d) > stripTime(max)) return { max: { max, actual: d } };\n            }\n            return Validators.nullValidator(control);\n        }\n        if (this.isDateRange(value)) {\n            if (value.start && min && stripTime(value.start) < stripTime(min)) {\n                return { min: { min, actual: value.start } };\n            }\n            if (value.end && max && stripTime(value.end) > stripTime(max)) {\n                return { max: { max, actual: value.end } };\n            }\n            return Validators.nullValidator(control);\n        }\n        const d = value as Date;\n        if (this.mode() === 'year') {\n            if (min && d.getFullYear() < min.getFullYear()) return { min: { min, actual: d } };\n            if (max && d.getFullYear() > max.getFullYear()) return { max: { max, actual: d } };\n            return Validators.nullValidator(control);\n        }\n        if (min && stripTime(d) < stripTime(min)) return { min: { min, actual: d } };\n        if (max && stripTime(d) > stripTime(max)) return { max: { max, actual: d } };\n        return Validators.nullValidator(control);\n    }\n\n    private isDateRange(value: unknown): value is DateRange {\n        return typeof value === 'object' && value !== null && 'start' in value && 'end' in value;\n    }\n}\n\n","<div\n    cdkOverlayOrigin\n    #trigger=\"cdkOverlayOrigin\"\n    class=\"relative flex w-full items-center\"\n    role=\"combobox\"\n    aria-haspopup=\"grid\"\n    [attr.aria-expanded]=\"isOpen()\"\n    [attr.aria-controls]=\"popupId()\"\n>\n    <input\n        class=\"hide-native-icon h-[35px] w-full rounded-small border border-solid border-grayscale-30 pl-3 text-sm outline-none transition-colors focus:border-primary focus:outline-1 focus:outline-primary\"\n        [class.pr-10]=\"showIcon() && !showClear()\"\n        [class.pr-16]=\"showIcon() && showClear()\"\n        [class.pr-6]=\"!showIcon() && showClear()\"\n        [class.bg-grayscale-0]=\"!disabled()\"\n        [class.text-grayscale-90]=\"!disabled()\"\n        [class.border-grayscale-20]=\"disabled()\"\n        [class.bg-grayscale-5]=\"disabled()\"\n        [class.text-grayscale-30]=\"disabled()\"\n        [class.cursor-not-allowed]=\"disabled()\"\n        [id]=\"inputId()\"\n        [name]=\"name() ?? inputId()\"\n        [type]=\"inputType()\"\n        [placeholder]=\"placeholder() ?? (placeholderKey() | translate)\"\n        [disabled]=\"disabled()\"\n        [readonly]=\"readonlyInput() || mode() === 'range' || mode() === 'year' || isMultipleMode()\"\n        [tabIndex]=\"tabindex() ?? null\"\n        [autofocus]=\"autofocus()\"\n        [(ngModel)]=\"inputDate\"\n        (ngModelChange)=\"handleInputChange($event)\"\n        (focus)=\"handleInputFocus($event)\"\n        (blur)=\"handleInputBlur($event)\"\n        (click)=\"handleInputClick()\"\n        (keydown)=\"handleTriggerKeydown($event)\"\n        (input)=\"handleNativeInput($event)\"\n        [attr.aria-invalid]=\"ngControl?.control?.invalid || null\"\n    />\n\n    @if (showClear() && inputDate) {\n        <button\n            type=\"button\"\n            class=\"absolute flex h-[35px] w-6 items-center justify-center text-grayscale-60 transition-colors hover:text-grayscale-90\"\n            [class.right-9]=\"showIcon()\"\n            [class.right-0]=\"!showIcon()\"\n            [attr.aria-label]=\"'platform.angular_components.datepicker_clear' | translate\"\n            (click)=\"clearValue($event)\"\n        >\n            <i class=\"fas fa-times text-xs\" aria-hidden=\"true\"></i>\n        </button>\n    }\n\n    @if (showIcon()) {\n        <button\n            #iconButton\n            type=\"button\"\n            class=\"absolute right-0 flex h-[35px] w-9 items-center justify-center border-l border-solid transition-colors\"\n            [class.border-grayscale-20]=\"disabled()\"\n            [class.text-grayscale-30]=\"disabled()\"\n            [class.cursor-not-allowed]=\"disabled()\"\n            [class.border-grayscale-30]=\"!disabled()\"\n            [class.text-grayscale-90]=\"!disabled()\"\n            [class.hover:bg-grayscale-10]=\"!disabled()\"\n            [disabled]=\"disabled()\"\n            [attr.aria-label]=\"'platform.angular_components.datepicker_open' | translate\"\n            (click)=\"toggle()\"\n            (keydown)=\"handleTriggerKeydown($event)\"\n        >\n            <i [class]=\"resolvedIcon()\" aria-hidden=\"true\"></i>\n        </button>\n    }\n</div>\n\n<ng-template\n    cdkConnectedOverlay\n    [cdkConnectedOverlayOrigin]=\"trigger\"\n    [cdkConnectedOverlayOpen]=\"isOpen()\"\n    [cdkConnectedOverlayHasBackdrop]=\"true\"\n    cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n    [cdkConnectedOverlayPositions]=\"positions\"\n    (backdropClick)=\"closePanel()\"\n    (overlayKeydown)=\"handleOverlayKeydown($event)\"\n    (detach)=\"isOpen.set(false)\"\n>\n    <div\n        #popupPanel\n        class=\"z-50 w-72 rounded-medium border border-solid border-grayscale-30 bg-grayscale-0 shadow-md\"\n        role=\"dialog\"\n        cdkTrapFocus\n        [id]=\"popupId()\"\n        [attr.aria-label]=\"dialogAriaLabelKey() | translate\"\n    >\n        @if (showCalendar()) {\n            @if (pickerView() === 'calendar') {\n                <!-- Cabeçalho de navegação mensal -->\n                <div class=\"flex items-center justify-between border-b border-solid border-grayscale-30 px-3 py-2\">\n                    <button\n                        type=\"button\"\n                        class=\"flex h-7 w-7 items-center justify-center rounded-small text-grayscale-90 transition-colors hover:bg-grayscale-10 disabled:cursor-not-allowed disabled:text-grayscale-30\"\n                        [disabled]=\"prevDisabled()\"\n                        [attr.aria-disabled]=\"prevDisabled() ? 'true' : null\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_prev_month' | translate\"\n                        (click)=\"navigatePrev()\"\n                    >\n                        <i class=\"fas fa-chevron-left text-xs\" aria-hidden=\"true\"></i>\n                    </button>\n\n                    <button\n                        type=\"button\"\n                        class=\"flex items-center gap-1 rounded-small px-2 py-1 text-sm font-medium text-grayscale-90 transition-colors hover:bg-grayscale-10\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_select_month_year' | translate\"\n                        (click)=\"switchToMonths()\"\n                    >\n                        {{ currentMonthKey() | translate }}&nbsp;{{ currentYear() }}\n                        <i class=\"fas fa-chevron-down text-[10px]\" aria-hidden=\"true\"></i>\n                    </button>\n\n                    <button\n                        type=\"button\"\n                        class=\"flex h-7 w-7 items-center justify-center rounded-small text-grayscale-90 transition-colors hover:bg-grayscale-10 disabled:cursor-not-allowed disabled:text-grayscale-30\"\n                        [disabled]=\"nextDisabled()\"\n                        [attr.aria-disabled]=\"nextDisabled() ? 'true' : null\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_next_month' | translate\"\n                        (click)=\"navigateNext()\"\n                    >\n                        <i class=\"fas fa-chevron-right text-xs\" aria-hidden=\"true\"></i>\n                    </button>\n                </div>\n\n                <!-- Cabeçalhos dos dias da semana -->\n                <div class=\"grid grid-cols-7 px-3 pt-2\" role=\"row\">\n                    @for (dayKey of orderedWeekDayKeys(); track dayKey) {\n                        <div\n                            class=\"flex h-8 items-center justify-center text-xs font-medium text-grayscale-60\"\n                            role=\"columnheader\"\n                            [attr.aria-label]=\"dayKey | translate\"\n                        >\n                            {{ dayKey | translate }}\n                        </div>\n                    }\n                </div>\n\n                <!-- Grade do calendário -->\n                <div\n                    class=\"grid grid-cols-7 px-3 pb-2\"\n                    role=\"grid\"\n                    [attr.aria-label]=\"'platform.angular_components.datepicker_calendar_label' | translate: { month: (currentMonthKey() | translate), year: currentYear() }\"\n                    (keydown)=\"handleCalendarGridKeydown($event)\"\n                >\n                    @for (week of calendarWeeks(); track $index) {\n                        <div role=\"row\" class=\"contents\">\n                            @for (day of week; track day.date.toISOString()) {\n                                <button\n                                    type=\"button\"\n                                    role=\"gridcell\"\n                                    class=\"flex h-8 w-8 items-center justify-center rounded-full text-sm font-normal transition-colors\"\n                                    [class.invisible]=\"!showOtherMonths() && !day.isCurrentMonth\"\n                                    [attr.aria-label]=\"formatDayAriaLabel(day.date)\"\n                                    [attr.aria-selected]=\"day.isSelected || day.isRangeStart || day.isRangeEnd || null\"\n                                    [attr.aria-current]=\"day.isToday ? 'date' : null\"\n                                    [attr.aria-disabled]=\"day.isDisabled ? 'true' : null\"\n                                    [attr.aria-hidden]=\"!showOtherMonths() && !day.isCurrentMonth ? 'true' : null\"\n                                    [attr.data-focus]=\"day.isSelected || day.isRangeStart || day.isRangeEnd ? 'selected' : day.isToday ? 'today' : null\"\n                                    [disabled]=\"day.isDisabled\"\n                                    [ngClass]=\"{\n                                        'bg-primary font-semibold text-grayscale-0':\n                                            day.isSelected || day.isRangeStart || day.isRangeEnd,\n                                        'bg-grayscale-10 hover:bg-grayscale-20':\n                                            day.isInRange && !day.isRangeStart && !day.isRangeEnd,\n                                        'text-grayscale-90 hover:bg-grayscale-10':\n                                            !day.isSelected &&\n                                            !day.isRangeStart &&\n                                            !day.isRangeEnd &&\n                                            !day.isDisabled &&\n                                            day.isCurrentMonth,\n                                        'text-grayscale-60 hover:bg-grayscale-10':\n                                            !day.isSelected &&\n                                            !day.isRangeStart &&\n                                            !day.isRangeEnd &&\n                                            !day.isDisabled &&\n                                            !day.isCurrentMonth,\n                                        'ring-2 ring-inset ring-primary':\n                                            day.isToday &&\n                                            !day.isSelected &&\n                                            !day.isRangeStart &&\n                                            !day.isRangeEnd,\n                                        'cursor-not-allowed text-grayscale-30': day.isDisabled\n                                    }\"\n                                    (mouseenter)=\"onDayHover(day.date)\"\n                                    (mouseleave)=\"onDayHover(null)\"\n                                    (click)=\"selectDate(day)\"\n                                >\n                                    {{ day.dayOfMonth }}\n                                </button>\n                            }\n                        </div>\n                    }\n                </div>\n            }\n\n            @if (pickerView() === 'years') {\n                <!-- Cabeçalho de navegação por década -->\n                <div class=\"flex items-center justify-between border-b border-solid border-grayscale-30 px-3 py-2\">\n                    <button\n                        type=\"button\"\n                        class=\"flex h-7 w-7 items-center justify-center rounded-small text-grayscale-90 transition-colors hover:bg-grayscale-10 disabled:cursor-not-allowed disabled:text-grayscale-30\"\n                        [disabled]=\"prevDisabled()\"\n                        [attr.aria-disabled]=\"prevDisabled() ? 'true' : null\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_prev_decade' | translate\"\n                        (click)=\"navigatePrev()\"\n                    >\n                        <i class=\"fas fa-chevron-left text-xs\" aria-hidden=\"true\"></i>\n                    </button>\n\n                    <span class=\"text-sm font-medium text-grayscale-90\">{{ currentDecadeStart() }} – {{ currentDecadeStart() + 11 }}</span>\n\n                    <button\n                        type=\"button\"\n                        class=\"flex h-7 w-7 items-center justify-center rounded-small text-grayscale-90 transition-colors hover:bg-grayscale-10 disabled:cursor-not-allowed disabled:text-grayscale-30\"\n                        [disabled]=\"nextDisabled()\"\n                        [attr.aria-disabled]=\"nextDisabled() ? 'true' : null\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_next_decade' | translate\"\n                        (click)=\"navigateNext()\"\n                    >\n                        <i class=\"fas fa-chevron-right text-xs\" aria-hidden=\"true\"></i>\n                    </button>\n                </div>\n\n                <!-- Grade de anos -->\n                <div\n                    class=\"grid grid-cols-3 gap-2 px-3 py-3\"\n                    role=\"grid\"\n                    [attr.aria-label]=\"'platform.angular_components.datepicker_select_year' | translate\"\n                >\n                    @for (row of yearsGrid(); track $index) {\n                        @for (year of row; track year) {\n                            <button\n                                type=\"button\"\n                                role=\"gridcell\"\n                                class=\"flex h-9 items-center justify-center rounded-small text-sm font-normal transition-colors\"\n                                [attr.aria-selected]=\"isYearSelected(year) || null\"\n                                [attr.aria-disabled]=\"isYearDisabled(year) ? 'true' : null\"\n                                [attr.aria-current]=\"isCurrentYear(year) ? 'date' : null\"\n                                [attr.data-focus]=\"isYearSelected(year) ? 'selected' : isCurrentYear(year) ? 'today' : null\"\n                                [disabled]=\"isYearDisabled(year)\"\n                                [ngClass]=\"{\n                                    'bg-primary font-semibold text-grayscale-0': isYearSelected(year),\n                                    'ring-2 ring-inset ring-primary': isCurrentYear(year) && !isYearSelected(year) && !isYearDisabled(year),\n                                    'text-grayscale-90 hover:bg-grayscale-10': !isYearSelected(year) && !isYearDisabled(year),\n                                    'cursor-not-allowed text-grayscale-30': isYearDisabled(year)\n                                }\"\n                                (click)=\"selectYear(year)\"\n                            >\n                                {{ year }}\n                            </button>\n                        }\n                    }\n                </div>\n            }\n\n            @if (pickerView() === 'months') {\n                <!-- Cabeçalho de navegação anual -->\n                <div class=\"flex items-center justify-between border-b border-solid border-grayscale-30 px-3 py-2\">\n                    <button\n                        type=\"button\"\n                        class=\"flex h-7 w-7 items-center justify-center rounded-small text-grayscale-90 transition-colors hover:bg-grayscale-10 disabled:cursor-not-allowed disabled:text-grayscale-30\"\n                        [disabled]=\"prevDisabled()\"\n                        [attr.aria-disabled]=\"prevDisabled() ? 'true' : null\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_prev_year' | translate\"\n                        (click)=\"navigatePrev()\"\n                    >\n                        <i class=\"fas fa-chevron-left text-xs\" aria-hidden=\"true\"></i>\n                    </button>\n\n                    <span class=\"text-sm font-medium text-grayscale-90\">{{ currentYear() }}</span>\n\n                    <button\n                        type=\"button\"\n                        class=\"flex h-7 w-7 items-center justify-center rounded-small text-grayscale-90 transition-colors hover:bg-grayscale-10 disabled:cursor-not-allowed disabled:text-grayscale-30\"\n                        [disabled]=\"nextDisabled()\"\n                        [attr.aria-disabled]=\"nextDisabled() ? 'true' : null\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_next_year' | translate\"\n                        (click)=\"navigateNext()\"\n                    >\n                        <i class=\"fas fa-chevron-right text-xs\" aria-hidden=\"true\"></i>\n                    </button>\n                </div>\n\n                <!-- Grade de meses -->\n                <div\n                    class=\"grid grid-cols-3 gap-2 px-3 py-3\"\n                    role=\"grid\"\n                    [attr.aria-label]=\"'platform.angular_components.datepicker_select_month' | translate\"\n                >\n                    @for (row of monthsGrid(); track $index) {\n                        @for (month of row; track month.index) {\n                            <button\n                                type=\"button\"\n                                role=\"gridcell\"\n                                class=\"flex h-9 items-center justify-center rounded-small text-sm font-normal transition-colors\"\n                                [attr.aria-selected]=\"isMonthSelected(month.index) || null\"\n                                [attr.aria-disabled]=\"isMonthDisabled(month.index) ? 'true' : null\"\n                                [attr.data-focus]=\"isMonthSelected(month.index) ? 'selected' : null\"\n                                [disabled]=\"isMonthDisabled(month.index)\"\n                                [ngClass]=\"{\n                                    'bg-primary font-semibold text-grayscale-0': isMonthSelected(month.index),\n                                    'text-grayscale-90 hover:bg-grayscale-10':\n                                        !isMonthSelected(month.index) && !isMonthDisabled(month.index),\n                                    'cursor-not-allowed text-grayscale-30': isMonthDisabled(month.index)\n                                }\"\n                                (click)=\"selectMonth(month.index)\"\n                            >\n                                {{ month.key | translate }}\n                            </button>\n                        }\n                    }\n                </div>\n\n                @if (mode() !== 'month') {\n                    <div class=\"border-t border-solid border-grayscale-30 px-3 py-2\">\n                        <button\n                            type=\"button\"\n                            class=\"flex items-center gap-2 rounded-small px-2 py-1 text-sm text-grayscale-90 transition-colors hover:bg-grayscale-10\"\n                            (click)=\"backToCalendar()\"\n                        >\n                            <i class=\"fas fa-arrow-left\" aria-hidden=\"true\"></i>\n                            {{ 'platform.angular_components.datepicker_back_to_calendar' | translate }}\n                        </button>\n                    </div>\n                }\n            }\n        }\n\n        <!-- Time picker -->\n        @if (showTimePicker()) {\n            <div\n                class=\"flex items-center justify-center gap-3 px-4 py-3\"\n                [class.border-t]=\"showCalendar()\"\n                [class.border-solid]=\"showCalendar()\"\n                [class.border-grayscale-30]=\"showCalendar()\"\n                [attr.aria-label]=\"'platform.angular_components.datepicker_select_time' | translate\"\n            >\n                <!-- Horas -->\n                <div class=\"flex flex-col items-center gap-1\">\n                    <button\n                        #increaseHourButton\n                        type=\"button\"\n                        class=\"flex h-6 w-6 items-center justify-center rounded-small text-grayscale-90 transition-colors hover:bg-grayscale-10\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_increment_hour' | translate\"\n                        (click)=\"incrementHours()\"\n                    >\n                        <i class=\"fas fa-chevron-up text-xs\" aria-hidden=\"true\"></i>\n                    </button>\n                    <input\n                        type=\"text\"\n                        inputmode=\"numeric\"\n                        [attr.maxlength]=\"timeInputMaxLength\"\n                        class=\"h-9 w-12 rounded-small border border-solid border-grayscale-30 bg-grayscale-5 text-center text-base font-medium text-grayscale-90 outline-none focus:border-primary focus:outline-1 focus:outline-primary\"\n                        [value]=\"padTime(displayHours())\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_hour' | translate\"\n                        aria-live=\"polite\"\n                        pattern=\"[0-9]+\"\n                        (keydown)=\"handleHoursKeydown($event)\"\n                        (change)=\"handleHoursInput($event)\"\n                    />\n                    <button\n                        type=\"button\"\n                        class=\"flex h-6 w-6 items-center justify-center rounded-small text-grayscale-90 transition-colors hover:bg-grayscale-10\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_decrement_hour' | translate\"\n                        (click)=\"decrementHours()\"\n                    >\n                        <i class=\"fas fa-chevron-down text-xs\" aria-hidden=\"true\"></i>\n                    </button>\n                </div>\n\n                <span class=\"text-xl font-bold text-grayscale-60\" aria-hidden=\"true\">:</span>\n\n                <!-- Minutos -->\n                <div class=\"flex flex-col items-center gap-1\">\n                    <button\n                        type=\"button\"\n                        class=\"flex h-6 w-6 items-center justify-center rounded-small text-grayscale-90 transition-colors hover:bg-grayscale-10\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_increment_minute' | translate\"\n                        (click)=\"incrementMinutes()\"\n                    >\n                        <i class=\"fas fa-chevron-up text-xs\" aria-hidden=\"true\"></i>\n                    </button>\n                    <input\n                        type=\"text\"\n                        inputmode=\"numeric\"\n                        [attr.maxlength]=\"timeInputMaxLength\"\n                        class=\"h-9 w-12 rounded-small border border-solid border-grayscale-30 bg-grayscale-5 text-center text-base font-medium text-grayscale-90 outline-none focus:border-primary focus:outline-1 focus:outline-primary\"\n                        [value]=\"padTime(minutes())\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_minute' | translate\"\n                        aria-live=\"polite\"\n                        pattern=\"[0-9]+\"\n                        (keydown)=\"handleMinutesKeydown($event)\"\n                        (change)=\"handleMinutesInput($event)\"\n                    />\n                    <button\n                        type=\"button\"\n                        class=\"flex h-6 w-6 items-center justify-center rounded-small text-grayscale-90 transition-colors hover:bg-grayscale-10\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_decrement_minute' | translate\"\n                        (click)=\"decrementMinutes()\"\n                    >\n                        <i class=\"fas fa-chevron-down text-xs\" aria-hidden=\"true\"></i>\n                    </button>\n                </div>\n\n                @if (showSeconds()) {\n                    <span class=\"text-xl font-bold text-grayscale-60\" aria-hidden=\"true\">:</span>\n\n                    <!-- Segundos -->\n                    <div class=\"flex flex-col items-center gap-1\">\n                        <button\n                            type=\"button\"\n                            class=\"flex h-6 w-6 items-center justify-center rounded-small text-grayscale-90 transition-colors hover:bg-grayscale-10\"\n                            [attr.aria-label]=\"'platform.angular_components.datepicker_increment_second' | translate\"\n                            (click)=\"incrementSeconds()\"\n                        >\n                            <i class=\"fas fa-chevron-up text-xs\" aria-hidden=\"true\"></i>\n                        </button>\n                        <input\n                            type=\"text\"\n                            inputmode=\"numeric\"\n                            [attr.maxlength]=\"timeInputMaxLength\"\n                            class=\"h-9 w-12 rounded-small border border-solid border-grayscale-30 bg-grayscale-5 text-center text-base font-medium text-grayscale-90 outline-none focus:border-primary focus:outline-1 focus:outline-primary\"\n                            [value]=\"padTime(seconds())\"\n                            [attr.aria-label]=\"'platform.angular_components.datepicker_second' | translate\"\n                            aria-live=\"polite\"\n                            pattern=\"[0-9]+\"\n                            (keydown)=\"handleSecondsKeydown($event)\"\n                            (change)=\"handleSecondsInput($event)\"\n                        />\n                        <button\n                            type=\"button\"\n                            class=\"flex h-6 w-6 items-center justify-center rounded-small text-grayscale-90 transition-colors hover:bg-grayscale-10\"\n                            [attr.aria-label]=\"'platform.angular_components.datepicker_decrement_second' | translate\"\n                            (click)=\"decrementSeconds()\"\n                        >\n                            <i class=\"fas fa-chevron-down text-xs\" aria-hidden=\"true\"></i>\n                        </button>\n                    </div>\n                }\n\n                @if (is12HourFormat()) {\n                    <!-- Seletor AM/PM -->\n                    <button\n                        type=\"button\"\n                        class=\"flex h-9 w-12 items-center justify-center rounded-small border border-solid border-grayscale-30 bg-grayscale-5 text-base font-medium text-grayscale-90 transition-colors hover:bg-grayscale-10\"\n                        [attr.aria-label]=\"'platform.angular_components.datepicker_toggle_meridiem' | translate\"\n                        aria-live=\"polite\"\n                        (click)=\"toggleAmPm()\"\n                    >\n                        {{ amPm() }}\n                    </button>\n                }\n            </div>\n        }\n\n        <!-- Rodapé de ações -->\n        @if (showButtonBar() || mode() === 'datetime' || mode() === 'time') {\n            <div class=\"flex items-center justify-between border-t border-solid border-grayscale-30 px-3 py-2\">\n                @if (showButtonBar()) {\n                    <div>\n                        @if (mode() === 'date' || mode() === 'datetime' || mode() === 'range') {\n                            <button\n                                type=\"button\"\n                                class=\"rounded-small px-2 py-1 text-sm text-grayscale-90 transition-colors hover:bg-grayscale-10\"\n                                (click)=\"selectToday()\"\n                            >\n                                {{ 'platform.angular_components.datepicker_today' | translate }}\n                            </button>\n                        }\n                    </div>\n\n                    <div class=\"flex gap-2\">\n                        <button\n                            type=\"button\"\n                            class=\"rounded-small px-2 py-1 text-sm text-grayscale-90 transition-colors hover:bg-grayscale-10\"\n                            (click)=\"clearValue($event)\"\n                        >\n                            {{ 'platform.angular_components.datepicker_clear' | translate }}\n                        </button>\n\n                        @if (mode() === 'datetime' || mode() === 'time') {\n                            <button\n                                type=\"button\"\n                                class=\"rounded-small bg-primary px-3 py-1 text-sm font-medium text-grayscale-0 transition-colors hover:opacity-90\"\n                                (click)=\"confirm()\"\n                            >\n                                {{ 'platform.angular_components.datepicker_confirm' | translate }}\n                            </button>\n                        }\n                    </div>\n                } @else {\n                    <div></div>\n                    <div>\n                        @if (mode() === 'datetime' || mode() === 'time') {\n                            <button\n                                type=\"button\"\n                                class=\"rounded-small bg-primary px-3 py-1 text-sm font-medium text-grayscale-0 transition-colors hover:opacity-90\"\n                                (click)=\"confirm()\"\n                            >\n                                {{ 'platform.angular_components.datepicker_confirm' | translate }}\n                            </button>\n                        }\n                    </div>\n                }\n            </div>\n        }\n    </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}