@seniorsistemas/angular-components 19.5.5 → 19.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/accordion/README.md +95 -59
  2. package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +4 -0
  3. package/datepicker/README.md +175 -0
  4. package/datepicker/index.d.ts +5 -0
  5. package/datepicker/lib/datepicker/date.utils.d.ts +21 -0
  6. package/datepicker/lib/datepicker/datepicker.component.d.ts +254 -0
  7. package/datepicker/lib/datepicker/models/index.d.ts +16 -0
  8. package/datepicker/public-api.d.ts +2 -0
  9. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +3 -1
  10. package/dynamic-form/dynamic-form/components/lookup/models/lookup-alert-config.d.ts +5 -0
  11. package/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +119 -24
  12. package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +6 -0
  13. package/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.d.ts +6 -23
  14. package/dynamic-form/public-api.d.ts +1 -0
  15. package/editor/README.md +229 -0
  16. package/editor/index.d.ts +5 -0
  17. package/editor/lib/editor/editor.component.d.ts +127 -0
  18. package/editor/lib/editor/link-dialog/link-dialog.component.d.ts +18 -0
  19. package/editor/lib/editor/models/index.d.ts +12 -0
  20. package/editor/lib/editor/toolbar-button/editor-toolbar-button.component.d.ts +10 -0
  21. package/editor/public-api.d.ts +2 -0
  22. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +5 -1
  23. package/esm2022/datepicker/lib/datepicker/date.utils.mjs +182 -0
  24. package/esm2022/datepicker/lib/datepicker/datepicker.component.mjs +1062 -0
  25. package/esm2022/datepicker/lib/datepicker/models/index.mjs +2 -0
  26. package/esm2022/datepicker/public-api.mjs +2 -0
  27. package/esm2022/datepicker/seniorsistemas-angular-components-datepicker.mjs +5 -0
  28. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +11 -5
  29. package/esm2022/dynamic-form/dynamic-form/components/lookup/models/lookup-alert-config.mjs +2 -0
  30. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.mjs +1 -1
  31. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
  32. package/esm2022/dynamic-form/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.mjs +2 -2
  33. package/esm2022/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.mjs +23 -116
  34. package/esm2022/dynamic-form/dynamic-form/form-field/fields/lookup/lookup-field.component.mjs +3 -3
  35. package/esm2022/dynamic-form/public-api.mjs +1 -1
  36. package/esm2022/editor/lib/editor/editor.component.mjs +375 -0
  37. package/esm2022/editor/lib/editor/link-dialog/link-dialog.component.mjs +48 -0
  38. package/esm2022/editor/lib/editor/models/index.mjs +3 -0
  39. package/esm2022/editor/lib/editor/toolbar-button/editor-toolbar-button.component.mjs +17 -0
  40. package/esm2022/editor/public-api.mjs +3 -0
  41. package/esm2022/editor/seniorsistemas-angular-components-editor.mjs +5 -0
  42. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.mjs +22 -12
  43. package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +5 -5
  44. package/esm2022/lib/locale/fallback.mjs +82 -3
  45. package/esm2022/optional-fields/editor/editor-field/editor-field.component.mjs +5 -6
  46. package/esm2022/optional-fields/editor/editor-field.mjs +1 -1
  47. package/esm2022/panel/lib/panel/panel.component.mjs +7 -3
  48. package/esm2022/select/lib/select/select.component.mjs +4 -8
  49. package/esm2022/shared/lib/accessibility/datepicker-no-period-tab.directive.mjs +5 -1
  50. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +4 -0
  51. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
  52. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs +1250 -0
  53. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs.map +1 -0
  54. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +49 -135
  55. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  56. package/fesm2022/seniorsistemas-angular-components-editor.mjs +437 -0
  57. package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -0
  58. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +24 -15
  59. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  60. package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs +4 -5
  61. package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs.map +1 -1
  62. package/fesm2022/seniorsistemas-angular-components-panel.mjs +6 -2
  63. package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
  64. package/fesm2022/seniorsistemas-angular-components-select.mjs +3 -7
  65. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  66. package/fesm2022/seniorsistemas-angular-components-shared.mjs +4 -0
  67. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  68. package/fesm2022/seniorsistemas-angular-components.mjs +81 -2
  69. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  70. package/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.d.ts +6 -4
  71. package/inline-edit/lib/inline-edit/inline-edit.module.d.ts +2 -2
  72. package/loading-state/README.md +57 -17
  73. package/optional-fields/editor/editor-field.d.ts +9 -6
  74. package/package.json +74 -8
  75. package/panel/README.md +12 -1
  76. package/panel/lib/panel/panel.component.d.ts +3 -1
  77. package/schematics/collection.json +4 -0
  78. package/schematics/migrations/migrate-p-datepicker/index.d.ts +2 -0
  79. package/schematics/migrations/migrate-p-datepicker/index.js +141 -0
  80. package/schematics/migrations/migrate-p-datepicker/index.js.map +1 -0
  81. package/schematics/migrations/migrate-p-datepicker/index.test.d.ts +1 -0
  82. package/schematics/migrations/migrate-p-datepicker/index.test.js +392 -0
  83. package/schematics/migrations/migrate-p-datepicker/index.test.js.map +1 -0
  84. package/schematics/migrations.json +10 -0
  85. package/schematics/utils/ast-utils.d.ts +28 -0
  86. package/schematics/utils/ast-utils.js +116 -0
  87. package/schematics/utils/ast-utils.js.map +1 -0
  88. package/schematics/utils/ast-utils.test.d.ts +1 -0
  89. package/schematics/utils/ast-utils.test.js +138 -0
  90. package/schematics/utils/ast-utils.test.js.map +1 -0
  91. package/schematics/utils/workspace-utils.d.ts +6 -0
  92. package/schematics/utils/workspace-utils.js +37 -0
  93. package/schematics/utils/workspace-utils.js.map +1 -0
  94. package/schematics/utils/workspace-utils.test.d.ts +1 -0
  95. package/schematics/utils/workspace-utils.test.js +152 -0
  96. package/schematics/utils/workspace-utils.test.js.map +1 -0
  97. package/shared/lib/accessibility/datepicker-no-period-tab.directive.d.ts +4 -0
  98. package/stats-card/README.md +80 -45
@@ -0,0 +1 @@
1
+ {"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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"}