@seniorsistemas/angular-components 19.7.5 → 19.8.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 (51) hide show
  1. package/chips/README.md +3 -2
  2. package/chips/lib/chips/chip-item/chip-item.component.d.ts +2 -0
  3. package/chips/lib/chips/chips/chips.component.d.ts +2 -1
  4. package/datepicker/README.md +15 -2
  5. package/datepicker/lib/datepicker/date-segment-input.d.ts +82 -0
  6. package/datepicker/lib/datepicker/date.utils.d.ts +3 -7
  7. package/datepicker/lib/datepicker/datepicker.component.d.ts +101 -8
  8. package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +15 -4
  9. package/esm2022/chips/lib/chips/chips/chips.component.mjs +26 -14
  10. package/esm2022/datepicker/lib/datepicker/date-segment-input.mjs +418 -0
  11. package/esm2022/datepicker/lib/datepicker/date.utils.mjs +7 -79
  12. package/esm2022/datepicker/lib/datepicker/datepicker.component.mjs +451 -41
  13. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +5 -5
  14. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +5 -5
  15. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +5 -5
  16. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +10 -10
  17. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +11 -11
  18. package/esm2022/global-search/lib/global-search/global-search.component.mjs +5 -3
  19. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +5 -5
  20. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +3 -3
  21. package/esm2022/input-text/lib/input-text/input-text.directive.mjs +36 -0
  22. package/esm2022/input-text/lib/input-text/input-text.module.mjs +16 -0
  23. package/esm2022/input-text/public-api.mjs +3 -0
  24. package/esm2022/input-text/seniorsistemas-angular-components-input-text.mjs +5 -0
  25. package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +8 -6
  26. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +3 -3
  27. package/esm2022/tree/lib/tree/components/tree-node-item/tree-node-item.component.mjs +4 -4
  28. package/fesm2022/seniorsistemas-angular-components-chips.mjs +39 -16
  29. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  30. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs +873 -118
  31. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs.map +1 -1
  32. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +14 -14
  33. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  34. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +4 -2
  35. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  36. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +7 -6
  37. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  38. package/fesm2022/seniorsistemas-angular-components-input-text.mjs +56 -0
  39. package/fesm2022/seniorsistemas-angular-components-input-text.mjs.map +1 -0
  40. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +7 -5
  41. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
  42. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +2 -2
  43. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  44. package/fesm2022/seniorsistemas-angular-components-tree.mjs +3 -3
  45. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  46. package/input-text/index.d.ts +5 -0
  47. package/input-text/lib/input-text/input-text.directive.d.ts +5 -0
  48. package/input-text/lib/input-text/input-text.module.d.ts +7 -0
  49. package/input-text/public-api.d.ts +2 -0
  50. package/package.json +7 -1
  51. package/sidebar/lib/sidebar/sidebar.component.d.ts +3 -1
@@ -1 +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 styles: [`\n :host {\n display: block;\n position: relative;\n width: 100%;\n }\n :host.ng-invalid.ng-dirty input {\n border-color: #C13018;\n }\n :host.ng-invalid.ng-dirty input:focus {\n border-color: #C13018;\n outline-color: #C13018;\n }\n :host.ng-invalid.ng-dirty button[type='button'] {\n border-color: #C13018;\n }\n :host.no-icon button[type='button'] {\n display: none;\n }\n :host.no-icon input {\n padding-right: 0.75rem;\n }\n input.hide-native-icon::-webkit-calendar-picker-indicator {\n display: none;\n }\n button[type='button']:focus-visible {\n outline: 2px solid #428BCA;\n outline-offset: 1px;\n border-radius: inherit;\n }\n `],\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 isFocused = 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.isFocused.set(true);\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.isFocused.set(false);\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\"\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() && !isFocused()\"\n [class.border-primary]=\"isFocused() && !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-[50%] 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":";;;;;;;;;;;AAIA,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,eAAe,GAAG,EAAE,CAAC;AAErB,SAAU,gBAAgB,CAAC,IAAU,EAAA;AACvC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAChC,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3D,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,IAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAI,CAAA,EAAA,GAAG,EAAE,CAAC;AACrC,CAAC;AAED;;;;AAIG;AACa,SAAA,iBAAiB,CAAC,IAAU,EAAE,OAAe,EAAA;AACzD,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACnD,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,IAAA,OAAO,OAAO;AACT,SAAA,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;AACrB,SAAA,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AACjB,SAAA,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AACjB,SAAA,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AACjB,SAAA,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;SAEe,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,CAAU,EAAA;IACvD,MAAM,IAAI,GAAG,CAAA,EAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE,CAAC;IAC3E,OAAO,CAAC,KAAK,SAAS,GAAG,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE,GAAG,IAAI,CAAC;AAC5E,CAAC;AAED;AACM,SAAU,SAAS,CAAC,GAAW,EAAA;IACjC,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,OAAO,IAAI,CAAC;KACf;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpC,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;AACjD,IAAA,IAAI,IAAI,GAAG,IAAI,EAAE;AACb,QAAA,OAAO,IAAI,CAAC;KACf;IACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE;AACpF,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;AAEe,SAAA,SAAS,CAAC,CAAO,EAAE,CAAO,EAAA;IACtC,QACI,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE;AACnC,QAAA,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE;QAC7B,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,EAC7B;AACN,CAAC;AAEK,SAAU,SAAS,CAAC,IAAU,EAAA;IAChC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AACnF,CAAC;SAEe,eAAe,CAAC,GAAW,EAAE,SAAS,GAAG,GAAG,EAAA;IACxD,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC;IACjD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACrE,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACpB,QAAA,OAAO,IAAI,CAAC;KACf;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AAChB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC1B,CAAC;AAEK,SAAU,cAAc,CAC1B,GAAW,EACX,IAAiB,EACjB,QAAgB,EAChB,UAAkB,EAAA;IAElB,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,OAAO,IAAI,CAAC;KACf;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpC,IAAI,KAAK,IAAI,QAAQ,IAAI,IAAI,IAAI,UAAU,EAAE;AACzC,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;IACpC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAClG,CAAC;AAEK,SAAU,cAAc,CAAC,GAAW,EAAA;IACtC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,OAAO,IAAI,CAAC;KACf;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpC,IAAA,IAAI,IAAI,GAAG,IAAI,EAAE;AACb,QAAA,OAAO,IAAI,CAAC;KACf;IACD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,CAAC;AAEK,SAAU,eAAe,CAAC,GAAW,EAAA;IACvC,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,OAAO,IAAI,CAAC;KACf;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpC,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AACzC,IAAA,IAAI,IAAI,GAAG,IAAI,EAAE;AACb,QAAA,OAAO,IAAI,CAAC;KACf;IACD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,eAAe,EAAE;AACtC,QAAA,OAAO,IAAI,CAAC;KACf;IACD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC;AAEK,SAAU,kBAAkB,CAAC,GAAW,EAAA;IAC1C,MAAM,KAAK,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,OAAO,IAAI,CAAC;KACf;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpC,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAC,CAAC;AACtD,IAAA,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE;AAC1C,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE;AACpF,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;AAEe,SAAA,UAAU,CACtB,IAAY,EACZ,GAAW,EACX,IAAiB,EACjB,QAAgB,EAChB,UAAkB,EAClB,cAAc,GAAG,GAAG,EAAA;AAEpB,IAAA,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;AACd,QAAA,OAAO,IAAI,CAAC;KACf;IACD,QAAQ,IAAI;AACR,QAAA,KAAK,OAAO;AACR,YAAA,OAAO,eAAe,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AAChD,QAAA,KAAK,MAAM;YACP,OAAO,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC3D,QAAA,KAAK,OAAO;AACR,YAAA,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;AAChC,QAAA,KAAK,MAAM;AACP,YAAA,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;AAC/B,QAAA,KAAK,UAAU;AACX,YAAA,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACnC,QAAA;AACI,YAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;KAC7B;AACL,CAAC;AAEe,SAAA,mBAAmB,CAC/B,IAAY,EACZ,KAAuC,EACvC,cAAc,GAAG,KAAK,EACtB,UAAmB,EACnB,iBAAiB,GAAG,IAAI,EAAA;IAExB,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,OAAO,EAAE,CAAC;KACb;IACD,MAAM,UAAU,GAAG,CAAC,IAAU,KAC1B,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC9E,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACtB,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KACxD;AACD,IAAA,IAAI,IAAI,KAAK,OAAO,EAAE;QAClB,MAAM,KAAK,GAAG,KAAkB,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACd,YAAA,OAAO,EAAE,CAAC;SACb;QACD,OAAO,KAAK,CAAC,GAAG;AACZ,cAAE,CAAG,EAAA,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAG,EAAA,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAE,CAAA;AACvE,cAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACjC;AACD,IAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;AAC1B,QAAA,OAAO,EAAE,CAAC;KACb;IACD,QAAQ,IAAI;AACR,QAAA,KAAK,MAAM;AACP,YAAA,OAAO,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5D,KAAK,OAAO,EAAE;AACV,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5D,OAAO,CAAA,EAAG,KAAK,CAAC,WAAW,EAAE,CAAI,CAAA,EAAA,KAAK,EAAE,CAAC;SAC5C;AACD,QAAA,KAAK,MAAM;AACP,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AACvC,QAAA,KAAK,UAAU;AACX,YAAA,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;AAC5F,QAAA;AACI,YAAA,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;KACtC;AACL;;ACtLA,SAAS,eAAe,GAAA;AACpB,IAAA,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,UAA8B,KAAI;AACrD,QAAA,MAAM,QAAQ,GAAmC,UAAU,CAAC,KAAK,CAAC;AAClE,QAAA,UAAU,CAAC,KAAK,GAAG,UAAyB,KAAoB,EAAA;AAC5D,YAAA,MAAM,UAAU,GACZ,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzG,IAAI,CAAC,UAAU,EAAE;gBACb,KAAK,CAAC,cAAc,EAAE,CAAC;aAC1B;iBAAM;AACH,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aAC9B;AACL,SAAC,CAAC;AACF,QAAA,OAAO,UAAU,CAAC;AACtB,KAAC,CAAC;AACN,CAAC;MA8DY,mBAAmB,CAAA;AACpB,IAAA,OAAO,SAAS,GAAG,CAAC,CAAC;AACrB,IAAA,OAAgB,YAAY,GAAG,CAAC,CAAC;AACjC,IAAA,OAAgB,cAAc,GAAG,EAAE,CAAC;AACpC,IAAA,OAAgB,cAAc,GAAG,CAAC,CAAC;AACnC,IAAA,OAAgB,cAAc,GAAG,EAAE,CAAC;AACpC,IAAA,OAAgB,aAAa,GAAG,CAAC,CAAC;AAClC,IAAA,OAAgB,mBAAmB,GAAG,CAAC,CAAC;AACxC,IAAA,OAAgB,SAAS,GAAG,EAAE,CAAC;AAC/B,IAAA,OAAgB,WAAW,GAAG,EAAE,CAAC;AACjC,IAAA,OAAgB,kBAAkB,GAAG,EAAE,CAAC;AAExC,IAAA,OAAO,MAAM,GAAA;QACjB,mBAAmB,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,OAAO,CAAgB,aAAA,EAAA,mBAAmB,CAAC,SAAS,EAAE,CAAC;KAC1D;;;IAKQ,OAAO,GAAG,KAAK,CAAS,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;;IAGtD,IAAI,GAAG,KAAK,EAAU,CAAC;;IAGvB,WAAW,GAAG,KAAK,EAAU,CAAC;AAEvC;;;;;;;AAOG;AACM,IAAA,IAAI,GAAG,KAAK,CAAiB,MAAM,CAAC,CAAC;AAE9C;;;;AAIG;AACM,IAAA,aAAa,GAAG,KAAK,CAAwB,QAAQ,CAAC,CAAC;;AAGvD,IAAA,iBAAiB,GAAG,KAAK,CAAS,IAAI,CAAC,CAAC;;AAGxC,IAAA,QAAQ,GAAG,KAAK,CAAU,IAAI,CAAC,CAAC;AAEzC;;;AAGG;AACM,IAAA,IAAI,GAAG,KAAK,CAAS,iBAAiB,CAAC,CAAC;;AAGxC,IAAA,GAAG,GAAG,KAAK,CAAc,IAAI,CAAC,CAAC;;AAG/B,IAAA,GAAG,GAAG,KAAK,CAAc,IAAI,CAAC,CAAC;;AAG/B,IAAA,WAAW,GAAG,KAAK,CAAc,IAAI,CAAC,CAAC;;AAGvC,IAAA,UAAU,GAAG,KAAK,CAAS,YAAY,CAAC,CAAC;;AAGzC,IAAA,UAAU,GAAG,KAAK,CAAc,IAAI,CAAC,CAAC;;AAGtC,IAAA,UAAU,GAAG,KAAK,CAAS,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;;AAGpE,IAAA,WAAW,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;;AAGpC,IAAA,cAAc,GAAG,KAAK,CAAS,KAAK,CAAC,CAAC;;AAGtC,IAAA,WAAW,GAAG,KAAK,CAAU,IAAI,CAAC,CAAC;;AAGnC,IAAA,aAAa,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;;AAGtC,IAAA,cAAc,GAAG,KAAK,CAAS,CAAC,CAAC,CAAC;;AAGlC,IAAA,aAAa,GAAG,KAAK,CAAU,IAAI,CAAC,CAAC;;AAGrC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;;AAGlC,IAAA,eAAe,GAAG,KAAK,CAAU,IAAI,CAAC,CAAC;;AAGvC,IAAA,iBAAiB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;;AAG1C,IAAA,oBAAoB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;;AAG7C,IAAA,QAAQ,GAAG,KAAK,CAAS,CAAC,CAAC,CAAC;;AAG5B,IAAA,UAAU,GAAG,KAAK,CAAS,CAAC,CAAC,CAAC;;IAG9B,QAAQ,GAAG,KAAK,EAAU,CAAC;;AAG3B,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;;AAGlC,IAAA,aAAa,GAAG,KAAK,CAAS,EAAE,CAAC,CAAC;;AAGlC,IAAA,YAAY,GAAG,KAAK,CAAW,EAAE,CAAC,CAAC;;;AAKnC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;;;IAKjC,OAAO,GAAG,MAAM,EAAS,CAAC;;IAG1B,OAAO,GAAG,MAAM,EAAS,CAAC;;IAG1B,QAAQ,GAAG,MAAM,EAAmB,CAAC;;IAGrC,MAAM,GAAG,MAAM,EAAe,CAAC;;IAG/B,UAAU,GAAG,MAAM,EAAQ,CAAC;;IAG5B,UAAU,GAAG,MAAM,EAAc,CAAC;;IAGlC,WAAW,GAAG,MAAM,EAAmC,CAAC;;IAGxD,UAAU,GAAG,MAAM,EAAmC,CAAC;;IAGvD,IAAI,GAAG,MAAM,EAAQ,CAAC;;IAGtB,UAAU,GAAG,MAAM,EAAS,CAAC;;AAInB,IAAA,QAAQ,GAAG,mBAAmB,CAAC,SAAS,CAAC;AACzC,IAAA,UAAU,GAAG,mBAAmB,CAAC,WAAW,CAAC;IAC7C,kBAAkB,GAAG,CAAC,CAAC;IAEhC,SAAS,GAAG,EAAE,CAAC;IAEf,SAAS,GAAqB,IAAI,CAAC;AAE1B,IAAA,KAAK,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;AAClC,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1B,IAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AAC9B,IAAA,UAAU,GAAG,MAAM,CAAa,UAAU,CAAC,CAAC;AAC5C,IAAA,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAClB,IAAA,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,IAAA,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,IAAA,UAAU,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;AAC5C,IAAA,cAAc,GAAG,MAAM,CAAS,EAAE,CAAC,CAAC;AACpC,IAAA,iBAAiB,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;AAC9C,IAAA,SAAS,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IACjD,eAAe,GAAG,KAAK,CAAC;IACxB,WAAW,GAAG,KAAK,CAAC;AACpB,IAAA,iBAAiB,GAAe,MAAK,GAAG,CAAC;AACzC,IAAA,SAAS,GAAqC,MAAK,GAAG,CAAC;AACvD,IAAA,UAAU,GAAe,MAAK,GAAG,CAAC;IAEzB,UAAU,GAAG,SAAS,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3D,kBAAkB,GAAG,SAAS,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3E,UAAU,GAAG,SAAS,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3D,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5B,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;;IAI/B,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;;AAGvF,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;;AAG5D,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,mBAAmB,CAAC,kBAAkB,CAAC;AAClE,QAAA,OAAO,GAAG,KAAK,CAAC,GAAG,mBAAmB,CAAC,kBAAkB,GAAG,GAAG,CAAC;AACpE,KAAC,CAAC,CAAC;;IAGgB,IAAI,GAAG,QAAQ,CAAc,MAC5C,IAAI,CAAC,KAAK,EAAE,GAAG,mBAAmB,CAAC,kBAAkB,GAAG,IAAI,GAAG,IAAI,CACtE,CAAC;AAEiB,IAAA,SAAS,GAAwB;AAChD,QAAA,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;QACvF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;KAC3F,CAAC;AAEiB,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,OAAO,EAAE,CAAA,MAAA,CAAQ,CAAC,CAAC;AAEpD,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/D,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5D,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;AAE3E,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC;IACtD,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC;;IAGtF,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC;AAE/F,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AAClD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACnF,KAAC,CAAC,CAAC;AAEgB,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;QACzC,IAAI,IAAI,CAAC,cAAc,EAAE;AAAE,YAAA,OAAO,MAAM,CAAC;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,IAAI,KAAK,UAAU;AAAE,YAAA,OAAO,gBAAgB,CAAC;AACjD,QAAA,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,MAAM,CAAC;AACvD,QAAA,OAAO,IAAI,CAAC;AAChB,KAAC,CAAC,CAAC;IAEgB,kBAAkB,GAAG,QAAQ,CAAC,MAC7C,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO;AACnB,UAAE,qDAAqD;UACrD,oDAAoD,CAC7D,CAAC;AAEiB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,CAAA,mDAAA,EAAsD,IAAI,CAAA,CAAE,CAAC;AACxE,KAAC,CAAC,CAAC;AAEgB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAA+C;AACxF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,OAAO,EAAE;YACT,IAAI,KAAK,EAAE;AACP,gBAAA,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAChG,gBAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;aACzB;YACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;SACxC;AACD,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC3D,KAAC,CAAC,CAAC;AAEgB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAsB;AAC9D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACvC,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;AACzB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAC9B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACpC,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACnE,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAE7D,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACjD,QAAA,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;AAC9C,QAAA,MAAM,gBAAgB,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AACxE,QAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAC3D,QAAA,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAE3D,MAAM,OAAO,GAAkB,EAAE,CAAC;AAElC,QAAA,KAAK,IAAI,CAAC,GAAG,gBAAgB,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5C,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;SAC1G;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE;YACnC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;SACzG;AAED,QAAA,MAAM,UAAU,GACZ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC,GAAG,mBAAmB,CAAC,YAAY,CAAC;QACpG,IAAI,OAAO,GAAG,CAAC,CAAC;AAChB,QAAA,OAAO,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE;AAChC,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AAChD,YAAA,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;SAC1G;QAED,MAAM,KAAK,GAAoB,EAAE,CAAC;AAClC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,mBAAmB,CAAC,YAAY,EAAE;AACvE,YAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;SACtE;AACD,QAAA,OAAO,KAAK,CAAC;AACjB,KAAC,CAAC,CAAC;AAEgB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QAC1C,MAAM,IAAI,GAAuC,EAAE,CAAC;AACpD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,cAAc,EAAE,CAAC,IAAI,mBAAmB,CAAC,cAAc,EAAE;YAC7F,IAAI,CAAC,IAAI,CAAC;AACN,gBAAA,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACpC,gBAAA,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE;AAC5C,gBAAA,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE;AAC/C,aAAA,CAAC,CAAC;SACN;AACD,QAAA,OAAO,IAAI,CAAC;AAChB,KAAC,CAAC,CAAC;IAEgB,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAE9E,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxC,MAAM,IAAI,GAAe,EAAE,CAAC;AAC5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,cAAc,EAAE,CAAC,IAAI,mBAAmB,CAAC,aAAa,EAAE;YAC5F,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxD;AACD,QAAA,OAAO,IAAI,CAAC;AAChB,KAAC,CAAC,CAAC;AAEgB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,KAAK,CAAC;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO,EAAE;YAC/B,OAAO,IAAI,CAAC,kBAAkB,EAAE,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;SACzD;AACD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;YAChC,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;SAClD;QACD,QACI,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;aACrC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,EACjF;AACN,KAAC,CAAC,CAAC;AAEgB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,KAAK,CAAC;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,GAAG,mBAAmB,CAAC,cAAc,GAAG,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;SAClG;AACD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;YAChC,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;SAClD;QACD,QACI,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;aACrC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,EACjF;AACN,KAAC,CAAC,CAAC;;AAIgB,IAAA,WAAW,GAAG;QAC7B,gDAAgD;QAChD,gDAAgD;QAChD,gDAAgD;QAChD,gDAAgD;QAChD,gDAAgD;QAChD,gDAAgD;QAChD,gDAAgD;KACnD,CAAC;AAEiB,IAAA,SAAS,GAAG;QAC3B,kDAAkD;QAClD,kDAAkD;QAClD,kDAAkD;QAClD,kDAAkD;QAClD,kDAAkD;QAClD,kDAAkD;QAClD,kDAAkD;QAClD,kDAAkD;QAClD,kDAAkD;QAClD,kDAAkD;QAClD,kDAAkD;QAClD,kDAAkD;KACrD,CAAC;;IAIK,QAAQ,GAAA;QACX,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,eAAe,CAAC,MAAK;AACjB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAChF,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aACrB;SACJ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;KACnC;;AAIM,IAAA,UAAU,CAAC,KAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AACxD,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACpB,OAAO;SACV;AACD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtB,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACpE,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC/C,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACtE,OAAO;SACV;AACD,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAA,IAAI,KAAK,CAAC,KAAK,EAAE;gBACb,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;aACrF;YACD,OAAO;SACV;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAa,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAa,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,KAAa,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;KACpC;AAEM,IAAA,gBAAgB,CAAC,EAAoC,EAAA;AACxD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;AAEM,IAAA,iBAAiB,CAAC,EAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACxB;AAEM,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KACjC;;AAIM,IAAA,QAAQ,CAAC,OAAwB,EAAA;AACpC,QAAA,IAAI,KAAsB,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACvB,YAAA,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;SACjC;AAAM,aAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;AAChC,YAAA,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;SAC7B;aAAM;AACH,YAAA,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;SACxB;QACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KACvD;AAEM,IAAA,yBAAyB,CAAC,EAAc,EAAA;AAC3C,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAC/B;;IAIS,IAAI,GAAA;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACjB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;YACxB,eAAe,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;SACxG;aAAM;YACH,IAAI,CAAC,uBAAuB,EAAE,CAAC;SAClC;KACJ;;IAGO,WAAW,GAAA;QACf,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO;AAC7C,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;;KAEpB;AAED;;;AAGG;IACK,eAAe,GAAA;AACnB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACvC,QAAA,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;SACrF;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SACjC;AAAM,aAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;AAC/B,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SAChC;aAAM;AACH,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SACnC;KACJ;IAEO,uBAAuB,GAAA;QAC3B,eAAe,CACX,MAAK;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAwC,CAAC;AAC1E,YAAA,IAAI,CAAC,KAAK;gBAAE,OAAO;AACnB,YAAA,MAAM,MAAM,GACR,KAAK,CAAC,aAAa,CAAc,yBAAyB,CAAC;AAC3D,gBAAA,KAAK,CAAC,aAAa,CAAc,sBAAsB,CAAC;AACxD,gBAAA,KAAK,CAAC,aAAa,CAAc,wBAAwB,CAAC,CAAC;YAC/D,MAAM,EAAE,KAAK,EAAE,CAAC;SACnB,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC9B,CAAC;KACL;IAES,UAAU,GAAA;AAChB,QAAA,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAgB,CAAC;AAClG,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExB,eAAe,CACX,MAAK;YACD,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;SAC5C,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC9B,CAAC;KACL;IAES,MAAM,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;aAAM;YACH,IAAI,CAAC,IAAI,EAAE,CAAC;SACf;KACJ;AAES,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AAC/C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YACxB,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;KACJ;AAES,IAAA,gBAAgB,MAAW;AAE3B,IAAA,gBAAgB,CAAC,KAAY,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;KACJ;AAES,IAAA,iBAAiB,CAAC,KAAY,EAAA;AACpC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;AAES,IAAA,eAAe,CAAC,KAAY,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,QAAQ,IAAI,KAAK,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACf,YAAA,MAAM,aAAa,GAAI,KAAoB,CAAC,aAAmC,CAAC;YAChF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAwC,CAAC;YAC1E,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE;AACnD,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;oBACxB,IAAI,CAAC,kBAAkB,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;iBACpD;qBAAM;AACH,oBAAA,MAAM,MAAM,GACR,KAAK,EAAE,aAAa,CAAc,yBAAyB,CAAC;AAC5D,wBAAA,KAAK,EAAE,aAAa,CAAc,sBAAsB,CAAC;AACzD,wBAAA,KAAK,EAAE,aAAa,CAAc,wBAAwB,CAAC,CAAC;oBAChE,MAAM,EAAE,KAAK,EAAE,CAAC;iBACnB;aACJ;SACJ;KACJ;AAES,IAAA,iBAAiB,CAAC,GAAW,EAAA;AACnC,QAAA,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO;SACV;AACD,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AACjH,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACjB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,OAAO;SACV;AACD,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SAC1B;aAAM;YACH,MAAM,CAAC,GAAG,MAAc,CAAC;AACzB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACrB;KACJ;AAES,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AAC/C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAC5C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,EAAE,CAAC;SACf;KACJ;;IAIS,YAAY,GAAA;AAClB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;SACnF;AAAM,aAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;YACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;SAClF;aAAM;AACH,YAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;SACrF;KACJ;IAES,YAAY,GAAA;AAClB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;SACnF;AAAM,aAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;YACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;SAClF;aAAM;AACH,YAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;SACrF;KACJ;AAES,IAAA,yBAAyB,CAAC,KAAoB,EAAA;QACpD,MAAM,MAAM,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO;QAExC,KAAK,CAAC,cAAc,EAAE,CAAC;AAEvB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAA4B,CAAC;AAChD,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAoB,yBAAyB,CAAC,CAAC,CAAC;QAChG,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAA2B,CAAC,CAAC;QACtE,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,OAAO;QAE9B,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY;YAAE,KAAK,GAAG,CAAC,CAAC;AACrC,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW;YAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAC1C,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW;AAAE,YAAA,KAAK,GAAG,mBAAmB,CAAC,YAAY,CAAC;AACxE,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;AAAE,YAAA,KAAK,GAAG,CAAC,mBAAmB,CAAC,YAAY,CAAC;AAE5E,QAAA,MAAM,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;AAEnC,QAAA,IAAI,OAAO,GAAG,CAAC,EAAE;YACb,IAAI,IAAI,CAAC,YAAY,EAAE;gBAAE,OAAO;YAChC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,eAAe,CACX,MAAK;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAA4B,CAAC;AAC9D,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACnB,KAAK,EAAE,gBAAgB,CAAoB,yBAAyB,CAAC,IAAI,EAAE,CAC9E,CAAC;AACF,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;AACrD,gBAAA,MAAM,MAAM,GACR,mBAAmB,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;oBACpD,mBAAmB,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBACxD,MAAM,EAAE,KAAK,EAAE,CAAC;aACnB,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC9B,CAAC;YACF,OAAO;SACV;AAED,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;YAC3B,IAAI,IAAI,CAAC,YAAY,EAAE;gBAAE,OAAO;YAChC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,eAAe,CACX,MAAK;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAA4B,CAAC;AAC9D,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACnB,KAAK,EAAE,gBAAgB,CAAoB,yBAAyB,CAAC,IAAI,EAAE,CAC9E,CAAC;AACF,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACtE,MAAM,MAAM,GACR,mBAAmB,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;oBACnD,mBAAmB,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzD,MAAM,EAAE,KAAK,EAAE,CAAC;aACnB,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC9B,CAAC;YACF,OAAO;SACV;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE;AAC7B,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;SAC5B;KACJ;AAEO,IAAA,OAAO,WAAW,CACtB,OAA4B,EAC5B,QAAgB,EAChB,SAAiB,EAAA;AAEjB,QAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE;AACjE,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ;AAAE,gBAAA,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;SAC/C;AACD,QAAA,OAAO,IAAI,CAAC;KACf;IAES,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAClC;IAES,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAClC;;AAIS,IAAA,UAAU,CAAC,GAAgB,EAAA;QACjC,IAAI,GAAG,CAAC,UAAU;YAAE,OAAO;AAC3B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,OAAO;SACV;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;AACzB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE;gBACV,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACxC;iBAAM;AACH,gBAAA,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GACd,OAAO,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACxF,gBAAA,MAAM,KAAK,GAAc,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACxC,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC9C,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACtB,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;YACD,OAAO;SACV;QACD,MAAM,OAAO,GAAG,IAAI,IAAI,CACpB,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EACtB,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EACnB,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAClB,IAAI,CAAC,KAAK,EAAE,EACZ,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAC1C,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACxB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;YACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;AAAM,aAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU,EAAE;YACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5B,YAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;gBAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;SACJ;KACJ;;AAGO,IAAA,kBAAkB,CAAC,IAAU,EAAA;QACjC,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACjF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACvC,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAClE,QAAA,MAAM,IAAI,GACN,KAAK,IAAI,CAAC;AACN,cAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;cACtC,CAAC,GAAG,QAAQ,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9E,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC7C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;QAC5C,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACjC;AAES,IAAA,UAAU,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAAE,OAAO;QACtC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;AAES,IAAA,WAAW,CAAC,UAAkB,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;YAAE,OAAO;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AAClD,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChC,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;aAAM;AACH,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAChC,IAAI,CAAC,uBAAuB,EAAE,CAAC;SAClC;KACJ;IAES,WAAW,GAAA;AACjB,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAgB;AACxB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE;AAC3B,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,YAAY,EAAE,KAAK;AACnB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,SAAS,EAAE,KAAK;aACnB,CAAC;AACF,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC/B;KACJ;AAES,IAAA,UAAU,CAAC,KAAiB,EAAA;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAES,OAAO,GAAA;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,IAAI,CACtB,OAAO,CAAC,WAAW,EAAE,EACrB,OAAO,CAAC,QAAQ,EAAE,EAClB,OAAO,CAAC,OAAO,EAAE,EACjB,IAAI,CAAC,KAAK,EAAE,EACZ,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAC1C,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;;IAIS,cAAc,GAAA;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAES,cAAc,GAAA;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjF,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAES,gBAAgB,GAAA;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;QACzE,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAES,gBAAgB,GAAA;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3F,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAES,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAES,gBAAgB,GAAA;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;AAGS,IAAA,kBAAkB,CAAC,KAAoB,EAAA;AAC7C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,EAAE,CAAC;SACzB;AAAM,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,EAAE,CAAC;SACzB;KACJ;AAGS,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AAC/C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;AAAM,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;KACJ;AAGS,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AAC/C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;AAAM,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;KACJ;AAES,IAAA,gBAAgB,CAAC,KAAY,EAAA;AACnC,QAAA,MAAM,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,CAAC;YAAE,OAAO;AAC1B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACvB,YAAA,MAAM,IAAI,GAAG,mBAAmB,CAAC,kBAAkB,CAAC;AACpD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAChD,YAAA,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;SAC7D;aAAM;YACH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;SACpE;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;;IAGS,UAAU,GAAA;AAChB,QAAA,MAAM,IAAI,GAAG,mBAAmB,CAAC,kBAAkB,CAAC;AACpD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;QAChF,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;AAES,IAAA,kBAAkB,CAAC,KAAY,EAAA;AACrC,QAAA,MAAM,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACrE,IAAI,CAAC,eAAe,EAAE,CAAC;SAC1B;KACJ;AAES,IAAA,kBAAkB,CAAC,KAAY,EAAA;AACrC,QAAA,MAAM,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,eAAe,EAAE,CAAC;SAC1B;KACJ;AAES,IAAA,UAAU,CAAC,IAAiB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC5B;KACJ;;AAIS,IAAA,cAAc,CAAC,IAAU,EAAA;AAC/B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QACzD,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AACzD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACzC,QAAA,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AAC7E,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AAC3C,QAAA,IAAI,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AACrF,QAAA,OAAO,KAAK,CAAC;KAChB;AAES,IAAA,cAAc,CAAC,IAAY,EAAA;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC;KACxD;AAES,IAAA,cAAc,CAAC,IAAY,EAAA;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC;AACjD,QAAA,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC;AACjD,QAAA,OAAO,KAAK,CAAC;KAChB;AAES,IAAA,aAAa,CAAC,IAAY,EAAA;QAChC,OAAO,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;KAC5C;AAES,IAAA,eAAe,CAAC,UAAkB,EAAA;AACxC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,KAAK,UAAU,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;KAC5G;AAES,IAAA,eAAe,CAAC,UAAkB,EAAA;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI,KAAK,GAAG,CAAC,WAAW,EAAE,IAAI,UAAU,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;AAClG,YAAA,OAAO,IAAI,CAAC;SACf;QACD,IAAI,GAAG,KAAK,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI,KAAK,GAAG,CAAC,WAAW,EAAE,IAAI,UAAU,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;AAClG,YAAA,OAAO,IAAI,CAAC;SACf;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAES,IAAA,OAAO,CAAC,KAAa,EAAA;QAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KACzC;AAES,IAAA,kBAAkB,CAAC,IAAU,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE;AACtC,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,GAAG,EAAE,SAAS;AACjB,SAAA,CAAC,CAAC;KACN;;AAGO,IAAA,gBAAgB,CAAC,KAAuC,EAAA;QAC5D,OAAO,mBAAmB,CACtB,IAAI,CAAC,IAAI,EAAE,EACX,KAAK,EACL,IAAI,CAAC,cAAc,EAAE,EACrB,IAAI,CAAC,UAAU,EAAE,EACjB,IAAI,CAAC,iBAAiB,EAAE,CAC3B,CAAC;KACL;IAEO,eAAe,GAAA;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,IAAI,CACpB,IAAI,CAAC,WAAW,EAAE,EAClB,IAAI,CAAC,QAAQ,EAAE,EACf,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,KAAK,EAAE,EACZ,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAC1C,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAChD,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SAC3B;KACJ;AAEO,IAAA,gBAAgB,CACpB,IAAU,EACV,cAAuB,EACvB,KAAW,EACX,QAAqB,EACrB,KAA+C,EAC/C,cAA6B,EAC7B,YAA2B,EAAA;QAE3B,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACxE,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAClE,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,SAAS,GACX,cAAc,KAAK,IAAI,IAAI,YAAY,KAAK,IAAI;AAC5C,cAAE,QAAQ,GAAG,cAAc,IAAI,QAAQ,GAAG,YAAY;cACpD,KAAK,CAAC;AAChB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;AACpC,cAAE,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACvD,cAAE,QAAQ;AACR,kBAAE,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;kBACzB,KAAK,CAAC;QACd,OAAO;AACH,YAAA,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAA,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;YAC/B,UAAU;AACV,YAAA,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvF,IAAI;YACJ,cAAc;YACd,YAAY;YACZ,UAAU;YACV,SAAS;SACZ,CAAC;KACL;IAEO,uBAAuB,CAAC,KAAsB,EAAE,OAAwB,EAAA;QAC5E,IAAI,IAAI,CAAC,eAAe;AAAE,YAAA,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACzD,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAChD,QAAA,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;AAAE,YAAA,OAAO,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACrG,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;gBACnB,IAAI,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;oBAAE,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7E,IAAI,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;oBAAE,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;aAChF;AACD,YAAA,OAAO,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;SAC5C;AACD,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAC/D,gBAAA,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;aAChD;AACD,YAAA,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAC3D,gBAAA,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;aAC9C;AACD,YAAA,OAAO,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;SAC5C;QACD,MAAM,CAAC,GAAG,KAAa,CAAC;AACxB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;YACxB,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;gBAAE,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnF,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;gBAAE,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;AACnF,YAAA,OAAO,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;SAC5C;QACD,IAAI,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7E,IAAI,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;AAC7E,QAAA,OAAO,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;KAC5C;AAEO,IAAA,WAAW,CAAC,KAAc,EAAA;AAC9B,QAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;KAC5F;wGA5oCQ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAbjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,aAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,mBAAmB;AAChC,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,mBAAmB;AAChC,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;SACJ,EA8L6D,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,mIACM,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAC1B,UAAU,EC9S5E,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,o15BAigBA,0jBDzcQ,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACP,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,YAAY,4IACZ,gBAAgB,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,mBAAmB,EACnB,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,8mBACX,mBAAmB,EAAA,CAAA,EAAA,CAAA,CAAA;;AAi9Bb,UAAA,CAAA;AADT,IAAA,eAAe,EAAE;AASjB,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,oBAAA,EAAA,IAAA,CAAA,CAAA;AAGS,UAAA,CAAA;AADT,IAAA,eAAe,EAAE;AASjB,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,IAAA,CAAA,CAAA;AAGS,UAAA,CAAA;AADT,IAAA,eAAe,EAAE;AASjB,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,IAAA,CAAA,CAAA;4FA77BQ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA5D/B,SAAS;+BACI,cAAc,EAAA,UAAA,EACZ,IAAI,EACP,OAAA,EAAA;wBACL,OAAO;wBACP,eAAe;wBACf,YAAY;wBACZ,gBAAgB;wBAChB,mBAAmB;wBACnB,WAAW;wBACX,mBAAmB;qBACtB,EAiCK,IAAA,EAAA;AACF,wBAAA,iBAAiB,EAAE,aAAa;qBACnC,EACU,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAqB,mBAAA;AAChC,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAqB,mBAAA;AAChC,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA,EAAA,QAAA,EAAA,o15BAAA,EAAA,MAAA,EAAA,CAAA,kgBAAA,CAAA,EAAA,CAAA;8BAi6BS,kBAAkB,EAAA,EAAA,EAWlB,oBAAoB,EAAA,EAAA,EAWpB,oBAAoB,EAAA,EAAA,EAAA,EAAA,CAAA;;AEriClC;;AAEG;;;;"}
1
+ {"version":3,"file":"seniorsistemas-angular-components-datepicker.mjs","sources":["../../projects/angular-components/datepicker/src/lib/datepicker/date-segment-input.ts","../../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":["export type SegmentKind = 'day' | 'month' | 'year' | 'hour' | 'minute' | 'second' | 'ampm';\n\nexport interface EditableSegmentState {\n kind: SegmentKind;\n length: number;\n text: string;\n}\n\nexport interface LiteralSegmentState {\n kind: 'literal';\n text: string;\n}\n\nexport type SegmentState = EditableSegmentState | LiteralSegmentState;\n\nexport interface SegmentEngineConfig {\n mode: 'date' | 'month' | 'time' | 'datetime';\n dateFormat: string;\n hourFormat: '12' | '24';\n showSeconds: boolean;\n}\n\ninterface FormatToken {\n kind: 'day' | 'month' | 'year' | 'literal';\n raw: string;\n}\n\nconst DATE_FORMAT_TOKEN_RE = /yyyy|yy|MM|mm|dd|d/g;\nconst YEAR_SEGMENT_LENGTH = 4;\nconst SHORT_SEGMENT_LENGTH = 2;\nconst HOURS_PER_MERIDIEM = 12;\nconst MAX_HOUR_24 = 23;\nconst MAX_MINUTE_SECOND = 59;\nconst GENERIC_MAX_DAY = 31;\nconst LEAP_REFERENCE_YEAR = 2000;\n\nfunction isEditableSegment(segment: SegmentState): segment is EditableSegmentState {\n return segment.kind !== 'literal';\n}\n\n/** Tokeniza um `dateFormat` (ex.: `dd/MM/yyyy`, `MM/dd/yy`) em tokens de dia/mês/ano + literais. */\nexport function tokenizeDateFormat(format: string): FormatToken[] {\n const tokens: FormatToken[] = [];\n let lastIndex = 0;\n DATE_FORMAT_TOKEN_RE.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = DATE_FORMAT_TOKEN_RE.exec(format))) {\n if (match.index > lastIndex) {\n tokens.push({ kind: 'literal', raw: format.slice(lastIndex, match.index) });\n }\n const raw = match[0];\n const kind = raw[0] === 'y' ? 'year' : raw[0] === 'd' ? 'day' : 'month';\n tokens.push({ kind, raw });\n lastIndex = DATE_FORMAT_TOKEN_RE.lastIndex;\n }\n if (lastIndex < format.length) {\n tokens.push({ kind: 'literal', raw: format.slice(lastIndex) });\n }\n return tokens;\n}\n\n/** Dias no mês (1-12), já resolvendo fevereiro/ano bissexto via rollover nativo do `Date`. */\nexport function daysInMonth(month: number, year: number): number {\n return new Date(year, month, 0).getDate();\n}\n\nfunction buildDateSegments(dateFormat: string): SegmentState[] {\n return tokenizeDateFormat(dateFormat).map((token): SegmentState => {\n if (token.kind === 'literal') return { kind: 'literal', text: token.raw };\n if (token.kind === 'year') return { kind: 'year', length: YEAR_SEGMENT_LENGTH, text: '' };\n if (token.kind === 'month') return { kind: 'month', length: SHORT_SEGMENT_LENGTH, text: '' };\n return { kind: 'day', length: SHORT_SEGMENT_LENGTH, text: '' };\n });\n}\n\nfunction buildMonthSegments(dateFormat: string): SegmentState[] {\n const all = buildDateSegments(dateFormat);\n const dayIdx = all.findIndex((s) => s.kind === 'day');\n if (dayIdx === -1) return all;\n const dropIndexes = new Set<number>([dayIdx]);\n if (all[dayIdx + 1]?.kind === 'literal') {\n dropIndexes.add(dayIdx + 1);\n } else if (all[dayIdx - 1]?.kind === 'literal') {\n dropIndexes.add(dayIdx - 1);\n }\n return all.filter((_, i) => !dropIndexes.has(i));\n}\n\nfunction buildTimeSegments(hourFormat: '12' | '24', showSeconds: boolean): SegmentState[] {\n const segments: SegmentState[] = [\n { kind: 'hour', length: SHORT_SEGMENT_LENGTH, text: '' },\n { kind: 'literal', text: ':' },\n { kind: 'minute', length: SHORT_SEGMENT_LENGTH, text: '' },\n ];\n if (showSeconds) {\n segments.push({ kind: 'literal', text: ':' }, { kind: 'second', length: SHORT_SEGMENT_LENGTH, text: '' });\n }\n if (hourFormat === '12') {\n segments.push({ kind: 'literal', text: ' ' }, { kind: 'ampm', length: SHORT_SEGMENT_LENGTH, text: '' });\n }\n return segments;\n}\n\nfunction buildSegmentsFor(config: SegmentEngineConfig): SegmentState[] {\n switch (config.mode) {\n case 'date':\n return buildDateSegments(config.dateFormat);\n case 'month':\n return buildMonthSegments(config.dateFormat);\n case 'time':\n return buildTimeSegments(config.hourFormat, config.showSeconds);\n case 'datetime':\n return [\n ...buildDateSegments(config.dateFormat),\n { kind: 'literal', text: ' ' },\n ...buildTimeSegments(config.hourFormat, config.showSeconds),\n ];\n }\n}\n\n/**\n * Engine de segmentos (dia/mês/ano/hora/minuto/segundo/ampm) para o trigger do datepicker.\n * Sem dependências de Angular — DOM/CVA ficam por conta do componente que a consome.\n */\nexport class DateSegmentEngine {\n private segments: SegmentState[] = [];\n private config: SegmentEngineConfig | null = null;\n private activeIndex: number | null = null;\n private freshEntry = true;\n\n configure(config: SegmentEngineConfig): void {\n this.config = config;\n this.segments = buildSegmentsFor(config);\n this.activeIndex = null;\n this.freshEntry = true;\n }\n\n getDisplayString(): string {\n return this.segments.map((s) => (isEditableSegment(s) ? this.renderSegment(s) : s.text)).join('');\n }\n\n private renderSegment(segment: EditableSegmentState): string {\n return segment.text + '_'.repeat(Math.max(0, segment.length - segment.text.length));\n }\n\n private segmentRenderLength(segment: SegmentState): number {\n return isEditableSegment(segment) ? segment.length : segment.text.length;\n }\n\n getSegmentRange(index: number): [number, number] {\n let start = 0;\n for (let i = 0; i < index; i++) {\n start += this.segmentRenderLength(this.segments[i]);\n }\n return [start, start + this.segmentRenderLength(this.segments[index])];\n }\n\n getFirstEditableIndex(): number {\n return this.segments.findIndex((s) => isEditableSegment(s));\n }\n\n getLastEditableIndex(): number {\n for (let i = this.segments.length - 1; i >= 0; i--) {\n if (isEditableSegment(this.segments[i])) return i;\n }\n return -1;\n }\n\n getActiveIndex(): number | null {\n return this.activeIndex;\n }\n\n activeKind(): SegmentKind | null {\n if (this.activeIndex === null) return null;\n const segment = this.segments[this.activeIndex];\n return isEditableSegment(segment) ? segment.kind : null;\n }\n\n selectSegmentAt(charIndex: number): number {\n let acc = 0;\n for (let i = 0; i < this.segments.length; i++) {\n const len = this.segmentRenderLength(this.segments[i]);\n if (charIndex < acc + len) {\n return this.nearestEditableFrom(i);\n }\n acc += len;\n }\n return this.getLastEditableIndex();\n }\n\n private nearestEditableFrom(index: number): number {\n for (let i = index; i < this.segments.length; i++) {\n if (isEditableSegment(this.segments[i])) return i;\n }\n return this.getLastEditableIndex();\n }\n\n selectSegment(index: number): void {\n if (index < 0 || index >= this.segments.length || !isEditableSegment(this.segments[index])) return;\n this.activeIndex = index;\n this.freshEntry = true;\n }\n\n selectFirstSegment(): void {\n this.selectSegment(this.getFirstEditableIndex());\n }\n\n /** Commita (pad/clamp) o segmento ativo e move para o próximo/anterior editável. */\n moveToAdjacentSegment(direction: 1 | -1): 'moved' | 'boundary' {\n this.commitActiveSegment();\n if (this.activeIndex === null) return 'boundary';\n let next = this.activeIndex;\n do {\n next += direction;\n } while (next >= 0 && next < this.segments.length && !isEditableSegment(this.segments[next]));\n if (next < 0 || next >= this.segments.length) {\n this.activeIndex = null;\n return 'boundary';\n }\n this.selectSegment(next);\n return 'moved';\n }\n\n typeDigit(digit: string): void {\n if (this.activeIndex === null) return;\n const segment = this.segments[this.activeIndex];\n if (!isEditableSegment(segment) || segment.kind === 'ampm') return;\n if (this.freshEntry) {\n segment.text = '';\n this.freshEntry = false;\n }\n if (segment.text.length >= segment.length) return;\n segment.text += digit;\n if (segment.text.length >= segment.length) {\n this.commitActiveSegment();\n this.autoAdvance();\n }\n }\n\n private autoAdvance(): void {\n if (this.activeIndex === null) return;\n let next = this.activeIndex;\n do {\n next += 1;\n } while (next < this.segments.length && !isEditableSegment(this.segments[next]));\n if (next < this.segments.length) {\n this.selectSegment(next);\n }\n }\n\n setAmPm(value: 0 | 1): void {\n if (this.activeIndex === null) return;\n const segment = this.segments[this.activeIndex];\n if (!isEditableSegment(segment) || segment.kind !== 'ampm') return;\n segment.text = value === 1 ? 'PM' : 'AM';\n this.freshEntry = true;\n }\n\n clearActiveSegment(kind: 'backspace' | 'delete'): void {\n if (this.activeIndex === null) return;\n const segment = this.segments[this.activeIndex];\n if (!isEditableSegment(segment)) return;\n if (segment.text === '') {\n if (kind === 'backspace') {\n let prev = this.activeIndex;\n do {\n prev -= 1;\n } while (prev >= 0 && !isEditableSegment(this.segments[prev]));\n if (prev >= 0) {\n this.activeIndex = prev;\n this.freshEntry = false;\n }\n }\n return;\n }\n segment.text = '';\n this.freshEntry = true;\n }\n\n /** Limpa todos os segmentos editáveis (usado quando o campo inteiro está selecionado, ex.: Ctrl+A). */\n clearAll(): void {\n for (const segment of this.segments) {\n if (isEditableSegment(segment)) segment.text = '';\n }\n this.activeIndex = this.getFirstEditableIndex();\n this.freshEntry = true;\n }\n\n /** Incrementa/decrementa o segmento ativo, dando a volta (wrap) dentro do range válido. */\n incrementActiveSegment(delta: 1 | -1): void {\n if (this.activeIndex === null) return;\n const segment = this.segments[this.activeIndex];\n if (!isEditableSegment(segment)) return;\n if (segment.kind === 'ampm') {\n this.setAmPm(segment.text === 'PM' ? 0 : 1);\n return;\n }\n const { min, max } = this.boundsFor(segment.kind);\n const range = max - min + 1;\n const current = segment.text ? parseInt(segment.text, 10) : delta > 0 ? min - 1 : min;\n const next = (((current + delta - min) % range) + range) % range + min;\n segment.text = String(next).padStart(segment.length, '0');\n this.freshEntry = true;\n this.reconcileDayIfNeeded(segment.kind);\n }\n\n /** Pad/clamp do segmento ativo (ex.: \"2\" -> \"02\", \"45\" no dia -> clamp para daysInMonth). */\n commitActiveSegment(): void {\n if (this.activeIndex === null) return;\n const segment = this.segments[this.activeIndex];\n if (!isEditableSegment(segment)) return;\n const kind = segment.kind;\n segment.text = this.clampAndPad(segment);\n this.freshEntry = true;\n this.reconcileDayIfNeeded(kind);\n }\n\n /** Commita o segmento ativo e sai do modo de edição (usado no blur do campo). */\n deactivate(): void {\n this.commitActiveSegment();\n this.activeIndex = null;\n }\n\n private clampAndPad(segment: EditableSegmentState): string {\n if (segment.kind === 'ampm' || segment.kind === 'year' || !segment.text) {\n return segment.text;\n }\n const num = parseInt(segment.text, 10);\n const { min, max } = this.boundsFor(segment.kind);\n const clamped = Math.min(max, Math.max(min, num));\n return String(clamped).padStart(segment.length, '0');\n }\n\n private boundsFor(kind: SegmentKind): { min: number; max: number } {\n switch (kind) {\n case 'day':\n return { min: 1, max: this.daysInMonthNow() };\n case 'month':\n return { min: 1, max: HOURS_PER_MERIDIEM };\n case 'hour':\n return this.config?.hourFormat === '12'\n ? { min: 1, max: HOURS_PER_MERIDIEM }\n : { min: 0, max: MAX_HOUR_24 };\n case 'minute':\n case 'second':\n return { min: 0, max: MAX_MINUTE_SECOND };\n default:\n return { min: 0, max: 9999 };\n }\n }\n\n /**\n * Bound do dia dependendo do que já é conhecido de mês/ano. Nunca \"adivinha\" com o mês/ano\n * atuais do sistema — isso estreitaria o range antes da hora (ex.: dia=29 digitado antes do\n * ano, mês=fevereiro conhecido mas ano ainda não -> se assumisse o ano atual do sistema e ele\n * não fosse bissexto, o dia seria clampado para 28 e nunca mais reexpandido para 29 mesmo que\n * o ano realmente digitado depois seja bissexto). Em vez disso, fica sempre no lado permissivo\n * até que a informação realmente exista.\n */\n private daysInMonthNow(): number {\n const monthSegment = this.findEditable('month');\n const monthKnown = !!monthSegment?.text && monthSegment.text.length === monthSegment.length;\n if (!monthSegment || !monthKnown) return GENERIC_MAX_DAY;\n const month = parseInt(monthSegment.text, 10);\n const yearSegment = this.findEditable('year');\n const yearKnown = !!yearSegment?.text && yearSegment.text.length === YEAR_SEGMENT_LENGTH;\n if (!yearSegment || !yearKnown) return daysInMonth(month, LEAP_REFERENCE_YEAR);\n return daysInMonth(month, parseInt(yearSegment.text, 10));\n }\n\n private reconcileDayIfNeeded(committedKind: SegmentKind): void {\n if (committedKind !== 'month' && committedKind !== 'year') return;\n const daySegment = this.findEditable('day');\n if (!daySegment || daySegment.text.length !== daySegment.length) return;\n const max = this.daysInMonthNow();\n const dayNum = parseInt(daySegment.text, 10);\n if (dayNum > max) {\n daySegment.text = String(max).padStart(daySegment.length, '0');\n }\n }\n\n private findEditable(kind: SegmentKind): EditableSegmentState | undefined {\n return this.segments.find((s): s is EditableSegmentState => isEditableSegment(s) && s.kind === kind);\n }\n\n isEmpty(): boolean {\n return this.segments.every((s) => !isEditableSegment(s) || s.text === '');\n }\n\n isComplete(): boolean {\n return this.segments.every((s) => !isEditableSegment(s) || s.text.length === s.length);\n }\n\n loadFromDate(date: Date | null): void {\n for (const segment of this.segments) {\n if (isEditableSegment(segment)) segment.text = '';\n }\n this.activeIndex = null;\n this.freshEntry = true;\n if (!date) return;\n for (const segment of this.segments) {\n if (!isEditableSegment(segment)) continue;\n segment.text = this.renderValueFor(segment.kind, date);\n }\n }\n\n private renderValueFor(kind: SegmentKind, date: Date): string {\n switch (kind) {\n case 'day':\n return String(date.getDate()).padStart(SHORT_SEGMENT_LENGTH, '0');\n case 'month':\n return String(date.getMonth() + 1).padStart(SHORT_SEGMENT_LENGTH, '0');\n case 'year':\n return String(date.getFullYear()).padStart(YEAR_SEGMENT_LENGTH, '0');\n case 'hour': {\n const h = date.getHours();\n const display =\n this.config?.hourFormat === '12' ? (h % HOURS_PER_MERIDIEM === 0 ? HOURS_PER_MERIDIEM : h % HOURS_PER_MERIDIEM) : h;\n return String(display).padStart(SHORT_SEGMENT_LENGTH, '0');\n }\n case 'minute':\n return String(date.getMinutes()).padStart(SHORT_SEGMENT_LENGTH, '0');\n case 'second':\n return String(date.getSeconds()).padStart(SHORT_SEGMENT_LENGTH, '0');\n case 'ampm':\n return date.getHours() < HOURS_PER_MERIDIEM ? 'AM' : 'PM';\n }\n }\n\n /** Constrói o `Date` a partir dos segmentos; `null` enquanto incompleto. Usa `referenceDate` para preencher partes ausentes (ex.: hora ao editar só a data). */\n toDate(referenceDate?: Date | null): Date | null {\n if (!this.isComplete()) return null;\n const ref = referenceDate ?? new Date();\n const getNum = (kind: SegmentKind): number | null => {\n const segment = this.findEditable(kind);\n return segment ? parseInt(segment.text, 10) : null;\n };\n\n const year = getNum('year') ?? ref.getFullYear();\n const monthNum = getNum('month');\n const month = monthNum !== null ? monthNum - 1 : ref.getMonth();\n const day = this.config?.mode === 'month' ? 1 : (getNum('day') ?? ref.getDate());\n\n let hour = getNum('hour');\n const minute = getNum('minute') ?? ref.getMinutes();\n const second = getNum('second') ?? ref.getSeconds();\n\n if (hour !== null && this.config?.hourFormat === '12') {\n const ampmSegment = this.findEditable('ampm');\n const isPm = ampmSegment?.text === 'PM';\n hour = hour % HOURS_PER_MERIDIEM;\n if (isPm) hour += HOURS_PER_MERIDIEM;\n }\n\n return new Date(year, month, day, hour ?? ref.getHours(), minute, second);\n }\n}\n","import type { DateRange } from './models';\n\nexport type { DateRange };\n\nconst DAY_MATCH_GROUP = 3;\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 para exibição em campos `type=\"text\"` (modos `range` e seleção múltipla).\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\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 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 parseInput(mode: string, raw: string, rangeSeparator = '—'): Date | DateRange | null {\n if (!raw?.trim()) {\n return null;\n }\n switch (mode) {\n case 'range':\n return parseRangeInput(raw, rangeSeparator);\n case 'year':\n return parseYearInput(raw);\n default:\n return parseDate(raw);\n }\n}\n\n/** Formata range/seleção múltipla (dateFormat) e o ano em `mode='year'`. Demais modos são resolvidos pela engine de segmentos. */\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 && mode === 'year') {\n return String(value.getFullYear());\n }\n return '';\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 DestroyRef,\n ElementRef,\n inject,\n Injector,\n input,\n model,\n OnInit,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\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, TranslateService } from '@ngx-translate/core';\nimport { DateSegmentEngine, SegmentEngineConfig } from './date-segment-input';\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 styles: [\n `\n :host {\n display: block;\n position: relative;\n width: 100%;\n }\n :host.ng-invalid.ng-dirty input {\n border-color: #c13018;\n }\n :host.ng-invalid.ng-dirty input:focus {\n border-color: #c13018;\n outline-color: #c13018;\n }\n :host.ng-invalid.ng-dirty button[type='button'] {\n border-color: #c13018;\n }\n :host.no-icon button[type='button'] {\n display: none;\n }\n :host.no-icon input {\n padding-right: 0.75rem;\n }\n button[type='button']:focus-visible {\n outline: 2px solid #428bca;\n outline-offset: 1px;\n border-radius: inherit;\n }\n `,\n ],\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 private static readonly DOUBLE_CLICK_THRESHOLD_MS = 400;\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 /**\n * Formato de exibição da data no campo. Quando omitido, é resolvido a partir do\n * locale ativo (chave `platform.angular_components.date_format`), com fallback para `dd/MM/yyyy`.\n */\n readonly dateFormat = input<string | undefined>(undefined);\n\n /**\n * Formato de exibição das horas: `'12'` ou `'24'`. Quando omitido, é resolvido a partir\n * do locale ativo (chave `platform.angular_components.hour_format`), com fallback para `'24'`.\n */\n readonly hourFormat = input<'12' | '24' | undefined>(undefined);\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 isFocused = 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 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 triggerInput = viewChild.required('triggerInput', { read: ElementRef });\n private readonly injector = inject(Injector);\n private readonly hostElement = inject(ElementRef);\n private readonly translateService = inject(TranslateService);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly currentLang = signal(this.translateService.currentLang);\n\n /** Reflete `(pointer: coarse)` — dispositivos touch preferem o popup do calendário ao teclado. */\n protected readonly isTouchDevice = signal(\n typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n ? window.matchMedia('(pointer: coarse)').matches\n : false,\n );\n\n private readonly segmentEngine = new DateSegmentEngine();\n private lastSegmentConfig: SegmentEngineConfig | null = null;\n private measureCanvas?: HTMLCanvasElement;\n /** Incrementado a cada mutação do usuário — invalida callbacks de clique/foco adiados que ficaram obsoletos. */\n private interactionGeneration = 0;\n /** `timeStamp` do último mousedown no input segmentado — usado pra detectar duplo clique na mão. */\n private lastMouseDownAt = 0;\n\n constructor() {\n this.translateService.onLangChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n this.currentLang.set(event.lang);\n });\n\n if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') {\n const mediaQuery = window.matchMedia('(pointer: coarse)');\n const handlePointerChange = (event: MediaQueryListEvent): void => this.isTouchDevice.set(event.matches);\n mediaQuery.addEventListener('change', handlePointerChange);\n this.destroyRef.onDestroy(() => mediaQuery.removeEventListener('change', handlePointerChange));\n }\n }\n\n // ── Computed ──────────────────────────────────────────────────────────\n\n protected readonly resolvedIcon = computed(() => (this.mode() === 'time' ? 'fas fa-clock' : this.icon()));\n\n /** `dateFormat` explícito ou resolvido a partir do locale ativo (fallback `dd/MM/yyyy`). */\n protected readonly resolvedDateFormat = computed(() => {\n this.currentLang();\n return (\n this.dateFormat() ??\n this.resolveTranslatedOrDefault('platform.angular_components.date_format', 'dd/MM/yyyy')\n );\n });\n\n /** `hourFormat` explícito ou resolvido a partir do locale ativo (fallback `'24'`). */\n protected readonly resolvedHourFormat = computed<'12' | '24'>(() => {\n this.currentLang();\n const explicit = this.hourFormat();\n if (explicit) return explicit;\n const translated = this.resolveTranslatedOrDefault('platform.angular_components.hour_format', '24');\n return translated === '12' ? '12' : '24';\n });\n\n /** Modos cujo formato de exibição é resolvido pela engine de segmentos (independente de touch/readonly). */\n protected readonly isSegmentModeCandidate = computed(() => {\n if (this.isMultipleMode()) return false;\n const mode = this.mode();\n return mode === 'date' || mode === 'month' || mode === 'time' || mode === 'datetime';\n });\n\n /** Interatividade de digitação por segmento — desligada em touch ou quando `readonlyInput` é usado. */\n protected readonly isSegmentedMode = computed(\n () => this.isSegmentModeCandidate() && !this.isTouchDevice() && !this.readonlyInput(),\n );\n\n /** Indica se o time picker deve usar o formato de 12 horas com seletor AM/PM. */\n protected readonly is12HourFormat = computed(() => this.resolvedHourFormat() === '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 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 () => {\n const d = this.defaultDate();\n if (d && !this.value() && !this.rangeValue() && this.multipleValues().length === 0) {\n this.value.set(d);\n this.setDisplayFor(d);\n this.viewDate.set(new Date(d.getFullYear(), d.getMonth(), 1));\n this._onChange(d);\n }\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.setDisplayFor(null);\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 const d = value as Date;\n this.setDisplayFor(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.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 /**\n * O backdrop do CDK Overlay cobre a tela inteira, incluindo o próprio trigger — clicar no\n * input ou nos botões do trigger enquanto o painel já está aberto também dispara\n * `backdropClick` (o próprio `<input>` nunca recebe o `click` nesse caso, então\n * `handleInputClick` nunca dispara). Sem este filtro, clicar no input para trocar de\n * segmento fecharia o painel e roubaria o foco para o botão do ícone (via `closePanel`).\n * Quando o clique caiu especificamente sobre o `<input>`, reaplicamos a mesma lógica de\n * reposicionamento de segmento que `handleInputClick` faria, em vez de só ignorar o clique.\n */\n protected handleBackdropClick(event: MouseEvent): void {\n // `event.target` de um backdropClick do CDK Overlay é sempre o próprio <div> do\n // backdrop, nunca o elemento realmente clicado — então checar `.contains(event.target)`\n // nunca funciona. Em vez disso, comparamos a coordenada real do clique (que o\n // MouseEvent sempre carrega corretamente) contra os retângulos dos elementos do trigger.\n const inputEl = this.triggerInput()?.nativeElement as HTMLInputElement | undefined;\n if (inputEl && this.isSegmentedMode()) {\n const inputRect = inputEl.getBoundingClientRect();\n const clickedOnInput =\n event.clientX >= inputRect.left &&\n event.clientX <= inputRect.right &&\n event.clientY >= inputRect.top &&\n event.clientY <= inputRect.bottom;\n if (clickedOnInput) {\n this.handleSegmentPointerDown(inputEl, event.clientX, event.timeStamp);\n return;\n }\n }\n const rect = this.hostElement.nativeElement.getBoundingClientRect();\n const clickedOnTrigger =\n event.clientX >= rect.left &&\n event.clientX <= rect.right &&\n event.clientY >= rect.top &&\n event.clientY <= rect.bottom;\n if (clickedOnTrigger) {\n return;\n }\n this.closePanel();\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(event: MouseEvent): void {\n if (!this.isSegmentedMode() || !(event.target instanceof HTMLInputElement)) {\n return;\n }\n // Bound to `mousedown`, não `click` (veja o comentário em `applySegmentClick`). O\n // comportamento nativo padrão do browser pra mousedown num `<input>` de texto é\n // posicionar o caret/iniciar seleção de texto na coordenada do clique — isso roda\n // *depois* dos nossos listeners e sobrescreveria o `setSelectionRange` do segmento\n // aplicado logo abaixo. `preventDefault()` evita essa corrida.\n event.preventDefault();\n this.handleSegmentPointerDown(event.target, event.clientX, event.timeStamp);\n }\n\n /**\n * Ponto de entrada único pro clique no input segmentado — chamado tanto por\n * `handleInputClick` (mousedown direto no `<input>`, o primeiro clique, antes do backdrop\n * existir) quanto por `handleBackdropClick` (cliques seguintes, já com o painel aberto e o\n * backdrop cobrindo o input). Precisa ser único porque os dois cliques de um duplo clique\n * real costumam chegar por caminhos DIFERENTES — o primeiro via mousedown no input, o\n * segundo via backdropClick — então rastrear o timestamp do \"último clique\" separadamente\n * em cada handler nunca detectaria um duplo clique de verdade. Nem `dblclick` nem\n * `event.detail` são confiáveis aqui (dependem da contagem/targeting interna de cliques do\n * browser, que nossas manipulações de foco/seleção parecem atrapalhar — observado\n * empiricamente: `event.detail` fica sempre 1), daí a detecção manual por timestamp.\n */\n private handleSegmentPointerDown(input: HTMLInputElement, clientX: number, timeStamp: number): void {\n const isDoubleClick = timeStamp - this.lastMouseDownAt < DatepickerComponent.DOUBLE_CLICK_THRESHOLD_MS;\n this.lastMouseDownAt = timeStamp;\n if (isDoubleClick) {\n this.lastMouseDownAt = 0; // evita que um terceiro clique encadeie em outro \"duplo\"\n this.selectWholeField(input);\n return;\n }\n this.applySegmentClick(input, clientX);\n }\n\n /**\n * Seleciona o segmento sob a coordenada `clientX` de um clique no input segmentado.\n * Compartilhado por `handleInputClick` (mousedown real no `<input>` — usamos `mousedown`\n * em vez de `click` porque o `focus`/`openOnFocus` disparado no meio do gesto pode montar\n * o backdrop do CDK Overlay embaixo do cursor antes do `mouseup`, fazendo o browser resolver\n * o `click` pro ancestral comum entre o alvo do mousedown e o do mouseup — na prática,\n * `<body>` — em vez do `<input>` ou do backdrop) e `handleBackdropClick` (clique no trigger\n * com o painel já aberto em regime estável, interceptado pelo backdrop do CDK Overlay).\n */\n private applySegmentClick(input: HTMLInputElement, clientX: number): void {\n this.ensureSegmentEngineConfigured();\n // Calcula o segmento a partir da coordenada do clique (clientX), não de\n // `input.selectionStart` — o browser ajusta a posição do caret de forma assíncrona\n // após o clique (observado empiricamente, especialmente na transição de foco), então\n // ler `selectionStart` nesse momento é uma fonte não confiável. `clientX` é síncrono\n // e imediato, sem essa corrida.\n const charIndex = this.clickClientXToCharIndex(input, clientX);\n const generation = ++this.interactionGeneration;\n // Foca e seleciona o segmento juntos, e reaplica os dois algumas vezes logo em seguida —\n // o browser/CDK Overlay pode mexer no foco de forma assíncrona depois do clique (blur\n // nativo do backdrop, cdkTrapFocus do painel, etc.); em vez de tentar prever/evitar cada\n // causa, simplesmente vencemos reafirmando foco+seleção por cima.\n const focusAndSelect = (): void => {\n if (generation !== this.interactionGeneration) return;\n const index = this.segmentEngine.selectSegmentAt(charIndex);\n this.segmentEngine.selectSegment(index);\n input.focus();\n this.selectActiveSegmentRange(input);\n };\n focusAndSelect();\n setTimeout(focusAndSelect, 0);\n setTimeout(focusAndSelect, 50);\n }\n\n /** Duplo clique seleciona o input inteiro (todos os segmentos), como num `<input>` de texto comum. */\n protected handleInputDblClick(event: MouseEvent): void {\n if (!this.isSegmentedMode() || !(event.target instanceof HTMLInputElement)) return;\n this.selectWholeField(event.target);\n }\n\n /**\n * Seleciona todos os segmentos do input (usado tanto pelo duplo clique detectado na mão em\n * `handleSegmentPointerDown` quanto por `handleInputDblClick`, mantido como caminho direto\n * pra quem dispara um `dblclick` de verdade, ex.: acessibilidade/testes).\n */\n private selectWholeField(input: HTMLInputElement): void {\n this.ensureSegmentEngineConfigured();\n // Garante um segmento ativo *antes* de focar: se o CDK Overlay tiver roubado o foco de\n // forma assíncrona (blur) entre os cliques que compõem o duplo clique, o `input.focus()`\n // abaixo dispara um evento `focus` genuíno, e handleInputFocus só evita agendar sua própria\n // reaplicação concorrente (que sobrescreveria nossa seleção do campo inteiro mais tarde)\n // quando encontra `getActiveIndex() !== null` — o mesmo motivo pelo qual handleInputClick\n // sempre chama `segmentEngine.selectSegment(index)` antes de `input.focus()`.\n if (this.segmentEngine.getActiveIndex() === null) {\n this.segmentEngine.selectFirstSegment();\n }\n const generation = ++this.interactionGeneration;\n // Mesmo padrão defensivo de handleInputClick: o clique que fecha o duplo clique já rodou\n // handleInputClick (selecionando só um segmento) e pode ter agendado suas próprias\n // reaplicações adiadas — a geração recém-incrementada as invalida, então só a seleção do\n // campo inteiro sobrevive.\n const focusAndSelectAll = (): void => {\n if (generation !== this.interactionGeneration) return;\n input.focus();\n input.setSelectionRange(0, input.value.length);\n };\n focusAndSelectAll();\n setTimeout(focusAndSelectAll, 0);\n setTimeout(focusAndSelectAll, 50);\n }\n\n protected handleInputFocus(event: Event): void {\n this.isFocused.set(true);\n this.focused.emit(event);\n if (this.isSegmentedMode() && event.target instanceof HTMLInputElement) {\n this.ensureSegmentEngineConfigured();\n const input = event.target;\n if (input.value === '') {\n input.value = this.segmentEngine.getDisplayString();\n }\n if (this.segmentEngine.getActiveIndex() === null) {\n // Foco \"genuíno\" (Tab a partir de outro campo, ou primeiro foco no campo) —\n // nenhum segmento ativo ainda, então seleciona o primeiro.\n const generation = ++this.interactionGeneration;\n this.segmentEngine.selectFirstSegment();\n this.selectActiveSegmentRange(input);\n setTimeout(() => {\n if (generation !== this.interactionGeneration) return;\n if (this.segmentEngine.getActiveIndex() !== null) {\n this.selectActiveSegmentRange(input);\n }\n }, 0);\n } else {\n // Já existe um segmento ativo — por exemplo, handleInputClick acabou de\n // defini-lo e está refocando o input programaticamente após um blur espúrio.\n // Não reinicia para o primeiro segmento; só garante que a seleção visual bata\n // com o estado atual.\n this.selectActiveSegmentRange(input);\n }\n }\n if (this.showOnFocus()) {\n this.openOnFocus();\n }\n }\n\n /** Mapeia a coordenada X (viewport) de um clique para o índice de caractere mais próximo no valor exibido. */\n private clickClientXToCharIndex(input: HTMLInputElement, clientX: number): number {\n const style = getComputedStyle(input);\n const canvas = (this.measureCanvas ??= document.createElement('canvas'));\n const ctx = canvas.getContext('2d');\n if (!ctx) return 0;\n ctx.font = `${style.fontStyle} ${style.fontWeight} ${style.fontSize} ${style.fontFamily}`;\n const rect = input.getBoundingClientRect();\n const paddingLeft = parseFloat(style.paddingLeft) || 0;\n const localX = clientX - rect.left - paddingLeft + input.scrollLeft;\n const text = input.value;\n let bestIndex = 0;\n let bestDistance = Infinity;\n for (let i = 0; i <= text.length; i++) {\n const distance = Math.abs(ctx.measureText(text.slice(0, i)).width - localX);\n if (distance < bestDistance) {\n bestDistance = distance;\n bestIndex = i;\n }\n }\n return bestIndex;\n }\n\n protected handleNativeInput(event: Event): void {\n this.valueInput.emit(event);\n }\n\n protected handleInputBlur(event: Event): void {\n this.isFocused.set(false);\n this.blurred.emit(event);\n const input = event.target as HTMLInputElement;\n const wasSegmented = this.isSegmentedMode();\n if (wasSegmented) {\n this.ensureSegmentEngineConfigured();\n this.segmentEngine.deactivate();\n this.commitSegmentedValueIfComplete();\n this.inputDate = this.segmentEngine.isEmpty() ? '' : this.segmentEngine.getDisplayString();\n input.value = this.inputDate;\n }\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 // Em modo segmentado, um blur sem `relatedTarget` normalmente não é uma saída real\n // de foco — é o backdrop transparente do próprio popup (não focável) interceptando\n // um clique no trigger para trocar de segmento. Não redireciona o foco pro painel\n // nesse caso; deixa handleInputClick/handleInputFocus resolverem (eles refocam o\n // input e reaplicam o segmento correto logo em seguida).\n const looksLikeOwnTriggerClick = wasSegmented && !relatedTarget;\n if (!looksLikeOwnTriggerClick && (!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 (this.isSegmentModeCandidate()) return;\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.rangeSeparator());\n if (parsed === null) {\n this._hasFormatError = true;\n this.onValidatorChange();\n return;\n }\n this._hasFormatError = 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 (this.isSegmentedMode() && event.target instanceof HTMLInputElement) {\n this.handleSegmentedKeydown(event, event.target);\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.open();\n }\n }\n\n /** Teclas que devem passar direto para o browser sem inserir/alterar nada no campo. */\n private static readonly SEGMENTED_PASSTHROUGH_KEYS = ['Home', 'End', 'Shift', 'CapsLock', 'Escape', 'Enter', ' '];\n\n /** Digitação por segmento (dia/mês/ano/hora/minuto/segundo/ampm) no input do trigger. */\n private handleSegmentedKeydown(event: KeyboardEvent, input: HTMLInputElement): void {\n this.ensureSegmentEngineConfigured();\n const { key, ctrlKey, metaKey, altKey, shiftKey } = event;\n if (ctrlKey || metaKey || altKey || key.startsWith('F')) return;\n if (DatepickerComponent.SEGMENTED_PASSTHROUGH_KEYS.includes(key)) return;\n this.interactionGeneration++;\n\n if (key === 'Tab') {\n const result = this.segmentEngine.moveToAdjacentSegment(shiftKey ? -1 : 1);\n this.syncSegmentedInput(input);\n if (result === 'moved') {\n event.preventDefault();\n }\n return;\n }\n\n if (key === 'ArrowLeft' || key === 'ArrowRight') {\n event.preventDefault();\n // Ao contrário do Tab, seta no primeiro/último segmento não deve sair do campo nem\n // desativar a seleção — `moveToAdjacentSegment` zera `activeIndex` ao bater no limite\n // (comportamento certo pro Tab escapar do campo), então na borda a gente reseleciona\n // o segmento que já estava ativo, imitando o `<input type=\"date\">` nativo (a seta some\n // no limite, não navega pra fora).\n const before = this.segmentEngine.getActiveIndex();\n const result = this.segmentEngine.moveToAdjacentSegment(key === 'ArrowLeft' ? -1 : 1);\n if (result === 'boundary' && before !== null) {\n this.segmentEngine.selectSegment(before);\n }\n this.syncSegmentedInput(input);\n return;\n }\n\n if (key === 'ArrowUp' || key === 'ArrowDown') {\n event.preventDefault();\n this.segmentEngine.incrementActiveSegment(key === 'ArrowUp' ? 1 : -1);\n this.syncSegmentedInput(input);\n return;\n }\n\n if (key === 'Backspace' || key === 'Delete') {\n event.preventDefault();\n const isWholeFieldSelected = input.selectionStart === 0 && input.selectionEnd === input.value.length;\n if (isWholeFieldSelected) {\n this.segmentEngine.clearAll();\n } else {\n this.segmentEngine.clearActiveSegment(key === 'Backspace' ? 'backspace' : 'delete');\n }\n this.syncSegmentedInput(input);\n return;\n }\n\n if (/^[0-9]$/.test(key)) {\n event.preventDefault();\n this.segmentEngine.typeDigit(key);\n this.syncSegmentedInput(input);\n return;\n }\n\n if (this.segmentEngine.activeKind() === 'ampm' && /^[apAP]$/.test(key)) {\n event.preventDefault();\n this.segmentEngine.setAmPm(key.toLowerCase() === 'a' ? 0 : 1);\n this.syncSegmentedInput(input);\n return;\n }\n\n // Qualquer outra tecla imprimível (letras, símbolos) não é inserida no campo.\n event.preventDefault();\n }\n\n /** Sincroniza o DOM com o estado atual da engine (valor + seleção do segmento ativo) após uma mutação. */\n private syncSegmentedInput(input: HTMLInputElement): void {\n this.inputDate = this.segmentEngine.getDisplayString();\n input.value = this.inputDate;\n this.selectActiveSegmentRange(input);\n input.dispatchEvent(new Event('input', { bubbles: true }));\n this.commitSegmentedValueIfComplete();\n }\n\n private selectActiveSegmentRange(input: HTMLInputElement): void {\n const index = this.segmentEngine.getActiveIndex();\n if (index === null) return;\n const [start, end] = this.segmentEngine.getSegmentRange(index);\n input.setSelectionRange(start, end);\n }\n\n /** Propaga o valor da engine para o modelo (CVA) assim que todos os segmentos estiverem completos. */\n private commitSegmentedValueIfComplete(): void {\n if (!this.segmentEngine.isComplete()) {\n if (this.value() !== null) {\n this.value.set(null);\n this._onChange(null);\n }\n return;\n }\n const base =\n this.value() ??\n new Date(\n new Date().getFullYear(),\n new Date().getMonth(),\n new Date().getDate(),\n this.hours(),\n this.minutes(),\n this.showSeconds() ? this.seconds() : 0,\n );\n const date = this.segmentEngine.toDate(base);\n if (!date) return;\n this.value.set(date);\n if (this.showCalendar()) {\n this.viewDate.set(new Date(date.getFullYear(), date.getMonth(), 1));\n }\n if (this.showTimePicker()) {\n this.hours.set(date.getHours());\n this.minutes.set(date.getMinutes());\n this.seconds.set(date.getSeconds());\n }\n this._onChange(date);\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.setDisplayFor(newDate);\n this._onChange(newDate);\n this.selected.emit(newDate);\n this.closePanel();\n } else if (this.mode() === 'datetime') {\n this.setDisplayFor(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.setDisplayFor(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.setDisplayFor(null);\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.setDisplayFor(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(this.currentLang(), {\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.resolvedDateFormat(),\n this.multipleSeparator(),\n );\n }\n\n /**\n * Atualiza `inputDate` a partir de um valor único, roteando pela engine de segmentos\n * (date/month/time/datetime) ou pelo formatador legado (range/year/multiple).\n */\n private setDisplayFor(value: Date | null): void {\n if (this.isSegmentModeCandidate()) {\n this.ensureSegmentEngineConfigured();\n this.segmentEngine.loadFromDate(value);\n this.inputDate = value ? this.segmentEngine.getDisplayString() : '';\n return;\n }\n this.inputDate = this.formatForDisplay(value);\n }\n\n /**\n * (Re)configura a engine de segmentos quando `mode`/`dateFormat`/`hourFormat`/`showSeconds`\n * mudaram desde a última chamada, recarregando o valor atual. Chamado de forma síncrona a\n * partir de todo ponto de entrada que usa a engine — não depende de um `effect()` (que só\n * roda em um ciclo de change detection, tarde demais para leituras/escritas imediatas).\n */\n private ensureSegmentEngineConfigured(): void {\n const mode = this.mode();\n if (mode !== 'date' && mode !== 'month' && mode !== 'time' && mode !== 'datetime') return;\n const config: SegmentEngineConfig = {\n mode,\n dateFormat: this.resolvedDateFormat(),\n hourFormat: this.resolvedHourFormat(),\n showSeconds: this.showSeconds(),\n };\n const last = this.lastSegmentConfig;\n if (\n last &&\n last.mode === config.mode &&\n last.dateFormat === config.dateFormat &&\n last.hourFormat === config.hourFormat &&\n last.showSeconds === config.showSeconds\n ) {\n return;\n }\n this.lastSegmentConfig = config;\n this.segmentEngine.configure(config);\n this.segmentEngine.loadFromDate(this.value());\n }\n\n /** Retorna a tradução de `key`, ou `fallback` quando a chave não está traduzida (ngx-translate retorna a própria chave). */\n private resolveTranslatedOrDefault(key: string, fallback: string): string {\n const translated = this.translateService.instant(key);\n if (typeof translated !== 'string' || !translated || translated === key) {\n return fallback;\n }\n return translated;\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.setDisplayFor(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 (!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 #triggerInput\n class=\"h-[35px] w-full rounded-small border border-solid border-grayscale-30 pl-3 text-sm outline-none transition-colors focus:border-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=\"text\"\n [placeholder]=\"placeholder() ?? (placeholderKey() | translate)\"\n [disabled]=\"disabled()\"\n [readonly]=\"\n readonlyInput() ||\n mode() === 'range' ||\n mode() === 'year' ||\n isMultipleMode() ||\n (isSegmentModeCandidate() && isTouchDevice())\n \"\n [tabIndex]=\"tabindex() ?? null\"\n [autofocus]=\"autofocus()\"\n [(ngModel)]=\"inputDate\"\n (ngModelChange)=\"handleInputChange($event)\"\n (focus)=\"handleInputFocus($event)\"\n (blur)=\"handleInputBlur($event)\"\n (mousedown)=\"handleInputClick($event)\"\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\n class=\"fas fa-times text-xs\"\n aria-hidden=\"true\"\n ></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() && !isFocused()\"\n [class.border-primary]=\"isFocused() && !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\n [class]=\"resolvedIcon()\"\n aria-hidden=\"true\"\n ></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)=\"handleBackdropClick($event)\"\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\n class=\"fas fa-chevron-left text-xs\"\n aria-hidden=\"true\"\n ></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\n class=\"fas fa-chevron-down text-[10px]\"\n aria-hidden=\"true\"\n ></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\n class=\"fas fa-chevron-right text-xs\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n\n <!-- Cabeçalhos dos dias da semana -->\n <div\n class=\"grid grid-cols-7 px-3 pt-2\"\n role=\"row\"\n >\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]=\"\n 'platform.angular_components.datepicker_calendar_label'\n | translate: { month: (currentMonthKey() | translate), year: currentYear() }\n \"\n (keydown)=\"handleCalendarGridKeydown($event)\"\n >\n @for (week of calendarWeeks(); track $index) {\n <div\n role=\"row\"\n class=\"contents\"\n >\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-[50%] 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]=\"\n day.isSelected || day.isRangeStart || day.isRangeEnd\n ? 'selected'\n : day.isToday\n ? 'today'\n : null\n \"\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 && !day.isSelected && !day.isRangeStart && !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\n class=\"fas fa-chevron-left text-xs\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n <span class=\"text-sm font-medium text-grayscale-90\"\n >{{ currentDecadeStart() }} – {{ currentDecadeStart() + 11 }}</span\n >\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\n class=\"fas fa-chevron-right text-xs\"\n aria-hidden=\"true\"\n ></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]=\"\n isYearSelected(year) ? 'selected' : isCurrentYear(year) ? 'today' : null\n \"\n [disabled]=\"isYearDisabled(year)\"\n [ngClass]=\"{\n 'bg-primary font-semibold text-grayscale-0': isYearSelected(year),\n 'ring-2 ring-inset ring-primary':\n isCurrentYear(year) && !isYearSelected(year) && !isYearDisabled(year),\n 'text-grayscale-90 hover:bg-grayscale-10':\n !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\n class=\"fas fa-chevron-left text-xs\"\n aria-hidden=\"true\"\n ></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\n class=\"fas fa-chevron-right text-xs\"\n aria-hidden=\"true\"\n ></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\n class=\"fas fa-arrow-left\"\n aria-hidden=\"true\"\n ></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\n class=\"fas fa-chevron-up text-xs\"\n aria-hidden=\"true\"\n ></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\n class=\"fas fa-chevron-down text-xs\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n\n <span\n class=\"text-xl font-bold text-grayscale-60\"\n aria-hidden=\"true\"\n >:</span\n >\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\n class=\"fas fa-chevron-up text-xs\"\n aria-hidden=\"true\"\n ></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\n class=\"fas fa-chevron-down text-xs\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n\n @if (showSeconds()) {\n <span\n class=\"text-xl font-bold text-grayscale-60\"\n aria-hidden=\"true\"\n >:</span\n >\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\n class=\"fas fa-chevron-up text-xs\"\n aria-hidden=\"true\"\n ></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\n class=\"fas fa-chevron-down text-xs\"\n aria-hidden=\"true\"\n ></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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}