@cdevhub/ngx-tw 0.2.1 → 0.3.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 (139) hide show
  1. package/README.md +264 -49
  2. package/fesm2022/cdevhub-ngx-tw-accordion.mjs +11 -7
  3. package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
  4. package/fesm2022/cdevhub-ngx-tw-alert.mjs +43 -29
  5. package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
  6. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs +103 -0
  7. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs.map +1 -0
  8. package/fesm2022/cdevhub-ngx-tw-avatar.mjs +56 -31
  9. package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
  10. package/fesm2022/cdevhub-ngx-tw-badge.mjs +61 -35
  11. package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
  12. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +154 -93
  13. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
  14. package/fesm2022/cdevhub-ngx-tw-button.mjs +24 -15
  15. package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
  16. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +3 -3
  17. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
  18. package/fesm2022/cdevhub-ngx-tw-calendar.mjs +408 -215
  19. package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
  20. package/fesm2022/cdevhub-ngx-tw-card.mjs +33 -24
  21. package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
  22. package/fesm2022/cdevhub-ngx-tw-carousel.mjs +144 -79
  23. package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
  24. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +99 -47
  25. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
  26. package/fesm2022/cdevhub-ngx-tw-code-block.mjs +34 -20
  27. package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
  28. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +46 -29
  29. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
  30. package/fesm2022/cdevhub-ngx-tw-combobox.mjs +195 -110
  31. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
  32. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +140 -73
  33. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
  34. package/fesm2022/cdevhub-ngx-tw-core.mjs +16 -11
  35. package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
  36. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +393 -149
  37. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
  38. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +305 -150
  39. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
  40. package/fesm2022/cdevhub-ngx-tw-dialog.mjs +56 -43
  41. package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
  42. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +51 -33
  43. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
  44. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +905 -0
  45. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -0
  46. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +49 -26
  47. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
  48. package/fesm2022/cdevhub-ngx-tw-form-field.mjs +133 -74
  49. package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
  50. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +2 -2
  51. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -1
  52. package/fesm2022/cdevhub-ngx-tw-icon.mjs +28 -17
  53. package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
  54. package/fesm2022/cdevhub-ngx-tw-input.mjs +37 -21
  55. package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
  56. package/fesm2022/cdevhub-ngx-tw-item.mjs +33 -24
  57. package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
  58. package/fesm2022/cdevhub-ngx-tw-menu.mjs +63 -48
  59. package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
  60. package/fesm2022/cdevhub-ngx-tw-number-input.mjs +622 -0
  61. package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -0
  62. package/fesm2022/cdevhub-ngx-tw-paginator.mjs +137 -71
  63. package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
  64. package/fesm2022/cdevhub-ngx-tw-popover.mjs +101 -46
  65. package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
  66. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +57 -30
  67. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
  68. package/fesm2022/cdevhub-ngx-tw-radio.mjs +108 -57
  69. package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
  70. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +46 -26
  71. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
  72. package/fesm2022/cdevhub-ngx-tw-select.mjs +217 -122
  73. package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
  74. package/fesm2022/cdevhub-ngx-tw-separator.mjs +21 -12
  75. package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
  76. package/fesm2022/cdevhub-ngx-tw-sheet.mjs +58 -44
  77. package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
  78. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +25 -14
  79. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -1
  80. package/fesm2022/cdevhub-ngx-tw-slider.mjs +155 -79
  81. package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
  82. package/fesm2022/cdevhub-ngx-tw-sort.mjs +44 -25
  83. package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
  84. package/fesm2022/cdevhub-ngx-tw-spinner.mjs +29 -16
  85. package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -1
  86. package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -42
  87. package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
  88. package/fesm2022/cdevhub-ngx-tw-stat.mjs +107 -64
  89. package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
  90. package/fesm2022/cdevhub-ngx-tw-stepper.mjs +113 -47
  91. package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
  92. package/fesm2022/cdevhub-ngx-tw-switch.mjs +61 -32
  93. package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
  94. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +88 -42
  95. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
  96. package/fesm2022/cdevhub-ngx-tw-table.mjs +266 -118
  97. package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
  98. package/fesm2022/cdevhub-ngx-tw-tabs.mjs +101 -51
  99. package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
  100. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +798 -0
  101. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -0
  102. package/fesm2022/cdevhub-ngx-tw-textarea.mjs +11 -7
  103. package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
  104. package/fesm2022/cdevhub-ngx-tw-theme.mjs +22 -14
  105. package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
  106. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +243 -95
  107. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
  108. package/fesm2022/cdevhub-ngx-tw-timeline.mjs +149 -82
  109. package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
  110. package/fesm2022/cdevhub-ngx-tw-toast.mjs +89 -55
  111. package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
  112. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +50 -28
  113. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
  114. package/fesm2022/cdevhub-ngx-tw-transfer.mjs +1129 -0
  115. package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -0
  116. package/fesm2022/cdevhub-ngx-tw-tree.mjs +554 -0
  117. package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -0
  118. package/fesm2022/cdevhub-ngx-tw.mjs +7 -0
  119. package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -1
  120. package/package.json +45 -20
  121. package/theme/index.css +10 -2
  122. package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
  123. package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
  124. package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
  125. package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
  126. package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
  127. package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
  128. package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
  129. package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
  130. package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
  131. package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
  132. package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
  133. package/types/cdevhub-ngx-tw-table.d.ts +30 -1
  134. package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
  135. package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
  136. package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
  137. package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
  138. package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
  139. package/types/cdevhub-ngx-tw.d.ts +7 -0
@@ -1 +1 @@
1
- {"version":3,"file":"cdevhub-ngx-tw-time-picker.mjs","sources":["../../../projects/ngx-tw/time-picker/time-picker-intl.ts","../../../projects/ngx-tw/time-picker/time-picker.ts","../../../projects/ngx-tw/time-picker/cdevhub-ngx-tw-time-picker.ts"],"sourcesContent":["import { Injectable, type Provider } from '@angular/core';\n\n/**\n * Localized strings + ARIA announcements consumed by the time-picker.\n *\n * Override per-field via Angular DI — provide a custom instance, or supply a\n * `Partial<TimePickerIntl>` through `provideTimePickerIntl`. Unset fields\n * fall through to the English defaults shipped here.\n *\n * All members take primitives so consumers can write straight string\n * literals or template helpers without depending on internal types.\n */\n@Injectable()\nexport class TimePickerIntl {\n // ---------------------------------------------------------------------------\n // Group + field labels\n // ---------------------------------------------------------------------------\n\n /** Accessible name for the fields group (the wrapper around hours/minutes/seconds). */\n groupLabel = 'Time';\n\n /** Accessible name for the hours field. */\n hoursLabel = 'Hours';\n\n /** Accessible name for the minutes field. */\n minutesLabel = 'Minutes';\n\n /** Accessible name for the seconds field. */\n secondsLabel = 'Seconds';\n\n /** Accessible name for the meridiem (AM/PM) radio group. */\n meridiemGroupLabel = 'AM or PM';\n\n /** Display + accessible name for the AM option. */\n amLabel = 'AM';\n\n /** Display + accessible name for the PM option. */\n pmLabel = 'PM';\n\n // ---------------------------------------------------------------------------\n // Stepper + clear button labels\n // ---------------------------------------------------------------------------\n\n /** Aria label template for the up stepper. Receives the active field name (`'hours'`, `'minutes'`, `'seconds'`). */\n increaseLabel(field: string): string {\n return `Increase ${field}`;\n }\n\n /** Aria label template for the down stepper. Receives the active field name (`'hours'`, `'minutes'`, `'seconds'`). */\n decreaseLabel(field: string): string {\n return `Decrease ${field}`;\n }\n\n /** Aria label for the clear button. */\n clearLabel = 'Clear time';\n\n // ---------------------------------------------------------------------------\n // Live announcements\n // ---------------------------------------------------------------------------\n\n /** Live-region message announced after the value is cleared. */\n clearedAnnouncement = 'Time cleared';\n\n /** Live-region message after a commit. Receives the pre-formatted time string (e.g. `'02:30 PM'`). */\n selectedAnnouncement(formattedTime: string): string {\n return `${formattedTime} selected`;\n }\n\n /** Spoken text for an empty hour/minute/second field — used as `aria-valuetext` when the field is blank. */\n emptyValueText = 'Empty';\n}\n\n/**\n * Provides a custom `TimePickerIntl` instance. Place at any injector level —\n * the time-picker resolves the closest one.\n *\n * @example\n * ```ts\n * providers: [\n * provideTimePickerIntl({\n * hoursLabel: 'Heures',\n * minutesLabel: 'Minutes',\n * meridiemGroupLabel: 'AM ou PM',\n * }),\n * ]\n * ```\n */\nexport function provideTimePickerIntl(custom: Partial<TimePickerIntl>): Provider {\n return {\n provide: TimePickerIntl,\n useFactory: () => Object.assign(new TimePickerIntl(), custom),\n };\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n isDevMode,\n linkedSignal,\n model,\n type OnInit,\n output,\n signal,\n type Signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport {\n type ControlValueAccessor,\n FormGroupDirective,\n NgControl,\n NgForm,\n Validators,\n} from '@angular/forms';\nimport { FocusMonitor, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs';\nimport { tv } from 'tailwind-variants';\nimport {\n appendDigit,\n clamp,\n type ErrorStateMatcher,\n fieldMax,\n fieldMin,\n from12h,\n isTerminalDigit,\n padTwo,\n parseField,\n stepWithWrap,\n timeOfDaySeconds,\n to12h,\n type TimePickerFormat,\n type TimePickerMeridiem,\n TW_ERROR_STATE_MATCHER,\n type TwColor,\n type TwFormSubmitted,\n type TwSize,\n} from '@cdevhub/ngx-tw/core';\nimport {\n FormFieldComponent,\n FormFieldControl,\n TW_FORM_FIELD_CONTROL,\n} from '@cdevhub/ngx-tw/form-field';\nimport { DATE_ADAPTER, type DateAdapter } from '@cdevhub/ngx-tw/calendar';\nimport { TimePickerIntl } from './time-picker-intl';\n\n// ── Public types ──────────────────────────────────────────────────\n\n/** Visual style of the time-picker chrome. */\nexport type TimePickerVariant = 'default' | 'naked';\n\n/** Logical field inside the time-picker. */\nexport type TimePickerField = 'hour' | 'minute' | 'second' | 'meridiem';\n\n/** Origin of a value change — useful when consumers need to distinguish user input from programmatic writes. */\nexport type TimePickerChangeSource =\n | 'input'\n | 'stepper'\n | 'meridiem'\n | 'clear'\n | 'programmatic';\n\n/** Emitted by `timeChange` after a committed value update. */\nexport interface TimePickerChangeEvent<D> {\n /** The committed value (`null` when cleared). */\n readonly value: D | null;\n /** The value before this change. */\n readonly previousValue: D | null;\n /** What triggered the change. */\n readonly source: TimePickerChangeSource;\n}\n\n/** Emitted by `timeInput` before a commit, on every keystroke or stepper press. */\nexport interface TimePickerInputEvent<D> {\n /** Which field was edited. */\n readonly field: TimePickerField;\n /** The raw text currently in that field (pre-commit). */\n readonly rawText: string;\n /** The parsed value if fields form a valid time, else `null`. */\n readonly parsed: D | null;\n}\n\n// Re-export the shared format / meridiem aliases so consumers can import\n// them from `ngx-tw/time-picker` without reaching into core.\nexport type { TimePickerFormat, TimePickerMeridiem } from '@cdevhub/ngx-tw/core';\n\n// ── tv() config ───────────────────────────────────────────────────\n\nconst timePickerVariants = tv(\n {\n slots: {\n root: 'inline-flex items-center text-fg transition-[color,border-color,box-shadow] duration-normal motion-reduce:transition-none',\n fieldGroup: 'inline-flex items-center tabular-nums font-medium',\n field:\n 'bg-transparent text-center outline-none border-0 p-0 m-0 text-fg placeholder:text-fg-subtle rounded-md caret-transparent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n separator: 'text-fg-subtle select-none px-0.5',\n stepperGroup: 'flex flex-col ml-0.5',\n stepper:\n 'inline-flex items-center justify-center text-fg-muted hover:text-fg hover:bg-surface-muted rounded-md transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:opacity-40 disabled:pointer-events-none',\n stepperIcon: '',\n meridiem:\n 'inline-flex items-center rounded-md border border-border overflow-hidden ml-2 shrink-0',\n meridiemButton:\n 'font-medium text-fg-muted hover:bg-surface-muted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 transition-colors duration-normal motion-reduce:transition-none disabled:opacity-40 disabled:pointer-events-none',\n clearButton:\n 'inline-flex items-center justify-center shrink-0 rounded-md text-fg-muted hover:text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none size-6 ml-1 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n },\n variants: {\n size: {\n xs: {\n root: 'gap-1 text-xs',\n // Numeric field width is sized to fit a 2-digit value at the current font scale. Off\n // the standard width scale because the field is content-driven, not a layout primitive\n // — see CLAUDE.md spacing scale rationale.\n field: 'w-5 text-xs',\n stepper: 'size-6',\n stepperIcon: 'size-3',\n meridiemButton: 'px-1.5 py-1 text-2xs',\n },\n sm: {\n root: 'gap-1 text-sm',\n // sm-density numeric field — sized to fit a 2-digit value at text-sm; see CLAUDE.md spacing scale rationale.\n field: 'w-6 text-sm',\n stepper: 'size-7',\n stepperIcon: 'size-3',\n meridiemButton: 'px-2 py-1 text-xs',\n },\n md: {\n root: 'gap-1.5 text-sm',\n // md-density numeric field — sized to fit a 2-digit value at text-sm; see CLAUDE.md spacing scale rationale.\n field: 'w-7 text-sm',\n stepper: 'size-7',\n stepperIcon: 'size-3',\n meridiemButton: 'px-2 py-1 text-xs',\n },\n lg: {\n root: 'gap-1.5 text-base',\n // lg-density numeric field — sized to fit a 2-digit value at text-base; see CLAUDE.md spacing scale rationale.\n field: 'w-8 text-base',\n stepper: 'size-8',\n stepperIcon: 'size-4',\n meridiemButton: 'px-2.5 py-1.5 text-sm',\n },\n xl: {\n root: 'gap-2 text-base',\n // xl-density numeric field — sized to fit a 2-digit value at text-base; see CLAUDE.md spacing scale rationale.\n field: 'w-9 text-base',\n stepper: 'size-8',\n stepperIcon: 'size-4',\n meridiemButton: 'px-3 py-1.5 text-sm',\n },\n },\n variant: {\n default: {\n root: 'rounded-md border border-border bg-surface px-3 py-2 hover:border-border-strong',\n },\n naked: {\n root: 'bg-transparent border-0 rounded-none p-0 focus-within:outline-none',\n },\n },\n disabled: {\n true: { root: 'opacity-50 pointer-events-none cursor-not-allowed' },\n false: {},\n },\n focused: { true: {}, false: {} },\n errorState: { true: {}, false: {} },\n color: {\n primary: {},\n secondary: {},\n accent: {},\n neutral: {},\n info: {},\n success: {},\n warning: {},\n error: {},\n },\n },\n compoundVariants: [\n { variant: 'default', focused: true, color: 'primary', class: { root: 'border-primary-500' } },\n { variant: 'default', focused: true, color: 'secondary', class: { root: 'border-secondary-500' } },\n { variant: 'default', focused: true, color: 'accent', class: { root: 'border-accent-500' } },\n { variant: 'default', focused: true, color: 'neutral', class: { root: 'border-border-strong' } },\n { variant: 'default', focused: true, color: 'info', class: { root: 'border-info-500' } },\n { variant: 'default', focused: true, color: 'success', class: { root: 'border-success-500' } },\n { variant: 'default', focused: true, color: 'warning', class: { root: 'border-warning-500' } },\n { variant: 'default', focused: true, color: 'error', class: { root: 'border-error-500' } },\n { variant: 'default', errorState: true, class: { root: 'border-error-500' } },\n ],\n defaultVariants: {\n size: 'md',\n variant: 'default',\n disabled: false,\n errorState: false,\n focused: false,\n color: 'primary',\n },\n },\n { twMerge: true },\n);\n\n// ── Static active-state color lookup for the AM/PM meridiem button ─────────────\n// Each entry is written out so Tailwind v4's static scanner picks the classes up.\n// Mirrors the lookup-table pattern used by `checkbox.ts` and `radio.ts`.\nconst MERIDIEM_ACTIVE_COLOR: Record<TwColor, string> = {\n primary: 'bg-primary-500 text-on-primary hover:bg-primary-600',\n secondary: 'bg-secondary-500 text-on-secondary hover:bg-secondary-600',\n accent: 'bg-accent-500 text-on-accent hover:bg-accent-600',\n neutral: 'bg-fg text-on-neutral hover:bg-fg/90',\n info: 'bg-info-500 text-on-info hover:bg-info-600',\n success: 'bg-success-500 text-on-success hover:bg-success-600',\n warning: 'bg-warning-500 text-on-warning hover:bg-warning-600',\n error: 'bg-error-500 text-on-error hover:bg-error-600',\n};\n\nlet nextTimePickerId = 0;\n\n/**\n * Segmented time editor. Renders `HH : MM` (with an optional `: SS` and/or\n * `AM/PM` toggle) and integrates with all three Angular form strategies via\n * `ControlValueAccessor`. Also participates in `<tw-form-field>` through\n * `FormFieldControl` — wrapping is optional.\n *\n * Value type is `D | null`. Every time operation flows through the injected\n * `DateAdapter<D>`, so the component works with the default native adapter\n * (`provideNativeDateAdapter()`) or any custom adapter a consumer ships.\n */\n@Component({\n selector: 'tw-time-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TW_FORM_FIELD_CONTROL,\n useExisting: forwardRef(() => TimePickerComponent),\n },\n ],\n template: `\n <div [class]=\"fieldGroupClasses()\" role=\"group\" [attr.aria-label]=\"groupAriaLabel()\">\n <input\n #hourInput\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n maxlength=\"2\"\n [class]=\"fieldClasses()\"\n [value]=\"hourDisplay()\"\n [placeholder]=\"placeholder() ?? '--'\"\n [disabled]=\"isDisabled()\"\n [attr.readonly]=\"readonlyInput() ? 'true' : null\"\n [attr.aria-label]=\"intl.hoursLabel\"\n [attr.role]=\"'spinbutton'\"\n [attr.aria-valuemin]=\"hourMin()\"\n [attr.aria-valuemax]=\"hourMax()\"\n [attr.aria-valuenow]=\"hourValueNow()\"\n [attr.aria-valuetext]=\"hourValueText()\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onFieldKeydown($event, 'hour')\"\n (beforeinput)=\"onBeforeInput($event, 'hour')\"\n (input)=\"onInputEvent($event, 'hour')\"\n (focus)=\"onFieldFocus('hour')\"\n (blur)=\"onFieldBlur('hour')\"\n />\n\n <span [class]=\"separatorClasses()\" aria-hidden=\"true\">:</span>\n\n <input\n #minuteInput\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n maxlength=\"2\"\n [class]=\"fieldClasses()\"\n [value]=\"minuteText()\"\n [placeholder]=\"placeholder() ?? '--'\"\n [disabled]=\"isDisabled()\"\n [attr.readonly]=\"readonlyInput() ? 'true' : null\"\n [attr.aria-label]=\"intl.minutesLabel\"\n [attr.role]=\"'spinbutton'\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"59\"\n [attr.aria-valuenow]=\"minuteValueNow()\"\n [attr.aria-valuetext]=\"minuteValueText()\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onFieldKeydown($event, 'minute')\"\n (beforeinput)=\"onBeforeInput($event, 'minute')\"\n (input)=\"onInputEvent($event, 'minute')\"\n (focus)=\"onFieldFocus('minute')\"\n (blur)=\"onFieldBlur('minute')\"\n />\n\n @if (showSeconds()) {\n <span [class]=\"separatorClasses()\" aria-hidden=\"true\">:</span>\n\n <input\n #secondInput\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n maxlength=\"2\"\n [class]=\"fieldClasses()\"\n [value]=\"secondText()\"\n [placeholder]=\"placeholder() ?? '--'\"\n [disabled]=\"isDisabled()\"\n [attr.readonly]=\"readonlyInput() ? 'true' : null\"\n [attr.aria-label]=\"intl.secondsLabel\"\n [attr.role]=\"'spinbutton'\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"59\"\n [attr.aria-valuenow]=\"secondValueNow()\"\n [attr.aria-valuetext]=\"secondValueText()\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onFieldKeydown($event, 'second')\"\n (beforeinput)=\"onBeforeInput($event, 'second')\"\n (input)=\"onInputEvent($event, 'second')\"\n (focus)=\"onFieldFocus('second')\"\n (blur)=\"onFieldBlur('second')\"\n />\n }\n </div>\n\n @if (showSteppers()) {\n <div [class]=\"stepperGroupClasses()\">\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"stepperClasses()\"\n [attr.aria-label]=\"intl.increaseLabel(focusedFieldLabel())\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (mousedown)=\"onStepperMouseDown($event)\"\n (click)=\"onStepperClick(1)\"\n >\n <ng-content select=\"[slot=stepper-up]\">\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" [class]=\"stepperIconClasses()\">\n <path fill-rule=\"evenodd\" d=\"M14.77 12.79a.75.75 0 0 1-1.06-.02L10 8.94l-3.71 3.83a.75.75 0 1 1-1.08-1.04l4.25-4.39a.75.75 0 0 1 1.08 0l4.25 4.39a.75.75 0 0 1-.02 1.06Z\" clip-rule=\"evenodd\" />\n </svg>\n </ng-content>\n </button>\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"stepperClasses()\"\n [attr.aria-label]=\"intl.decreaseLabel(focusedFieldLabel())\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (mousedown)=\"onStepperMouseDown($event)\"\n (click)=\"onStepperClick(-1)\"\n >\n <ng-content select=\"[slot=stepper-down]\">\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" [class]=\"stepperIconClasses()\">\n <path fill-rule=\"evenodd\" d=\"M5.23 7.21a.75.75 0 0 1 1.06.02L10 11.06l3.71-3.83a.75.75 0 1 1 1.08 1.04l-4.25 4.39a.75.75 0 0 1-1.08 0L5.21 8.27a.75.75 0 0 1 .02-1.06Z\" clip-rule=\"evenodd\" />\n </svg>\n </ng-content>\n </button>\n </div>\n }\n\n @if (format() === '12h') {\n <div [class]=\"meridiemClasses()\" role=\"radiogroup\" [attr.aria-label]=\"intl.meridiemGroupLabel\">\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"meridiemButtonClasses('AM')\"\n [attr.aria-checked]=\"meridiem() === 'AM'\"\n [attr.aria-label]=\"intl.amLabel\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (click)=\"setMeridiem('AM')\"\n (keydown)=\"onMeridiemKeydown($event, 'AM')\"\n >{{ intl.amLabel }}</button>\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"meridiemButtonClasses('PM')\"\n [attr.aria-checked]=\"meridiem() === 'PM'\"\n [attr.aria-label]=\"intl.pmLabel\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (click)=\"setMeridiem('PM')\"\n (keydown)=\"onMeridiemKeydown($event, 'PM')\"\n >{{ intl.pmLabel }}</button>\n </div>\n }\n\n @if (showClear() && !isEmpty() && !isDisabled() && !readonlyInput()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"clearButtonClasses()\"\n [attr.aria-label]=\"clearLabel()\"\n (click)=\"onClearClick($event)\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" class=\"size-3\">\n <path\n fill-rule=\"evenodd\"\n d=\"M10 8.586 4.707 3.293a1 1 0 0 0-1.414 1.414L8.586 10l-5.293 5.293a1 1 0 1 0 1.414 1.414L10 11.414l5.293 5.293a1 1 0 0 0 1.414-1.414L11.414 10l5.293-5.293a1 1 0 0 0-1.414-1.414L10 8.586Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n }\n `,\n host: {\n '[class]': 'rootClasses()',\n '[id]': 'hostId',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '[attr.aria-invalid]': 'errorState() || null',\n '[attr.data-variant]': 'resolvedVariant()',\n },\n})\nexport class TimePickerComponent<D = Date>\n extends FormFieldControl<D>\n implements ControlValueAccessor, OnInit\n{\n // ── Inputs ──\n\n /** Id on the time-picker's host element. Auto-generated when not provided. Used by the form-field's `<label for>` attribute. */\n readonly idInput = input<string | undefined>(undefined, { alias: 'id' });\n\n /** When true, the whole component is disabled and every field sets `aria-disabled=\"true\"`. Defaults to `false`. */\n readonly disabledInput = input<boolean, unknown>(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\n\n /** When true, exposes `aria-required=\"true\"`. Validators.required on a bound NgControl is also honoured. Defaults to `false`. */\n readonly requiredInput = input<boolean, unknown>(false, {\n alias: 'required',\n transform: booleanAttribute,\n });\n\n /** When true, blocks typing, stepping, and the AM/PM toggle — the value is still read-only visible. Defaults to `false`. */\n readonly readonlyInput = input<boolean, unknown>(false, {\n alias: 'readonly',\n transform: booleanAttribute,\n });\n\n /** Controls field height, font size, and stepper density. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Semantic color used for the focused border and focus ring. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** Visual style of the chrome. `'default'` draws its own border; `'naked'` strips chrome. Auto-resolves to `'naked'` inside `<tw-form-field>`. */\n readonly variant = input<TimePickerVariant | undefined>(undefined);\n\n /** `'12h'` renders 1–12 hours with an AM/PM toggle; `'24h'` renders 00–23. Defaults to `'24h'`. */\n readonly format = input<TimePickerFormat>('24h');\n\n /** When true, renders a seconds field after minutes. Defaults to `false`. */\n readonly showSeconds = input<boolean>(false);\n\n /** Amount to add/subtract when stepping hours. Defaults to `1`. */\n readonly hourStep = input<number>(1);\n\n /** Amount to add/subtract when stepping minutes. Defaults to `1`. */\n readonly minuteStep = input<number>(1);\n\n /** Amount to add/subtract when stepping seconds. Defaults to `1`. */\n readonly secondStep = input<number>(1);\n\n /** Earliest accepted time-of-day. Values earlier than this set `errorState`. Defaults to `null`. Note: when `showSeconds` is `false`, the seconds component of any value still participates in the range comparison — supply `minTime` with zeroed seconds to match the 2-field display. */\n readonly minTime = input<D | null>(null);\n\n /** Latest accepted time-of-day. Values later than this set `errorState`. Defaults to `null`. Note: when `showSeconds` is `false`, the seconds component of any value still participates in the range comparison — supply `maxTime` with zeroed seconds to match the 2-field display. */\n readonly maxTime = input<D | null>(null);\n\n /** Date portion used when the user types a time while `value` is `null`. Defaults to today. */\n readonly referenceDate = input<D | null>(null);\n\n /** Placeholder shown in each field when empty. Defaults to `'--'`. */\n readonly placeholder = input<string | undefined>(undefined);\n\n /** Whether to render the up/down stepper column. Defaults to `true`. */\n // TRUE-default: pointer users expect inline up/down chevrons next to a numeric editor — without them the picker reads as a static display, and consumers must rebuild stepping for every instance.\n readonly showSteppers = input<boolean>(true);\n\n /** Whether to render the clear affordance when a value is set. Defaults to `true`. */\n // TRUE-default: matches `<tw-date-picker>` and `<tw-input>` clear behaviour; without the inline clear, every form has to wire its own reset surface for an obvious affordance.\n readonly showClear = input<boolean>(true);\n\n /** Accessible label for the clear button. Defaults to `'Clear time'`. */\n readonly clearLabel = input<string>('Clear time');\n\n /** Per-instance override of the `ErrorStateMatcher`. */\n readonly errorStateMatcher = input<ErrorStateMatcher | undefined>(undefined);\n\n /** Accessible name for the fields group. Required when no visible label is supplied. Alias: `aria-label`. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** ID of an external element that labels the group. Alias: `aria-labelledby`. */\n readonly ariaLabelledby = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n /** Consumer-supplied `aria-describedby` ids. The form-field preserves these when merging hint/error ids. Alias: `aria-describedby`. */\n readonly userAriaDescribedByInput = input<string | undefined>(undefined, {\n alias: 'aria-describedby',\n });\n\n // ── Models ──\n\n /** Two-way bound current time. `null` when empty. Setting programmatically updates the fields without firing `onChange`. */\n readonly value = model<D | null>(null);\n\n // ── Outputs ──\n\n /** Fires on every keystroke, stepper press, or AM/PM toggle — before the new value is committed. */\n readonly timeInput = output<TimePickerInputEvent<D>>();\n\n /** Fires after a committed change — digit + auto-advance, stepper, meridiem toggle, clear, or programmatic write. */\n readonly timeChange = output<TimePickerChangeEvent<D>>();\n\n // ── Injected deps ──\n\n private readonly adapter = inject<DateAdapter<D>>(DATE_ADAPTER);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n private readonly formField = inject(FormFieldComponent, { optional: true });\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n private readonly defaultMatcher = inject(TW_ERROR_STATE_MATCHER);\n\n /** @internal — exposed for the template; consumers configure via `provideTimePickerIntl()`. */\n protected readonly intl = inject(TimePickerIntl, { optional: true }) ?? new TimePickerIntl();\n\n // ── View refs ──\n\n private readonly hourInputRef = viewChild.required<ElementRef<HTMLInputElement>>('hourInput');\n private readonly minuteInputRef =\n viewChild.required<ElementRef<HTMLInputElement>>('minuteInput');\n private readonly secondInputRef =\n viewChild<ElementRef<HTMLInputElement>>('secondInput');\n\n // ── Identity ──\n\n private readonly uid = nextTimePickerId++;\n /** @internal */\n readonly hostId = `tw-time-picker-${this.uid}`;\n\n // ── Internal state ──\n\n /** @internal raw display text per field — always the numerals the user sees. */\n readonly hourText = signal<string>('');\n /** @internal */\n readonly minuteText = signal<string>('');\n /** @internal */\n readonly secondText = signal<string>('');\n /** @internal */\n readonly meridiem = signal<TimePickerMeridiem>('AM');\n /** @internal */\n readonly focusedField = signal<TimePickerField | null>(null);\n /** @internal */\n readonly internalValue = linkedSignal<D | null>(() => this.value());\n\n private readonly cvaDisabled = signal(false);\n private readonly describedByIdsSignal = signal<readonly string[]>([]);\n private readonly focusedSignal = signal(false);\n private readonly _ngControlRev = signal(0);\n private readonly _formSubmitRev = signal(0);\n /** When true, an effect should not rewrite field text from the external value. */\n private editing = false;\n\n private onChange: (value: D | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n // ── Derived state ──\n\n /** @internal */\n readonly isDisabled = computed(() => {\n this._ngControlRev();\n return this.disabledInput() || this.cvaDisabled() || !!this.ngControl?.disabled;\n });\n\n /** @internal */\n readonly isEmpty = computed(() => this.internalValue() === null);\n\n /** @internal Effective variant — auto-naked when wrapped in tw-form-field. */\n readonly resolvedVariant = computed<TimePickerVariant>(\n () => this.variant() ?? (this.formField ? 'naked' : 'default'),\n );\n\n /** @internal */\n readonly hourMin = computed(() => fieldMin('hour', this.format()));\n /** @internal */\n readonly hourMax = computed(() => fieldMax('hour', this.format()));\n\n /** @internal */\n readonly hourDisplay = computed(() => this.hourText());\n\n /** @internal */\n readonly hourValueNow = computed(() => {\n const n = parseField(this.hourText());\n return n === null ? null : n;\n });\n\n /** @internal */\n readonly hourValueText = computed(() => {\n const n = this.hourValueNow();\n if (n === null) return this.intl.emptyValueText;\n const meridiemLabel = this.meridiem() === 'AM' ? this.intl.amLabel : this.intl.pmLabel;\n const suffix = this.format() === '12h' ? ` ${meridiemLabel}` : '';\n return `${padTwo(n)}${suffix}`;\n });\n\n /** @internal */\n readonly minuteValueNow = computed(() => parseField(this.minuteText()));\n /** @internal */\n readonly minuteValueText = computed(() => {\n const n = this.minuteValueNow();\n return n === null ? this.intl.emptyValueText : padTwo(n);\n });\n\n /** @internal */\n readonly secondValueNow = computed(() => parseField(this.secondText()));\n /** @internal */\n readonly secondValueText = computed(() => {\n const n = this.secondValueNow();\n return n === null ? this.intl.emptyValueText : padTwo(n);\n });\n\n /** @internal */\n readonly groupAriaLabel = computed(() => this.ariaLabel() ?? this.intl.groupLabel);\n\n /** @internal Label of the currently focused field, used by stepper aria-labels. */\n readonly focusedFieldLabel = computed(() => {\n const f = this.focusedField();\n if (f === 'minute') return this.intl.minutesLabel.toLowerCase();\n if (f === 'second') return this.intl.secondsLabel.toLowerCase();\n return this.intl.hoursLabel.toLowerCase();\n });\n\n /** @internal */\n readonly describedBy = computed(() => {\n const extra = this.describedByIdsSignal();\n const user = this.userAriaDescribedByInput();\n const merged = [...extra];\n if (user) {\n for (const id of user.split(/\\s+/)) if (id) merged.push(id);\n }\n return merged.length ? merged.join(' ') : '';\n });\n\n // ── Range / error state ──\n\n private readonly rangeError = signal(false);\n\n // ── tv() output ──\n\n private readonly variantResult = computed(() =>\n timePickerVariants({\n size: this.size(),\n variant: this.resolvedVariant(),\n disabled: this.isDisabled(),\n errorState: this.errorState(),\n focused: this.focusedSignal(),\n color: this.color(),\n }),\n );\n\n /** @internal */ readonly rootClasses = computed(() => this.variantResult().root());\n /** @internal */ readonly fieldGroupClasses = computed(() => this.variantResult().fieldGroup());\n /** @internal */ readonly fieldClasses = computed(() => this.variantResult().field());\n /** @internal */ readonly separatorClasses = computed(() => this.variantResult().separator());\n /** @internal */ readonly stepperGroupClasses = computed(() => this.variantResult().stepperGroup());\n /** @internal */ readonly stepperClasses = computed(() => this.variantResult().stepper());\n /** @internal */ readonly stepperIconClasses = computed(() => this.variantResult().stepperIcon());\n /** @internal */ readonly meridiemClasses = computed(() => this.variantResult().meridiem());\n /** @internal */ readonly clearButtonClasses = computed(() => this.variantResult().clearButton());\n\n /** @internal */\n meridiemButtonClasses(which: TimePickerMeridiem): string {\n const base = this.variantResult().meridiemButton();\n const active = this.meridiem() === which;\n return active ? `${base} ${MERIDIEM_ACTIVE_COLOR[this.color()]}` : base;\n }\n\n // ── FormFieldControl impl ──\n\n /** @internal */ readonly id: Signal<string> = computed(() => this.idInput() ?? this.hostId);\n /** @internal */ readonly focused: Signal<boolean> = this.focusedSignal.asReadonly();\n /** @internal */ readonly empty: Signal<boolean> = this.isEmpty;\n /** @internal */ readonly disabled: Signal<boolean> = this.isDisabled;\n /** @internal */ readonly required: Signal<boolean> = computed(() => {\n this._ngControlRev();\n if (this.requiredInput()) return true;\n return !!this.ngControl?.control?.hasValidator(Validators.required);\n });\n /** @internal */\n readonly errorState: Signal<boolean> = computed(() => {\n this._ngControlRev();\n this._formSubmitRev();\n this.focusedSignal();\n if (this.rangeError()) return true;\n const matcher = this.errorStateMatcher() ?? this.defaultMatcher;\n const form: TwFormSubmitted | null =\n (this.parentFormGroup as TwFormSubmitted | null) ??\n (this.parentForm as TwFormSubmitted | null);\n return matcher.isErrorState(this.ngControl?.control ?? null, form);\n });\n /** @internal */ readonly controlType = 'time-picker';\n /** @internal */\n readonly userAriaDescribedBy: Signal<string | undefined> = computed(() =>\n this.userAriaDescribedByInput(),\n );\n\n // ── Constructor ──\n\n constructor() {\n super();\n\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Sync the field text whenever the underlying value changes (programmatic).\n effect(() => {\n const v = this.internalValue();\n const fmt = this.format();\n const showS = this.showSeconds();\n untracked(() => {\n if (this.editing) return;\n if (v === null || !this.adapter.isValid(v)) {\n this.hourText.set('');\n this.minuteText.set('');\n this.secondText.set('');\n this.rangeError.set(false);\n return;\n }\n const h24 = this.adapter.getHours(v);\n const m = this.adapter.getMinutes(v);\n const s = this.adapter.getSeconds(v);\n if (fmt === '12h') {\n this.hourText.set(padTwo(to12h(h24)));\n this.meridiem.set(h24 >= 12 ? 'PM' : 'AM');\n } else {\n this.hourText.set(padTwo(h24));\n }\n this.minuteText.set(padTwo(m));\n this.secondText.set(showS ? padTwo(s) : '');\n this.rangeError.set(!this.isInRange(v));\n });\n });\n\n // Re-render the hour text when switching format (e.g., 24h → 12h) or showSeconds.\n effect(() => {\n this.format();\n this.showSeconds();\n untracked(() => {\n const v = this.internalValue();\n if (v === null || !this.adapter.isValid(v)) return;\n const h24 = this.adapter.getHours(v);\n if (this.format() === '12h') {\n this.hourText.set(padTwo(to12h(h24)));\n this.meridiem.set(h24 >= 12 ? 'PM' : 'AM');\n } else {\n this.hourText.set(padTwo(h24));\n }\n if (this.showSeconds() && !this.secondText()) {\n this.secondText.set(padTwo(this.adapter.getSeconds(v)));\n }\n });\n });\n\n // Dev-mode warning for missing accessible name.\n afterNextRender(() => {\n if (!isDevMode()) return;\n const hasLabel =\n !!this.ariaLabel() ||\n !!this.ariaLabelledby() ||\n !!this.formField?.labelChild();\n if (!hasLabel) {\n console.warn(\n '[tw-time-picker] The time-picker has no accessible name. Set aria-label, aria-labelledby, or wrap the component in a <tw-form-field> with a <label twLabel>.',\n );\n }\n });\n\n // Dev-mode warning for bogus steps.\n afterNextRender(() => {\n if (!isDevMode()) return;\n for (const [name, step] of [\n ['hourStep', this.hourStep()],\n ['minuteStep', this.minuteStep()],\n ['secondStep', this.secondStep()],\n ] as const) {\n if (step < 1 || !Number.isFinite(step)) {\n console.warn(\n `[tw-time-picker] ${name}=${step} is invalid. Using 1 instead.`,\n );\n }\n }\n });\n\n // Host focus tracking.\n const monitorSub = this.focusMonitor\n .monitor(this.elementRef, true)\n .subscribe((origin) => {\n const wasFocused = this.focusedSignal();\n this.focusedSignal.set(!!origin);\n if (wasFocused && !origin) {\n this.focusedField.set(null);\n this.editing = false;\n this.normalizeEmptyFields();\n this.onTouched();\n this._ngControlRev.update((n) => n + 1);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n monitorSub.unsubscribe();\n this.focusMonitor.stopMonitoring(this.elementRef);\n });\n }\n\n ngOnInit(): void {\n const ctrl = this.ngControl?.control;\n if (ctrl) {\n const streams = [ctrl.statusChanges, ctrl.valueChanges].filter(\n (s): s is NonNullable<typeof s> => !!s,\n );\n if (streams.length) {\n merge(...streams)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this._ngControlRev.update((n) => n + 1));\n }\n }\n const submit = this.parentFormGroup?.ngSubmit ?? this.parentForm?.ngSubmit;\n if (submit) {\n submit\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this._formSubmitRev.update((n) => n + 1));\n }\n }\n\n // ── Public imperative API ──\n\n /** Moves focus to the hours field. */\n focus(): void {\n this.hourInputRef().nativeElement.focus();\n }\n\n /** Clears the value and emits `timeChange` with `source: 'clear'`. */\n clear(): void {\n this.commit(null, 'clear');\n }\n\n // ── Field interactions ──\n\n /** @internal */\n onFieldFocus(field: TimePickerField): void {\n this.focusedField.set(field);\n this.editing = true;\n const el = this.getFieldEl(field);\n if (el) el.select();\n }\n\n /** @internal */\n onFieldBlur(_field: TimePickerField): void {\n this.editing = false;\n this.normalizeEmptyFields();\n }\n\n /** @internal */\n onBeforeInput(event: Event, field: TimePickerField): void {\n const evt = event as InputEvent;\n const data = evt.data ?? '';\n // Let browsers drive Backspace / Delete natively.\n if (evt.inputType === 'deleteContentBackward' || evt.inputType === 'deleteContentForward') {\n return;\n }\n // Replace default text insertion with our buffered digit logic.\n if (evt.inputType === 'insertText' && /^\\d$/.test(data)) {\n evt.preventDefault();\n this.typeDigit(field, data);\n } else if (evt.inputType === 'insertText') {\n // Reject non-digit insertions.\n evt.preventDefault();\n }\n }\n\n /** @internal Handle native delete events (Backspace/Delete). */\n onInputEvent(event: Event, field: TimePickerField): void {\n const evt = event as InputEvent;\n const el = event.target as HTMLInputElement;\n if (evt.inputType === 'deleteContentBackward' || evt.inputType === 'deleteContentForward') {\n this.editing = true;\n const currentLen = this.getFieldText(field).length;\n const nativeText = el.value.replace(/\\D/g, '').slice(0, 2);\n if (nativeText.length < currentLen || nativeText.length === 0) {\n this.setFieldText(field, nativeText);\n this.commitFromFields('input', field);\n }\n }\n }\n\n /** @internal */\n onFieldKeydown(event: KeyboardEvent, field: TimePickerField): void {\n if (this.isDisabled() || this.readonlyInput()) return;\n const key = event.key;\n\n switch (key) {\n case 'ArrowUp':\n event.preventDefault();\n this.stepField(field, 1, event.shiftKey);\n return;\n case 'ArrowDown':\n event.preventDefault();\n this.stepField(field, -1, event.shiftKey);\n return;\n case 'ArrowLeft':\n if (this.isFieldCaretAtStart(field)) {\n event.preventDefault();\n this.moveFocus(field, -1);\n }\n return;\n case 'ArrowRight':\n if (this.isFieldCaretAtEnd(field)) {\n event.preventDefault();\n this.moveFocus(field, 1);\n }\n return;\n case 'Home':\n event.preventDefault();\n this.setFieldText(field, padTwo(this.fieldMinFor(field)));\n this.commitFromFields('input', field);\n return;\n case 'End':\n event.preventDefault();\n this.setFieldText(field, padTwo(this.fieldMaxFor(field)));\n this.commitFromFields('input', field);\n return;\n case 'Delete':\n case 'Backspace':\n // Let native input drive these; `onInputEvent` syncs state.\n return;\n default:\n if (key.length === 1 && !/\\d/.test(key)) {\n event.preventDefault();\n }\n return;\n }\n }\n\n /** @internal */\n setMeridiem(m: TimePickerMeridiem): void {\n if (this.isDisabled() || this.readonlyInput()) return;\n if (this.meridiem() === m) return;\n this.meridiem.set(m);\n this.commitFromFields('meridiem', 'meridiem');\n }\n\n /** @internal */\n onMeridiemKeydown(event: KeyboardEvent, m: TimePickerMeridiem): void {\n if (this.isDisabled() || this.readonlyInput()) return;\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.setMeridiem(m === 'AM' ? 'PM' : 'AM');\n }\n }\n\n /** @internal */\n onStepperMouseDown(event: MouseEvent): void {\n // Keep focus on the current field when clicking the stepper.\n event.preventDefault();\n }\n\n /** @internal */\n onStepperClick(direction: 1 | -1): void {\n const field = this.focusedField() ?? 'hour';\n if (field === 'meridiem') {\n this.setMeridiem(this.meridiem() === 'AM' ? 'PM' : 'AM');\n return;\n }\n this.stepField(field, direction, false);\n // Restore focus to the field we stepped.\n const el = this.getFieldEl(field);\n el?.focus();\n }\n\n /** @internal */\n onClearClick(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.clear();\n }\n\n // ── Helpers ──\n\n private typeDigit(field: TimePickerField, digit: string): void {\n if (field === 'meridiem') return;\n const max = this.fieldMaxFor(field);\n const current = this.getFieldText(field);\n const next = appendDigit(current, digit, max);\n const advance = isTerminalDigit(current, digit, max) || next.length === 2;\n this.setFieldText(field, next);\n this.commitFromFields('input', field);\n if (advance) this.moveFocus(field, 1);\n }\n\n private stepField(field: TimePickerField, direction: 1 | -1, shift: boolean): void {\n if (field === 'meridiem') {\n this.setMeridiem(this.meridiem() === 'AM' ? 'PM' : 'AM');\n return;\n }\n const step = this.stepFor(field) * (shift ? 2 : 1);\n const min = this.fieldMinFor(field);\n const max = this.fieldMaxFor(field);\n const current = parseField(this.getFieldText(field)) ?? min;\n const next = stepWithWrap(current, step, direction, min, max);\n this.setFieldText(field, padTwo(next));\n this.commitFromFields('stepper', field);\n }\n\n private commitFromFields(source: TimePickerChangeSource, field: TimePickerField): void {\n const hourRaw = parseField(this.hourText());\n const minuteRaw = parseField(this.minuteText());\n const secondRaw = this.showSeconds() ? parseField(this.secondText()) : 0;\n\n this.timeInput.emit({\n field,\n rawText: field === 'meridiem' ? this.meridiem() : this.getFieldText(field),\n parsed: this.buildValueIfComplete(hourRaw, minuteRaw, secondRaw),\n });\n\n if (hourRaw === null || minuteRaw === null || (this.showSeconds() && secondRaw === null)) {\n return;\n }\n\n const h24 = this.toCanonicalHour(hourRaw);\n if (h24 === null) return;\n const base = this.resolveBaseDate();\n const next = this.adapter.withTime(base, h24, minuteRaw, this.showSeconds() ? (secondRaw ?? 0) : 0);\n if (!this.adapter.isValid(next)) return;\n\n this.commit(next, source);\n }\n\n private buildValueIfComplete(h: number | null, m: number | null, s: number | null): D | null {\n if (h === null || m === null) return null;\n if (this.showSeconds() && s === null) return null;\n const h24 = this.toCanonicalHour(h);\n if (h24 === null) return null;\n const base = this.resolveBaseDate();\n const built = this.adapter.withTime(base, h24, m, this.showSeconds() ? (s ?? 0) : 0);\n return this.adapter.isValid(built) ? built : null;\n }\n\n private toCanonicalHour(display: number): number | null {\n if (this.format() === '12h') {\n if (display < 1 || display > 12) return null;\n return from12h(display, this.meridiem());\n }\n if (display < 0 || display > 23) return null;\n return display;\n }\n\n private resolveBaseDate(): D {\n const current = this.internalValue();\n if (current !== null && this.adapter.isValid(current)) return current;\n const reference = this.referenceDate();\n if (reference !== null && this.adapter.isValid(reference)) return reference;\n return this.adapter.today();\n }\n\n private commit(next: D | null, source: TimePickerChangeSource): void {\n const previous = this.internalValue();\n this.internalValue.set(next);\n this.value.set(next);\n this.rangeError.set(next !== null ? !this.isInRange(next) : false);\n\n if (source !== 'programmatic') {\n this.onChange(next);\n this.onTouched();\n if (next === null) {\n this.liveAnnouncer.announce(this.intl.clearedAnnouncement, 'polite');\n } else {\n this.liveAnnouncer.announce(\n this.intl.selectedAnnouncement(this.formatAnnouncement(next)),\n 'polite',\n );\n }\n }\n\n this.timeChange.emit({ value: next, previousValue: previous, source });\n }\n\n private formatAnnouncement(v: D): string {\n const h24 = this.adapter.getHours(v);\n const m = this.adapter.getMinutes(v);\n const s = this.adapter.getSeconds(v);\n const secPart = this.showSeconds() ? `:${padTwo(s)}` : '';\n if (this.format() === '12h') {\n const meridiemLabel = h24 >= 12 ? this.intl.pmLabel : this.intl.amLabel;\n return `${padTwo(to12h(h24))}:${padTwo(m)}${secPart} ${meridiemLabel}`;\n }\n return `${padTwo(h24)}:${padTwo(m)}${secPart}`;\n }\n\n private isInRange(v: D): boolean {\n const min = this.minTime();\n const max = this.maxTime();\n if (!min && !max) return true;\n const vSecs = timeOfDaySeconds(\n this.adapter.getHours(v),\n this.adapter.getMinutes(v),\n this.adapter.getSeconds(v),\n );\n if (min && this.adapter.isValid(min)) {\n const minSecs = timeOfDaySeconds(\n this.adapter.getHours(min),\n this.adapter.getMinutes(min),\n this.adapter.getSeconds(min),\n );\n if (vSecs < minSecs) return false;\n }\n if (max && this.adapter.isValid(max)) {\n const maxSecs = timeOfDaySeconds(\n this.adapter.getHours(max),\n this.adapter.getMinutes(max),\n this.adapter.getSeconds(max),\n );\n if (vSecs > maxSecs) return false;\n }\n return true;\n }\n\n private normalizeEmptyFields(): void {\n // Zero-pad single-digit entries once the user leaves the component so the\n // display always settles to \"HH : MM\".\n for (const field of ['hour', 'minute', 'second'] as const) {\n if (field === 'second' && !this.showSeconds()) continue;\n const raw = this.getFieldText(field);\n if (raw.length === 1) {\n this.setFieldText(field, padTwo(Number(raw)));\n }\n }\n }\n\n private moveFocus(field: TimePickerField, direction: 1 | -1): void {\n const order: TimePickerField[] = this.showSeconds()\n ? ['hour', 'minute', 'second']\n : ['hour', 'minute'];\n const idx = order.indexOf(field);\n if (idx === -1) return;\n const nextIdx = clamp(idx + direction, 0, order.length - 1);\n if (nextIdx === idx) return;\n const el = this.getFieldEl(order[nextIdx]);\n el?.focus();\n }\n\n private isFieldCaretAtStart(field: TimePickerField): boolean {\n const el = this.getFieldEl(field);\n if (!el) return true;\n return (el.selectionStart ?? 0) === 0;\n }\n\n private isFieldCaretAtEnd(field: TimePickerField): boolean {\n const el = this.getFieldEl(field);\n if (!el) return true;\n const end = el.selectionEnd ?? 0;\n return end === el.value.length;\n }\n\n private getFieldEl(field: TimePickerField): HTMLInputElement | null {\n switch (field) {\n case 'hour':\n return this.hourInputRef().nativeElement;\n case 'minute':\n return this.minuteInputRef().nativeElement;\n case 'second':\n return this.secondInputRef()?.nativeElement ?? null;\n default:\n return null;\n }\n }\n\n private getFieldText(field: TimePickerField): string {\n switch (field) {\n case 'hour':\n return this.hourText();\n case 'minute':\n return this.minuteText();\n case 'second':\n return this.secondText();\n default:\n return '';\n }\n }\n\n private setFieldText(field: TimePickerField, next: string): void {\n this.editing = true;\n switch (field) {\n case 'hour':\n this.hourText.set(next);\n return;\n case 'minute':\n this.minuteText.set(next);\n return;\n case 'second':\n this.secondText.set(next);\n return;\n default:\n return;\n }\n }\n\n private stepFor(field: TimePickerField): number {\n switch (field) {\n case 'hour':\n return Math.max(1, Math.floor(this.hourStep()));\n case 'minute':\n return Math.max(1, Math.floor(this.minuteStep()));\n case 'second':\n return Math.max(1, Math.floor(this.secondStep()));\n default:\n return 1;\n }\n }\n\n private fieldMinFor(field: TimePickerField): number {\n if (field === 'hour') return fieldMin('hour', this.format());\n return 0;\n }\n\n private fieldMaxFor(field: TimePickerField): number {\n if (field === 'hour') return fieldMax('hour', this.format());\n return 59;\n }\n\n // ── ControlValueAccessor ──\n\n writeValue(value: unknown): void {\n if (value === null || value === undefined || value === '') {\n const previous = this.internalValue();\n this.internalValue.set(null);\n this.value.set(null);\n this.rangeError.set(false);\n this.hourText.set('');\n this.minuteText.set('');\n this.secondText.set('');\n this.timeChange.emit({ value: null, previousValue: previous, source: 'programmatic' });\n return;\n }\n const coerced = this.adapter.deserialize(value);\n if (coerced === null || !this.adapter.isValid(coerced)) {\n this.internalValue.set(null);\n this.value.set(null);\n this.hourText.set('');\n this.minuteText.set('');\n this.secondText.set('');\n this.rangeError.set(true);\n return;\n }\n const previous = this.internalValue();\n this.internalValue.set(coerced);\n this.value.set(coerced);\n this.rangeError.set(!this.isInRange(coerced));\n this.timeChange.emit({ value: coerced, previousValue: previous, source: 'programmatic' });\n }\n\n registerOnChange(fn: (value: D | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // ── FormFieldControl methods ──\n\n /** @internal */\n setDescribedByIds(ids: string[]): void {\n this.describedByIdsSignal.set([...ids]);\n }\n\n /** @internal */\n onContainerClick(event: MouseEvent): void {\n if (this.isDisabled()) return;\n const target = event.target as HTMLElement | null;\n // Clicks that land on an actual field or button should settle focus naturally.\n if (target && (target.tagName === 'INPUT' || target.tagName === 'BUTTON')) return;\n this.hourInputRef().nativeElement.focus();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cdevhub-ngx-tw-time-picker.mjs","sources":["../../../projects/ngx-tw/time-picker/time-picker-intl.ts","../../../projects/ngx-tw/time-picker/time-picker.ts","../../../projects/ngx-tw/time-picker/cdevhub-ngx-tw-time-picker.ts"],"sourcesContent":["import { Injectable, type Provider } from '@angular/core';\n\n/**\n * Localized strings + ARIA announcements consumed by the time-picker.\n *\n * Override per-field via Angular DI — provide a custom instance, or supply a\n * `Partial<TimePickerIntl>` through `provideTimePickerIntl`. Unset fields\n * fall through to the English defaults shipped here.\n *\n * All members take primitives so consumers can write straight string\n * literals or template helpers without depending on internal types.\n */\n@Injectable()\nexport class TimePickerIntl {\n // ---------------------------------------------------------------------------\n // Group + field labels\n // ---------------------------------------------------------------------------\n\n /** Accessible name for the fields group (the wrapper around hours/minutes/seconds). */\n groupLabel = 'Time';\n\n /** Accessible name for the hours field. */\n hoursLabel = 'Hours';\n\n /** Accessible name for the minutes field. */\n minutesLabel = 'Minutes';\n\n /** Accessible name for the seconds field. */\n secondsLabel = 'Seconds';\n\n /** Accessible name for the meridiem (AM/PM) radio group. */\n meridiemGroupLabel = 'AM or PM';\n\n /** Display + accessible name for the AM option. */\n amLabel = 'AM';\n\n /** Display + accessible name for the PM option. */\n pmLabel = 'PM';\n\n // ---------------------------------------------------------------------------\n // Stepper + clear button labels\n // ---------------------------------------------------------------------------\n\n /** Aria label template for the up stepper. Receives the active field name (`'hours'`, `'minutes'`, `'seconds'`). */\n increaseLabel(field: string): string {\n return `Increase ${field}`;\n }\n\n /** Aria label template for the down stepper. Receives the active field name (`'hours'`, `'minutes'`, `'seconds'`). */\n decreaseLabel(field: string): string {\n return `Decrease ${field}`;\n }\n\n /** Aria label for the clear button. */\n clearLabel = 'Clear time';\n\n // ---------------------------------------------------------------------------\n // Live announcements\n // ---------------------------------------------------------------------------\n\n /** Live-region message announced after the value is cleared. */\n clearedAnnouncement = 'Time cleared';\n\n /** Live-region message after a commit. Receives the pre-formatted time string (e.g. `'02:30 PM'`). */\n selectedAnnouncement(formattedTime: string): string {\n return `${formattedTime} selected`;\n }\n\n /** Spoken text for an empty hour/minute/second field — used as `aria-valuetext` when the field is blank. */\n emptyValueText = 'Empty';\n}\n\n/**\n * Provides a custom `TimePickerIntl` instance. Place at any injector level —\n * the time-picker resolves the closest one.\n *\n * @example\n * ```ts\n * providers: [\n * provideTimePickerIntl({\n * hoursLabel: 'Heures',\n * minutesLabel: 'Minutes',\n * meridiemGroupLabel: 'AM ou PM',\n * }),\n * ]\n * ```\n */\nexport function provideTimePickerIntl(custom: Partial<TimePickerIntl>): Provider {\n return {\n provide: TimePickerIntl,\n useFactory: () => Object.assign(new TimePickerIntl(), custom),\n };\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n isDevMode,\n linkedSignal,\n model,\n type OnInit,\n output,\n signal,\n type Signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport {\n type AbstractControl,\n type ControlValueAccessor,\n FormGroupDirective,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n NgForm,\n type ValidationErrors,\n type Validator,\n Validators,\n} from '@angular/forms';\nimport { FocusMonitor, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs';\nimport { tv } from 'tailwind-variants';\nimport {\n appendDigit,\n clamp,\n type ErrorStateMatcher,\n fieldMax,\n fieldMin,\n from12h,\n isTerminalDigit,\n padTwo,\n parseField,\n stepWithWrap,\n timeOfDaySeconds,\n to12h,\n type TimePickerFormat,\n type TimePickerMeridiem,\n TW_ERROR_STATE_MATCHER,\n type TwColor,\n type TwFormSubmitted,\n type TwSize,\n} from '@cdevhub/ngx-tw/core';\nimport {\n FormFieldControl,\n TW_FORM_FIELD,\n TW_FORM_FIELD_CONTROL,\n} from '@cdevhub/ngx-tw/form-field';\nimport { DATE_ADAPTER, type DateAdapter } from '@cdevhub/ngx-tw/calendar';\nimport { TimePickerIntl } from './time-picker-intl';\n\n// ── Public types ──────────────────────────────────────────────────\n\n/** Visual style of the time-picker chrome. */\nexport type TimePickerVariant = 'default' | 'naked';\n\n/** Logical field inside the time-picker. */\nexport type TimePickerField = 'hour' | 'minute' | 'second' | 'meridiem';\n\n/** Origin of a value change — useful when consumers need to distinguish user input from programmatic writes. */\nexport type TimePickerChangeSource =\n | 'input'\n | 'stepper'\n | 'meridiem'\n | 'clear'\n | 'programmatic';\n\n/** Emitted by `timeChange` after a committed value update. */\nexport interface TimePickerChangeEvent<D> {\n /** The committed value (`null` when cleared). */\n readonly value: D | null;\n /** The value before this change. */\n readonly previousValue: D | null;\n /** What triggered the change. */\n readonly source: TimePickerChangeSource;\n}\n\n/** Emitted by `timeInput` before a commit, on every keystroke or stepper press. */\nexport interface TimePickerInputEvent<D> {\n /** Which field was edited. */\n readonly field: TimePickerField;\n /** The raw text currently in that field (pre-commit). */\n readonly rawText: string;\n /** The parsed value if fields form a valid time, else `null`. */\n readonly parsed: D | null;\n}\n\n// Re-export the shared format / meridiem aliases so consumers can import\n// them from `ngx-tw/time-picker` without reaching into core.\nexport type { TimePickerFormat, TimePickerMeridiem } from '@cdevhub/ngx-tw/core';\n\n// ── tv() config ───────────────────────────────────────────────────\n\nconst timePickerVariants = tv(\n {\n slots: {\n root: 'inline-flex items-center text-fg transition-[color,border-color,box-shadow] duration-normal motion-reduce:transition-none',\n fieldGroup: 'inline-flex items-center tabular-nums font-medium',\n field:\n 'bg-transparent text-center outline-none border-0 p-0 m-0 text-fg placeholder:text-fg-subtle rounded-md caret-transparent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n separator: 'text-fg-subtle select-none px-0.5',\n // Column stretches to the field height; the two buttons split it via\n // `flex-1`. Codified departure from CLAUDE.md \"Square interactive targets\"\n // (size-6/7/8): stacking two square buttons made the column 2× a button\n // tall — far taller than the digit row — which bloated the field height.\n // So the buttons carry a fixed WIDTH only (per-size below); the chevron\n // glyph's min-content (size-3 = 12px) is the natural floor.\n //\n // WCAG 2.5.8 (target-size, 24px — which slider.ts / badge.ts codify):\n // two stacked buttons cannot each be ≥24px tall inside a compact field\n // without re-bloating it, so each spinner ends up < 24px tall. Accepted\n // as the equivalent-control exception applies — the time is fully editable\n // by typing into the spinbutton fields (and via ↑/↓), so the spinner is a\n // pointer enhancement, never the only path.\n stepperGroup: 'flex flex-col self-stretch ml-0.5',\n stepper:\n 'flex-1 inline-flex items-center justify-center text-fg-muted hover:text-fg hover:bg-surface-muted rounded-md transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:opacity-40 disabled:pointer-events-none',\n stepperIcon: '',\n meridiem:\n 'inline-flex items-center rounded-md border border-border overflow-hidden ml-2 shrink-0',\n meridiemButton:\n 'font-medium text-fg-muted hover:bg-surface-muted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 transition-colors duration-normal motion-reduce:transition-none disabled:opacity-40 disabled:pointer-events-none',\n clearButton:\n 'inline-flex items-center justify-center shrink-0 rounded-md text-fg-muted hover:text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none size-6 ml-1 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n },\n variants: {\n size: {\n xs: {\n root: 'gap-1 text-xs',\n // Numeric field width is sized to fit a 2-digit value at the current font scale. Off\n // the standard width scale because the field is content-driven, not a layout primitive\n // — see CLAUDE.md spacing scale rationale.\n field: 'w-5 text-xs',\n stepper: 'w-6',\n stepperIcon: 'size-3',\n meridiemButton: 'px-1.5 py-1 text-2xs',\n },\n sm: {\n root: 'gap-1 text-sm',\n // sm-density numeric field — sized to fit a 2-digit value at text-sm; see CLAUDE.md spacing scale rationale.\n field: 'w-6 text-sm',\n stepper: 'w-7',\n stepperIcon: 'size-3',\n meridiemButton: 'px-2 py-1 text-xs',\n },\n md: {\n root: 'gap-1.5 text-sm',\n // md-density numeric field — sized to fit a 2-digit value at text-sm; see CLAUDE.md spacing scale rationale.\n field: 'w-7 text-sm',\n stepper: 'w-7',\n stepperIcon: 'size-3',\n meridiemButton: 'px-2 py-1 text-xs',\n },\n lg: {\n root: 'gap-1.5 text-base',\n // lg-density numeric field — sized to fit a 2-digit value at text-base; see CLAUDE.md spacing scale rationale.\n field: 'w-8 text-base',\n stepper: 'w-8',\n stepperIcon: 'size-4',\n meridiemButton: 'px-2.5 py-1.5 text-sm',\n },\n xl: {\n root: 'gap-2 text-base',\n // xl-density numeric field — sized to fit a 2-digit value at text-base; see CLAUDE.md spacing scale rationale.\n field: 'w-9 text-base',\n stepper: 'w-8',\n stepperIcon: 'size-4',\n meridiemButton: 'px-3 py-1.5 text-sm',\n },\n },\n variant: {\n default: {\n root: 'rounded-md border border-border bg-surface px-3 py-2 hover:border-border-strong',\n },\n naked: {\n root: 'bg-transparent border-0 rounded-none p-0 focus-within:outline-none',\n },\n },\n disabled: {\n true: { root: 'opacity-50 pointer-events-none cursor-not-allowed' },\n false: {},\n },\n focused: { true: {}, false: {} },\n errorState: { true: {}, false: {} },\n color: {\n primary: {},\n secondary: {},\n accent: {},\n neutral: {},\n info: {},\n success: {},\n warning: {},\n error: {},\n },\n },\n compoundVariants: [\n { variant: 'default', focused: true, color: 'primary', class: { root: 'border-primary-500' } },\n { variant: 'default', focused: true, color: 'secondary', class: { root: 'border-secondary-500' } },\n { variant: 'default', focused: true, color: 'accent', class: { root: 'border-accent-500' } },\n { variant: 'default', focused: true, color: 'neutral', class: { root: 'border-border-strong' } },\n { variant: 'default', focused: true, color: 'info', class: { root: 'border-info-500' } },\n { variant: 'default', focused: true, color: 'success', class: { root: 'border-success-500' } },\n { variant: 'default', focused: true, color: 'warning', class: { root: 'border-warning-500' } },\n { variant: 'default', focused: true, color: 'error', class: { root: 'border-error-500' } },\n { variant: 'default', errorState: true, class: { root: 'border-error-500' } },\n ],\n defaultVariants: {\n size: 'md',\n variant: 'default',\n disabled: false,\n errorState: false,\n focused: false,\n color: 'primary',\n },\n },\n { twMerge: true },\n);\n\n// ── Static active-state color lookup for the AM/PM meridiem button ─────────────\n// Each entry is written out so Tailwind v4's static scanner picks the classes up.\n// Mirrors the lookup-table pattern used by `checkbox.ts` and `radio.ts`.\nconst MERIDIEM_ACTIVE_COLOR: Record<TwColor, string> = {\n primary: 'bg-primary-500 text-on-primary hover:bg-primary-600',\n secondary: 'bg-secondary-500 text-on-secondary hover:bg-secondary-600',\n accent: 'bg-accent-500 text-on-accent hover:bg-accent-600',\n neutral: 'bg-fg text-on-neutral hover:bg-fg/90',\n info: 'bg-info-500 text-on-info hover:bg-info-600',\n success: 'bg-success-500 text-on-success hover:bg-success-600',\n warning: 'bg-warning-500 text-on-warning hover:bg-warning-600',\n error: 'bg-error-500 text-on-error hover:bg-error-600',\n};\n\nlet nextTimePickerId = 0;\n\n/**\n * Segmented time editor. Renders `HH : MM` (with an optional `: SS` and/or\n * `AM/PM` toggle) and integrates with all three Angular form strategies via\n * `ControlValueAccessor`. Also participates in `<tw-form-field>` through\n * `FormFieldControl` — wrapping is optional.\n *\n * Value type is `D | null`. Every time operation flows through the injected\n * `DateAdapter<D>`, so the component works with the default native adapter\n * (`provideNativeDateAdapter()`) or any custom adapter a consumer ships.\n */\n/**\n * Validation errors a `tw-time-picker` can place on its bound control.\n *\n * Mirrors the shape of `CalendarValidationErrors` so the two pickers report\n * constraint violations the same way: a code keyed by what was violated, with\n * the offending value and the bound it broke.\n */\nexport type TimePickerValidationErrors = Partial<{\n timePickerMin: { min: unknown; actual: unknown };\n timePickerMax: { max: unknown; actual: unknown };\n}>;\n\n@Component({\n selector: 'tw-time-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TW_FORM_FIELD_CONTROL,\n useExisting: forwardRef(() => TimePickerComponent),\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => TimePickerComponent),\n multi: true,\n },\n // Required, not optional. Angular v22 compiles any component exposing a\n // `value` model() as a signal-forms custom control; `FormControlDirective`\n // only takes the classic CVA path — the one that runs `setUpValidators` and\n // composes the NG_VALIDATORS above — when a value accessor is already\n // visible at directive-creation time. Assigning `ngControl.valueAccessor`\n // in a lifecycle hook is too late, and the failure is silent: value and\n // disabled still round-trip, so only a spec asserting an error code on a\n // bound FormControl catches it. See CLAUDE.md's ControlValueAccessor\n // section.\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimePickerComponent),\n multi: true,\n },\n ],\n template: `\n <div [class]=\"fieldGroupClasses()\" role=\"group\" [attr.aria-label]=\"groupAriaLabel()\">\n <input\n #hourInput\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n maxlength=\"2\"\n [class]=\"fieldClasses()\"\n [value]=\"hourDisplay()\"\n [placeholder]=\"placeholder() ?? '--'\"\n [disabled]=\"isDisabled()\"\n [attr.readonly]=\"readonlyInput() ? 'true' : null\"\n [attr.aria-label]=\"intl.hoursLabel\"\n [attr.role]=\"'spinbutton'\"\n [attr.aria-valuemin]=\"hourMin()\"\n [attr.aria-valuemax]=\"hourMax()\"\n [attr.aria-valuenow]=\"hourValueNow()\"\n [attr.aria-valuetext]=\"hourValueText()\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onFieldKeydown($event, 'hour')\"\n (beforeinput)=\"onBeforeInput($event, 'hour')\"\n (input)=\"onInputEvent($event, 'hour')\"\n (focus)=\"onFieldFocus('hour')\"\n (blur)=\"onFieldBlur('hour')\"\n />\n\n <span [class]=\"separatorClasses()\" aria-hidden=\"true\">:</span>\n\n <input\n #minuteInput\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n maxlength=\"2\"\n [class]=\"fieldClasses()\"\n [value]=\"minuteText()\"\n [placeholder]=\"placeholder() ?? '--'\"\n [disabled]=\"isDisabled()\"\n [attr.readonly]=\"readonlyInput() ? 'true' : null\"\n [attr.aria-label]=\"intl.minutesLabel\"\n [attr.role]=\"'spinbutton'\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"59\"\n [attr.aria-valuenow]=\"minuteValueNow()\"\n [attr.aria-valuetext]=\"minuteValueText()\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onFieldKeydown($event, 'minute')\"\n (beforeinput)=\"onBeforeInput($event, 'minute')\"\n (input)=\"onInputEvent($event, 'minute')\"\n (focus)=\"onFieldFocus('minute')\"\n (blur)=\"onFieldBlur('minute')\"\n />\n\n @if (showSeconds()) {\n <span [class]=\"separatorClasses()\" aria-hidden=\"true\">:</span>\n\n <input\n #secondInput\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n maxlength=\"2\"\n [class]=\"fieldClasses()\"\n [value]=\"secondText()\"\n [placeholder]=\"placeholder() ?? '--'\"\n [disabled]=\"isDisabled()\"\n [attr.readonly]=\"readonlyInput() ? 'true' : null\"\n [attr.aria-label]=\"intl.secondsLabel\"\n [attr.role]=\"'spinbutton'\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"59\"\n [attr.aria-valuenow]=\"secondValueNow()\"\n [attr.aria-valuetext]=\"secondValueText()\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onFieldKeydown($event, 'second')\"\n (beforeinput)=\"onBeforeInput($event, 'second')\"\n (input)=\"onInputEvent($event, 'second')\"\n (focus)=\"onFieldFocus('second')\"\n (blur)=\"onFieldBlur('second')\"\n />\n }\n </div>\n\n @if (showSteppers()) {\n <div [class]=\"stepperGroupClasses()\">\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"stepperClasses()\"\n [attr.aria-label]=\"intl.increaseLabel(focusedFieldLabel())\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (mousedown)=\"onStepperMouseDown($event)\"\n (click)=\"onStepperClick(1)\"\n >\n <ng-content select=\"[slot=stepper-up]\">\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" [class]=\"stepperIconClasses()\">\n <path fill-rule=\"evenodd\" d=\"M14.77 12.79a.75.75 0 0 1-1.06-.02L10 8.94l-3.71 3.83a.75.75 0 1 1-1.08-1.04l4.25-4.39a.75.75 0 0 1 1.08 0l4.25 4.39a.75.75 0 0 1-.02 1.06Z\" clip-rule=\"evenodd\" />\n </svg>\n </ng-content>\n </button>\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"stepperClasses()\"\n [attr.aria-label]=\"intl.decreaseLabel(focusedFieldLabel())\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (mousedown)=\"onStepperMouseDown($event)\"\n (click)=\"onStepperClick(-1)\"\n >\n <ng-content select=\"[slot=stepper-down]\">\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" [class]=\"stepperIconClasses()\">\n <path fill-rule=\"evenodd\" d=\"M5.23 7.21a.75.75 0 0 1 1.06.02L10 11.06l3.71-3.83a.75.75 0 1 1 1.08 1.04l-4.25 4.39a.75.75 0 0 1-1.08 0L5.21 8.27a.75.75 0 0 1 .02-1.06Z\" clip-rule=\"evenodd\" />\n </svg>\n </ng-content>\n </button>\n </div>\n }\n\n @if (format() === '12h') {\n <div [class]=\"meridiemClasses()\" role=\"radiogroup\" [attr.aria-label]=\"intl.meridiemGroupLabel\">\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"meridiemButtonClasses('AM')\"\n [attr.aria-checked]=\"meridiem() === 'AM'\"\n [attr.aria-label]=\"intl.amLabel\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (click)=\"setMeridiem('AM')\"\n (keydown)=\"onMeridiemKeydown($event, 'AM')\"\n >{{ intl.amLabel }}</button>\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"meridiemButtonClasses('PM')\"\n [attr.aria-checked]=\"meridiem() === 'PM'\"\n [attr.aria-label]=\"intl.pmLabel\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (click)=\"setMeridiem('PM')\"\n (keydown)=\"onMeridiemKeydown($event, 'PM')\"\n >{{ intl.pmLabel }}</button>\n </div>\n }\n\n @if (showClear() && !isEmpty() && !isDisabled() && !readonlyInput()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"clearButtonClasses()\"\n [attr.aria-label]=\"clearLabel()\"\n (click)=\"onClearClick($event)\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" class=\"size-3\">\n <path\n fill-rule=\"evenodd\"\n d=\"M10 8.586 4.707 3.293a1 1 0 0 0-1.414 1.414L8.586 10l-5.293 5.293a1 1 0 1 0 1.414 1.414L10 11.414l5.293 5.293a1 1 0 0 0 1.414-1.414L11.414 10l5.293-5.293a1 1 0 0 0-1.414-1.414L10 8.586Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n }\n `,\n host: {\n '[class]': 'rootClasses()',\n '[id]': 'hostId',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '[attr.aria-invalid]': 'errorState() || null',\n '[attr.data-variant]': 'resolvedVariant()',\n },\n})\nexport class TimePickerComponent<D = Date>\n extends FormFieldControl<D>\n implements ControlValueAccessor, Validator, OnInit\n{\n // ── Inputs ──\n\n /** Id on the time-picker's host element. Auto-generated when not provided. Used by the form-field's `<label for>` attribute. */\n readonly idInput = input<string | undefined>(undefined, { alias: 'id' });\n\n /** When true, the whole component is disabled and every field sets `aria-disabled=\"true\"`. Defaults to `false`. */\n readonly disabledInput = input<boolean, unknown>(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\n\n /** When true, exposes `aria-required=\"true\"`. Validators.required on a bound NgControl is also honoured. Defaults to `false`. */\n readonly requiredInput = input<boolean, unknown>(false, {\n alias: 'required',\n transform: booleanAttribute,\n });\n\n /** When true, blocks typing, stepping, and the AM/PM toggle — the value is still read-only visible. Defaults to `false`. */\n readonly readonlyInput = input<boolean, unknown>(false, {\n alias: 'readonly',\n transform: booleanAttribute,\n });\n\n /** Controls field height, font size, and stepper density. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Semantic color used for the focused border and focus ring. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** Visual style of the chrome. `'default'` draws its own border; `'naked'` strips chrome. Auto-resolves to `'naked'` inside `<tw-form-field>`. */\n readonly variant = input<TimePickerVariant | undefined>(undefined);\n\n /** `'12h'` renders 1–12 hours with an AM/PM toggle; `'24h'` renders 00–23. Defaults to `'24h'`. */\n readonly format = input<TimePickerFormat>('24h');\n\n /** When true, renders a seconds field after minutes. Defaults to `false`. */\n readonly showSeconds = input<boolean>(false);\n\n /** Amount to add/subtract when stepping hours. Defaults to `1`. */\n readonly hourStep = input<number>(1);\n\n /** Amount to add/subtract when stepping minutes. Defaults to `1`. */\n readonly minuteStep = input<number>(1);\n\n /** Amount to add/subtract when stepping seconds. Defaults to `1`. */\n readonly secondStep = input<number>(1);\n\n /** Earliest accepted time-of-day. Values earlier than this set `errorState` and mark the bound control invalid with `timePickerMin`. Defaults to `null`. Note: when `showSeconds` is `false`, the seconds component of any value still participates in the range comparison — supply `minTime` with zeroed seconds to match the 2-field display. */\n readonly minTime = input<D | null>(null);\n\n /** Latest accepted time-of-day. Values later than this set `errorState` and mark the bound control invalid with `timePickerMax`. Defaults to `null`. Note: when `showSeconds` is `false`, the seconds component of any value still participates in the range comparison — supply `maxTime` with zeroed seconds to match the 2-field display. */\n readonly maxTime = input<D | null>(null);\n\n /** Date portion used when the user types a time while `value` is `null`. Defaults to today. */\n readonly referenceDate = input<D | null>(null);\n\n /** Placeholder shown in each field when empty. Defaults to `'--'`. */\n readonly placeholder = input<string | undefined>(undefined);\n\n /** Whether to render the up/down stepper column. Defaults to `true`. */\n // TRUE-default: pointer users expect inline up/down chevrons next to a numeric editor — without them the picker reads as a static display, and consumers must rebuild stepping for every instance.\n readonly showSteppers = input<boolean>(true);\n\n /** Whether to render the clear affordance when a value is set. Defaults to `true`. */\n // TRUE-default: matches `<tw-date-picker>` and `<tw-input>` clear behaviour; without the inline clear, every form has to wire its own reset surface for an obvious affordance.\n readonly showClear = input<boolean>(true);\n\n /** Accessible label for the clear button. Defaults to `'Clear time'`. */\n readonly clearLabel = input<string>('Clear time');\n\n /** Per-instance override of the `ErrorStateMatcher`. */\n readonly errorStateMatcher = input<ErrorStateMatcher | undefined>(undefined);\n\n /** Accessible name for the fields group. Required when no visible label is supplied. Alias: `aria-label`. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** ID of an external element that labels the group. Alias: `aria-labelledby`. */\n readonly ariaLabelledby = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n /** Consumer-supplied `aria-describedby` ids. The form-field preserves these when merging hint/error ids. Alias: `aria-describedby`. */\n readonly userAriaDescribedByInput = input<string | undefined>(undefined, {\n alias: 'aria-describedby',\n });\n\n // ── Models ──\n\n /** Two-way bound current time. `null` when empty. Setting programmatically updates the fields without firing `onChange`. */\n readonly value = model<D | null>(null);\n\n // ── Outputs ──\n\n /** Fires on every keystroke, stepper press, or AM/PM toggle — before the new value is committed. */\n readonly timeInput = output<TimePickerInputEvent<D>>();\n\n /** Fires after a committed change — digit + auto-advance, stepper, meridiem toggle, clear, or programmatic write. */\n readonly timeChange = output<TimePickerChangeEvent<D>>();\n\n // ── Injected deps ──\n\n private readonly adapter = inject<DateAdapter<D>>(DATE_ADAPTER);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n private readonly formField = inject(TW_FORM_FIELD, { optional: true });\n // Resolved lazily in `ngOnInit`: this component self-provides NG_VALIDATORS\n // via `useExisting`, so an eager `inject(NgControl, { self })` would deadlock\n // against its own validator during construction. Mirrors `date-picker.ts`,\n // `date-range-picker.ts` and `calendar.ts`.\n private ngControl: NgControl | null = null;\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n private readonly defaultMatcher = inject(TW_ERROR_STATE_MATCHER);\n\n /** @internal — exposed for the template; consumers configure via `provideTimePickerIntl()`. */\n protected readonly intl = inject(TimePickerIntl, { optional: true }) ?? new TimePickerIntl();\n\n // ── View refs ──\n\n private readonly hourInputRef = viewChild.required<ElementRef<HTMLInputElement>>('hourInput');\n private readonly minuteInputRef =\n viewChild.required<ElementRef<HTMLInputElement>>('minuteInput');\n private readonly secondInputRef =\n viewChild<ElementRef<HTMLInputElement>>('secondInput');\n\n // ── Identity ──\n\n private readonly uid = nextTimePickerId++;\n /** @internal */\n readonly hostId = `tw-time-picker-${this.uid}`;\n\n // ── Internal state ──\n\n /** @internal raw display text per field — always the numerals the user sees. */\n readonly hourText = signal<string>('');\n /** @internal */\n readonly minuteText = signal<string>('');\n /** @internal */\n readonly secondText = signal<string>('');\n /** @internal */\n readonly meridiem = signal<TimePickerMeridiem>('AM');\n /** @internal */\n readonly focusedField = signal<TimePickerField | null>(null);\n /** @internal */\n readonly internalValue = linkedSignal<D | null>(() => this.value());\n\n private readonly cvaDisabled = signal(false);\n private readonly describedByIdsSignal = signal<readonly string[]>([]);\n private readonly focusedSignal = signal(false);\n private readonly _ngControlRev = signal(0);\n private readonly _formSubmitRev = signal(0);\n /** When true, an effect should not rewrite field text from the external value. */\n private editing = false;\n\n private onChange: (value: D | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n // ── Derived state ──\n\n /** @internal */\n readonly isDisabled = computed(() => {\n this._ngControlRev();\n return this.disabledInput() || this.cvaDisabled() || !!this.ngControl?.disabled;\n });\n\n /** @internal */\n readonly isEmpty = computed(() => this.internalValue() === null);\n\n /** @internal Effective variant — auto-naked when wrapped in tw-form-field. */\n readonly resolvedVariant = computed<TimePickerVariant>(\n () => this.variant() ?? (this.formField ? 'naked' : 'default'),\n );\n\n /** @internal */\n readonly hourMin = computed(() => fieldMin('hour', this.format()));\n /** @internal */\n readonly hourMax = computed(() => fieldMax('hour', this.format()));\n\n /** @internal */\n readonly hourDisplay = computed(() => this.hourText());\n\n /** @internal */\n readonly hourValueNow = computed(() => {\n const n = parseField(this.hourText());\n return n === null ? null : n;\n });\n\n /** @internal */\n readonly hourValueText = computed(() => {\n const n = this.hourValueNow();\n if (n === null) return this.intl.emptyValueText;\n const meridiemLabel = this.meridiem() === 'AM' ? this.intl.amLabel : this.intl.pmLabel;\n const suffix = this.format() === '12h' ? ` ${meridiemLabel}` : '';\n return `${padTwo(n)}${suffix}`;\n });\n\n /** @internal */\n readonly minuteValueNow = computed(() => parseField(this.minuteText()));\n /** @internal */\n readonly minuteValueText = computed(() => {\n const n = this.minuteValueNow();\n return n === null ? this.intl.emptyValueText : padTwo(n);\n });\n\n /** @internal */\n readonly secondValueNow = computed(() => parseField(this.secondText()));\n /** @internal */\n readonly secondValueText = computed(() => {\n const n = this.secondValueNow();\n return n === null ? this.intl.emptyValueText : padTwo(n);\n });\n\n /** @internal */\n readonly groupAriaLabel = computed(() => this.ariaLabel() ?? this.intl.groupLabel);\n\n /** @internal Label of the currently focused field, used by stepper aria-labels. */\n readonly focusedFieldLabel = computed(() => {\n const f = this.focusedField();\n if (f === 'minute') return this.intl.minutesLabel.toLowerCase();\n if (f === 'second') return this.intl.secondsLabel.toLowerCase();\n return this.intl.hoursLabel.toLowerCase();\n });\n\n /** @internal */\n readonly describedBy = computed(() => {\n const extra = this.describedByIdsSignal();\n const user = this.userAriaDescribedByInput();\n const merged = [...extra];\n if (user) {\n for (const id of user.split(/\\s+/)) if (id) merged.push(id);\n }\n return merged.length ? merged.join(' ') : '';\n });\n\n // ── Range / error state ──\n\n private readonly rangeError = signal(false);\n\n // ── tv() output ──\n\n private readonly variantResult = computed(() =>\n timePickerVariants({\n size: this.size(),\n variant: this.resolvedVariant(),\n disabled: this.isDisabled(),\n errorState: this.errorState(),\n focused: this.focusedSignal(),\n color: this.color(),\n }),\n );\n\n /** @internal */ readonly rootClasses = computed(() => this.variantResult().root());\n /** @internal */ readonly fieldGroupClasses = computed(() => this.variantResult().fieldGroup());\n /** @internal */ readonly fieldClasses = computed(() => this.variantResult().field());\n /** @internal */ readonly separatorClasses = computed(() => this.variantResult().separator());\n /** @internal */ readonly stepperGroupClasses = computed(() => this.variantResult().stepperGroup());\n /** @internal */ readonly stepperClasses = computed(() => this.variantResult().stepper());\n /** @internal */ readonly stepperIconClasses = computed(() => this.variantResult().stepperIcon());\n /** @internal */ readonly meridiemClasses = computed(() => this.variantResult().meridiem());\n /** @internal */ readonly clearButtonClasses = computed(() => this.variantResult().clearButton());\n\n /** @internal */\n meridiemButtonClasses(which: TimePickerMeridiem): string {\n const base = this.variantResult().meridiemButton();\n const active = this.meridiem() === which;\n return active ? `${base} ${MERIDIEM_ACTIVE_COLOR[this.color()]}` : base;\n }\n\n // ── FormFieldControl impl ──\n\n /** @internal */ readonly id: Signal<string> = computed(() => this.idInput() ?? this.hostId);\n /** @internal */ readonly focused: Signal<boolean> = this.focusedSignal.asReadonly();\n /** @internal */ readonly empty: Signal<boolean> = this.isEmpty;\n /** @internal */ readonly disabled: Signal<boolean> = this.isDisabled;\n /** @internal */ readonly required: Signal<boolean> = computed(() => {\n this._ngControlRev();\n if (this.requiredInput()) return true;\n return !!this.ngControl?.control?.hasValidator(Validators.required);\n });\n /** @internal */\n readonly errorState: Signal<boolean> = computed(() => {\n this._ngControlRev();\n this._formSubmitRev();\n this.focusedSignal();\n if (this.rangeError()) return true;\n const matcher = this.errorStateMatcher() ?? this.defaultMatcher;\n const form: TwFormSubmitted | null =\n (this.parentFormGroup as TwFormSubmitted | null) ??\n (this.parentForm as TwFormSubmitted | null);\n return matcher.isErrorState(this.ngControl?.control ?? null, form);\n });\n /** @internal */ readonly controlType = 'time-picker';\n /** @internal */\n readonly userAriaDescribedBy: Signal<string | undefined> = computed(() =>\n this.userAriaDescribedByInput(),\n );\n\n // ── Constructor ──\n\n constructor() {\n super();\n\n // Re-run validation when a constraint moves, so `control.errors` reflects\n // the new bound instead of the verdict from when the value was committed.\n // `validatorOnChange` is a plain callback into Angular's validator\n // plumbing, not a signal write, so this cannot cycle.\n effect(() => {\n this.minTime();\n this.maxTime();\n untracked(() => this.validatorOnChange());\n });\n\n // Sync the field text whenever the underlying value changes (programmatic).\n effect(() => {\n const v = this.internalValue();\n const fmt = this.format();\n const showS = this.showSeconds();\n untracked(() => {\n if (this.editing) return;\n if (v === null || !this.adapter.isValid(v)) {\n this.hourText.set('');\n this.minuteText.set('');\n this.secondText.set('');\n this.rangeError.set(false);\n return;\n }\n const h24 = this.adapter.getHours(v);\n const m = this.adapter.getMinutes(v);\n const s = this.adapter.getSeconds(v);\n if (fmt === '12h') {\n this.hourText.set(padTwo(to12h(h24)));\n this.meridiem.set(h24 >= 12 ? 'PM' : 'AM');\n } else {\n this.hourText.set(padTwo(h24));\n }\n this.minuteText.set(padTwo(m));\n this.secondText.set(showS ? padTwo(s) : '');\n this.rangeError.set(!this.isInRange(v));\n });\n });\n\n // Re-render the hour text when switching format (e.g., 24h → 12h) or showSeconds.\n effect(() => {\n this.format();\n this.showSeconds();\n untracked(() => {\n const v = this.internalValue();\n if (v === null || !this.adapter.isValid(v)) return;\n const h24 = this.adapter.getHours(v);\n if (this.format() === '12h') {\n this.hourText.set(padTwo(to12h(h24)));\n this.meridiem.set(h24 >= 12 ? 'PM' : 'AM');\n } else {\n this.hourText.set(padTwo(h24));\n }\n if (this.showSeconds() && !this.secondText()) {\n this.secondText.set(padTwo(this.adapter.getSeconds(v)));\n }\n });\n });\n\n // Dev-mode warning for missing accessible name.\n afterNextRender(() => {\n if (!isDevMode()) return;\n const hasLabel =\n !!this.ariaLabel() ||\n !!this.ariaLabelledby() ||\n !!this.formField?.hasLabel();\n if (!hasLabel) {\n console.warn(\n '[tw-time-picker] The time-picker has no accessible name. Set aria-label, aria-labelledby, or wrap the component in a <tw-form-field> with a <label twLabel>.',\n );\n }\n });\n\n // Dev-mode warning for bogus steps.\n afterNextRender(() => {\n if (!isDevMode()) return;\n for (const [name, step] of [\n ['hourStep', this.hourStep()],\n ['minuteStep', this.minuteStep()],\n ['secondStep', this.secondStep()],\n ] as const) {\n if (step < 1 || !Number.isFinite(step)) {\n console.warn(\n `[tw-time-picker] ${name}=${step} is invalid. Using 1 instead.`,\n );\n }\n }\n });\n\n // Host focus tracking.\n const monitorSub = this.focusMonitor\n .monitor(this.elementRef, true)\n .subscribe((origin) => {\n const wasFocused = this.focusedSignal();\n this.focusedSignal.set(!!origin);\n if (wasFocused && !origin) {\n this.focusedField.set(null);\n this.editing = false;\n this.normalizeEmptyFields();\n this.onTouched();\n this._ngControlRev.update((n) => n + 1);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n monitorSub.unsubscribe();\n this.focusMonitor.stopMonitoring(this.elementRef);\n });\n }\n\n ngOnInit(): void {\n // Deferred NgControl resolution (see the field declaration). The value\n // accessor itself is registered statically via NG_VALUE_ACCESSOR.\n this.ngControl = this.injector.get(NgControl, null, { self: true, optional: true });\n // `isDisabled` / `required` / `errorState` read `ngControl` and saw `null`\n // until now; bump the revision so they recompute.\n this._ngControlRev.update((n) => n + 1);\n\n const ctrl = this.ngControl?.control;\n if (ctrl) {\n const streams = [ctrl.statusChanges, ctrl.valueChanges].filter(\n (s): s is NonNullable<typeof s> => !!s,\n );\n if (streams.length) {\n merge(...streams)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this._ngControlRev.update((n) => n + 1));\n }\n }\n const submit = this.parentFormGroup?.ngSubmit ?? this.parentForm?.ngSubmit;\n if (submit) {\n submit\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this._formSubmitRev.update((n) => n + 1));\n }\n }\n\n // ── Public imperative API ──\n\n /** Moves focus to the hours field. */\n focus(): void {\n this.hourInputRef().nativeElement.focus();\n }\n\n /** Clears the value and emits `timeChange` with `source: 'clear'`. */\n clear(): void {\n this.commit(null, 'clear');\n }\n\n // ── Field interactions ──\n\n /** @internal */\n onFieldFocus(field: TimePickerField): void {\n this.focusedField.set(field);\n this.editing = true;\n const el = this.getFieldEl(field);\n if (el) el.select();\n }\n\n /** @internal */\n onFieldBlur(_field: TimePickerField): void {\n this.editing = false;\n this.normalizeEmptyFields();\n }\n\n /** @internal */\n onBeforeInput(event: Event, field: TimePickerField): void {\n const evt = event as InputEvent;\n const data = evt.data ?? '';\n // Let browsers drive Backspace / Delete natively.\n if (evt.inputType === 'deleteContentBackward' || evt.inputType === 'deleteContentForward') {\n return;\n }\n // Replace default text insertion with our buffered digit logic.\n if (evt.inputType === 'insertText' && /^\\d$/.test(data)) {\n evt.preventDefault();\n this.typeDigit(field, data);\n } else if (evt.inputType === 'insertText') {\n // Reject non-digit insertions.\n evt.preventDefault();\n }\n }\n\n /** @internal Handle native delete events (Backspace/Delete). */\n onInputEvent(event: Event, field: TimePickerField): void {\n const evt = event as InputEvent;\n const el = event.target as HTMLInputElement;\n if (evt.inputType === 'deleteContentBackward' || evt.inputType === 'deleteContentForward') {\n this.editing = true;\n const currentLen = this.getFieldText(field).length;\n const nativeText = el.value.replace(/\\D/g, '').slice(0, 2);\n if (nativeText.length < currentLen || nativeText.length === 0) {\n this.setFieldText(field, nativeText);\n this.commitFromFields('input', field);\n }\n }\n }\n\n /** @internal */\n onFieldKeydown(event: KeyboardEvent, field: TimePickerField): void {\n if (this.isDisabled() || this.readonlyInput()) return;\n const key = event.key;\n\n switch (key) {\n case 'ArrowUp':\n event.preventDefault();\n this.stepField(field, 1, event.shiftKey);\n return;\n case 'ArrowDown':\n event.preventDefault();\n this.stepField(field, -1, event.shiftKey);\n return;\n case 'ArrowLeft':\n if (this.isFieldCaretAtStart(field)) {\n event.preventDefault();\n this.moveFocus(field, -1);\n }\n return;\n case 'ArrowRight':\n if (this.isFieldCaretAtEnd(field)) {\n event.preventDefault();\n this.moveFocus(field, 1);\n }\n return;\n case 'Home':\n event.preventDefault();\n this.setFieldText(field, padTwo(this.fieldMinFor(field)));\n this.commitFromFields('input', field);\n return;\n case 'End':\n event.preventDefault();\n this.setFieldText(field, padTwo(this.fieldMaxFor(field)));\n this.commitFromFields('input', field);\n return;\n case 'Delete':\n case 'Backspace':\n // Let native input drive these; `onInputEvent` syncs state.\n return;\n default:\n if (key.length === 1 && !/\\d/.test(key)) {\n event.preventDefault();\n }\n return;\n }\n }\n\n /** @internal */\n setMeridiem(m: TimePickerMeridiem): void {\n if (this.isDisabled() || this.readonlyInput()) return;\n if (this.meridiem() === m) return;\n this.meridiem.set(m);\n this.commitFromFields('meridiem', 'meridiem');\n }\n\n /** @internal */\n onMeridiemKeydown(event: KeyboardEvent, m: TimePickerMeridiem): void {\n if (this.isDisabled() || this.readonlyInput()) return;\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.setMeridiem(m === 'AM' ? 'PM' : 'AM');\n }\n }\n\n /** @internal */\n onStepperMouseDown(event: MouseEvent): void {\n // Keep focus on the current field when clicking the stepper.\n event.preventDefault();\n }\n\n /** @internal */\n onStepperClick(direction: 1 | -1): void {\n const field = this.focusedField() ?? 'hour';\n if (field === 'meridiem') {\n this.setMeridiem(this.meridiem() === 'AM' ? 'PM' : 'AM');\n return;\n }\n this.stepField(field, direction, false);\n // Restore focus to the field we stepped.\n const el = this.getFieldEl(field);\n el?.focus();\n }\n\n /** @internal */\n onClearClick(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.clear();\n }\n\n // ── Helpers ──\n\n private typeDigit(field: TimePickerField, digit: string): void {\n if (field === 'meridiem') return;\n const max = this.fieldMaxFor(field);\n const current = this.getFieldText(field);\n const next = appendDigit(current, digit, max);\n const advance = isTerminalDigit(current, digit, max) || next.length === 2;\n this.setFieldText(field, next);\n this.commitFromFields('input', field);\n if (advance) this.moveFocus(field, 1);\n }\n\n private stepField(field: TimePickerField, direction: 1 | -1, shift: boolean): void {\n if (field === 'meridiem') {\n this.setMeridiem(this.meridiem() === 'AM' ? 'PM' : 'AM');\n return;\n }\n const step = this.stepFor(field) * (shift ? 2 : 1);\n const min = this.fieldMinFor(field);\n const max = this.fieldMaxFor(field);\n const current = parseField(this.getFieldText(field)) ?? min;\n const next = stepWithWrap(current, step, direction, min, max);\n this.setFieldText(field, padTwo(next));\n this.commitFromFields('stepper', field);\n }\n\n private commitFromFields(source: TimePickerChangeSource, field: TimePickerField): void {\n const hourRaw = parseField(this.hourText());\n const minuteRaw = parseField(this.minuteText());\n const secondRaw = this.showSeconds() ? parseField(this.secondText()) : 0;\n\n this.timeInput.emit({\n field,\n rawText: field === 'meridiem' ? this.meridiem() : this.getFieldText(field),\n parsed: this.buildValueIfComplete(hourRaw, minuteRaw, secondRaw),\n });\n\n if (hourRaw === null || minuteRaw === null || (this.showSeconds() && secondRaw === null)) {\n return;\n }\n\n const h24 = this.toCanonicalHour(hourRaw);\n if (h24 === null) return;\n const base = this.resolveBaseDate();\n const next = this.adapter.withTime(base, h24, minuteRaw, this.showSeconds() ? (secondRaw ?? 0) : 0);\n if (!this.adapter.isValid(next)) return;\n\n this.commit(next, source);\n }\n\n private buildValueIfComplete(h: number | null, m: number | null, s: number | null): D | null {\n if (h === null || m === null) return null;\n if (this.showSeconds() && s === null) return null;\n const h24 = this.toCanonicalHour(h);\n if (h24 === null) return null;\n const base = this.resolveBaseDate();\n const built = this.adapter.withTime(base, h24, m, this.showSeconds() ? (s ?? 0) : 0);\n return this.adapter.isValid(built) ? built : null;\n }\n\n private toCanonicalHour(display: number): number | null {\n if (this.format() === '12h') {\n if (display < 1 || display > 12) return null;\n return from12h(display, this.meridiem());\n }\n if (display < 0 || display > 23) return null;\n return display;\n }\n\n private resolveBaseDate(): D {\n const current = this.internalValue();\n if (current !== null && this.adapter.isValid(current)) return current;\n const reference = this.referenceDate();\n if (reference !== null && this.adapter.isValid(reference)) return reference;\n return this.adapter.today();\n }\n\n private commit(next: D | null, source: TimePickerChangeSource): void {\n const previous = this.internalValue();\n this.internalValue.set(next);\n this.value.set(next);\n this.rangeError.set(next !== null ? !this.isInRange(next) : false);\n\n if (source !== 'programmatic') {\n this.onChange(next);\n this.onTouched();\n if (next === null) {\n this.liveAnnouncer.announce(this.intl.clearedAnnouncement, 'polite');\n } else {\n this.liveAnnouncer.announce(\n this.intl.selectedAnnouncement(this.formatAnnouncement(next)),\n 'polite',\n );\n }\n }\n\n this.timeChange.emit({ value: next, previousValue: previous, source });\n }\n\n private formatAnnouncement(v: D): string {\n const h24 = this.adapter.getHours(v);\n const m = this.adapter.getMinutes(v);\n const s = this.adapter.getSeconds(v);\n const secPart = this.showSeconds() ? `:${padTwo(s)}` : '';\n if (this.format() === '12h') {\n const meridiemLabel = h24 >= 12 ? this.intl.pmLabel : this.intl.amLabel;\n return `${padTwo(to12h(h24))}:${padTwo(m)}${secPart} ${meridiemLabel}`;\n }\n return `${padTwo(h24)}:${padTwo(m)}${secPart}`;\n }\n\n private isInRange(v: D): boolean {\n const min = this.minTime();\n const max = this.maxTime();\n if (!min && !max) return true;\n const vSecs = timeOfDaySeconds(\n this.adapter.getHours(v),\n this.adapter.getMinutes(v),\n this.adapter.getSeconds(v),\n );\n if (min && this.adapter.isValid(min)) {\n const minSecs = timeOfDaySeconds(\n this.adapter.getHours(min),\n this.adapter.getMinutes(min),\n this.adapter.getSeconds(min),\n );\n if (vSecs < minSecs) return false;\n }\n if (max && this.adapter.isValid(max)) {\n const maxSecs = timeOfDaySeconds(\n this.adapter.getHours(max),\n this.adapter.getMinutes(max),\n this.adapter.getSeconds(max),\n );\n if (vSecs > maxSecs) return false;\n }\n return true;\n }\n\n private normalizeEmptyFields(): void {\n // Zero-pad single-digit entries once the user leaves the component so the\n // display always settles to \"HH : MM\".\n for (const field of ['hour', 'minute', 'second'] as const) {\n if (field === 'second' && !this.showSeconds()) continue;\n const raw = this.getFieldText(field);\n if (raw.length === 1) {\n this.setFieldText(field, padTwo(Number(raw)));\n }\n }\n }\n\n private moveFocus(field: TimePickerField, direction: 1 | -1): void {\n const order: TimePickerField[] = this.showSeconds()\n ? ['hour', 'minute', 'second']\n : ['hour', 'minute'];\n const idx = order.indexOf(field);\n if (idx === -1) return;\n const nextIdx = clamp(idx + direction, 0, order.length - 1);\n if (nextIdx === idx) return;\n const el = this.getFieldEl(order[nextIdx]);\n el?.focus();\n }\n\n private isFieldCaretAtStart(field: TimePickerField): boolean {\n const el = this.getFieldEl(field);\n if (!el) return true;\n return (el.selectionStart ?? 0) === 0;\n }\n\n private isFieldCaretAtEnd(field: TimePickerField): boolean {\n const el = this.getFieldEl(field);\n if (!el) return true;\n const end = el.selectionEnd ?? 0;\n return end === el.value.length;\n }\n\n private getFieldEl(field: TimePickerField): HTMLInputElement | null {\n switch (field) {\n case 'hour':\n return this.hourInputRef().nativeElement;\n case 'minute':\n return this.minuteInputRef().nativeElement;\n case 'second':\n return this.secondInputRef()?.nativeElement ?? null;\n default:\n return null;\n }\n }\n\n private getFieldText(field: TimePickerField): string {\n switch (field) {\n case 'hour':\n return this.hourText();\n case 'minute':\n return this.minuteText();\n case 'second':\n return this.secondText();\n default:\n return '';\n }\n }\n\n private setFieldText(field: TimePickerField, next: string): void {\n this.editing = true;\n switch (field) {\n case 'hour':\n this.hourText.set(next);\n return;\n case 'minute':\n this.minuteText.set(next);\n return;\n case 'second':\n this.secondText.set(next);\n return;\n default:\n return;\n }\n }\n\n private stepFor(field: TimePickerField): number {\n switch (field) {\n case 'hour':\n return Math.max(1, Math.floor(this.hourStep()));\n case 'minute':\n return Math.max(1, Math.floor(this.minuteStep()));\n case 'second':\n return Math.max(1, Math.floor(this.secondStep()));\n default:\n return 1;\n }\n }\n\n private fieldMinFor(field: TimePickerField): number {\n if (field === 'hour') return fieldMin('hour', this.format());\n return 0;\n }\n\n private fieldMaxFor(field: TimePickerField): number {\n if (field === 'hour') return fieldMax('hour', this.format());\n return 59;\n }\n\n // ── Validator ──\n\n private validatorOnChange: () => void = () => {};\n\n /** @internal */\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value as D | null | undefined;\n if (value === null || value === undefined) return null;\n if (!this.adapter.isValid(value as D)) return null;\n\n const errors: TimePickerValidationErrors = {};\n const actualSecs = this.secondsOf(value as D);\n\n const min = this.minTime();\n if (min && this.adapter.isValid(min) && actualSecs < this.secondsOf(min)) {\n errors.timePickerMin = { min, actual: value };\n }\n const max = this.maxTime();\n if (max && this.adapter.isValid(max) && actualSecs > this.secondsOf(max)) {\n errors.timePickerMax = { max, actual: value };\n }\n\n return Object.keys(errors).length ? errors : null;\n }\n\n /** @internal */\n registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n /** Time-of-day in seconds, ignoring the date part — the same basis `isInRange` uses. */\n private secondsOf(v: D): number {\n return timeOfDaySeconds(\n this.adapter.getHours(v),\n this.adapter.getMinutes(v),\n this.adapter.getSeconds(v),\n );\n }\n\n // ── ControlValueAccessor ──\n\n writeValue(value: unknown): void {\n if (value === null || value === undefined || value === '') {\n const previous = this.internalValue();\n this.internalValue.set(null);\n this.value.set(null);\n this.rangeError.set(false);\n this.hourText.set('');\n this.minuteText.set('');\n this.secondText.set('');\n this.timeChange.emit({ value: null, previousValue: previous, source: 'programmatic' });\n return;\n }\n const coerced = this.adapter.deserialize(value);\n if (coerced === null || !this.adapter.isValid(coerced)) {\n this.internalValue.set(null);\n this.value.set(null);\n this.hourText.set('');\n this.minuteText.set('');\n this.secondText.set('');\n this.rangeError.set(true);\n return;\n }\n const previous = this.internalValue();\n this.internalValue.set(coerced);\n this.value.set(coerced);\n this.rangeError.set(!this.isInRange(coerced));\n this.timeChange.emit({ value: coerced, previousValue: previous, source: 'programmatic' });\n }\n\n registerOnChange(fn: (value: D | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // ── FormFieldControl methods ──\n\n /** @internal */\n setDescribedByIds(ids: string[]): void {\n this.describedByIdsSignal.set([...ids]);\n }\n\n /** @internal */\n onContainerClick(event: MouseEvent): void {\n if (this.isDisabled()) return;\n const target = event.target as HTMLElement | null;\n // Clicks that land on an actual field or button should settle focus naturally.\n if (target && (target.tagName === 'INPUT' || target.tagName === 'BUTTON')) return;\n this.hourInputRef().nativeElement.focus();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;AAEA;;;;;;;;;AASG;MAEU,cAAc,CAAA;;;;;IAMzB,UAAU,GAAG,MAAM;;IAGnB,UAAU,GAAG,OAAO;;IAGpB,YAAY,GAAG,SAAS;;IAGxB,YAAY,GAAG,SAAS;;IAGxB,kBAAkB,GAAG,UAAU;;IAG/B,OAAO,GAAG,IAAI;;IAGd,OAAO,GAAG,IAAI;;;;;AAOd,IAAA,aAAa,CAAC,KAAa,EAAA;QACzB,OAAO,CAAA,SAAA,EAAY,KAAK,CAAA,CAAE;IAC5B;;AAGA,IAAA,aAAa,CAAC,KAAa,EAAA;QACzB,OAAO,CAAA,SAAA,EAAY,KAAK,CAAA,CAAE;IAC5B;;IAGA,UAAU,GAAG,YAAY;;;;;IAOzB,mBAAmB,GAAG,cAAc;;AAGpC,IAAA,oBAAoB,CAAC,aAAqB,EAAA;QACxC,OAAO,CAAA,EAAG,aAAa,CAAA,SAAA,CAAW;IACpC;;IAGA,cAAc,GAAG,OAAO;uGAxDb,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAd,cAAc,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;AA4DD;;;;;;;;;;;;;;AAcG;AACG,SAAU,qBAAqB,CAAC,MAA+B,EAAA;IACnE,OAAO;AACL,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,cAAc,EAAE,EAAE,MAAM,CAAC;KAC9D;AACH;;ACeA;AAEA,MAAM,kBAAkB,GAAG,EAAE,CAC3B;AACE,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,2HAA2H;AACjI,QAAA,UAAU,EAAE,mDAAmD;AAC/D,QAAA,KAAK,EACH,mNAAmN;AACrN,QAAA,SAAS,EAAE,mCAAmC;;;;;;;;;;;;;;AAc9C,QAAA,YAAY,EAAE,mCAAmC;AACjD,QAAA,OAAO,EACL,wTAAwT;AAC1T,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,QAAQ,EACN,wFAAwF;AAC1F,QAAA,cAAc,EACZ,4PAA4P;AAC9P,QAAA,WAAW,EACT,qRAAqR;AACxR,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE;AACJ,YAAA,EAAE,EAAE;AACF,gBAAA,IAAI,EAAE,eAAe;;;;AAIrB,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,cAAc,EAAE,sBAAsB;AACvC,aAAA;AACD,YAAA,EAAE,EAAE;AACF,gBAAA,IAAI,EAAE,eAAe;;AAErB,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,cAAc,EAAE,mBAAmB;AACpC,aAAA;AACD,YAAA,EAAE,EAAE;AACF,gBAAA,IAAI,EAAE,iBAAiB;;AAEvB,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,cAAc,EAAE,mBAAmB;AACpC,aAAA;AACD,YAAA,EAAE,EAAE;AACF,gBAAA,IAAI,EAAE,mBAAmB;;AAEzB,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,cAAc,EAAE,uBAAuB;AACxC,aAAA;AACD,YAAA,EAAE,EAAE;AACF,gBAAA,IAAI,EAAE,iBAAiB;;AAEvB,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,cAAc,EAAE,qBAAqB;AACtC,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,iFAAiF;AACxF,aAAA;AACD,YAAA,KAAK,EAAE;AACL,gBAAA,IAAI,EAAE,oEAAoE;AAC3E,aAAA;AACF,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE,EAAE,IAAI,EAAE,mDAAmD,EAAE;AACnE,YAAA,KAAK,EAAE,EAAE;AACV,SAAA;QACD,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAChC,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AACnC,QAAA,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,KAAK,EAAE,EAAE;AACV,SAAA;AACF,KAAA;AACD,IAAA,gBAAgB,EAAE;AAChB,QAAA,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE;AAC9F,QAAA,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE;AAClG,QAAA,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE;AAC5F,QAAA,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE;AAChG,QAAA,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE;AACxF,QAAA,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE;AAC9F,QAAA,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE;AAC9F,QAAA,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE;AAC1F,QAAA,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE;AAC9E,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,KAAK,EAAE,SAAS;AACjB,KAAA;AACF,CAAA,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB;AAED;AACA;AACA;AACA,MAAM,qBAAqB,GAA4B;AACrD,IAAA,OAAO,EAAE,qDAAqD;AAC9D,IAAA,SAAS,EAAE,2DAA2D;AACtE,IAAA,MAAM,EAAE,kDAAkD;AAC1D,IAAA,OAAO,EAAE,sCAAsC;AAC/C,IAAA,IAAI,EAAE,4CAA4C;AAClD,IAAA,OAAO,EAAE,qDAAqD;AAC9D,IAAA,OAAO,EAAE,qDAAqD;AAC9D,IAAA,KAAK,EAAE,+CAA+C;CACvD;AAED,IAAI,gBAAgB,GAAG,CAAC;AAiOlB,MAAO,mBACX,SAAQ,gBAAmB,CAAA;;;IAMlB,OAAO,GAAG,KAAK,CAAqB,SAAS,+EAAI,KAAK,EAAE,IAAI,EAAA,CAAG;;AAG/D,IAAA,aAAa,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;AAGO,IAAA,aAAa,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;AAGO,IAAA,aAAa,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;IAGO,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAG1B,KAAK,GAAG,KAAK,CAAU,SAAS;8EAAC;;IAGjC,OAAO,GAAG,KAAK,CAAgC,SAAS;gFAAC;;IAGzD,MAAM,GAAG,KAAK,CAAmB,KAAK;+EAAC;;IAGvC,WAAW,GAAG,KAAK,CAAU,KAAK;oFAAC;;IAGnC,QAAQ,GAAG,KAAK,CAAS,CAAC;iFAAC;;IAG3B,UAAU,GAAG,KAAK,CAAS,CAAC;mFAAC;;IAG7B,UAAU,GAAG,KAAK,CAAS,CAAC;mFAAC;;IAG7B,OAAO,GAAG,KAAK,CAAW,IAAI;gFAAC;;IAG/B,OAAO,GAAG,KAAK,CAAW,IAAI;gFAAC;;IAG/B,aAAa,GAAG,KAAK,CAAW,IAAI;sFAAC;;IAGrC,WAAW,GAAG,KAAK,CAAqB,SAAS;oFAAC;;;IAIlD,YAAY,GAAG,KAAK,CAAU,IAAI;qFAAC;;;IAInC,SAAS,GAAG,KAAK,CAAU,IAAI;kFAAC;;IAGhC,UAAU,GAAG,KAAK,CAAS,YAAY;mFAAC;;IAGxC,iBAAiB,GAAG,KAAK,CAAgC,SAAS;0FAAC;;IAGnE,SAAS,GAAG,KAAK,CAAqB,SAAS,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;;IAGzE,cAAc,GAAG,KAAK,CAAqB,SAAS,sFAAI,KAAK,EAAE,iBAAiB,EAAA,CAAG;;IAGnF,wBAAwB,GAAG,KAAK,CAAqB,SAAS,gGACrE,KAAK,EAAE,kBAAkB,EAAA,CACzB;;;IAKO,KAAK,GAAG,KAAK,CAAW,IAAI;8EAAC;;;IAK7B,SAAS,GAAG,MAAM,EAA2B;;IAG7C,UAAU,GAAG,MAAM,EAA4B;;AAIvC,IAAA,OAAO,GAAG,MAAM,CAAiB,YAAY,CAAC;AAC9C,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,UAAU,GAAG,MAAM,EAAC,UAAuB,EAAC;AAC5C,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3B,SAAS,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;;;;IAK9D,SAAS,GAAqB,IAAI;IACzB,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC/C,eAAe,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAChE,IAAA,cAAc,GAAG,MAAM,CAAC,sBAAsB,CAAC;;AAG7C,IAAA,IAAI,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,cAAc,EAAE;;AAI3E,IAAA,YAAY,GAAG,SAAS,CAAC,QAAQ,CAA+B,WAAW;qFAAC;AAC5E,IAAA,cAAc,GAC7B,SAAS,CAAC,QAAQ,CAA+B,aAAa;uFAAC;IAChD,cAAc,GAC7B,SAAS,CAA+B,aAAa;uFAAC;;IAIvC,GAAG,GAAG,gBAAgB,EAAE;;AAEhC,IAAA,MAAM,GAAG,CAAA,eAAA,EAAkB,IAAI,CAAC,GAAG,EAAE;;;IAKrC,QAAQ,GAAG,MAAM,CAAS,EAAE;iFAAC;;IAE7B,UAAU,GAAG,MAAM,CAAS,EAAE;mFAAC;;IAE/B,UAAU,GAAG,MAAM,CAAS,EAAE;mFAAC;;IAE/B,QAAQ,GAAG,MAAM,CAAqB,IAAI;iFAAC;;IAE3C,YAAY,GAAG,MAAM,CAAyB,IAAI;qFAAC;;IAEnD,aAAa,GAAG,YAAY,CAAW,MAAM,IAAI,CAAC,KAAK,EAAE;sFAAC;IAElD,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;IAC3B,oBAAoB,GAAG,MAAM,CAAoB,EAAE;6FAAC;IACpD,aAAa,GAAG,MAAM,CAAC,KAAK;sFAAC;IAC7B,aAAa,GAAG,MAAM,CAAC,CAAC;sFAAC;IACzB,cAAc,GAAG,MAAM,CAAC,CAAC;uFAAC;;IAEnC,OAAO,GAAG,KAAK;AAEf,IAAA,QAAQ,GAA8B,MAAK,EAAE,CAAC;AAC9C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;;;AAK/B,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QAClC,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ;IACjF,CAAC;mFAAC;;IAGO,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI;gFAAC;;IAGvD,eAAe,GAAG,QAAQ,CACjC,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;wFAC/D;;AAGQ,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;gFAAC;;AAEzD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;gFAAC;;IAGzD,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;oFAAC;;AAG7C,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;QACpC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC;IAC9B,CAAC;qFAAC;;AAGO,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE;QAC7B,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc;QAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;AACtF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,KAAK,GAAG,IAAI,aAAa,CAAA,CAAE,GAAG,EAAE;QACjE,OAAO,CAAA,EAAG,MAAM,CAAC,CAAC,CAAC,CAAA,EAAG,MAAM,EAAE;IAChC,CAAC;sFAAC;;AAGO,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;uFAAC;;AAE9D,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE;AAC/B,QAAA,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;wFAAC;;AAGO,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;uFAAC;;AAE9D,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE;AAC/B,QAAA,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;wFAAC;;AAGO,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;uFAAC;;AAGzE,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE;QAC7B,IAAI,CAAC,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;QAC/D,IAAI,CAAC,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;QAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;IAC3C,CAAC;0FAAC;;AAGO,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,wBAAwB,EAAE;AAC5C,QAAA,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;QACzB,IAAI,IAAI,EAAE;YACR,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAAE,gBAAA,IAAI,EAAE;AAAE,oBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D;AACA,QAAA,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;IAC9C,CAAC;oFAAC;;IAIe,UAAU,GAAG,MAAM,CAAC,KAAK;mFAAC;;AAI1B,IAAA,aAAa,GAAG,QAAQ,CAAC,MACxC,kBAAkB,CAAC;AACjB,QAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,QAAA,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE;AAC/B,QAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE;AAC3B,QAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAA,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE;AAC7B,QAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;KACpB,CAAC;sFACH;AAED,qBAA0B,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE;oFAAC;AACnF,qBAA0B,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,UAAU,EAAE;0FAAC;AAC/F,qBAA0B,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE;qFAAC;AACrF,qBAA0B,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE;yFAAC;AAC7F,qBAA0B,mBAAmB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE;4FAAC;AACnG,qBAA0B,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE;uFAAC;AACzF,qBAA0B,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE;2FAAC;AACjG,qBAA0B,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE;wFAAC;AAC3F,qBAA0B,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE;2FAAC;;AAGjG,IAAA,qBAAqB,CAAC,KAAyB,EAAA;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,cAAc,EAAE;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK;AACxC,QAAA,OAAO,MAAM,GAAG,CAAA,EAAG,IAAI,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA,CAAE,GAAG,IAAI;IACzE;;AAIA,qBAA0B,EAAE,GAAmB,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM;2EAAC;qBAClE,OAAO,GAAoB,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AACpF,qBAA0B,KAAK,GAAoB,IAAI,CAAC,OAAO;AAC/D,qBAA0B,QAAQ,GAAoB,IAAI,CAAC,UAAU;AACrE,qBAA0B,QAAQ,GAAoB,QAAQ,CAAC,MAAK;QAClE,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,IAAI,CAAC,aAAa,EAAE;AAAE,YAAA,OAAO,IAAI;AACrC,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;IACrE,CAAC;iFAAC;;AAEO,IAAA,UAAU,GAAoB,QAAQ,CAAC,MAAK;QACnD,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,IAAI;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,cAAc;AAC/D,QAAA,MAAM,IAAI,GACP,IAAI,CAAC,eAA0C;YAC/C,IAAI,CAAC,UAAqC;AAC7C,QAAA,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,IAAI,EAAE,IAAI,CAAC;IACpE,CAAC;mFAAC;AACF,qBAA0B,WAAW,GAAG,aAAa;;IAE5C,mBAAmB,GAA+B,QAAQ,CAAC,MAClE,IAAI,CAAC,wBAAwB,EAAE;4FAChC;;AAID,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;;;;QAMP,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,EAAE;YACd,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC3C,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE;AAC9B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;YAChC,SAAS,CAAC,MAAK;gBACb,IAAI,IAAI,CAAC,OAAO;oBAAE;AAClB,gBAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC1C,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AACrB,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;oBAC1B;gBACF;gBACA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACpC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACpC,gBAAA,IAAI,GAAG,KAAK,KAAK,EAAE;AACjB,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;gBAC5C;qBAAO;oBACL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChC;gBACA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC3C,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACzC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,WAAW,EAAE;YAClB,SAAS,CAAC,MAAK;AACb,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE;AAC9B,gBAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBAAE;gBAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpC,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,KAAK,EAAE;AAC3B,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;gBAC5C;qBAAO;oBACL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChC;gBACA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AAC5C,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzD;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;QAGF,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,SAAS,EAAE;gBAAE;AAClB,YAAA,MAAM,QAAQ,GACZ,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE;AACvB,gBAAA,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE;YAC9B,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,OAAO,CAAC,IAAI,CACV,8JAA8J,CAC/J;YACH;AACF,QAAA,CAAC,CAAC;;QAGF,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,SAAS,EAAE;gBAAE;AAClB,YAAA,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI;AACzB,gBAAA,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7B,gBAAA,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AACjC,gBAAA,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AACzB,aAAA,EAAE;AACV,gBAAA,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBACtC,OAAO,CAAC,IAAI,CACV,CAAA,iBAAA,EAAoB,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,6BAAA,CAA+B,CAChE;gBACH;YACF;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC;AACrB,aAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI;AAC7B,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;YACvC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AAChC,YAAA,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE;AACzB,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;gBACpB,IAAI,CAAC,oBAAoB,EAAE;gBAC3B,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzC;AACF,QAAA,CAAC,CAAC;AAEJ,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,UAAU,CAAC,WAAW,EAAE;YACxB,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AACnD,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;;;QAGN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;;AAGnF,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAEvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO;QACpC,IAAI,IAAI,EAAE;YACR,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAC5D,CAAC,CAAC,KAAiC,CAAC,CAAC,CAAC,CACvC;AACD,YAAA,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClB,KAAK,CAAC,GAAG,OAAO;AACb,qBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;qBACxC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D;QACF;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ;QAC1E,IAAI,MAAM,EAAE;YACV;AACG,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;iBACxC,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D;IACF;;;IAKA,KAAK,GAAA;QACH,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;IAC3C;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;IAC5B;;;AAKA,IAAA,YAAY,CAAC,KAAsB,EAAA;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,EAAE;YAAE,EAAE,CAAC,MAAM,EAAE;IACrB;;AAGA,IAAA,WAAW,CAAC,MAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,IAAI,CAAC,oBAAoB,EAAE;IAC7B;;IAGA,aAAa,CAAC,KAAY,EAAE,KAAsB,EAAA;QAChD,MAAM,GAAG,GAAG,KAAmB;AAC/B,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE;;AAE3B,QAAA,IAAI,GAAG,CAAC,SAAS,KAAK,uBAAuB,IAAI,GAAG,CAAC,SAAS,KAAK,sBAAsB,EAAE;YACzF;QACF;;AAEA,QAAA,IAAI,GAAG,CAAC,SAAS,KAAK,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACvD,GAAG,CAAC,cAAc,EAAE;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;QAC7B;AAAO,aAAA,IAAI,GAAG,CAAC,SAAS,KAAK,YAAY,EAAE;;YAEzC,GAAG,CAAC,cAAc,EAAE;QACtB;IACF;;IAGA,YAAY,CAAC,KAAY,EAAE,KAAsB,EAAA;QAC/C,MAAM,GAAG,GAAG,KAAmB;AAC/B,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAA0B;AAC3C,QAAA,IAAI,GAAG,CAAC,SAAS,KAAK,uBAAuB,IAAI,GAAG,CAAC,SAAS,KAAK,sBAAsB,EAAE;AACzF,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM;AAClD,YAAA,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1D,YAAA,IAAI,UAAU,CAAC,MAAM,GAAG,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7D,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC;AACpC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;YACvC;QACF;IACF;;IAGA,cAAc,CAAC,KAAoB,EAAE,KAAsB,EAAA;QACzD,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;YAAE;AAC/C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;QAErB,QAAQ,GAAG;AACT,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;gBACxC;AACF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;gBACzC;AACF,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;oBACnC,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC3B;gBACA;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;oBACjC,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC1B;gBACA;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AACzD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;gBACrC;AACF,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AACzD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;gBACrC;AACF,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,WAAW;;gBAEd;AACF,YAAA;AACE,gBAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBACvC,KAAK,CAAC,cAAc,EAAE;gBACxB;gBACA;;IAEN;;AAGA,IAAA,WAAW,CAAC,CAAqB,EAAA;QAC/B,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;YAAE;AAC/C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;YAAE;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC;IAC/C;;IAGA,iBAAiB,CAAC,KAAoB,EAAE,CAAqB,EAAA;QAC3D,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;YAAE;QAC/C,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACtG,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAC5C;IACF;;AAGA,IAAA,kBAAkB,CAAC,KAAiB,EAAA;;QAElC,KAAK,CAAC,cAAc,EAAE;IACxB;;AAGA,IAAA,cAAc,CAAC,SAAiB,EAAA;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,MAAM;AAC3C,QAAA,IAAI,KAAK,KAAK,UAAU,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;YACxD;QACF;QACA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;;QAEvC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACjC,EAAE,EAAE,KAAK,EAAE;IACb;;AAGA,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC5B,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,KAAK,EAAE;IACd;;IAIQ,SAAS,CAAC,KAAsB,EAAE,KAAa,EAAA;QACrD,IAAI,KAAK,KAAK,UAAU;YAAE;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACxC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC;AAC7C,QAAA,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AACzE,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;AACrC,QAAA,IAAI,OAAO;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC;AAEQ,IAAA,SAAS,CAAC,KAAsB,EAAE,SAAiB,EAAE,KAAc,EAAA;AACzE,QAAA,IAAI,KAAK,KAAK,UAAU,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;YACxD;QACF;QACA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACnC,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG;AAC3D,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC;QAC7D,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC;IACzC;IAEQ,gBAAgB,CAAC,MAA8B,EAAE,KAAsB,EAAA;QAC7E,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;AAExE,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAClB,KAAK;AACL,YAAA,OAAO,EAAE,KAAK,KAAK,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAC1E,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;AACjE,SAAA,CAAC;AAEF,QAAA,IAAI,OAAO,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,IAAI,SAAS,KAAK,IAAI,CAAC,EAAE;YACxF;QACF;QAEA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;QACzC,IAAI,GAAG,KAAK,IAAI;YAAE;AAClB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC;QACnG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE;AAEjC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;IAC3B;AAEQ,IAAA,oBAAoB,CAAC,CAAgB,EAAE,CAAgB,EAAE,CAAgB,EAAA;AAC/E,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AACzC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpF,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI;IACnD;AAEQ,IAAA,eAAe,CAAC,OAAe,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,KAAK,EAAE;AAC3B,YAAA,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE;AAAE,gBAAA,OAAO,IAAI;YAC5C,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1C;AACA,QAAA,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE;AAAE,YAAA,OAAO,IAAI;AAC5C,QAAA,OAAO,OAAO;IAChB;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;QACpC,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,OAAO;AACrE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,IAAI,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;AAAE,YAAA,OAAO,SAAS;AAC3E,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAC7B;IAEQ,MAAM,CAAC,IAAc,EAAE,MAA8B,EAAA;AAC3D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAElE,QAAA,IAAI,MAAM,KAAK,cAAc,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC;YACtE;iBAAO;gBACL,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAC7D,QAAQ,CACT;YACH;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACxE;AAEQ,IAAA,kBAAkB,CAAC,CAAI,EAAA;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAA,CAAE,GAAG,EAAE;AACzD,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,KAAK,EAAE;YAC3B,MAAM,aAAa,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;AACvE,YAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAC,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,aAAa,EAAE;QACxE;AACA,QAAA,OAAO,CAAA,EAAG,MAAM,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAC,CAAA,EAAG,OAAO,EAAE;IAChD;AAEQ,IAAA,SAAS,CAAC,CAAI,EAAA;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;AAC7B,QAAA,MAAM,KAAK,GAAG,gBAAgB,CAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EACxB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAC1B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAC3B;QACD,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACpC,YAAA,MAAM,OAAO,GAAG,gBAAgB,CAC9B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC1B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAC7B;YACD,IAAI,KAAK,GAAG,OAAO;AAAE,gBAAA,OAAO,KAAK;QACnC;QACA,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACpC,YAAA,MAAM,OAAO,GAAG,gBAAgB,CAC9B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC1B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAC7B;YACD,IAAI,KAAK,GAAG,OAAO;AAAE,gBAAA,OAAO,KAAK;QACnC;AACA,QAAA,OAAO,IAAI;IACb;IAEQ,oBAAoB,GAAA;;;QAG1B,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAU,EAAE;YACzD,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBAAE;YAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACpC,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/C;QACF;IACF;IAEQ,SAAS,CAAC,KAAsB,EAAE,SAAiB,EAAA;AACzD,QAAA,MAAM,KAAK,GAAsB,IAAI,CAAC,WAAW;AAC/C,cAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;AAC7B,cAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;QACtB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE;AAChB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3D,IAAI,OAAO,KAAK,GAAG;YAAE;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,EAAE,EAAE,KAAK,EAAE;IACb;AAEQ,IAAA,mBAAmB,CAAC,KAAsB,EAAA;QAChD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI;QACpB,OAAO,CAAC,EAAE,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC;IACvC;AAEQ,IAAA,iBAAiB,CAAC,KAAsB,EAAA;QAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI;AACpB,QAAA,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,IAAI,CAAC;AAChC,QAAA,OAAO,GAAG,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM;IAChC;AAEQ,IAAA,UAAU,CAAC,KAAsB,EAAA;QACvC,QAAQ,KAAK;AACX,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa;AAC1C,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa;AAC5C,YAAA,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,IAAI,IAAI;AACrD,YAAA;AACE,gBAAA,OAAO,IAAI;;IAEjB;AAEQ,IAAA,YAAY,CAAC,KAAsB,EAAA;QACzC,QAAQ,KAAK;AACX,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;AACxB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA;AACE,gBAAA,OAAO,EAAE;;IAEf;IAEQ,YAAY,CAAC,KAAsB,EAAE,IAAY,EAAA;AACvD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,QAAQ,KAAK;AACX,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBACvB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBACzB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBACzB;AACF,YAAA;gBACE;;IAEN;AAEQ,IAAA,OAAO,CAAC,KAAsB,EAAA;QACpC,QAAQ,KAAK;AACX,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACjD,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACnD,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACnD,YAAA;AACE,gBAAA,OAAO,CAAC;;IAEd;AAEQ,IAAA,WAAW,CAAC,KAAsB,EAAA;QACxC,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC5D,QAAA,OAAO,CAAC;IACV;AAEQ,IAAA,WAAW,CAAC,KAAsB,EAAA;QACxC,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC5D,QAAA,OAAO,EAAE;IACX;;AAIQ,IAAA,iBAAiB,GAAe,MAAK,EAAE,CAAC;;AAGhD,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAA6B;AACnD,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;QACtD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAU,CAAC;AAAE,YAAA,OAAO,IAAI;QAElD,MAAM,MAAM,GAA+B,EAAE;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAU,CAAC;AAE7C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;QAC1B,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;YACxE,MAAM,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;QAC/C;AACA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;QAC1B,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;YACxE,MAAM,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;QAC/C;AAEA,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI;IACnD;;AAGA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;;AAGQ,IAAA,SAAS,CAAC,CAAI,EAAA;AACpB,QAAA,OAAO,gBAAgB,CACrB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EACxB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAC1B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAC3B;IACH;;AAIA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;AACzD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;YACtF;QACF;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,QAAA,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACtD,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YACzB;QACF;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAC3F;AAEA,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;;;AAKA,IAAA,iBAAiB,CAAC,GAAa,EAAA;QAC7B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACzC;;AAGA,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QAChC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B;;AAEjD,QAAA,IAAI,MAAM,KAAK,MAAM,CAAC,OAAO,KAAK,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC;YAAE;QAC3E,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;IAC3C;uGAv6BW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,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,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,wBAAA,EAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,SAAA,EAtMnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AACnD,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;;;;;;;;;;AAUD,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAzM/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;oBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AACnD,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;;;;;;;;;;AAUD,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoKT,EAAA,CAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,sBAAsB,EAAE,sBAAsB;AAC9C,wBAAA,qBAAqB,EAAE,sBAAsB;AAC7C,wBAAA,qBAAqB,EAAE,mBAAmB;AAC3C,qBAAA;AACF,iBAAA;glFA6HkF,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAEzC,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAEtB,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACzlBzD;;AAEG;;;;"}