@tekus/design-system 5.36.0 → 5.38.1

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 (77) hide show
  1. package/assets/tokens/tk-foundations.json +4 -0
  2. package/fesm2022/tekus-design-system-components-autocomplete.mjs +7 -17
  3. package/fesm2022/tekus-design-system-components-autocomplete.mjs.map +1 -1
  4. package/fesm2022/tekus-design-system-components-avatar.mjs +120 -0
  5. package/fesm2022/tekus-design-system-components-avatar.mjs.map +1 -0
  6. package/fesm2022/tekus-design-system-components-button.mjs +2 -2
  7. package/fesm2022/tekus-design-system-components-button.mjs.map +1 -1
  8. package/fesm2022/tekus-design-system-components-card.mjs +1 -1
  9. package/fesm2022/tekus-design-system-components-card.mjs.map +1 -1
  10. package/fesm2022/tekus-design-system-components-checkbox.mjs +9 -3
  11. package/fesm2022/tekus-design-system-components-checkbox.mjs.map +1 -1
  12. package/fesm2022/tekus-design-system-components-color-picker.mjs +203 -29
  13. package/fesm2022/tekus-design-system-components-color-picker.mjs.map +1 -1
  14. package/fesm2022/tekus-design-system-components-date-picker.mjs +16 -3
  15. package/fesm2022/tekus-design-system-components-date-picker.mjs.map +1 -1
  16. package/fesm2022/tekus-design-system-components-grid-container.mjs +181 -0
  17. package/fesm2022/tekus-design-system-components-grid-container.mjs.map +1 -0
  18. package/fesm2022/tekus-design-system-components-input-number.mjs +37 -3
  19. package/fesm2022/tekus-design-system-components-input-number.mjs.map +1 -1
  20. package/fesm2022/tekus-design-system-components-input-text.mjs +2 -2
  21. package/fesm2022/tekus-design-system-components-input-text.mjs.map +1 -1
  22. package/fesm2022/tekus-design-system-components-menu.mjs +2 -2
  23. package/fesm2022/tekus-design-system-components-menu.mjs.map +1 -1
  24. package/fesm2022/tekus-design-system-components-multiselect.mjs +2 -2
  25. package/fesm2022/tekus-design-system-components-multiselect.mjs.map +1 -1
  26. package/fesm2022/tekus-design-system-components-panel-menu.mjs +2 -2
  27. package/fesm2022/tekus-design-system-components-panel-menu.mjs.map +1 -1
  28. package/fesm2022/tekus-design-system-components-radio-button.mjs +9 -3
  29. package/fesm2022/tekus-design-system-components-radio-button.mjs.map +1 -1
  30. package/fesm2022/tekus-design-system-components-section.mjs +63 -0
  31. package/fesm2022/tekus-design-system-components-section.mjs.map +1 -0
  32. package/fesm2022/tekus-design-system-components-select.mjs +37 -32
  33. package/fesm2022/tekus-design-system-components-select.mjs.map +1 -1
  34. package/fesm2022/tekus-design-system-components-sidebar-layout.mjs +2 -2
  35. package/fesm2022/tekus-design-system-components-sidebar-layout.mjs.map +1 -1
  36. package/fesm2022/tekus-design-system-components-table.mjs +1 -1
  37. package/fesm2022/tekus-design-system-components-table.mjs.map +1 -1
  38. package/fesm2022/tekus-design-system-components-tabs.mjs +2 -2
  39. package/fesm2022/tekus-design-system-components-tabs.mjs.map +1 -1
  40. package/fesm2022/tekus-design-system-components-textarea.mjs +2 -2
  41. package/fesm2022/tekus-design-system-components-textarea.mjs.map +1 -1
  42. package/fesm2022/tekus-design-system-components-time-picker.mjs +13 -3
  43. package/fesm2022/tekus-design-system-components-time-picker.mjs.map +1 -1
  44. package/fesm2022/tekus-design-system-components-toggle.mjs +4 -3
  45. package/fesm2022/tekus-design-system-components-toggle.mjs.map +1 -1
  46. package/fesm2022/tekus-design-system-components-toolbar.mjs +2 -2
  47. package/fesm2022/tekus-design-system-components-toolbar.mjs.map +1 -1
  48. package/fesm2022/tekus-design-system-components-topbar.mjs +2 -2
  49. package/fesm2022/tekus-design-system-components-topbar.mjs.map +1 -1
  50. package/fesm2022/tekus-design-system-components-tree-table.mjs +94 -0
  51. package/fesm2022/tekus-design-system-components-tree-table.mjs.map +1 -0
  52. package/fesm2022/tekus-design-system-core-types.mjs +26 -10
  53. package/fesm2022/tekus-design-system-core-types.mjs.map +1 -1
  54. package/fesm2022/tekus-design-system-core.mjs +26 -10
  55. package/fesm2022/tekus-design-system-core.mjs.map +1 -1
  56. package/fesm2022/tekus-design-system-directives-gird-item.mjs +1 -1
  57. package/fesm2022/tekus-design-system-directives-gird-item.mjs.map +1 -1
  58. package/package.json +17 -1
  59. package/scss/_config.scss +242 -0
  60. package/scss/tk-bundle.scss +105 -0
  61. package/styles/variables.css +1 -0
  62. package/types/tekus-design-system-components-autocomplete.d.ts +3 -12
  63. package/types/tekus-design-system-components-avatar.d.ts +104 -0
  64. package/types/tekus-design-system-components-checkbox.d.ts +7 -1
  65. package/types/tekus-design-system-components-color-picker.d.ts +75 -12
  66. package/types/tekus-design-system-components-date-picker.d.ts +11 -1
  67. package/types/tekus-design-system-components-grid-container.d.ts +123 -0
  68. package/types/tekus-design-system-components-input-number.d.ts +35 -1
  69. package/types/tekus-design-system-components-radio-button.d.ts +7 -1
  70. package/types/tekus-design-system-components-section.d.ts +45 -0
  71. package/types/tekus-design-system-components-select.d.ts +2 -6
  72. package/types/tekus-design-system-components-time-picker.d.ts +8 -1
  73. package/types/tekus-design-system-components-toggle.d.ts +2 -1
  74. package/types/tekus-design-system-components-tree-table.d.ts +62 -0
  75. package/types/tekus-design-system-core-types.d.ts +7 -7
  76. package/types/tekus-design-system-core.d.ts +7 -7
  77. package/types/tekus-design-system-directives-gird-item.d.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tekus-design-system-components-color-picker.mjs","sources":["../../../projects/design-system/components/color-picker/src/sections/spectrum-canvas.component.ts","../../../projects/design-system/components/color-picker/src/sections/swatch-grid.component.ts","../../../projects/design-system/components/color-picker/src/color-picker.component.ts","../../../projects/design-system/components/color-picker/src/color-picker.component.html","../../../projects/design-system/components/color-picker/tekus-design-system-components-color-picker.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\n\n/**\n * @component ColorPickerSpectrumComponent\n * @description\n * Internal saturation/brightness canvas of `tk-color-picker` (NOT public API).\n * A hue-colored area with white→transparent (saturation) and\n * transparent→black (brightness) CSS overlays. Supports pointer dragging\n * (tracked on `document` so the drag can leave the area) and full keyboard\n * operation via a 2D slider pattern (arrow keys, Shift for 10% steps).\n */\n@Component({\n selector: 'tk-color-picker-spectrum',\n template: `\n <div\n class=\"tk-color-picker-spectrum__area\"\n role=\"slider\"\n tabindex=\"0\"\n [style.background]=\"hueBackground()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-valuetext]=\"valueText()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"Math.round(saturation() * 100)\"\n (pointerdown)=\"onPointerDown($event)\"\n (keydown)=\"onKeydown($event)\"\n >\n <div\n class=\"tk-color-picker-spectrum__cursor\"\n [style.left.%]=\"saturation() * 100\"\n [style.top.%]=\"(1 - brightness()) * 100\"\n [style.background]=\"color()\"\n ></div>\n </div>\n `,\n styles: `\n :host {\n display: block;\n }\n\n .tk-color-picker-spectrum__area {\n width: 100%;\n height: 6.5rem;\n border-radius: var(--tk-borderRadius-s, 0.25rem);\n position: relative;\n overflow: hidden;\n cursor: crosshair;\n touch-action: none;\n user-select: none;\n outline: none;\n }\n\n .tk-color-picker-spectrum__area::before {\n content: '';\n position: absolute;\n inset: 0;\n background: linear-gradient(to right, #fff, transparent);\n }\n\n .tk-color-picker-spectrum__area::after {\n content: '';\n position: absolute;\n inset: 0;\n background: linear-gradient(to bottom, transparent, #000);\n }\n\n .tk-color-picker-spectrum__area:focus-visible {\n box-shadow: inset 0 0 0 2px var(--tk-color-border-focus, #16006f);\n }\n\n .tk-color-picker-spectrum__cursor {\n position: absolute;\n width: 0.875rem;\n height: 0.875rem;\n border-radius: var(--tk-borderRadius-full, 50%);\n border: 2px solid var(--tk-color-background-default, #ffffff);\n box-shadow: 0 0 0 1px var(--tk-color-border-strong, #424243);\n transform: translate(-50%, -50%);\n pointer-events: none;\n z-index: 2;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorPickerSpectrumComponent {\n /** Current hue (0–360) painting the base background. */\n hue = input<number>(0);\n\n /** Current saturation (0–1) → horizontal cursor position. */\n saturation = input<number>(1);\n\n /** Current brightness/value (0–1) → vertical cursor position (inverted). */\n brightness = input<number>(1);\n\n /** Current color painted inside the cursor. */\n color = input<string>('');\n\n /** Accessible label of the 2D slider. */\n ariaLabel = input<string>('Saturation and brightness');\n\n /** Emits on every pointer/keyboard change with the new saturation/brightness pair. */\n changed = output<{ saturation: number; brightness: number }>();\n\n protected readonly Math = Math;\n protected readonly hueBackground = computed(() => `hsl(${this.hue()}, 100%, 50%)`);\n protected readonly valueText = computed(\n () =>\n `${this.ariaLabel()}: ${Math.round(this.saturation() * 100)}%, ${Math.round(this.brightness() * 100)}%`,\n );\n\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly onDragMove = (e: PointerEvent) => this.applyPointer(e);\n private readonly onDragEnd = () => this.removeDragListeners();\n\n constructor() {\n this.destroyRef.onDestroy(() => this.removeDragListeners());\n }\n\n protected onPointerDown(event: PointerEvent): void {\n event.preventDefault();\n (event.currentTarget as HTMLElement).focus();\n this.applyPointer(event);\n document.addEventListener('pointermove', this.onDragMove);\n document.addEventListener('pointerup', this.onDragEnd);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const step = event.shiftKey ? 0.1 : 0.01;\n let saturation = this.saturation();\n let brightness = this.brightness();\n\n switch (event.key) {\n case 'ArrowRight':\n saturation += step;\n break;\n case 'ArrowLeft':\n saturation -= step;\n break;\n case 'ArrowUp':\n brightness += step;\n break;\n case 'ArrowDown':\n brightness -= step;\n break;\n default:\n return;\n }\n event.preventDefault();\n this.emitClamped(saturation, brightness);\n }\n\n private applyPointer(event: PointerEvent): void {\n const area = this.elementRef.nativeElement.querySelector(\n '.tk-color-picker-spectrum__area',\n ) as HTMLElement | null;\n if (!area) {\n return;\n }\n const rect = area.getBoundingClientRect();\n this.emitClamped(\n (event.clientX - rect.left) / rect.width,\n 1 - (event.clientY - rect.top) / rect.height,\n );\n }\n\n private emitClamped(saturation: number, brightness: number): void {\n this.changed.emit({\n saturation: Math.max(0, Math.min(1, saturation)),\n brightness: Math.max(0, Math.min(1, brightness)),\n });\n }\n\n private removeDragListeners(): void {\n document.removeEventListener('pointermove', this.onDragMove);\n document.removeEventListener('pointerup', this.onDragEnd);\n }\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n/**\n * @component ColorPickerSwatchGridComponent\n * @description\n * Internal grid of color swatches of `tk-color-picker` (NOT public API).\n * Used by both the predefined palette and the custom colors sections.\n * Each swatch is a real button labelled with its hex value;\n * the currently selected color is marked with `aria-pressed`.\n */\n@Component({\n selector: 'tk-color-picker-swatch-grid',\n template: `\n <div class=\"tk-color-picker-swatch-grid__grid\" role=\"group\" [attr.aria-label]=\"ariaLabel()\">\n @for (color of colors(); track color) {\n <button\n type=\"button\"\n class=\"tk-color-picker-swatch-grid__swatch\"\n [class.tk-color-picker-swatch-grid__swatch--selected]=\"isSelected(color)\"\n [style.background-color]=\"color\"\n [attr.aria-label]=\"color\"\n [attr.aria-pressed]=\"isSelected(color)\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"picked.emit(color)\"\n ></button>\n }\n <ng-content></ng-content>\n </div>\n `,\n styles: `\n :host {\n display: block;\n }\n\n .tk-color-picker-swatch-grid__grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(1.25rem, 1fr));\n gap: var(--tk-spacing-gap-xs, 0.25rem);\n }\n\n .tk-color-picker-swatch-grid__swatch {\n appearance: none;\n padding: 0;\n width: 100%;\n aspect-ratio: 1;\n border: 1px solid var(--tk-color-border-subtle, #e4e4e4);\n border-radius: var(--tk-borderRadius-xs, 0.125rem);\n cursor: pointer;\n transition: transform 120ms ease, box-shadow 120ms ease;\n }\n\n .tk-color-picker-swatch-grid__swatch:hover {\n transform: scale(1.12);\n }\n\n .tk-color-picker-swatch-grid__swatch:focus-visible {\n outline: 2px solid var(--tk-color-border-focus, #16006f);\n outline-offset: 1px;\n }\n\n .tk-color-picker-swatch-grid__swatch--selected {\n box-shadow: 0 0 0 2px var(--tk-color-background-default, #ffffff),\n 0 0 0 4px var(--tk-color-accent-default, #6ad0bc);\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorPickerSwatchGridComponent {\n /** Hex colors to render as swatches. */\n colors = input<string[]>([]);\n\n /** Currently selected hex (normalized lowercase) to highlight. */\n selected = input<string>('');\n\n /** Accessible label of the swatch group. */\n ariaLabel = input<string>('');\n\n /** Emits the picked hex color. */\n picked = output<string>();\n\n protected isSelected(color: string): boolean {\n return color.toLowerCase() === this.selected().toLowerCase();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { MessageModule } from 'primeng/message';\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport { Subject, debounceTime } from 'rxjs';\nimport { ButtonComponent } from '@tekus/design-system/components/button';\nimport { IconComponent } from '@tekus/design-system/components/icon';\nimport { InputTextComponent } from '@tekus/design-system/components/input-text';\nimport {\n ContrastResult,\n getContrastResult,\n getContrastTextColor,\n} from '@tekus/design-system/utils/wcag-contrast';\nimport {\n ColorPickerCloseReason,\n ColorPickerSections,\n ColorPickerTexts,\n ColorPickerVariant,\n} from './color-picker.types';\nimport { ColorPickerSpectrumComponent } from './sections/spectrum-canvas.component';\nimport { ColorPickerSwatchGridComponent } from './sections/swatch-grid.component';\n\nconst HEX_REGEX = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\n\nconst DEFAULT_PRESET_COLORS: string[] = [\n '#ffffff', // white\n '#000000', // black\n '#929292', // gray\n '#ffea00', // yellow\n '#fff9ab', // light yellow\n '#0c5dbc', // blue\n '#6aa7f0', // light blue\n '#ff0000', // red\n '#ff95a2', // pink\n '#ff9f00', // orange\n '#417505', // dark green\n '#7ed321', // light green\n '#7300d9', // purple\n '#d4a4ff', // lilac\n '#50e3c2', // turquoise\n];\n\nconst DEFAULT_TEXTS: Required<ColorPickerTexts> = {\n swatchesLabel: 'Colores',\n customColorsLabel: 'Colores personalizados',\n hexLabel: 'HEX',\n contrastLabel: 'Contraste',\n contrastSampleText: 'Aa',\n contrastSampleLabel: 'Texto sobre fondo',\n contrastLowLabel: 'Bajo',\n invalidHexError: 'Hexadecimal inválido',\n requiredError: 'Este color es requerido',\n eyedropperLabel: 'Selecciona un color de la pantalla',\n addCustomColorLabel: 'Agregar color actual a colores personalizados',\n removeCustomColorLabel: 'Remover color de colores personalizados',\n openPickerLabel: 'Abrir selector de color',\n spectrumLabel: 'Saturación y brillo',\n hueLabel: 'Matiz',\n dialogLabel: 'Selector de color',\n};\n\nconst DEFAULT_SECTIONS: Required<ColorPickerSections> = {\n swatches: true,\n customColors: true,\n spectrum: true,\n hue: true,\n hex: true,\n eyedropper: true,\n contrast: true,\n};\n\ninterface EyeDropperLike {\n open(): Promise<{ sRGBHex: string }>;\n}\n\n/**\n * @component ColorPickerComponent\n * @description\n * Configurable color picker of the Tekus Design System. Renders a trigger\n * (`input` variant with editable HEX, or compact `swatch` variant) that opens\n * a PrimeNG `p-popover` composed of independently toggleable sections:\n * predefined swatches, custom colors, saturation/brightness spectrum, hue bar,\n * HEX field with EyeDropper support, WCAG contrast preview and a\n * Cancel/Accept action bar with temporary selection state.\n * Implements `ControlValueAccessor` for Reactive Forms integration.\n *\n * @usage\n * ```html\n * <tk-color-picker\n * label=\"Color\"\n * [(value)]=\"color\"\n * [contrastColor]=\"'#ffffff'\"\n * (colorChange)=\"onColor($event)\">\n * </tk-color-picker>\n * ```\n */\n@Component({\n selector: 'tk-color-picker',\n imports: [\n ButtonModule,\n InputTextModule,\n MessageModule,\n PopoverModule,\n ButtonComponent,\n IconComponent,\n InputTextComponent,\n ColorPickerSpectrumComponent,\n ColorPickerSwatchGridComponent,\n ],\n templateUrl: './color-picker.component.html',\n styleUrl: './color-picker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorPickerComponent implements ControlValueAccessor {\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly el = inject(ElementRef);\n\n private readonly init = (() => {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n })();\n\n /**\n * @property {ColorPickerVariant} variant\n * @description\n * Trigger appearance: `input` shows swatch + editable HEX + chevron,\n * `swatch` shows only swatch + chevron.\n * @default `'input'`\n */\n variant = input<ColorPickerVariant>('input');\n\n /**\n * @property {string} label\n * @description\n * Label displayed above the trigger.\n * @default `''`\n */\n label = input<string>('');\n\n /**\n * @property {string} hint\n * @description\n * Hint text displayed below the trigger (hidden while an error is shown).\n * @default `''`\n */\n hint = input<string>('');\n\n /**\n * @property {boolean} disabled\n * @description\n * Disables the trigger and the popover. Also controlled by Reactive Forms\n * via `setDisabledState`.\n * @default `false`\n */\n disabled = input<boolean>(false);\n\n /**\n * @property {boolean} required\n * @description\n * When `true`, an empty HEX field shows the required error on blur.\n * @default `false`\n */\n required = input<boolean>(false);\n\n /**\n * @property {ColorPickerSections} sections\n * @description\n * Enables/disables each popover section. Missing flags default to `true`.\n * Disabling `actionBar` switches the picker to live mode (every valid\n * change is emitted immediately).\n * @default `{}` (all sections enabled)\n */\n sections = input<ColorPickerSections>({});\n\n /**\n * @property {string[]} presetColors\n * @description\n * Colors of the predefined palette section.\n * @default Design System base palette\n */\n presetColors = input<string[]>(DEFAULT_PRESET_COLORS);\n\n /**\n * @property {string | null} contrastColor\n * @description\n * Optional override of the text color used for the WCAG contrast pair.\n * When `null` (default) the text color is resolved automatically from the\n * picked background luminance (ITU-R BT.601): black over light colors,\n * white over dark ones.\n * @default `null`\n */\n contrastColor = input<string | null>(null);\n\n /**\n * @property {number} maxCustomColors\n * @description\n * Maximum number of custom color slots. Once the list is at capacity, the\n * oldest slot is replaced using a circular buffer — the \"+\" button stays\n * visible at all times.\n * @default `18`\n */\n maxCustomColors = input<number>(18);\n\n /**\n * @property {'top' | 'bottom'} placement\n * @description\n * Preferred position of the popover relative to the trigger.\n * @default `'bottom'`\n */\n placement = input<'top' | 'bottom'>('bottom');\n\n /**\n * @property {string} errorMessage\n * @description\n * External error message that overrides the internal validation messages.\n * @default `''`\n */\n errorMessage = input<string>('');\n\n /**\n * @property {ColorPickerTexts} texts\n * @description\n * UI texts (section labels, buttons, errors). Defaults are in English so\n * consumers can localize with their own i18n solution.\n * @default `{}` (English defaults)\n */\n texts = input<ColorPickerTexts>({});\n\n /**\n * @property {ModelSignal<string>} value\n * @description\n * Confirmed color as a normalized lowercase 6-digit hex with `#`.\n * Two-way bindable.\n * @default `''`\n */\n value = model<string>('');\n\n /**\n * @property {ModelSignal<string[]>} customColors\n * @description\n * User-saved custom colors. Two-way bindable so the consumer decides\n * where to persist them.\n * @default `[]`\n */\n customColors = model<string[]>([]);\n\n /**\n * @event colorChange\n * @description\n * Emits the confirmed background hex color: on Accept (action bar mode) or\n * on every valid change (live mode / trigger HEX edit while closed). Never\n * emits invalid values, on hydration, or while disabled.\n */\n colorChange = output<string>();\n\n /**\n * @event textColorChange\n * @description\n * Emits together with `colorChange`: the ideal text color over the\n * confirmed background (`#000000` on light colors, `#ffffff` on dark ones,\n * or the `contrastColor` override when provided).\n */\n textColorChange = output<string>();\n\n /**\n * @event validChange\n * @description\n * Emits only when the validity of the HEX value changes.\n */\n validChange = output<boolean>();\n\n /**\n * @event opened\n * @description\n * Emits when the picker popover opens.\n */\n opened = output<void>();\n\n /**\n * @event closed\n * @description\n * Emits when the popover closes, with the close reason\n * (`accept` confirmed, `cancel` discarded/restored).\n */\n closed = output<ColorPickerCloseReason>();\n\n popover = viewChild<Popover>('op');\n private swatchBtnRef = viewChild('swatchBtn', { read: ElementRef });\n private inputTriggerRef = viewChild('inputTrigger', { read: ElementRef });\n private panelHexInput = viewChild('panelHexInput', { read: ElementRef });\n\n /**\n * Internal FormControl handed to the `tk-input-text` trigger so the\n * disabled state propagates through the Design System input.\n */\n protected readonly triggerControl = new FormControl('');\n\n protected readonly isOpen = signal(false);\n protected readonly hue = signal(0);\n protected readonly saturation = signal(1);\n protected readonly brightness = signal(1);\n protected readonly draftHex = signal('');\n protected readonly displayHexNoHash = signal('');\n protected readonly isValid = signal(true);\n protected readonly errorType = signal<'invalid' | 'required'>('invalid');\n private readonly cvaDisabled = signal(false);\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly resolvedSections = computed<Required<ColorPickerSections>>(() => ({\n ...DEFAULT_SECTIONS,\n ...this.sections(),\n }));\n\n protected readonly t = computed<Required<ColorPickerTexts>>(() => ({\n ...DEFAULT_TEXTS,\n ...this.texts(),\n }));\n\n /** Valid draft hex to paint swatches, or null → neutral fallback via CSS. */\n protected readonly swatchColor = computed(() => {\n const color = this.isOpen() ? this.draftHex() : this.value();\n return this.isValidHex(color) ? color : null;\n });\n\n /**\n * Text color of the contrast pair: the `contrastColor` override when valid,\n * otherwise resolved automatically from the draft background luminance.\n */\n protected readonly contrastTextColor = computed(() => {\n const override = this.contrastColor();\n if (override) {\n const norm = this.normalizeHex(override);\n if (this.isValidHex(norm)) {\n return norm;\n }\n }\n const bg = this.draftHex();\n return getContrastTextColor(this.isValidHex(bg) ? bg : '#ffffff');\n });\n\n protected readonly contrastResult = computed<ContrastResult | null>(() => {\n const bg = this.draftHex();\n if (!this.isValidHex(bg)) {\n return null;\n }\n return getContrastResult(bg, this.contrastTextColor());\n });\n\n protected readonly showContrast = computed(\n () => this.resolvedSections().contrast && this.contrastResult() !== null,\n );\n\n protected readonly eyeDropperSupported =\n typeof globalThis !== 'undefined' && 'EyeDropper' in globalThis;\n\n protected readonly showEyedropper = computed(\n () =>\n this.resolvedSections().hex &&\n this.resolvedSections().eyedropper &&\n this.eyeDropperSupported,\n );\n\n protected readonly canAddCustom = computed(() => this.isValidHex(this.draftHex()));\n\n protected readonly errorText = computed(() => {\n if (this.errorMessage()) {\n return this.errorMessage();\n }\n return this.errorType() === 'required'\n ? this.t().requiredError\n : this.t().invalidHexError;\n });\n\n protected readonly fieldId: string;\n protected readonly panelFieldId: string;\n protected readonly errorId: string;\n\n private static instanceCount = 0;\n\n private originalValue = '';\n // Circular buffer pointer: tracks the oldest slot index to replace when customColors is at capacity.\n // Starts at 0 (correct for both empty lists and backend-loaded full arrays, assuming oldest-first order).\n // Limitation: not reset when customColors is rebound externally at runtime without destroying the component.\n private readonly customColorWritePtr = signal(0);\n private readonly hexInput$ = new Subject<string>();\n\n onChange: (value: string) => void = () => {};\n onTouched: () => void = () => {};\n\n constructor() {\n ColorPickerComponent.instanceCount++;\n this.fieldId = `tk-color-picker-${ColorPickerComponent.instanceCount}`;\n this.panelFieldId = `${this.fieldId}-panel`;\n this.errorId = `${this.fieldId}-error`;\n\n effect(() => {\n const incoming = this.value();\n untracked(() => this.syncFromValue(incoming));\n });\n\n effect(() => {\n if (this.isDisabled() && this.isOpen()) {\n this.popover()?.hide();\n }\n });\n\n effect(() => {\n if (this.isDisabled()) {\n this.triggerControl.disable({ emitEvent: false });\n } else {\n this.triggerControl.enable({ emitEvent: false });\n }\n });\n\n // Sync triggerControl validity so tk-input-text shows errors natively.\n effect(() => {\n const valid = this.isValid();\n untracked(() => {\n if (valid) {\n this.triggerControl.setErrors(null);\n } else {\n this.triggerControl.setErrors({ hex: true });\n }\n });\n });\n\n this.hexInput$\n .pipe(debounceTime(200), takeUntilDestroyed(this.destroyRef))\n .subscribe((v) => this.processHexInput(v, false));\n }\n\n // ── ControlValueAccessor ────────────────────────────────────────────────\n\n /**\n * @method writeValue\n * @description Hydrates the picker from the form model without emitting.\n */\n writeValue(value: string): void {\n this.value.set(value || '');\n }\n\n /**\n * @method registerOnChange\n * @description Registers the Reactive Forms change callback.\n */\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n /**\n * @method registerOnTouched\n * @description Registers the Reactive Forms touched callback.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * @method setDisabledState\n * @description Syncs the disabled state from Reactive Forms.\n */\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // ── Popover lifecycle ───────────────────────────────────────────────────\n\n protected onTriggerClick(event: Event): void {\n if (this.isDisabled()) {\n return;\n }\n this.popover()?.toggle(event as MouseEvent, this.getAnchorEl() ?? this.el.nativeElement);\n }\n\n /** Returns the precise anchor element for popover positioning.\n * For the input variant we target the `p-floatlabel` child instead of the\n * full `tk-input-text` host. The host includes a bottom section with\n * `min-height: 1.25rem + margin-top: 0.25rem` that is invisible when empty\n * but would push the panel ~1.5rem below the visible input field.\n *\n * Coupling note: `p-floatlabel` is PrimeNG's float-label host element selector.\n * If PrimeNG renames it in a future major, the `?? host` fallback keeps\n * positioning functional (panel opens ~1.5rem lower than ideal). */\n private getAnchorEl(): HTMLElement | undefined {\n if (this.variant() === 'swatch') {\n return this.swatchBtnRef()?.nativeElement;\n }\n const host = this.inputTriggerRef()?.nativeElement as HTMLElement | undefined;\n return (host?.querySelector('p-floatlabel') as HTMLElement | null) ?? host;\n }\n\n protected onPopoverShow(): void {\n this.isOpen.set(true);\n this.originalValue = this.value();\n // Sync draft from current value\n this.syncFromValue(this.value());\n this.opened.emit();\n // PrimeNG's absolutePosition flips the panel to \"above\" when it doesn't fit\n // below, but clamps to scrollTop when there's no space above either — panel\n // ends up covering the trigger. We override the position after PrimeNG runs.\n setTimeout(() => this.fixPanelPosition(), 0);\n }\n\n private fixPanelPosition(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const container = (this.popover() as any)?.container as HTMLElement | undefined;\n if (!container) return;\n\n const anchor = this.getAnchorEl();\n if (!anchor) return;\n\n const anchorRect: DOMRect = anchor.getBoundingClientRect();\n const panelH = container.offsetHeight;\n const panelW = container.offsetWidth;\n const vH = window.innerHeight;\n const vW = window.innerWidth;\n const scrollY = window.scrollY;\n const scrollX = window.scrollX;\n\n const spaceBelow = vH - anchorRect.bottom;\n const spaceAbove = anchorRect.top;\n\n let top: number;\n if (spaceBelow >= panelH) {\n // Preferred: open below trigger\n top = anchorRect.bottom + scrollY;\n } else if (spaceAbove >= panelH) {\n // Fallback: open above trigger\n top = anchorRect.top + scrollY - panelH;\n } else {\n // Neither side fits: prefer below (scroll context), clamp to viewport edges.\n // Anchor to trigger bottom and push up only as much as needed so the panel\n // stays close to the trigger rather than jumping to the top of the page.\n const idealBelow = anchorRect.bottom + scrollY;\n const maxTop = scrollY + vH - panelH - 8;\n const minTop = scrollY + 8;\n top = Math.max(minTop, Math.min(idealBelow, maxTop));\n }\n\n let left = anchorRect.left + scrollX;\n if (left + panelW > scrollX + vW - 8) {\n left = scrollX + vW - panelW - 8;\n }\n left = Math.max(scrollX + 8, left);\n\n // Zero out PrimeNG's arrow margin so the panel sits flush with the trigger.\n container.style.margin = '0';\n container.style.top = `${top}px`;\n container.style.insetInlineStart = `${left}px`;\n }\n\n protected onPopoverHide(): void {\n this.isOpen.set(false);\n this.onTouched();\n this.triggerControl.markAsTouched();\n this.closed.emit('accept');\n }\n\n protected onPanelEnter(event: Event): void {\n this.confirmAndClose();\n (event as KeyboardEvent).preventDefault();\n event.stopPropagation();\n }\n\n private confirmAndClose(): void {\n if (!this.isValidHex(this.draftHex())) {\n return;\n }\n this.commitDraft();\n this.popover()?.hide();\n }\n\n\n // ── Draft state updates ─────────────────────────────────────────────────\n\n protected onSpectrumChange(change: { saturation: number; brightness: number }): void {\n this.saturation.set(change.saturation);\n this.brightness.set(change.brightness);\n this.applyHsv();\n }\n\n protected onHueChange(event: Event): void {\n this.hue.set(Number((event.target as HTMLInputElement).value));\n this.applyHsv();\n }\n\n protected onSwatchPick(color: string): void {\n const hex = this.normalizeHex(color);\n if (this.isValidHex(hex)) {\n this.setFromHex(hex, true);\n }\n }\n\n protected addCustomColor(): void {\n const hex = this.draftHex();\n if (!this.isValidHex(hex)) return;\n const list = this.customColors();\n if (list.some((c) => c.toLowerCase() === hex)) return;\n if (list.length >= this.maxCustomColors()) {\n // Circular buffer: replace the oldest slot (writePtr) and advance the\n // pointer. Only one cell changes per add — no grid shift.\n // Both signal mutations are kept outside update() to avoid side effects\n // inside a state-transition callback.\n const ptr = this.customColorWritePtr();\n const next = [...list];\n next[ptr] = hex;\n this.customColors.set(next);\n this.customColorWritePtr.set((ptr + 1) % this.maxCustomColors());\n } else {\n this.customColors.update((l) => [...l, hex]);\n }\n }\n\n protected isCustomColorSelected(): boolean {\n const selected = this.draftHex().toLowerCase();\n return this.customColors().some((c) => c.toLowerCase() === selected);\n }\n\n protected removeCustomColor(): void {\n const hex = this.draftHex().toLowerCase();\n this.customColors.update((list) => list.filter((c) => c.toLowerCase() !== hex));\n }\n\n protected openEyeDropper(): void {\n const ctor = (globalThis as unknown as { EyeDropper?: new () => EyeDropperLike })\n .EyeDropper;\n if (!ctor) {\n return;\n }\n new ctor()\n .open()\n .then((result) => {\n const hex = this.normalizeHex(result.sRGBHex);\n if (this.isValidHex(hex)) {\n this.setFromHex(hex, true);\n // Focus HEX input so Enter closes modal without opening eyedropper again\n setTimeout(() => {\n const inputEl = this.panelHexInput();\n if (inputEl) {\n const hexInput = inputEl.nativeElement.querySelector('input');\n if (hexInput) {\n hexInput.focus();\n }\n }\n }, 0);\n }\n })\n .catch(() => {\n // The user dismissed the eyedropper — nothing to do.\n });\n }\n\n // ── HEX input pipeline ──────────────────────────────────────────────────\n\n protected onHexInput(clean: string): void {\n this.displayHexNoHash.set(clean);\n this.hexInput$.next('#' + clean);\n }\n\n /**\n * Sanitizes typing inside a `tk-input-text` hex field (trigger or popover):\n * strips non-hex characters at the DOM level (keeping the caret behavior of\n * the native input) and feeds the shared validation pipeline.\n */\n protected onHexNativeInput(event: Event): void {\n const target = event.target as HTMLInputElement | null;\n if (!target || target.tagName !== 'INPUT') {\n return;\n }\n const clean = target.value.replace(/[^A-Fa-f0-9]/g, '').toUpperCase().slice(0, 6);\n if (clean !== target.value) {\n target.value = clean;\n }\n this.onHexInput(clean);\n }\n\n /** Blocks non-hex keypresses and enforces 6-char max before char enters the DOM. Enter confirms selection. */\n protected onHexKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n\n const hex = this.draftHex();\n if (this.isValidHex(hex)) {\n this.commitDraft();\n }\n\n // Close popover\n const pop = this.popover();\n if (pop) {\n pop.hide();\n }\n return;\n }\n\n if (event.ctrlKey || event.metaKey || event.altKey) {\n return;\n }\n const navigationKeys = [\n 'Backspace', 'Delete', 'Tab',\n 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',\n 'Home', 'End',\n ];\n if (navigationKeys.includes(event.key)) {\n return;\n }\n if (!/^[A-Fa-f0-9]$/.test(event.key)) {\n event.preventDefault();\n return;\n }\n // Enforce 6-char max: block if no selection to replace and already full\n const target = event.target as HTMLInputElement | null;\n if (target && target.tagName === 'INPUT') {\n const selectionLength = (target.selectionEnd ?? 0) - (target.selectionStart ?? 0);\n if (target.value.length >= 6 && selectionLength === 0) {\n event.preventDefault();\n }\n }\n }\n\n /** Strips non-hex chars from pasted text before it reaches the input model. */\n protected onHexPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const text = event.clipboardData?.getData('text/plain') ?? '';\n const clean = text.replace(/[^A-Fa-f0-9]/g, '').toUpperCase();\n const target = event.target as HTMLInputElement | null;\n if (!target || target.tagName !== 'INPUT') {\n return;\n }\n const start = target.selectionStart ?? 0;\n const end = target.selectionEnd ?? 0;\n const merged = (target.value.slice(0, start) + clean + target.value.slice(end)).slice(0, 6);\n target.value = merged;\n this.onHexInput(merged);\n }\n\n protected onHexBlur(): void {\n this.processHexInput('#' + this.displayHexNoHash(), true);\n this.onTouched();\n }\n\n private processHexInput(raw: string, forceNormalize: boolean): void {\n const hex = this.parseHex(raw);\n if (hex === null) {\n return;\n }\n if (this.isValidHex(hex)) {\n this.applyValidHex(hex, forceNormalize);\n } else {\n this.applyInvalidHex(hex.slice(1), forceNormalize);\n }\n }\n\n private parseHex(raw: string): string | null {\n const text = raw?.trim() ?? '';\n const body = (text.startsWith('#') ? text.slice(1) : text).trim();\n if (body.length === 0) {\n if (this.required()) {\n this.errorType.set('required');\n this.setValid(false);\n } else {\n this.setValid(true);\n }\n return null;\n }\n return ('#' + body).toLowerCase();\n }\n\n private applyValidHex(hex: string, forceNormalize: boolean): void {\n if (hex.length === 4 && !forceNormalize) {\n this.setValid(true);\n return;\n }\n const norm = this.normalizeHex(hex);\n this.setValid(true);\n if (norm !== this.draftHex()) {\n this.setFromHex(norm, true);\n } else {\n this.displayHexNoHash.set(norm.slice(1).toUpperCase());\n }\n }\n\n private applyInvalidHex(rawText: string, forceNormalize: boolean): void {\n this.errorType.set('invalid');\n const partial =\n !forceNormalize && /^[A-Fa-f0-9]*$/.test(rawText) && rawText.length <= 6;\n this.setValid(partial);\n }\n\n private setValid(value: boolean): void {\n if (this.isValid() === value) {\n return;\n }\n this.isValid.set(value);\n this.validChange.emit(value);\n }\n\n // ── Internal state helpers ──────────────────────────────────────────────\n\n private syncFromValue(incoming: string, restoring = false): void {\n if (!incoming) {\n if (restoring) {\n this.draftHex.set('');\n this.displayHexNoHash.set('');\n }\n // Validate empty color (fails if required)\n this.parseHex('');\n return;\n }\n const hex = this.normalizeHex(incoming);\n if (this.isValidHex(hex) && hex !== this.draftHex()) {\n this.setFromHex(hex, false);\n }\n }\n\n private setFromHex(hex: string, interactive: boolean): void {\n this.draftHex.set(hex);\n this.displayHexNoHash.set(hex.slice(1).toUpperCase());\n this.setValid(true);\n const hsv = this.hexToHsv(hex);\n this.hue.set(hsv.h);\n this.saturation.set(hsv.s);\n this.brightness.set(hsv.v);\n if (interactive) {\n this.maybeCommit();\n }\n }\n\n private applyHsv(): void {\n const hex = this.hsvToHex(this.hue(), this.saturation(), this.brightness());\n this.draftHex.set(hex);\n this.displayHexNoHash.set(hex.slice(1).toUpperCase());\n this.setValid(true);\n this.maybeCommit();\n }\n\n /**\n * Commits the draft color immediately (live mode).\n */\n private maybeCommit(): void {\n this.commitDraft();\n }\n\n private commitDraft(): void {\n const hex = this.draftHex();\n if (!this.isValidHex(hex) || this.isDisabled()) {\n return;\n }\n this.value.set(hex);\n this.onChange(hex);\n this.colorChange.emit(hex);\n this.textColorChange.emit(this.contrastTextColor());\n }\n\n // ── Color math ──────────────────────────────────────────────────────────\n\n private normalizeHex(value: string): string {\n if (!value?.trim()) {\n return '';\n }\n let v = value.trim();\n v = v.startsWith('#') ? v : '#' + v;\n if (/^#[A-Fa-f0-9]{3}$/.test(v)) {\n v = '#' + v[1] + v[1] + v[2] + v[2] + v[3] + v[3];\n }\n return v.toLowerCase();\n }\n\n private isValidHex(value: string): boolean {\n return HEX_REGEX.test(value);\n }\n\n private hexToHsv(hex: string): { h: number; s: number; v: number } {\n const r = Number.parseInt(hex.slice(1, 3), 16) / 255;\n const g = Number.parseInt(hex.slice(3, 5), 16) / 255;\n const b = Number.parseInt(hex.slice(5, 7), 16) / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let h = 0;\n if (delta !== 0) {\n if (max === r) {\n h = ((g - b) / delta) % 6;\n } else if (max === g) {\n h = (b - r) / delta + 2;\n } else {\n h = (r - g) / delta + 4;\n }\n h = Math.round(h * 60);\n if (h < 0) {\n h += 360;\n }\n }\n return { h, s: max === 0 ? 0 : delta / max, v: max };\n }\n\n private hsvToHex(h: number, s: number, v: number): string {\n const c = v * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = v - c;\n let r = 0;\n let g = 0;\n let b = 0;\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n const toHex = (n: number) =>\n Math.round((n + m) * 255)\n .toString(16)\n .padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n }\n}\n","<div\n class=\"tk-color-picker\"\n [class.tk-color-picker--disabled]=\"isDisabled()\"\n [class.tk-color-picker--open]=\"isOpen()\"\n [class.tk-color-picker--invalid]=\"!isValid()\">\n @if (variant() === 'swatch') {\n @if (label()) {\n <span class=\"tk-color-picker__label\">{{ label() }}</span>\n }\n <button\n #swatchBtn\n type=\"button\"\n class=\"tk-color-picker__trigger tk-color-picker__trigger--swatch\"\n [disabled]=\"isDisabled()\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-label]=\"t().openPickerLabel + (label() ? ': ' + label() : '')\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"onTriggerClick($event)\">\n <span\n class=\"tk-color-picker__swatch\"\n [class.tk-color-picker__swatch--fallback]=\"!swatchColor()\"\n [style.background-color]=\"swatchColor()\"\n aria-hidden=\"true\"></span>\n <tk-icon\n class=\"tk-color-picker__chevron\"\n [class.tk-color-picker__chevron--open]=\"isOpen()\"\n icon=\"chevron-down\"\n styleIcon=\"regular\"\n size=\"xs\"></tk-icon>\n </button>\n } @else {\n <div\n #inputTrigger\n class=\"tk-color-picker__trigger-input\"\n [class.tk-color-picker__trigger-input--invalid]=\"!isValid()\">\n @if (label()) {\n <label\n class=\"tk-color-picker__input-label\"\n [for]=\"fieldId\"\n [title]=\"label()\"\n >{{ label() }}</label\n >\n }\n <div class=\"tk-color-picker__input-wrap\">\n <button\n type=\"button\"\n class=\"tk-color-picker__input-swatch\"\n [class.tk-color-picker__input-swatch--fallback]=\"!swatchColor()\"\n [style.background-color]=\"swatchColor() ?? null\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t().openPickerLabel\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"onTriggerClick($event)\"></button>\n <span class=\"tk-color-picker__input-prefix\" aria-hidden=\"true\">#</span>\n <input\n pInputText\n [id]=\"fieldId\"\n [value]=\"displayHexNoHash()\"\n [disabled]=\"isDisabled()\"\n [class.ng-invalid]=\"triggerControl.invalid\"\n [class.ng-dirty]=\"triggerControl.dirty\"\n [class.ng-touched]=\"triggerControl.touched\"\n [attr.aria-describedby]=\"!isValid() ? errorId : null\"\n [attr.aria-invalid]=\"!isValid()\"\n autocomplete=\"off\"\n (input)=\"onHexNativeInput($event)\"\n (keydown)=\"onHexKeydown($event)\"\n (paste)=\"onHexPaste($event)\"\n (blur)=\"onHexBlur()\" />\n </div>\n <div class=\"tk-color-picker__input-bottom\">\n @if (!isValid()) {\n <p-message\n severity=\"error\"\n size=\"small\"\n variant=\"simple\"\n [id]=\"errorId\"\n >{{ errorText() }}</p-message\n >\n } @else if (hint()) {\n <p-message severity=\"secondary\" size=\"small\" variant=\"simple\">{{\n hint()\n }}</p-message>\n }\n </div>\n </div>\n }\n\n @if (variant() === 'swatch') {\n @if (!isValid()) {\n <span\n [id]=\"errorId\"\n class=\"tk-color-picker__error\"\n role=\"alert\"\n aria-live=\"polite\">\n {{ errorText() }}\n </span>\n } @else if (hint()) {\n <span class=\"tk-color-picker__hint\">{{ hint() }}</span>\n }\n }\n</div>\n\n<p-popover\n #op\n [styleClass]=\"\n 'tk-color-picker-popover' +\n (variant() === 'input' ? ' tk-color-picker-popover--input' : '')\n \"\n position=\"bottom\"\n appendTo=\"body\"\n (onShow)=\"onPopoverShow()\"\n (onHide)=\"onPopoverHide()\">\n <div\n class=\"tk-color-picker__panel\"\n role=\"group\"\n [attr.aria-label]=\"t().dialogLabel\"\n tabindex=\"-1\"\n autofocus\n (keydown.enter)=\"onPanelEnter($event)\">\n @if (resolvedSections().swatches && presetColors().length) {\n <section class=\"tk-color-picker__section\">\n <span class=\"tk-color-picker__section-label\">{{\n t().swatchesLabel\n }}</span>\n <tk-color-picker-swatch-grid\n [colors]=\"presetColors()\"\n [selected]=\"draftHex()\"\n [ariaLabel]=\"t().swatchesLabel\"\n (picked)=\"onSwatchPick($event)\" />\n </section>\n }\n\n @if (resolvedSections().customColors) {\n <section class=\"tk-color-picker__section\">\n <span class=\"tk-color-picker__section-label\">{{\n t().customColorsLabel\n }}</span>\n <tk-color-picker-swatch-grid\n [colors]=\"customColors()\"\n [selected]=\"draftHex()\"\n [ariaLabel]=\"t().customColorsLabel\"\n (picked)=\"onSwatchPick($event)\">\n @if (canAddCustom()) {\n <button\n type=\"button\"\n class=\"tk-color-picker__add-custom\"\n [attr.aria-label]=\"t().addCustomColorLabel\"\n (click)=\"addCustomColor()\">\n <tk-icon icon=\"plus\" styleIcon=\"regular\" size=\"xs\"></tk-icon>\n </button>\n }\n @if (isCustomColorSelected()) {\n <button\n type=\"button\"\n class=\"tk-color-picker__remove-custom\"\n [attr.aria-label]=\"t().removeCustomColorLabel\"\n (click)=\"removeCustomColor()\">\n −\n </button>\n }\n </tk-color-picker-swatch-grid>\n </section>\n }\n\n @if (\n resolvedSections().customColors &&\n (resolvedSections().spectrum ||\n resolvedSections().hue ||\n resolvedSections().hex)\n ) {\n <div class=\"tk-color-picker__divider\" role=\"separator\"></div>\n }\n\n @if (resolvedSections().spectrum) {\n <tk-color-picker-spectrum\n [hue]=\"hue()\"\n [saturation]=\"saturation()\"\n [brightness]=\"brightness()\"\n [color]=\"swatchColor() ?? ''\"\n [ariaLabel]=\"t().spectrumLabel\"\n (changed)=\"onSpectrumChange($event)\" />\n }\n\n @if (resolvedSections().hue) {\n <input\n class=\"tk-color-picker__hue\"\n type=\"range\"\n min=\"0\"\n max=\"360\"\n [value]=\"hue()\"\n [attr.aria-label]=\"t().hueLabel\"\n (input)=\"onHueChange($event)\" />\n }\n\n @if (\n (resolvedSections().spectrum || resolvedSections().hue) &&\n resolvedSections().hex\n ) {\n <div class=\"tk-color-picker__divider\" role=\"separator\"></div>\n }\n\n @if (resolvedSections().hex) {\n <section class=\"tk-color-picker__section tk-color-picker__hex-row\">\n <span\n class=\"tk-color-picker__swatch tk-color-picker__swatch--large\"\n [class.tk-color-picker__swatch--fallback]=\"!swatchColor()\"\n [style.background-color]=\"swatchColor()\"\n aria-hidden=\"true\"></span>\n <tk-input-text\n #panelHexInput\n class=\"tk-color-picker__panel-hex\"\n [class.tk-color-picker__trigger-input--invalid]=\"!isValid()\"\n [label]=\"t().hexLabel\"\n [id]=\"panelFieldId\"\n [value]=\"displayHexNoHash()\"\n prefixText=\"#\"\n (input)=\"onHexNativeInput($event)\"\n (keydown)=\"onHexKeydown($event)\"\n (paste)=\"onHexPaste($event)\"\n (focusout)=\"onHexBlur()\" />\n @if (showEyedropper()) {\n <tk-button\n class=\"tk-color-picker__eyedropper\"\n tabindex=\"-1\"\n severity=\"secondary\"\n variant=\"outlined\"\n icon=\"eye-dropper\"\n styleIcon=\"regular\"\n [attr.aria-label]=\"t().eyedropperLabel\"\n (clicked)=\"openEyeDropper()\">\n </tk-button>\n }\n </section>\n }\n\n @if (resolvedSections().hex && showContrast()) {\n <div class=\"tk-color-picker__divider\" role=\"separator\"></div>\n }\n\n @if (showContrast()) {\n <section class=\"tk-color-picker__section tk-color-picker__contrast\">\n <span class=\"tk-color-picker__section-label\">{{\n t().contrastLabel\n }}</span>\n <div class=\"tk-color-picker__contrast-row\">\n <span\n class=\"tk-color-picker__contrast-pill\"\n [style.background-color]=\"draftHex()\"\n [attr.aria-label]=\"t().contrastSampleLabel\">\n <span\n class=\"tk-color-picker__contrast-sample\"\n [style.color]=\"contrastTextColor()\">\n {{ t().contrastSampleText }}\n </span>\n </span>\n <div class=\"tk-color-picker__contrast-info\">\n <span class=\"tk-color-picker__contrast-label\">{{\n t().contrastSampleLabel\n }}</span>\n <span class=\"tk-color-picker__contrast-ratio\"\n >{{ contrastResult()!.ratio }}:1</span\n >\n </div>\n @switch (contrastResult()!.level) {\n @case ('AAA') {\n <span\n class=\"tk-color-picker__contrast-badge tk-color-picker__contrast-badge--aaa\"\n >AAA</span\n >\n }\n @case ('AA') {\n <span\n class=\"tk-color-picker__contrast-badge tk-color-picker__contrast-badge--aa\"\n >AA</span\n >\n }\n @case ('fail') {\n <span\n class=\"tk-color-picker__contrast-badge tk-color-picker__contrast-badge--fail\">\n {{ t().contrastLowLabel }}\n </span>\n }\n }\n </div>\n </section>\n }\n </div>\n</p-popover>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAWA;;;;;;;;AAQG;MA0EU,4BAA4B,CAAA;AAgCvC,IAAA,WAAA,GAAA;;AA9BA,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAS,CAAC,0EAAC;;AAGtB,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,CAAC,iFAAC;;AAG7B,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,CAAC,iFAAC;;AAG7B,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;;AAGzB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,2BAA2B,gFAAC;;QAGtD,IAAA,CAAA,OAAO,GAAG,MAAM,EAA8C;QAE3C,IAAA,CAAA,IAAI,GAAG,IAAI;AACX,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,EAAE,CAAA,YAAA,CAAc,oFAAC;AAC/D,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CACrC,MACE,CAAA,EAAG,IAAI,CAAC,SAAS,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG,CAAC,CAAA,CAAA,CAAG,gFAC1G;AAEgB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,UAAuB,EAAC;AAC5C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/B,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,CAAe,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACtD,IAAA,CAAA,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE;AAG3D,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7D;AAEU,IAAA,aAAa,CAAC,KAAmB,EAAA;QACzC,KAAK,CAAC,cAAc,EAAE;AACrB,QAAA,KAAK,CAAC,aAA6B,CAAC,KAAK,EAAE;AAC5C,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACxB,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC;QACzD,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC;IACxD;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;AACtC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI;AACxC,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AAClC,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AAElC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,YAAY;gBACf,UAAU,IAAI,IAAI;gBAClB;AACF,YAAA,KAAK,WAAW;gBACd,UAAU,IAAI,IAAI;gBAClB;AACF,YAAA,KAAK,SAAS;gBACZ,UAAU,IAAI,IAAI;gBAClB;AACF,YAAA,KAAK,WAAW;gBACd,UAAU,IAAI,IAAI;gBAClB;AACF,YAAA;gBACE;;QAEJ,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC;IAC1C;AAEQ,IAAA,YAAY,CAAC,KAAmB,EAAA;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CACtD,iCAAiC,CACZ;QACvB,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACzC,QAAA,IAAI,CAAC,WAAW,CACd,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EACxC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAC7C;IACH;IAEQ,WAAW,CAAC,UAAkB,EAAE,UAAkB,EAAA;AACxD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAChB,YAAA,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAChD,YAAA,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACjD,SAAA,CAAC;IACJ;IAEQ,mBAAmB,GAAA;QACzB,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC;QAC5D,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC;IAC3D;+GA7FW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvE7B;;;;;;;;;;;;;;;;;;;;;AAqBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y6BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAkDU,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAzExC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,QAAA,EAC1B;;;;;;;;;;;;;;;;;;;;;GAqBT,EAAA,eAAA,EAgDgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,y6BAAA,CAAA,EAAA;;;ACzFjD;;;;;;;AAOG;MA0DU,8BAA8B,CAAA;AAzD3C,IAAA,WAAA,GAAA;;AA2DE,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAW,EAAE,6EAAC;;AAG5B,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,EAAE,+EAAC;;AAG5B,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,EAAE,gFAAC;;QAG7B,IAAA,CAAA,MAAM,GAAG,MAAM,EAAU;AAK1B,IAAA;AAHW,IAAA,UAAU,CAAC,KAAa,EAAA;AAChC,QAAA,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE;IAC9D;+GAfW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvD/B;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAuCU,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAzD1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAAA,QAAA,EAC7B;;;;;;;;;;;;;;;;GAgBT,EAAA,eAAA,EAqCgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+wBAAA,CAAA,EAAA;;;AC1BjD,MAAM,SAAS,GAAG,oCAAoC;AAEtD,MAAM,qBAAqB,GAAa;AACtC,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,SAAS;CACV;AAED,MAAM,aAAa,GAA+B;AAChD,IAAA,aAAa,EAAE,SAAS;AACxB,IAAA,iBAAiB,EAAE,wBAAwB;AAC3C,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,aAAa,EAAE,WAAW;AAC1B,IAAA,kBAAkB,EAAE,IAAI;AACxB,IAAA,mBAAmB,EAAE,mBAAmB;AACxC,IAAA,gBAAgB,EAAE,MAAM;AACxB,IAAA,eAAe,EAAE,sBAAsB;AACvC,IAAA,aAAa,EAAE,yBAAyB;AACxC,IAAA,eAAe,EAAE,oCAAoC;AACrD,IAAA,mBAAmB,EAAE,+CAA+C;AACpE,IAAA,sBAAsB,EAAE,yCAAyC;AACjE,IAAA,eAAe,EAAE,yBAAyB;AAC1C,IAAA,aAAa,EAAE,qBAAqB;AACpC,IAAA,QAAQ,EAAE,OAAO;AACjB,IAAA,WAAW,EAAE,mBAAmB;CACjC;AAED,MAAM,gBAAgB,GAAkC;AACtD,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,QAAQ,EAAE,IAAI;CACf;AAMD;;;;;;;;;;;;;;;;;;;;AAoBG;MAkBU,oBAAoB,CAAA;aA2QhB,IAAA,CAAA,aAAa,GAAG,CAAH,CAAK;AAYjC,IAAA,WAAA,GAAA;AAtRS,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACrD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;QAEvB,IAAA,CAAA,IAAI,GAAG,CAAC,MAAK;AAC5B,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;YACrC;QACF,CAAC,GAAG;AAEJ;;;;;;AAMG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAqB,OAAO,8EAAC;AAE5C;;;;;AAKG;AACH,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AAEzB;;;;;AAKG;AACH,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,EAAE,2EAAC;AAExB;;;;;;AAMG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;AAEhC;;;;;AAKG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;AAEhC;;;;;;;AAOG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAsB,EAAE,+EAAC;AAEzC;;;;;AAKG;AACH,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAW,qBAAqB,mFAAC;AAErD;;;;;;;;AAQG;AACH,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAgB,IAAI,oFAAC;AAE1C;;;;;;;AAOG;AACH,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAS,EAAE,sFAAC;AAEnC;;;;;AAKG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAmB,QAAQ,gFAAC;AAE7C;;;;;AAKG;AACH,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,EAAE,mFAAC;AAEhC;;;;;;AAMG;AACH,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAmB,EAAE,4EAAC;AAEnC;;;;;;AAMG;AACH,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AAEzB;;;;;;AAMG;AACH,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAW,EAAE,mFAAC;AAElC;;;;;;AAMG;QACH,IAAA,CAAA,WAAW,GAAG,MAAM,EAAU;AAE9B;;;;;;AAMG;QACH,IAAA,CAAA,eAAe,GAAG,MAAM,EAAU;AAElC;;;;AAIG;QACH,IAAA,CAAA,WAAW,GAAG,MAAM,EAAW;AAE/B;;;;AAIG;QACH,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;AAEvB;;;;;AAKG;QACH,IAAA,CAAA,MAAM,GAAG,MAAM,EAA0B;AAEzC,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAU,IAAI,8EAAC;QAC1B,IAAA,CAAA,YAAY,GAAG,SAAS,CAAC,WAAW,oFAAI,IAAI,EAAE,UAAU,EAAA,CAAG;QAC3D,IAAA,CAAA,eAAe,GAAG,SAAS,CAAC,cAAc,uFAAI,IAAI,EAAE,UAAU,EAAA,CAAG;QACjE,IAAA,CAAA,aAAa,GAAG,SAAS,CAAC,eAAe,qFAAI,IAAI,EAAE,UAAU,EAAA,CAAG;AAExE;;;AAGG;AACgB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;AAEpC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK,6EAAC;AACtB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,CAAC,0EAAC;AACf,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,CAAC,iFAAC;AACtB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,CAAC,iFAAC;AACtB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,+EAAC;AACrB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,EAAE,uFAAC;AAC7B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,IAAI,8EAAC;AACtB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAyB,SAAS,gFAAC;AACvD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK,kFAAC;AAEzB,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,iFAAC;AAElE,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAgC,OAAO;AACnF,YAAA,GAAG,gBAAgB;YACnB,GAAG,IAAI,CAAC,QAAQ,EAAE;AACnB,SAAA,CAAC,uFAAC;AAEgB,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAA6B,OAAO;AACjE,YAAA,GAAG,aAAa;YAChB,GAAG,IAAI,CAAC,KAAK,EAAE;AAChB,SAAA,CAAC,wEAAC;;AAGgB,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;AAC5D,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI;AAC9C,QAAA,CAAC,kFAAC;AAEF;;;AAGG;AACgB,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACnD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;YACrC,IAAI,QAAQ,EAAE;gBACZ,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AACxC,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACzB,oBAAA,OAAO,IAAI;gBACb;YACF;AACA,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC1B,YAAA,OAAO,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;AACnE,QAAA,CAAC,wFAAC;AAEiB,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAwB,MAAK;AACvE,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;AACxB,gBAAA,OAAO,IAAI;YACb;YACA,OAAO,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACxD,QAAA,CAAC,qFAAC;QAEiB,IAAA,CAAA,YAAY,GAAG,QAAQ,CACxC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,mFACzE;QAEkB,IAAA,CAAA,mBAAmB,GACpC,OAAO,UAAU,KAAK,WAAW,IAAI,YAAY,IAAI,UAAU;QAE9C,IAAA,CAAA,cAAc,GAAG,QAAQ,CAC1C,MACE,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG;AAC3B,YAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU;YAClC,IAAI,CAAC,mBAAmB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC3B;AAEkB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,mFAAC;AAE/D,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC3C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,gBAAA,OAAO,IAAI,CAAC,YAAY,EAAE;YAC5B;AACA,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK;AAC1B,kBAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AACX,kBAAE,IAAI,CAAC,CAAC,EAAE,CAAC,eAAe;AAC9B,QAAA,CAAC,gFAAC;QAQM,IAAA,CAAA,aAAa,GAAG,EAAE;;;;AAIT,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,CAAC,0FAAC;AAC/B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAU;AAElD,QAAA,IAAA,CAAA,QAAQ,GAA4B,MAAK,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,SAAS,GAAe,MAAK,EAAE,CAAC;QAG9B,oBAAoB,CAAC,aAAa,EAAE;QACpC,IAAI,CAAC,OAAO,GAAG,CAAA,gBAAA,EAAmB,oBAAoB,CAAC,aAAa,EAAE;QACtE,IAAI,CAAC,YAAY,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,QAAQ;QAC3C,IAAI,CAAC,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,QAAQ;QAEtC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE;YAC7B,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC/C,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACtC,gBAAA,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE;YACxB;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;gBACrB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YACnD;iBAAO;gBACL,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAClD;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;YAC5B,SAAS,CAAC,MAAK;gBACb,IAAI,KAAK,EAAE;AACT,oBAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC;gBACrC;qBAAO;oBACL,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC9C;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3D,aAAA,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrD;;AAIA;;;AAGG;AACH,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC7B;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;;AAIU,IAAA,cAAc,CAAC,KAAY,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACrB;QACF;AACA,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,KAAmB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;IAC1F;AAEA;;;;;;;;AAQoE;IAC5D,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,QAAQ,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa;QAC3C;QACA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAwC;QAC7E,OAAQ,IAAI,EAAE,aAAa,CAAC,cAAc,CAAwB,IAAI,IAAI;IAC5E;IAEU,aAAa,GAAA;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE;;QAEjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;;;QAIlB,UAAU,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAC9C;IAEQ,gBAAgB,GAAA;;QAEtB,MAAM,SAAS,GAAI,IAAI,CAAC,OAAO,EAAU,EAAE,SAAoC;AAC/E,QAAA,IAAI,CAAC,SAAS;YAAE;AAEhB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;AACjC,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,UAAU,GAAY,MAAM,CAAC,qBAAqB,EAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY;AACrC,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW;AACpC,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW;AAC7B,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU;AAC5B,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;AAC9B,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;AAE9B,QAAA,MAAM,UAAU,GAAG,EAAE,GAAG,UAAU,CAAC,MAAM;AACzC,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG;AAEjC,QAAA,IAAI,GAAW;AACf,QAAA,IAAI,UAAU,IAAI,MAAM,EAAE;;AAExB,YAAA,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,OAAO;QACnC;AAAO,aAAA,IAAI,UAAU,IAAI,MAAM,EAAE;;YAE/B,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,OAAO,GAAG,MAAM;QACzC;aAAO;;;;AAIL,YAAA,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,OAAO;YAC9C,MAAM,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC;AACxC,YAAA,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC;AAC1B,YAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACtD;AAEA,QAAA,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,OAAO;QACpC,IAAI,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,CAAC,EAAE;YACpC,IAAI,GAAG,OAAO,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC;QAClC;QACA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC;;AAGlC,QAAA,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;QAC5B,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,GAAG,IAAI;QAChC,SAAS,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAA,EAAG,IAAI,IAAI;IAChD;IAEU,aAAa,GAAA;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5B;AAEU,IAAA,YAAY,CAAC,KAAY,EAAA;QACjC,IAAI,CAAC,eAAe,EAAE;QACrB,KAAuB,CAAC,cAAc,EAAE;QACzC,KAAK,CAAC,eAAe,EAAE;IACzB;IAEQ,eAAe,GAAA;QACrB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;YACrC;QACF;QACA,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE;IACxB;;AAKU,IAAA,gBAAgB,CAAC,MAAkD,EAAA;QAC3E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE;IACjB;AAEU,IAAA,WAAW,CAAC,KAAY,EAAA;AAChC,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ,EAAE;IACjB;AAEU,IAAA,YAAY,CAAC,KAAa,EAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;QAC5B;IACF;IAEU,cAAc,GAAA;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE;AAC3B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;YAAE;QAC/C,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;;;;;AAKzC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACtC,YAAA,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG;AACf,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QAClE;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9C;IACF;IAEU,qBAAqB,GAAA;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE;AAC9C,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC;IACtE;IAEU,iBAAiB,GAAA;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE;QACzC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;IACjF;IAEU,cAAc,GAAA;QACtB,MAAM,IAAI,GAAI;AACX,aAAA,UAAU;QACb,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AACA,QAAA,IAAI,IAAI;AACL,aAAA,IAAI;AACJ,aAAA,IAAI,CAAC,CAAC,MAAM,KAAI;YACf,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7C,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;;gBAE1B,UAAU,CAAC,MAAK;AACd,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;oBACpC,IAAI,OAAO,EAAE;wBACX,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC;wBAC7D,IAAI,QAAQ,EAAE;4BACZ,QAAQ,CAAC,KAAK,EAAE;wBAClB;oBACF;gBACF,CAAC,EAAE,CAAC,CAAC;YACP;AACF,QAAA,CAAC;aACA,KAAK,CAAC,MAAK;;AAEZ,QAAA,CAAC,CAAC;IACN;;AAIU,IAAA,UAAU,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;IAClC;AAEA;;;;AAIG;AACO,IAAA,gBAAgB,CAAC,KAAY,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiC;QACtD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE;YACzC;QACF;QACA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACjF,QAAA,IAAI,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE;AAC1B,YAAA,MAAM,CAAC,KAAK,GAAG,KAAK;QACtB;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;;AAGU,IAAA,YAAY,CAAC,KAAoB,EAAA;AACzC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACxB,IAAI,CAAC,WAAW,EAAE;YACpB;;AAGA,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;YAC1B,IAAI,GAAG,EAAE;gBACP,GAAG,CAAC,IAAI,EAAE;YACZ;YACA;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;YAClD;QACF;AACA,QAAA,MAAM,cAAc,GAAG;YACrB,WAAW,EAAE,QAAQ,EAAE,KAAK;AAC5B,YAAA,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW;AACjD,YAAA,MAAM,EAAE,KAAK;SACd;QACD,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACtC;QACF;QACA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACpC,KAAK,CAAC,cAAc,EAAE;YACtB;QACF;;AAEA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiC;QACtD,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE;AACxC,YAAA,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,KAAK,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC;AACjF,YAAA,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,eAAe,KAAK,CAAC,EAAE;gBACrD,KAAK,CAAC,cAAc,EAAE;YACxB;QACF;IACF;;AAGU,IAAA,UAAU,CAAC,KAAqB,EAAA;QACxC,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE;AAC7D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;AAC7D,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiC;QACtD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE;YACzC;QACF;AACA,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,IAAI,CAAC;AACxC,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC;AACpC,QAAA,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3F,QAAA,MAAM,CAAC,KAAK,GAAG,MAAM;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IACzB;IAEU,SAAS,GAAA;AACjB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC;QACzD,IAAI,CAAC,SAAS,EAAE;IAClB;IAEQ,eAAe,CAAC,GAAW,EAAE,cAAuB,EAAA;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9B,QAAA,IAAI,GAAG,KAAK,IAAI,EAAE;YAChB;QACF;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC;QACzC;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC;QACpD;IACF;AAEQ,IAAA,QAAQ,CAAC,GAAW,EAAA;QAC1B,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;QAC9B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE;AACjE,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;AAC9B,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YACtB;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrB;AACA,YAAA,OAAO,IAAI;QACb;QACA,OAAO,CAAC,GAAG,GAAG,IAAI,EAAE,WAAW,EAAE;IACnC;IAEQ,aAAa,CAAC,GAAW,EAAE,cAAuB,EAAA;QACxD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnB;QACF;QACA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;QAC7B;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACxD;IACF;IAEQ,eAAe,CAAC,OAAe,EAAE,cAAuB,EAAA;AAC9D,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7B,QAAA,MAAM,OAAO,GACX,CAAC,cAAc,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;AAC1E,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IACxB;AAEQ,IAAA,QAAQ,CAAC,KAAc,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,EAAE;YAC5B;QACF;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;;AAIQ,IAAA,aAAa,CAAC,QAAgB,EAAE,SAAS,GAAG,KAAK,EAAA;QACvD,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AACrB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B;;AAEA,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjB;QACF;QACA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;QAC7B;IACF;IAEQ,UAAU,CAAC,GAAW,EAAE,WAAoB,EAAA;AAClD,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;IAEQ,QAAQ,GAAA;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAC3E,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA;;AAEG;IACK,WAAW,GAAA;QACjB,IAAI,CAAC,WAAW,EAAE;IACpB;IAEQ,WAAW,GAAA;AACjB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YAC9C;QACF;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACrD;;AAIQ,IAAA,YAAY,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;AAClB,YAAA,OAAO,EAAE;QACX;AACA,QAAA,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE;AACpB,QAAA,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AACnC,QAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAC/B,YAAA,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnD;AACA,QAAA,OAAO,CAAC,CAAC,WAAW,EAAE;IACxB;AAEQ,IAAA,UAAU,CAAC,KAAa,EAAA;AAC9B,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAEQ,IAAA,QAAQ,CAAC,GAAW,EAAA;AAC1B,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG;AACpD,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG;AACpD,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG;AACpD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,QAAA,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG;QACvB,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,YAAA,IAAI,GAAG,KAAK,CAAC,EAAE;AACb,gBAAA,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;YAC3B;AAAO,iBAAA,IAAI,GAAG,KAAK,CAAC,EAAE;gBACpB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;YACzB;iBAAO;gBACL,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;YACzB;YACA,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,CAAC,IAAI,GAAG;YACV;QACF;QACA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACtD;AAEQ,IAAA,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;AAC9C,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,CAAC;QACT,IAAI,CAAC,GAAG,CAAC;QACT,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,IAAI,CAAC,GAAG,EAAE,EAAE;YACV,CAAC,GAAG,CAAC;YACL,CAAC,GAAG,CAAC;QACP;AAAO,aAAA,IAAI,CAAC,GAAG,GAAG,EAAE;YAClB,CAAC,GAAG,CAAC;YACL,CAAC,GAAG,CAAC;QACP;AAAO,aAAA,IAAI,CAAC,GAAG,GAAG,EAAE;YAClB,CAAC,GAAG,CAAC;YACL,CAAC,GAAG,CAAC;QACP;AAAO,aAAA,IAAI,CAAC,GAAG,GAAG,EAAE;YAClB,CAAC,GAAG,CAAC;YACL,CAAC,GAAG,CAAC;QACP;AAAO,aAAA,IAAI,CAAC,GAAG,GAAG,EAAE;YAClB,CAAC,GAAG,CAAC;YACL,CAAC,GAAG,CAAC;QACP;aAAO;YACL,CAAC,GAAG,CAAC;YACL,CAAC,GAAG,CAAC;QACP;AACA,QAAA,MAAM,KAAK,GAAG,CAAC,CAAS,KACtB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG;aACrB,QAAQ,CAAC,EAAE;AACX,aAAA,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACrB,QAAA,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE;IAC7C;+GAjzBW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,IAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAgLuB,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACJ,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACX,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpTvE,orTAkSA,EAAA,MAAA,EAAA,CAAA,8rVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED9KI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,sNACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,SAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,cAAA,EAAA,aAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,4BAA4B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,8BAA8B,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAMrB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAjBhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB;wBACP,YAAY;wBACZ,eAAe;wBACf,aAAa;wBACb,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb,kBAAkB;wBAClB,4BAA4B;wBAC5B,8BAA8B;qBAC/B,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,orTAAA,EAAA,MAAA,EAAA,CAAA,8rVAAA,CAAA,EAAA;+yDAiLlB,IAAI,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACA,WAAW,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAC9B,cAAc,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACtC,eAAe,OAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEpTzE;;AAEG;;;;"}
1
+ {"version":3,"file":"tekus-design-system-components-color-picker.mjs","sources":["../../../projects/design-system/components/color-picker/src/color-picker-registry.service.ts","../../../projects/design-system/components/color-picker/src/sections/spectrum-canvas.component.ts","../../../projects/design-system/components/color-picker/src/sections/swatch-grid.component.ts","../../../projects/design-system/components/color-picker/src/color-picker.component.ts","../../../projects/design-system/components/color-picker/src/color-picker.component.html","../../../projects/design-system/components/color-picker/tekus-design-system-components-color-picker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\ninterface RegisteredPicker {\n id: string;\n requestClose: () => void;\n}\n\n/**\n * @service ColorPickerRegistryService\n * @description\n * Coordinates mutual exclusivity between `tk-color-picker` instances mounted\n * in the same view: opening one instance requests the previously open one to\n * close (as a cancellation — no value is emitted). Transparent to consumers,\n * no public API on `ColorPickerComponent` changes because of it.\n */\n@Injectable({ providedIn: 'root' })\nexport class ColorPickerRegistryService {\n private active: RegisteredPicker | null = null;\n\n /**\n * Called from `onPopoverShow()`. If another instance is currently open,\n * asks it to close (cancel) before registering the new one as active.\n */\n requestOpen(id: string, requestClose: () => void): void {\n if (this.active && this.active.id !== id) {\n this.active.requestClose();\n }\n this.active = { id, requestClose };\n }\n\n /**\n * Called from `onPopoverHide()` and on component destroy, so a destroyed\n * or already-closed instance never lingers as the registered active one.\n */\n notifyClosed(id: string): void {\n if (this.active?.id === id) {\n this.active = null;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\n\n/**\n * @component ColorPickerSpectrumComponent\n * @description\n * Internal saturation/brightness canvas of `tk-color-picker` (NOT public API).\n * A hue-colored area with white→transparent (saturation) and\n * transparent→black (brightness) CSS overlays. Supports pointer dragging\n * (tracked on `document` so the drag can leave the area) and full keyboard\n * operation via a 2D slider pattern (arrow keys, Shift for 10% steps).\n */\n@Component({\n selector: 'tk-color-picker-spectrum',\n template: `\n <div\n class=\"tk-color-picker-spectrum__area\"\n role=\"slider\"\n tabindex=\"0\"\n [style.background]=\"hueBackground()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-valuetext]=\"valueText()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"Math.round(saturation() * 100)\"\n (pointerdown)=\"onPointerDown($event)\"\n (keydown)=\"onKeydown($event)\"\n >\n <div\n class=\"tk-color-picker-spectrum__cursor\"\n [style.left.%]=\"saturation() * 100\"\n [style.top.%]=\"(1 - brightness()) * 100\"\n [style.background]=\"color()\"\n ></div>\n </div>\n `,\n styles: `\n :host {\n display: block;\n }\n\n .tk-color-picker-spectrum__area {\n width: 100%;\n height: 6.5rem;\n border-radius: var(--tk-borderRadius-s, 0.25rem);\n position: relative;\n overflow: hidden;\n cursor: crosshair;\n touch-action: none;\n user-select: none;\n outline: none;\n }\n\n .tk-color-picker-spectrum__area::before {\n content: '';\n position: absolute;\n inset: 0;\n background: linear-gradient(to right, #fff, transparent);\n }\n\n .tk-color-picker-spectrum__area::after {\n content: '';\n position: absolute;\n inset: 0;\n background: linear-gradient(to bottom, transparent, #000);\n }\n\n .tk-color-picker-spectrum__area:focus-visible {\n box-shadow: inset 0 0 0 2px var(--tk-color-border-focus, #16006f);\n }\n\n .tk-color-picker-spectrum__cursor {\n position: absolute;\n width: 0.875rem;\n height: 0.875rem;\n border-radius: var(--tk-borderRadius-full, 50%);\n border: 2px solid var(--tk-color-background-default, #ffffff);\n box-shadow: 0 0 0 1px var(--tk-color-border-strong, #424243);\n transform: translate(-50%, -50%);\n pointer-events: none;\n z-index: 2;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorPickerSpectrumComponent {\n /** Current hue (0–360) painting the base background. */\n hue = input<number>(0);\n\n /** Current saturation (0–1) → horizontal cursor position. */\n saturation = input<number>(1);\n\n /** Current brightness/value (0–1) → vertical cursor position (inverted). */\n brightness = input<number>(1);\n\n /** Current color painted inside the cursor. */\n color = input<string>('');\n\n /** Accessible label of the 2D slider. */\n ariaLabel = input<string>('Saturation and brightness');\n\n /** Emits on every pointer/keyboard change with the new saturation/brightness pair. */\n changed = output<{ saturation: number; brightness: number }>();\n\n protected readonly Math = Math;\n protected readonly hueBackground = computed(() => `hsl(${this.hue()}, 100%, 50%)`);\n protected readonly valueText = computed(\n () =>\n `${this.ariaLabel()}: ${Math.round(this.saturation() * 100)}%, ${Math.round(this.brightness() * 100)}%`,\n );\n\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly onDragMove = (e: PointerEvent) => this.applyPointer(e);\n private readonly onDragEnd = () => this.removeDragListeners();\n\n constructor() {\n this.destroyRef.onDestroy(() => this.removeDragListeners());\n }\n\n protected onPointerDown(event: PointerEvent): void {\n event.preventDefault();\n (event.currentTarget as HTMLElement).focus();\n this.applyPointer(event);\n document.addEventListener('pointermove', this.onDragMove);\n document.addEventListener('pointerup', this.onDragEnd);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const step = event.shiftKey ? 0.1 : 0.01;\n let saturation = this.saturation();\n let brightness = this.brightness();\n\n switch (event.key) {\n case 'ArrowRight':\n saturation += step;\n break;\n case 'ArrowLeft':\n saturation -= step;\n break;\n case 'ArrowUp':\n brightness += step;\n break;\n case 'ArrowDown':\n brightness -= step;\n break;\n default:\n return;\n }\n event.preventDefault();\n this.emitClamped(saturation, brightness);\n }\n\n private applyPointer(event: PointerEvent): void {\n const area = this.elementRef.nativeElement.querySelector(\n '.tk-color-picker-spectrum__area',\n ) as HTMLElement | null;\n if (!area) {\n return;\n }\n const rect = area.getBoundingClientRect();\n this.emitClamped(\n (event.clientX - rect.left) / rect.width,\n 1 - (event.clientY - rect.top) / rect.height,\n );\n }\n\n private emitClamped(saturation: number, brightness: number): void {\n this.changed.emit({\n saturation: Math.max(0, Math.min(1, saturation)),\n brightness: Math.max(0, Math.min(1, brightness)),\n });\n }\n\n private removeDragListeners(): void {\n document.removeEventListener('pointermove', this.onDragMove);\n document.removeEventListener('pointerup', this.onDragEnd);\n }\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n/**\n * @component ColorPickerSwatchGridComponent\n * @description\n * Internal grid of color swatches of `tk-color-picker` (NOT public API).\n * Used by both the predefined palette and the custom colors sections.\n * Each swatch is a real button labelled with its hex value;\n * the currently selected color is marked with `aria-pressed`.\n */\n@Component({\n selector: 'tk-color-picker-swatch-grid',\n template: `\n <div class=\"tk-color-picker-swatch-grid__grid\" role=\"group\" [attr.aria-label]=\"ariaLabel()\">\n @for (color of colors(); track color) {\n <button\n type=\"button\"\n class=\"tk-color-picker-swatch-grid__swatch\"\n [class.tk-color-picker-swatch-grid__swatch--selected]=\"isSelected(color)\"\n [style.background-color]=\"color\"\n [attr.aria-label]=\"color\"\n [attr.aria-pressed]=\"isSelected(color)\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"picked.emit(color)\"\n ></button>\n }\n <ng-content></ng-content>\n </div>\n `,\n styles: `\n :host {\n display: block;\n }\n\n .tk-color-picker-swatch-grid__grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(1.25rem, 1fr));\n gap: var(--tk-spacing-gap-xs, 0.25rem);\n }\n\n .tk-color-picker-swatch-grid__swatch {\n appearance: none;\n padding: 0;\n width: 100%;\n aspect-ratio: 1;\n border: 1px solid var(--tk-color-border-subtle, #e4e4e4);\n border-radius: var(--tk-borderRadius-xs, 0.125rem);\n cursor: pointer;\n transition: transform 120ms ease, box-shadow 120ms ease;\n }\n\n .tk-color-picker-swatch-grid__swatch:hover {\n transform: scale(1.12);\n }\n\n .tk-color-picker-swatch-grid__swatch:focus-visible {\n outline: 2px solid var(--tk-color-border-focus, #16006f);\n outline-offset: 1px;\n }\n\n .tk-color-picker-swatch-grid__swatch--selected {\n box-shadow: 0 0 0 2px var(--tk-color-background-default, #ffffff),\n 0 0 0 4px var(--tk-color-accent-default, #6ad0bc);\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorPickerSwatchGridComponent {\n /** Hex colors to render as swatches. */\n colors = input<string[]>([]);\n\n /** Currently selected hex (normalized lowercase) to highlight. */\n selected = input<string>('');\n\n /** Accessible label of the swatch group. */\n ariaLabel = input<string>('');\n\n /** Emits the picked hex color. */\n picked = output<string>();\n\n protected isSelected(color: string): boolean {\n return color.toLowerCase() === this.selected().toLowerCase();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { MessageModule } from 'primeng/message';\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport { Subject, debounceTime } from 'rxjs';\nimport { ButtonComponent } from '@tekus/design-system/components/button';\nimport { IconComponent } from '@tekus/design-system/components/icon';\nimport { InputTextComponent } from '@tekus/design-system/components/input-text';\nimport {\n ContrastResult,\n getContrastResult,\n getContrastTextColor,\n} from '@tekus/design-system/utils/wcag-contrast';\nimport {\n ColorPickerCloseReason,\n ColorPickerEmitMode,\n ColorPickerSections,\n ColorPickerTexts,\n ColorPickerVariant,\n} from './color-picker.types';\nimport { ColorPickerRegistryService } from './color-picker-registry.service';\nimport { ColorPickerSpectrumComponent } from './sections/spectrum-canvas.component';\nimport { ColorPickerSwatchGridComponent } from './sections/swatch-grid.component';\n\nconst HEX_REGEX = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\n\nconst DEFAULT_PRESET_COLORS: string[] = [\n '#ffffff', // white\n '#000000', // black\n '#929292', // gray\n '#ffea00', // yellow\n '#fff9ab', // light yellow\n '#0c5dbc', // blue\n '#6aa7f0', // light blue\n '#ff0000', // red\n '#ff95a2', // pink\n '#ff9f00', // orange\n '#417505', // dark green\n '#7ed321', // light green\n '#7300d9', // purple\n '#d4a4ff', // lilac\n '#50e3c2', // turquoise\n];\n\nconst DEFAULT_TEXTS: Required<ColorPickerTexts> = {\n swatchesLabel: 'Colores',\n customColorsLabel: 'Colores personalizados',\n hexLabel: 'HEX',\n contrastLabel: 'Contraste',\n contrastSampleText: 'Aa',\n contrastSampleLabel: 'Texto sobre fondo',\n contrastLowLabel: 'Bajo',\n invalidHexError: 'Hexadecimal inválido',\n requiredError: 'Este color es requerido',\n eyedropperLabel: 'Selecciona un color de la pantalla',\n addCustomColorLabel: 'Agregar color actual a colores personalizados',\n removeCustomColorLabel: 'Remover color de colores personalizados',\n openPickerLabel: 'Abrir selector de color',\n spectrumLabel: 'Saturación y brillo',\n hueLabel: 'Matiz',\n dialogLabel: 'Selector de color',\n};\n\nconst DEFAULT_SECTIONS: Required<ColorPickerSections> = {\n swatches: true,\n customColors: true,\n spectrum: true,\n hue: true,\n hex: true,\n eyedropper: true,\n contrast: true,\n};\n\ninterface EyeDropperLike {\n open(): Promise<{ sRGBHex: string }>;\n}\n\n/**\n * @component ColorPickerComponent\n * @description\n * Configurable color picker of the Tekus Design System. Renders a trigger\n * (`input` variant with editable HEX, or compact `swatch` variant) that opens\n * a PrimeNG `p-popover` composed of independently toggleable sections:\n * predefined swatches, custom colors, saturation/brightness spectrum, hue bar,\n * HEX field with EyeDropper support, WCAG contrast preview and a\n * Cancel/Accept action bar with temporary selection state.\n * Implements `ControlValueAccessor` for Reactive Forms integration.\n *\n * @usage\n * ```html\n * <tk-color-picker\n * label=\"Color\"\n * [(value)]=\"color\"\n * [contrastColor]=\"'#ffffff'\"\n * (colorChange)=\"onColor($event)\">\n * </tk-color-picker>\n * ```\n */\n@Component({\n selector: 'tk-color-picker',\n imports: [\n ButtonModule,\n InputTextModule,\n MessageModule,\n PopoverModule,\n ButtonComponent,\n IconComponent,\n InputTextComponent,\n ColorPickerSpectrumComponent,\n ColorPickerSwatchGridComponent,\n ],\n templateUrl: './color-picker.component.html',\n styleUrl: './color-picker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorPickerComponent implements ControlValueAccessor {\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly el = inject(ElementRef);\n private readonly registry = inject(ColorPickerRegistryService);\n\n private readonly init = (() => {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n })();\n\n /**\n * @property {ColorPickerVariant} variant\n * @description\n * Trigger appearance: `input` shows swatch + editable HEX + chevron,\n * `swatch` shows only swatch + chevron.\n * @default `'input'`\n */\n variant = input<ColorPickerVariant>('input');\n\n /**\n * @property {string} label\n * @description\n * Label displayed above the trigger.\n * @default `''`\n */\n label = input<string>('');\n\n /**\n * @property {string} hint\n * @description\n * Hint text displayed below the trigger (hidden while an error is shown).\n * @default `''`\n */\n hint = input<string>('');\n\n /**\n * @property {boolean} disabled\n * @description\n * Disables the trigger and the popover. Also controlled by Reactive Forms\n * via `setDisabledState`.\n * @default `false`\n */\n disabled = input<boolean>(false);\n\n /**\n * @property {boolean} required\n * @description\n * When `true`, an empty HEX field shows the required error on blur.\n * @default `false`\n */\n required = input<boolean>(false);\n\n /**\n * @property {ColorPickerSections} sections\n * @description\n * Enables/disables each popover section. Missing flags default to `true`.\n * Disabling `actionBar` switches the picker to live mode (every valid\n * change is emitted immediately).\n * @default `{}` (all sections enabled)\n */\n sections = input<ColorPickerSections>({});\n\n /**\n * @property {string[]} presetColors\n * @description\n * Colors of the predefined palette section.\n * @default Design System base palette\n */\n presetColors = input<string[]>(DEFAULT_PRESET_COLORS);\n\n /**\n * @property {string | null} contrastColor\n * @description\n * Optional override of the text color used for the WCAG contrast pair.\n * When `null` (default) the text color is resolved automatically from the\n * picked background luminance (ITU-R BT.601): black over light colors,\n * white over dark ones.\n * @default `null`\n */\n contrastColor = input<string | null>(null);\n\n /**\n * @property {number} maxCustomColors\n * @description\n * Maximum number of custom color slots. Once the list is at capacity, the\n * oldest slot is replaced using a circular buffer — the \"+\" button stays\n * visible at all times.\n * @default `18`\n */\n maxCustomColors = input<number>(18);\n\n /**\n * @property {'top' | 'bottom'} placement\n * @description\n * Preferred position of the popover relative to the trigger.\n * @default `'bottom'`\n */\n placement = input<'top' | 'bottom'>('bottom');\n\n /**\n * @property {string} errorMessage\n * @description\n * External error message that overrides the internal validation messages.\n * @default `''`\n */\n errorMessage = input<string>('');\n\n /**\n * @property {ColorPickerEmitMode} emitMode\n * @description\n * Emission strategy for `colorChange`/`textColorChange`/`value`:\n * `'live'` emits on every valid draft change (default, unchanged behavior).\n * `'onClose'` emits once, with the final value, only when the popover\n * closes by confirmation (Enter / click-outside) — Escape, or being closed\n * by another `tk-color-picker` instance opening in the same view, never\n * emits.\n *\n * Exception: editing the trigger HEX field directly while the popover is\n * closed (`variant=\"input\"`) has no popover session to defer to, so under\n * `'onClose'` it commits on its own equivalent of \"close\" — Enter, or\n * losing focus (blur) — not on every debounce tick while still typing.\n * This avoids firing on each momentarily-complete-looking HEX mid-edit,\n * which matters when `colorChange` is wired straight to an API call.\n * @default `'live'`\n */\n emitMode = input<ColorPickerEmitMode>('live');\n\n /**\n * @property {ColorPickerTexts} texts\n * @description\n * UI texts (section labels, buttons, errors). Defaults are in English so\n * consumers can localize with their own i18n solution.\n * @default `{}` (English defaults)\n */\n texts = input<ColorPickerTexts>({});\n\n /**\n * @property {ModelSignal<string>} value\n * @description\n * Confirmed color as a normalized lowercase 6-digit hex with `#`.\n * Two-way bindable.\n * @default `''`\n */\n value = model<string>('');\n\n /**\n * @property {ModelSignal<string[]>} customColors\n * @description\n * User-saved custom colors. Two-way bindable so the consumer decides\n * where to persist them.\n * @default `[]`\n */\n customColors = model<string[]>([]);\n\n /**\n * @event colorChange\n * @description\n * Emits the confirmed background hex color. Timing depends on `emitMode()`:\n * `'live'` emits on every valid change (drag, keystroke, swatch pick, or\n * trigger HEX edit while closed); `'onClose'` emits once, with the final\n * value, only when the popover closes by confirmation (Enter /\n * click-outside). Never emits on Escape, when another instance forces this\n * one to close, on invalid values, on hydration, or while disabled. Always\n * emitted together with `textColorChange` in the same synchronous call, so\n * both values belong to the same commit.\n */\n colorChange = output<string>();\n\n /**\n * @event textColorChange\n * @description\n * Emits together with `colorChange`, same timing, same commit: the ideal\n * text color over the confirmed background (`#000000` on light colors,\n * `#ffffff` on dark ones, or the `contrastColor` override when provided).\n */\n textColorChange = output<string>();\n\n /**\n * @event validChange\n * @description\n * Emits only when the validity of the HEX value changes.\n */\n validChange = output<boolean>();\n\n /**\n * @event opened\n * @description\n * Emits when the picker popover opens.\n */\n opened = output<void>();\n\n /**\n * @event closed\n * @description\n * Emits when the popover closes, with the close reason\n * (`accept` confirmed, `cancel` discarded/restored).\n */\n closed = output<ColorPickerCloseReason>();\n\n popover = viewChild<Popover>('op');\n private swatchBtnRef = viewChild('swatchBtn', { read: ElementRef });\n private inputTriggerRef = viewChild('inputTrigger', { read: ElementRef });\n private panelHexInput = viewChild('panelHexInput', { read: ElementRef });\n\n /**\n * Internal FormControl handed to the `tk-input-text` trigger so the\n * disabled state propagates through the Design System input.\n */\n protected readonly triggerControl = new FormControl('');\n\n protected readonly isOpen = signal(false);\n protected readonly hue = signal(0);\n protected readonly saturation = signal(1);\n protected readonly brightness = signal(1);\n protected readonly draftHex = signal('');\n protected readonly displayHexNoHash = signal('');\n protected readonly isValid = signal(true);\n protected readonly errorType = signal<'invalid' | 'required'>('invalid');\n private readonly cvaDisabled = signal(false);\n\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected readonly resolvedSections = computed<Required<ColorPickerSections>>(() => ({\n ...DEFAULT_SECTIONS,\n ...this.sections(),\n }));\n\n protected readonly t = computed<Required<ColorPickerTexts>>(() => ({\n ...DEFAULT_TEXTS,\n ...this.texts(),\n }));\n\n /** Valid draft hex to paint swatches, or null → neutral fallback via CSS. */\n /**\n * Always reflects `draftHex()`, not `value()` — independent of `emitMode`\n * and of whether the popover is open. `draftHex` tracks every keystroke\n * (trigger or panel HEX field, spectrum/hue/swatch picks) in real time, so\n * the swatch gives immediate visual feedback while the user is still\n * typing, even under `emitMode=\"onClose\"` where the actual commit/emit is\n * deferred to Enter/blur/click-outside.\n */\n protected readonly swatchColor = computed(() => {\n const color = this.draftHex();\n return this.isValidHex(color) ? color : null;\n });\n\n /**\n * Text color of the contrast pair: the `contrastColor` override when valid,\n * otherwise resolved automatically from the draft background luminance.\n */\n protected readonly contrastTextColor = computed(() => {\n const override = this.contrastColor();\n if (override) {\n const norm = this.normalizeHex(override);\n if (this.isValidHex(norm)) {\n return norm;\n }\n }\n const bg = this.draftHex();\n return getContrastTextColor(this.isValidHex(bg) ? bg : '#ffffff');\n });\n\n protected readonly contrastResult = computed<ContrastResult | null>(() => {\n const bg = this.draftHex();\n if (!this.isValidHex(bg)) {\n return null;\n }\n return getContrastResult(bg, this.contrastTextColor());\n });\n\n protected readonly showContrast = computed(\n () => this.resolvedSections().contrast && this.contrastResult() !== null,\n );\n\n protected readonly eyeDropperSupported =\n typeof globalThis !== 'undefined' && 'EyeDropper' in globalThis;\n\n protected readonly showEyedropper = computed(\n () =>\n this.resolvedSections().hex &&\n this.resolvedSections().eyedropper &&\n this.eyeDropperSupported,\n );\n\n protected readonly canAddCustom = computed(() => this.isValidHex(this.draftHex()));\n\n protected readonly errorText = computed(() => {\n if (this.errorMessage()) {\n return this.errorMessage();\n }\n return this.errorType() === 'required'\n ? this.t().requiredError\n : this.t().invalidHexError;\n });\n\n protected readonly fieldId: string;\n protected readonly panelFieldId: string;\n protected readonly errorId: string;\n\n private static instanceCount = 0;\n\n private originalValue = '';\n private closeReason: ColorPickerCloseReason = 'accept';\n // Set right before popover().hide() when Enter already committed\n // synchronously, so onPopoverHide()'s own accept-commit doesn't fire a\n // duplicate colorChange/textColorChange for the same still-unchanged\n // draft. Reset on every open (so it can never leak into a later session)\n // and explicitly in every branch of onPopoverHide() (not just the one\n // that consumes it) so the flag never depends on which branch runs.\n private suppressNextHideCommit = false;\n // Circular buffer pointer: tracks the oldest slot index to replace when customColors is at capacity.\n // Starts at 0 (correct for both empty lists and backend-loaded full arrays, assuming oldest-first order).\n // Limitation: not reset when customColors is rebound externally at runtime without destroying the component.\n private readonly customColorWritePtr = signal(0);\n private readonly hexInput$ = new Subject<string>();\n\n onChange: (value: string) => void = () => {};\n onTouched: () => void = () => {};\n\n constructor() {\n ColorPickerComponent.instanceCount++;\n this.fieldId = `tk-color-picker-${ColorPickerComponent.instanceCount}`;\n this.panelFieldId = `${this.fieldId}-panel`;\n this.errorId = `${this.fieldId}-error`;\n\n effect(() => {\n const incoming = this.value();\n untracked(() => this.syncFromValue(incoming));\n });\n\n effect(() => {\n if (this.isDisabled() && this.isOpen()) {\n this.popover()?.hide();\n }\n });\n\n effect(() => {\n if (this.isDisabled()) {\n this.triggerControl.disable({ emitEvent: false });\n } else {\n this.triggerControl.enable({ emitEvent: false });\n }\n });\n\n // Sync triggerControl validity so tk-input-text shows errors natively.\n effect(() => {\n const valid = this.isValid();\n untracked(() => {\n if (valid) {\n this.triggerControl.setErrors(null);\n } else {\n this.triggerControl.setErrors({ hex: true });\n }\n });\n });\n\n this.hexInput$\n .pipe(debounceTime(200), takeUntilDestroyed(this.destroyRef))\n .subscribe((v) => this.processHexInput(v, false));\n\n // Prevents the registry from holding a stale reference to this instance\n // if it's destroyed while its popover is still open (e.g. route change\n // without closing the picker first) — not just on normal onPopoverHide.\n this.destroyRef.onDestroy(() => this.registry.notifyClosed(this.fieldId));\n }\n\n // ── ControlValueAccessor ────────────────────────────────────────────────\n\n /**\n * @method writeValue\n * @description Hydrates the picker from the form model without emitting.\n */\n writeValue(value: string): void {\n this.value.set(value || '');\n }\n\n /**\n * @method registerOnChange\n * @description Registers the Reactive Forms change callback.\n */\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n /**\n * @method registerOnTouched\n * @description Registers the Reactive Forms touched callback.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * @method setDisabledState\n * @description Syncs the disabled state from Reactive Forms.\n */\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // ── Popover lifecycle ───────────────────────────────────────────────────\n\n protected onTriggerClick(event: Event): void {\n if (this.isDisabled()) {\n return;\n }\n this.popover()?.toggle(event as MouseEvent, this.getAnchorEl() ?? this.el.nativeElement);\n }\n\n /** Returns the precise anchor element for popover positioning.\n * For the input variant we target the `p-floatlabel` child instead of the\n * full `tk-input-text` host. The host includes a bottom section with\n * `min-height: 1.25rem + margin-top: 0.25rem` that is invisible when empty\n * but would push the panel ~1.5rem below the visible input field.\n *\n * Coupling note: `p-floatlabel` is PrimeNG's float-label host element selector.\n * If PrimeNG renames it in a future major, the `?? host` fallback keeps\n * positioning functional (panel opens ~1.5rem lower than ideal). */\n private getAnchorEl(): HTMLElement | undefined {\n if (this.variant() === 'swatch') {\n return this.swatchBtnRef()?.nativeElement;\n }\n const host = this.inputTriggerRef()?.nativeElement as HTMLElement | undefined;\n return (host?.querySelector('p-floatlabel') as HTMLElement | null) ?? host;\n }\n\n protected onPopoverShow(): void {\n this.isOpen.set(true);\n this.originalValue = this.value();\n this.suppressNextHideCommit = false;\n this.registry.requestOpen(this.fieldId, () => this.cancelAndClose());\n // Sync draft from current value\n this.syncFromValue(this.value());\n this.opened.emit();\n // PrimeNG's absolutePosition flips the panel to \"above\" when it doesn't fit\n // below, but clamps to scrollTop when there's no space above either — panel\n // ends up covering the trigger. We override the position after PrimeNG runs.\n setTimeout(() => this.fixPanelPosition(), 0);\n }\n\n private fixPanelPosition(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const container = (this.popover() as any)?.container as HTMLElement | undefined;\n if (!container) return;\n\n const anchor = this.getAnchorEl();\n if (!anchor) return;\n\n const anchorRect: DOMRect = anchor.getBoundingClientRect();\n const panelH = container.offsetHeight;\n const panelW = container.offsetWidth;\n const vH = window.innerHeight;\n const vW = window.innerWidth;\n const scrollY = window.scrollY;\n const scrollX = window.scrollX;\n\n const spaceBelow = vH - anchorRect.bottom;\n const spaceAbove = anchorRect.top;\n\n let top: number;\n if (spaceBelow >= panelH) {\n // Preferred: open below trigger\n top = anchorRect.bottom + scrollY;\n } else if (spaceAbove >= panelH) {\n // Fallback: open above trigger\n top = anchorRect.top + scrollY - panelH;\n } else {\n // Neither side fits: prefer below (scroll context), clamp to viewport edges.\n // Anchor to trigger bottom and push up only as much as needed so the panel\n // stays close to the trigger rather than jumping to the top of the page.\n const idealBelow = anchorRect.bottom + scrollY;\n const maxTop = scrollY + vH - panelH - 8;\n const minTop = scrollY + 8;\n top = Math.max(minTop, Math.min(idealBelow, maxTop));\n }\n\n let left = anchorRect.left + scrollX;\n if (left + panelW > scrollX + vW - 8) {\n left = scrollX + vW - panelW - 8;\n }\n left = Math.max(scrollX + 8, left);\n\n // Zero out PrimeNG's arrow margin so the panel sits flush with the trigger.\n container.style.margin = '0';\n container.style.top = `${top}px`;\n container.style.insetInlineStart = `${left}px`;\n }\n\n protected onPopoverHide(): void {\n this.isOpen.set(false);\n this.onTouched();\n this.triggerControl.markAsTouched();\n const reason = this.closeReason;\n this.closeReason = 'accept';\n if (reason === 'cancel') {\n this.suppressNextHideCommit = false;\n this.restoreOriginalValue();\n } else if (this.suppressNextHideCommit) {\n // Enter already committed synchronously right before calling hide() —\n // skip this redundant re-commit for the same still-unchanged draft.\n this.suppressNextHideCommit = false;\n } else {\n // Flush the debounced hex pipeline synchronously first: click-outside\n // can land within the 200ms debounce window of the last keystroke,\n // which would otherwise commit a stale draftHex(). commit=false: the\n // explicit commitDraft() below is the single source of truth for the\n // emit, same reasoning as onHexKeydown's Enter flush.\n this.processHexInput('#' + this.displayHexNoHash(), true, false);\n // Always commit on accept: in 'onClose' mode this is the first and\n // only commit; in 'live' mode the draft is already committed, this\n // just guarantees the final state is flushed (e.g. Enter pressed\n // right after a programmatic value change, with no draft edits yet).\n this.commitDraft();\n }\n this.registry.notifyClosed(this.fieldId);\n this.closed.emit(reason);\n }\n\n protected onPanelEnter(event: Event): void {\n this.confirmAndClose();\n (event as KeyboardEvent).preventDefault();\n event.stopPropagation();\n }\n\n /** Bound to `(keydown.escape)` on the popover panel: intercepts Escape\n * before it can bubble to PrimeNG's own document-level close handler, so\n * the close reason is already recorded as `cancel` by the time `onHide`\n * fires. */\n protected onPanelEscape(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.cancelAndClose();\n }\n\n private confirmAndClose(): void {\n if (!this.isValidHex(this.draftHex())) {\n return;\n }\n this.popover()?.hide();\n }\n\n /** Closes the popover as a cancellation: `onPopoverHide()` will restore\n * `originalValue` and emit nothing. Shared by Escape and by the registry\n * when another `tk-color-picker` instance opens in the same view. */\n private cancelAndClose(): void {\n this.closeReason = 'cancel';\n this.popover()?.hide();\n }\n\n private restoreOriginalValue(): void {\n const normalized = this.normalizeHex(this.originalValue);\n const restored = this.isValidHex(normalized) ? normalized : '';\n if (restored) {\n this.setFromHex(restored, false);\n } else {\n this.draftHex.set('');\n this.displayHexNoHash.set('');\n this.setValid(true);\n }\n // In 'live' mode the value model may already have moved past\n // originalValue (committed mid-drag) — undo that too, without emitting\n // colorChange/textColorChange.\n if (this.value() !== restored) {\n this.value.set(restored);\n this.onChange(restored);\n }\n }\n\n\n // ── Draft state updates ─────────────────────────────────────────────────\n\n protected onSpectrumChange(change: { saturation: number; brightness: number }): void {\n this.saturation.set(change.saturation);\n this.brightness.set(change.brightness);\n this.applyHsv();\n }\n\n protected onHueChange(event: Event): void {\n this.hue.set(Number((event.target as HTMLInputElement).value));\n this.applyHsv();\n }\n\n protected onSwatchPick(color: string): void {\n const hex = this.normalizeHex(color);\n if (this.isValidHex(hex)) {\n this.setFromHex(hex, true);\n }\n }\n\n protected addCustomColor(): void {\n const hex = this.draftHex();\n if (!this.isValidHex(hex)) return;\n const list = this.customColors();\n if (list.some((c) => c.toLowerCase() === hex)) return;\n if (list.length >= this.maxCustomColors()) {\n // Circular buffer: replace the oldest slot (writePtr) and advance the\n // pointer. Only one cell changes per add — no grid shift.\n // Both signal mutations are kept outside update() to avoid side effects\n // inside a state-transition callback.\n const ptr = this.customColorWritePtr();\n const next = [...list];\n next[ptr] = hex;\n this.customColors.set(next);\n this.customColorWritePtr.set((ptr + 1) % this.maxCustomColors());\n } else {\n this.customColors.update((l) => [...l, hex]);\n }\n }\n\n protected isCustomColorSelected(): boolean {\n const selected = this.draftHex().toLowerCase();\n return this.customColors().some((c) => c.toLowerCase() === selected);\n }\n\n protected removeCustomColor(): void {\n const hex = this.draftHex().toLowerCase();\n this.customColors.update((list) => list.filter((c) => c.toLowerCase() !== hex));\n }\n\n protected openEyeDropper(): void {\n const ctor = (globalThis as unknown as { EyeDropper?: new () => EyeDropperLike })\n .EyeDropper;\n if (!ctor) {\n return;\n }\n new ctor()\n .open()\n .then((result) => {\n const hex = this.normalizeHex(result.sRGBHex);\n if (this.isValidHex(hex)) {\n this.setFromHex(hex, true);\n // Focus HEX input so Enter closes modal without opening eyedropper again\n setTimeout(() => {\n const inputEl = this.panelHexInput();\n if (inputEl) {\n const hexInput = inputEl.nativeElement.querySelector('input');\n if (hexInput) {\n hexInput.focus();\n }\n }\n }, 0);\n }\n })\n .catch(() => {\n // The user dismissed the eyedropper — nothing to do.\n });\n }\n\n // ── HEX input pipeline ──────────────────────────────────────────────────\n\n protected onHexInput(clean: string): void {\n this.displayHexNoHash.set(clean);\n this.hexInput$.next('#' + clean);\n }\n\n /**\n * Sanitizes typing inside a `tk-input-text` hex field (trigger or popover):\n * strips non-hex characters at the DOM level (keeping the caret behavior of\n * the native input) and feeds the shared validation pipeline.\n */\n protected onHexNativeInput(event: Event): void {\n const target = event.target as HTMLInputElement | null;\n if (!target || target.tagName !== 'INPUT') {\n return;\n }\n const clean = target.value.replace(/[^A-Fa-f0-9]/g, '').toUpperCase().slice(0, 6);\n if (clean !== target.value) {\n target.value = clean;\n }\n this.onHexInput(clean);\n }\n\n /** Blocks non-hex keypresses and enforces 6-char max before char enters the DOM. Enter confirms selection. */\n protected onHexKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n\n // Flush synchronously first: hexInput$ debounces 200ms, so draftHex()\n // can still be stale if Enter is pressed right after the last\n // keystroke (fast typing). Mirrors onHexBlur()'s own flush.\n // commit=false: the explicit commitDraft() right below is the single\n // source of truth for the emit — the flush must not also auto-commit\n // via maybeCommit() (that would double-emit in 'live' mode).\n this.processHexInput('#' + this.displayHexNoHash(), true, false);\n // Commit directly — covers both the trigger HEX field edited while the\n // popover is closed (no onPopoverHide to fall back on) and the panel\n // HEX field, without depending on the popover's close animation timing.\n this.commitDraft();\n // If a real popover is actually open, hide() will trigger\n // onPopoverHide()'s own accept-commit right after — flag it so that\n // one is skipped instead of re-emitting the same already-committed\n // value a second time.\n this.suppressNextHideCommit = true;\n this.popover()?.hide();\n return;\n }\n\n if (event.ctrlKey || event.metaKey || event.altKey) {\n return;\n }\n const navigationKeys = [\n 'Backspace', 'Delete', 'Tab',\n 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',\n 'Home', 'End',\n ];\n if (navigationKeys.includes(event.key)) {\n return;\n }\n if (!/^[A-Fa-f0-9]$/.test(event.key)) {\n event.preventDefault();\n return;\n }\n // Enforce 6-char max: block if no selection to replace and already full\n const target = event.target as HTMLInputElement | null;\n if (target && target.tagName === 'INPUT') {\n const selectionLength = (target.selectionEnd ?? 0) - (target.selectionStart ?? 0);\n if (target.value.length >= 6 && selectionLength === 0) {\n event.preventDefault();\n }\n }\n }\n\n /** Strips non-hex chars from pasted text before it reaches the input model. */\n protected onHexPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const text = event.clipboardData?.getData('text/plain') ?? '';\n const clean = text.replace(/[^A-Fa-f0-9]/g, '').toUpperCase();\n const target = event.target as HTMLInputElement | null;\n if (!target || target.tagName !== 'INPUT') {\n return;\n }\n const start = target.selectionStart ?? 0;\n const end = target.selectionEnd ?? 0;\n const merged = (target.value.slice(0, start) + clean + target.value.slice(end)).slice(0, 6);\n target.value = merged;\n this.onHexInput(merged);\n }\n\n protected onHexBlur(): void {\n // commit=false: this flush only syncs draftHex/displayHexNoHash — the\n // explicit commitDraft() below is the single source of truth for the\n // emit, so the flush itself must not also auto-commit via maybeCommit()\n // (that would double-emit in 'live' mode for a change not yet synced).\n this.processHexInput('#' + this.displayHexNoHash(), true, false);\n this.onTouched();\n if (!this.isOpen()) {\n // Losing focus on the closed trigger's HEX field (variant=\"input\")\n // is the \"I'm done editing\" signal for that path — there's no\n // popover session for onPopoverHide() to eventually flush, so this\n // commits unconditionally, the same way Enter already does.\n this.commitDraft();\n }\n }\n\n private processHexInput(raw: string, forceNormalize: boolean, commit = true): void {\n const hex = this.parseHex(raw);\n if (hex === null) {\n return;\n }\n if (this.isValidHex(hex)) {\n this.applyValidHex(hex, forceNormalize, commit);\n } else {\n this.applyInvalidHex(hex.slice(1), forceNormalize);\n }\n }\n\n private parseHex(raw: string): string | null {\n const text = raw?.trim() ?? '';\n const body = (text.startsWith('#') ? text.slice(1) : text).trim();\n if (body.length === 0) {\n if (this.required()) {\n this.errorType.set('required');\n this.setValid(false);\n } else {\n this.setValid(true);\n }\n return null;\n }\n return ('#' + body).toLowerCase();\n }\n\n private applyValidHex(hex: string, forceNormalize: boolean, commit: boolean): void {\n if (hex.length === 4 && !forceNormalize) {\n this.setValid(true);\n return;\n }\n const norm = this.normalizeHex(hex);\n this.setValid(true);\n if (norm !== this.draftHex()) {\n this.setFromHex(norm, commit);\n } else {\n this.displayHexNoHash.set(norm.slice(1).toUpperCase());\n }\n }\n\n private applyInvalidHex(rawText: string, forceNormalize: boolean): void {\n this.errorType.set('invalid');\n const partial =\n !forceNormalize && /^[A-Fa-f0-9]*$/.test(rawText) && rawText.length <= 6;\n this.setValid(partial);\n }\n\n private setValid(value: boolean): void {\n if (this.isValid() === value) {\n return;\n }\n this.isValid.set(value);\n this.validChange.emit(value);\n }\n\n // ── Internal state helpers ──────────────────────────────────────────────\n\n private syncFromValue(incoming: string, restoring = false): void {\n if (!incoming) {\n if (restoring) {\n this.draftHex.set('');\n this.displayHexNoHash.set('');\n }\n // Validate empty color (fails if required)\n this.parseHex('');\n return;\n }\n const hex = this.normalizeHex(incoming);\n if (this.isValidHex(hex) && hex !== this.draftHex()) {\n this.setFromHex(hex, false);\n }\n }\n\n private setFromHex(hex: string, interactive: boolean): void {\n this.draftHex.set(hex);\n this.displayHexNoHash.set(hex.slice(1).toUpperCase());\n this.setValid(true);\n const hsv = this.hexToHsv(hex);\n this.hue.set(hsv.h);\n this.saturation.set(hsv.s);\n this.brightness.set(hsv.v);\n if (interactive) {\n this.maybeCommit();\n }\n }\n\n private applyHsv(): void {\n const hex = this.hsvToHex(this.hue(), this.saturation(), this.brightness());\n this.draftHex.set(hex);\n this.displayHexNoHash.set(hex.slice(1).toUpperCase());\n this.setValid(true);\n this.maybeCommit();\n }\n\n /**\n * Commits the draft color immediately, but only in `'live'` emitMode.\n * In `'onClose'` mode, mid-edit draft changes never commit here — not even\n * for the trigger HEX field edited while the popover is closed. That path\n * still needs an explicit \"I'm done\" signal, just like a popover session\n * does: Enter (`onHexKeydown`) or losing focus (`onHexBlur`), both of which\n * commit unconditionally regardless of `emitMode()`. Committing on every\n * debounce tick while the field still has focus would fire on each\n * completed-looking HEX mid-typing — exactly the noise `'onClose'` exists\n * to avoid (e.g. a consumer wiring this straight to an API call).\n */\n private maybeCommit(): void {\n if (this.emitMode() === 'live') {\n this.commitDraft();\n }\n }\n\n private commitDraft(): void {\n const hex = this.draftHex();\n if (!this.isValidHex(hex) || this.isDisabled()) {\n return;\n }\n this.value.set(hex);\n this.onChange(hex);\n this.colorChange.emit(hex);\n this.textColorChange.emit(this.contrastTextColor());\n }\n\n // ── Color math ──────────────────────────────────────────────────────────\n\n private normalizeHex(value: string): string {\n if (!value?.trim()) {\n return '';\n }\n let v = value.trim();\n v = v.startsWith('#') ? v : '#' + v;\n if (/^#[A-Fa-f0-9]{3}$/.test(v)) {\n v = '#' + v[1] + v[1] + v[2] + v[2] + v[3] + v[3];\n }\n return v.toLowerCase();\n }\n\n private isValidHex(value: string): boolean {\n return HEX_REGEX.test(value);\n }\n\n private hexToHsv(hex: string): { h: number; s: number; v: number } {\n const r = Number.parseInt(hex.slice(1, 3), 16) / 255;\n const g = Number.parseInt(hex.slice(3, 5), 16) / 255;\n const b = Number.parseInt(hex.slice(5, 7), 16) / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let h = 0;\n if (delta !== 0) {\n if (max === r) {\n h = ((g - b) / delta) % 6;\n } else if (max === g) {\n h = (b - r) / delta + 2;\n } else {\n h = (r - g) / delta + 4;\n }\n h = Math.round(h * 60);\n if (h < 0) {\n h += 360;\n }\n }\n return { h, s: max === 0 ? 0 : delta / max, v: max };\n }\n\n private hsvToHex(h: number, s: number, v: number): string {\n const c = v * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = v - c;\n let r = 0;\n let g = 0;\n let b = 0;\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n const toHex = (n: number) =>\n Math.round((n + m) * 255)\n .toString(16)\n .padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n }\n}\n","<div\n class=\"tk-color-picker\"\n [class.tk-color-picker--disabled]=\"isDisabled()\"\n [class.tk-color-picker--open]=\"isOpen()\"\n [class.tk-color-picker--invalid]=\"!isValid()\">\n @if (variant() === 'swatch') {\n @if (label()) {\n <span class=\"tk-color-picker__label\">{{ label() }}</span>\n }\n <button\n #swatchBtn\n type=\"button\"\n class=\"tk-color-picker__trigger tk-color-picker__trigger--swatch\"\n [disabled]=\"isDisabled()\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-label]=\"t().openPickerLabel + (label() ? ': ' + label() : '')\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"onTriggerClick($event)\">\n <span\n class=\"tk-color-picker__swatch\"\n [class.tk-color-picker__swatch--fallback]=\"!swatchColor()\"\n [style.background-color]=\"swatchColor()\"\n aria-hidden=\"true\"></span>\n <tk-icon\n class=\"tk-color-picker__chevron\"\n [class.tk-color-picker__chevron--open]=\"isOpen()\"\n icon=\"chevron-down\"\n styleIcon=\"regular\"\n size=\"xs\"></tk-icon>\n </button>\n } @else {\n <div\n #inputTrigger\n class=\"tk-color-picker__trigger-input\"\n [class.tk-color-picker__trigger-input--invalid]=\"!isValid()\">\n @if (label()) {\n <label\n class=\"tk-color-picker__input-label\"\n [for]=\"fieldId\"\n [title]=\"label()\"\n >{{ label() }}</label\n >\n }\n <div class=\"tk-color-picker__input-wrap\">\n <button\n type=\"button\"\n class=\"tk-color-picker__input-swatch\"\n [class.tk-color-picker__input-swatch--fallback]=\"!swatchColor()\"\n [style.background-color]=\"swatchColor() ?? null\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t().openPickerLabel\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"onTriggerClick($event)\"></button>\n <span class=\"tk-color-picker__input-prefix\" aria-hidden=\"true\">#</span>\n <input\n pInputText\n [id]=\"fieldId\"\n [value]=\"displayHexNoHash()\"\n [disabled]=\"isDisabled()\"\n [class.ng-invalid]=\"triggerControl.invalid\"\n [class.ng-dirty]=\"triggerControl.dirty\"\n [class.ng-touched]=\"triggerControl.touched\"\n [attr.aria-describedby]=\"!isValid() ? errorId : null\"\n [attr.aria-invalid]=\"!isValid()\"\n autocomplete=\"off\"\n (input)=\"onHexNativeInput($event)\"\n (keydown)=\"onHexKeydown($event)\"\n (paste)=\"onHexPaste($event)\"\n (blur)=\"onHexBlur()\" />\n </div>\n <div class=\"tk-color-picker__input-bottom\">\n @if (!isValid()) {\n <p-message\n severity=\"error\"\n size=\"small\"\n variant=\"simple\"\n [id]=\"errorId\"\n >{{ errorText() }}</p-message\n >\n } @else if (hint()) {\n <p-message severity=\"secondary\" size=\"small\" variant=\"simple\">{{\n hint()\n }}</p-message>\n }\n </div>\n </div>\n }\n\n @if (variant() === 'swatch') {\n @if (!isValid()) {\n <span\n [id]=\"errorId\"\n class=\"tk-color-picker__error\"\n role=\"alert\"\n aria-live=\"polite\">\n {{ errorText() }}\n </span>\n } @else if (hint()) {\n <span class=\"tk-color-picker__hint\">{{ hint() }}</span>\n }\n }\n</div>\n\n<p-popover\n #op\n [styleClass]=\"\n 'tk-color-picker-popover' +\n (variant() === 'input' ? ' tk-color-picker-popover--input' : '')\n \"\n position=\"bottom\"\n appendTo=\"body\"\n (onShow)=\"onPopoverShow()\"\n (onHide)=\"onPopoverHide()\">\n <div\n class=\"tk-color-picker__panel\"\n role=\"group\"\n [attr.aria-label]=\"t().dialogLabel\"\n tabindex=\"-1\"\n autofocus\n (keydown.enter)=\"onPanelEnter($event)\"\n (keydown.escape)=\"onPanelEscape($event)\">\n @if (resolvedSections().swatches && presetColors().length) {\n <section class=\"tk-color-picker__section\">\n <span class=\"tk-color-picker__section-label\">{{\n t().swatchesLabel\n }}</span>\n <tk-color-picker-swatch-grid\n [colors]=\"presetColors()\"\n [selected]=\"draftHex()\"\n [ariaLabel]=\"t().swatchesLabel\"\n (picked)=\"onSwatchPick($event)\" />\n </section>\n }\n\n @if (resolvedSections().customColors) {\n <section class=\"tk-color-picker__section\">\n <span class=\"tk-color-picker__section-label\">{{\n t().customColorsLabel\n }}</span>\n <tk-color-picker-swatch-grid\n [colors]=\"customColors()\"\n [selected]=\"draftHex()\"\n [ariaLabel]=\"t().customColorsLabel\"\n (picked)=\"onSwatchPick($event)\">\n @if (canAddCustom()) {\n <button\n type=\"button\"\n class=\"tk-color-picker__add-custom\"\n [attr.aria-label]=\"t().addCustomColorLabel\"\n (click)=\"addCustomColor()\">\n <tk-icon icon=\"plus\" styleIcon=\"regular\" size=\"xs\"></tk-icon>\n </button>\n }\n @if (isCustomColorSelected()) {\n <button\n type=\"button\"\n class=\"tk-color-picker__remove-custom\"\n [attr.aria-label]=\"t().removeCustomColorLabel\"\n (click)=\"removeCustomColor()\">\n −\n </button>\n }\n </tk-color-picker-swatch-grid>\n </section>\n }\n\n @if (\n resolvedSections().customColors &&\n (resolvedSections().spectrum ||\n resolvedSections().hue ||\n resolvedSections().hex)\n ) {\n <div class=\"tk-color-picker__divider\" role=\"separator\"></div>\n }\n\n @if (resolvedSections().spectrum) {\n <tk-color-picker-spectrum\n [hue]=\"hue()\"\n [saturation]=\"saturation()\"\n [brightness]=\"brightness()\"\n [color]=\"swatchColor() ?? ''\"\n [ariaLabel]=\"t().spectrumLabel\"\n (changed)=\"onSpectrumChange($event)\" />\n }\n\n @if (resolvedSections().hue) {\n <input\n class=\"tk-color-picker__hue\"\n type=\"range\"\n min=\"0\"\n max=\"360\"\n [value]=\"hue()\"\n [attr.aria-label]=\"t().hueLabel\"\n (input)=\"onHueChange($event)\" />\n }\n\n @if (\n (resolvedSections().spectrum || resolvedSections().hue) &&\n resolvedSections().hex\n ) {\n <div class=\"tk-color-picker__divider\" role=\"separator\"></div>\n }\n\n @if (resolvedSections().hex) {\n <section class=\"tk-color-picker__section tk-color-picker__hex-row\">\n <span\n class=\"tk-color-picker__swatch tk-color-picker__swatch--large\"\n [class.tk-color-picker__swatch--fallback]=\"!swatchColor()\"\n [style.background-color]=\"swatchColor()\"\n aria-hidden=\"true\"></span>\n <tk-input-text\n #panelHexInput\n class=\"tk-color-picker__panel-hex\"\n [class.tk-color-picker__trigger-input--invalid]=\"!isValid()\"\n [label]=\"t().hexLabel\"\n [id]=\"panelFieldId\"\n [value]=\"displayHexNoHash()\"\n prefixText=\"#\"\n (input)=\"onHexNativeInput($event)\"\n (keydown)=\"onHexKeydown($event)\"\n (paste)=\"onHexPaste($event)\"\n (focusout)=\"onHexBlur()\" />\n @if (showEyedropper()) {\n <tk-button\n class=\"tk-color-picker__eyedropper\"\n tabindex=\"-1\"\n severity=\"secondary\"\n variant=\"outlined\"\n icon=\"eye-dropper\"\n styleIcon=\"regular\"\n [attr.aria-label]=\"t().eyedropperLabel\"\n (clicked)=\"openEyeDropper()\">\n </tk-button>\n }\n </section>\n }\n\n @if (resolvedSections().hex && showContrast()) {\n <div class=\"tk-color-picker__divider\" role=\"separator\"></div>\n }\n\n @if (showContrast()) {\n <section class=\"tk-color-picker__section tk-color-picker__contrast\">\n <span class=\"tk-color-picker__section-label\">{{\n t().contrastLabel\n }}</span>\n <div class=\"tk-color-picker__contrast-row\">\n <span\n class=\"tk-color-picker__contrast-pill\"\n [style.background-color]=\"draftHex()\"\n [attr.aria-label]=\"t().contrastSampleLabel\">\n <span\n class=\"tk-color-picker__contrast-sample\"\n [style.color]=\"contrastTextColor()\">\n {{ t().contrastSampleText }}\n </span>\n </span>\n <div class=\"tk-color-picker__contrast-info\">\n <span class=\"tk-color-picker__contrast-label\">{{\n t().contrastSampleLabel\n }}</span>\n <span class=\"tk-color-picker__contrast-ratio\"\n >{{ contrastResult()!.ratio }}:1</span\n >\n </div>\n @switch (contrastResult()!.level) {\n @case ('AAA') {\n <span\n class=\"tk-color-picker__contrast-badge tk-color-picker__contrast-badge--aaa\"\n >AAA</span\n >\n }\n @case ('AA') {\n <span\n class=\"tk-color-picker__contrast-badge tk-color-picker__contrast-badge--aa\"\n >AA</span\n >\n }\n @case ('fail') {\n <span\n class=\"tk-color-picker__contrast-badge tk-color-picker__contrast-badge--fail\">\n {{ t().contrastLowLabel }}\n </span>\n }\n }\n </div>\n </section>\n }\n </div>\n</p-popover>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@ import * as i2 from 'primeng/datepicker';
8
8
  import { DatePickerModule } from 'primeng/datepicker';
9
9
  import * as i3 from 'primeng/floatlabel';
10
10
  import { FloatLabelModule } from 'primeng/floatlabel';
11
+ import * as i4 from 'primeng/message';
12
+ import { MessageModule } from 'primeng/message';
11
13
  import { IconComponent } from '@tekus/design-system/components/icon';
12
14
 
13
15
  let _datePickerUid = 0;
@@ -221,6 +223,16 @@ class DatePickerComponent {
221
223
  * <tk-date-picker [minDate]="minDate" errorMessage="Date is required" />
222
224
  */
223
225
  this.errorMessage = input(null, ...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
226
+ /**
227
+ * @description
228
+ * Hint text rendered beneath the field when there is no error to show.
229
+ *
230
+ * @default null
231
+ *
232
+ * @example
233
+ * <tk-date-picker hint="Format: dd/mm/yyyy" />
234
+ */
235
+ this.hint = input(null, ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
224
236
  /**
225
237
  * @description
226
238
  * Optional external `FormControl` to bind when not using the standard
@@ -444,7 +456,7 @@ class DatePickerComponent {
444
456
  return updated;
445
457
  }
446
458
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
447
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: DatePickerComponent, isStandalone: true, selector: "tk-date-picker", inputs: { required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null }, dateFormat: { classPropertyName: "dateFormat", publicName: "dateFormat", isSignal: true, isRequired: false, transformFunction: null }, stepHour: { classPropertyName: "stepHour", publicName: "stepHour", isSignal: true, isRequired: false, transformFunction: null }, stepMinute: { classPropertyName: "stepMinute", publicName: "stepMinute", isSignal: true, isRequired: false, transformFunction: null }, stepSecond: { classPropertyName: "stepSecond", publicName: "stepSecond", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null }, showTime: { classPropertyName: "showTime", publicName: "showTime", isSignal: true, isRequired: false, transformFunction: null }, hourFormat: { classPropertyName: "hourFormat", publicName: "hourFormat", isSignal: true, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: true, isRequired: false, transformFunction: null }, baseZIndex: { classPropertyName: "baseZIndex", publicName: "baseZIndex", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, labelText: { classPropertyName: "labelText", publicName: "labelText", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, modelValue: { classPropertyName: "modelValue", publicName: "modelValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { modelValue: "modelValueChange", handleSelect: "handleSelect", handleClear: "handleClear" }, ngImport: i0, template: "<div class=\"datepicker-container\" [class.inline]=\"inline()\">\n @if (inline()) {\n <p-datepicker\n [inputId]=\"uid\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"true\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"effectiveMinDate()\"\n [maxDate]=\"effectiveMaxDate()\"\n [disabled]=\"effectiveDisabled()\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"false\"\n [inline]=\"true\"\n [showTime]=\"effectiveShowTime()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\">\n </p-datepicker>\n } @else {\n <p-floatlabel>\n <p-datepicker\n [inputId]=\"uid\"\n iconDisplay=\"input\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"true\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"effectiveMinDate()\"\n [maxDate]=\"effectiveMaxDate()\"\n [disabled]=\"effectiveDisabled()\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"false\"\n [showTime]=\"effectiveShowTime()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [appendTo]=\"appendTo()\"\n [baseZIndex]=\"baseZIndex()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"calendar-day\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n <label [for]=\"uid\">{{ labelText() }}</label>\n </p-floatlabel>\n }\n @if (errorMessage() && effectiveControl().invalid && (effectiveControl().dirty || effectiveControl().touched)) {\n <small class=\"p-error\">{{ errorMessage() }}</small>\n }\n</div>\n", styles: [":host ::ng-deep .p-datepicker{width:100%}:host ::ng-deep .p-datepicker-input{border:none;border-bottom:1px solid var(--tk-color-border-default, #cecdcd);border-radius:0;background-color:transparent;padding:var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-25, 4px)!important}:host ::ng-deep .p-datepicker-input:focus{border-color:var(--tk-color-primary-default, #16006f)}:host ::ng-deep .p-datepicker.p-disabled{opacity:1!important}:host ::ng-deep .p-datepicker.p-disabled .p-datepicker-input{background-color:var(--tk-color-base-surface-200, #e4e4e4)!important;color:var(--tk-color-base-surface-500, #8a8a8b);border-bottom-color:var(--tk-color-base-surface-300, #d2d2d2);cursor:not-allowed}:host ::ng-deep .p-datepicker.p-disabled .p-datepicker-input-icon-container{color:var(--tk-color-base-surface-500, #8a8a8b);pointer-events:none}:host ::ng-deep .p-floatlabel:has(.p-disabled) label{color:var(--tk-color-base-surface-500, #8a8a8b)!important}:host ::ng-deep .p-datepicker-decade{color:var(--tk-color-text-default, #121214)}:host ::ng-deep .p-datepicker-clear-icon{color:var(--tk-surface-700, #424243);inset-inline-end:2.5rem!important}:host ::ng-deep .p-floatlabel{position:relative}:host ::ng-deep .p-floatlabel:has(.p-inputwrapper-filled) label,:host ::ng-deep .p-floatlabel:has(input:focus) label{color:var(--tk-primary-500, #16006f)}:host ::ng-deep .p-floatlabel label{color:var(--tk-surface-700, #8a8a8b);font-family:var(--tk-font-family, Poppins, sans-serif);font-size:var(--tk-font-size-2xs, 1rem);font-weight:var(--tk-font-weight-400, 400);left:var(--tk-spacing-base-25, .25rem)}:host ::ng-deep .p-datepicker-day-selected-range{background-color:var(--tk-primary-100, #b7b0d2);color:var(--tk-primary-700, #10004f)}:host ::ng-deep .p-datepicker-panel{min-width:0!important;max-width:300px!important;width:100%!important}:host ::ng-deep .p-inputtext:disabled{background:var(--tk-color-base-surface-200, #e4e4e4)!important}.datepicker-container{margin-top:var(--tk-spacing-base-200, 2rem)}.datepicker-container.inline{margin-top:0}small.p-error{display:block;margin-top:var(--tk-spacing-base-25, .25rem);color:var(--tk-color-base-red-700, #cf2604);font-size:var(--tk-font-size-xs, .75rem)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i2.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "styleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "readonlyInput", "shortYearCutoff", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "minDate", "maxDate", "disabledDates", "disabledDays", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "view", "defaultDate", "appendTo", "motionOptions"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: FloatLabelModule }, { kind: "component", type: i3.FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "component", type: IconComponent, selector: "tk-icon", inputs: ["icon", "styleIcon", "color", "size", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
459
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: DatePickerComponent, isStandalone: true, selector: "tk-date-picker", inputs: { required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null }, dateFormat: { classPropertyName: "dateFormat", publicName: "dateFormat", isSignal: true, isRequired: false, transformFunction: null }, stepHour: { classPropertyName: "stepHour", publicName: "stepHour", isSignal: true, isRequired: false, transformFunction: null }, stepMinute: { classPropertyName: "stepMinute", publicName: "stepMinute", isSignal: true, isRequired: false, transformFunction: null }, stepSecond: { classPropertyName: "stepSecond", publicName: "stepSecond", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null }, showTime: { classPropertyName: "showTime", publicName: "showTime", isSignal: true, isRequired: false, transformFunction: null }, hourFormat: { classPropertyName: "hourFormat", publicName: "hourFormat", isSignal: true, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: true, isRequired: false, transformFunction: null }, baseZIndex: { classPropertyName: "baseZIndex", publicName: "baseZIndex", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, labelText: { classPropertyName: "labelText", publicName: "labelText", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, modelValue: { classPropertyName: "modelValue", publicName: "modelValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { modelValue: "modelValueChange", handleSelect: "handleSelect", handleClear: "handleClear" }, ngImport: i0, template: "<div class=\"datepicker-container\" [class.inline]=\"inline()\">\n @if (inline()) {\n <p-datepicker\n [inputId]=\"uid\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"true\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"effectiveMinDate()\"\n [maxDate]=\"effectiveMaxDate()\"\n [disabled]=\"effectiveDisabled()\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"false\"\n [inline]=\"true\"\n [showTime]=\"effectiveShowTime()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\">\n </p-datepicker>\n } @else {\n <p-floatlabel>\n <p-datepicker\n [inputId]=\"uid\"\n iconDisplay=\"input\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"true\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"effectiveMinDate()\"\n [maxDate]=\"effectiveMaxDate()\"\n [disabled]=\"effectiveDisabled()\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"false\"\n [showTime]=\"effectiveShowTime()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [appendTo]=\"appendTo()\"\n [baseZIndex]=\"baseZIndex()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"calendar-day\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n <label [for]=\"uid\">{{ labelText() }}</label>\n </p-floatlabel>\n }\n @let showError = errorMessage() && effectiveControl().invalid && (effectiveControl().dirty || effectiveControl().touched);\n @if (showError || hint()) {\n <div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n @if (showError) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{ errorMessage() }}</p-message>\n } @else if (hint()) {\n <p-message severity=\"secondary\" size=\"small\" variant=\"simple\">{{ hint() }}</p-message>\n }\n </div>\n </div>\n }\n</div>\n", styles: [":host ::ng-deep .p-datepicker{width:100%}:host ::ng-deep .p-datepicker-input{border:none;border-bottom:1px solid var(--tk-color-border-default, #cecdcd);border-radius:0;background-color:transparent;padding:var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-25, 4px)!important}:host ::ng-deep .p-datepicker-input:focus{border-color:var(--tk-color-primary-default, #16006f)}:host ::ng-deep .p-datepicker.p-disabled{opacity:1!important}:host ::ng-deep .p-datepicker.p-disabled .p-datepicker-input{background-color:var(--tk-color-base-surface-200, #e4e4e4)!important;color:var(--tk-color-base-surface-500, #8a8a8b);border-bottom-color:var(--tk-color-base-surface-300, #d2d2d2);cursor:not-allowed}:host ::ng-deep .p-datepicker.p-disabled .p-datepicker-input-icon-container{color:var(--tk-color-base-surface-500, #8a8a8b);pointer-events:none}:host ::ng-deep .p-floatlabel:has(.p-disabled) label{color:var(--tk-color-base-surface-500, #8a8a8b)!important}:host ::ng-deep .p-datepicker-decade{color:var(--tk-color-text-default, #121214)}:host ::ng-deep .p-datepicker-clear-icon{color:var(--tk-surface-700, #424243);inset-inline-end:2.5rem!important}:host ::ng-deep .p-floatlabel{position:relative}:host ::ng-deep .p-floatlabel:has(.p-inputwrapper-filled) label,:host ::ng-deep .p-floatlabel:has(input:focus) label{color:var(--tk-primary-500, #16006f)}:host ::ng-deep .p-floatlabel label{color:var(--tk-surface-700, #8a8a8b);font-family:var(--tk-font-family, Poppins, sans-serif);font-size:var(--tk-font-size-2xs, 1rem);font-weight:var(--tk-font-weight-400, 400);left:var(--tk-spacing-base-25, .25rem)}:host ::ng-deep .p-datepicker-day-selected-range{background-color:var(--tk-primary-100, #b7b0d2);color:var(--tk-primary-700, #10004f)}:host ::ng-deep .p-datepicker-panel{min-width:0!important;max-width:300px!important;width:100%!important}:host ::ng-deep .p-inputtext:disabled{background:var(--tk-color-base-surface-200, #e4e4e4)!important}.datepicker-container{margin-top:var(--tk-spacing-base-200, 2rem)}.datepicker-container.inline{margin-top:0}:host ::ng-deep p-message[severity=error] .p-inline-message-text,:host ::ng-deep p-message[severity=error] span{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep p-message[severity=secondary] .p-inline-message-text,:host ::ng-deep p-message[severity=secondary] span{color:var(--tk-color-base-surface-600, #5d5d5e)}.tk-input-bottom{display:flex;justify-content:space-between;align-items:flex-start;margin-top:var(--tk-spacing-base-25, .25rem);min-height:var(--tk-spacing-base-125, 1.25rem)}.tk-input-messages{flex:1;margin-right:var(--tk-spacing-base-100, 1rem)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i2.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "styleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "readonlyInput", "shortYearCutoff", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "minDate", "maxDate", "disabledDates", "disabledDays", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "view", "defaultDate", "appendTo", "motionOptions"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: FloatLabelModule }, { kind: "component", type: i3.FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "ngmodule", type: MessageModule }, { kind: "component", type: i4.Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant", "motionOptions"], outputs: ["onClose"] }, { kind: "component", type: IconComponent, selector: "tk-icon", inputs: ["icon", "styleIcon", "color", "size", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
448
460
  }
449
461
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DatePickerComponent, decorators: [{
450
462
  type: Component,
@@ -453,9 +465,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
453
465
  ReactiveFormsModule,
454
466
  DatePickerModule,
455
467
  FloatLabelModule,
468
+ MessageModule,
456
469
  IconComponent,
457
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"datepicker-container\" [class.inline]=\"inline()\">\n @if (inline()) {\n <p-datepicker\n [inputId]=\"uid\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"true\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"effectiveMinDate()\"\n [maxDate]=\"effectiveMaxDate()\"\n [disabled]=\"effectiveDisabled()\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"false\"\n [inline]=\"true\"\n [showTime]=\"effectiveShowTime()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\">\n </p-datepicker>\n } @else {\n <p-floatlabel>\n <p-datepicker\n [inputId]=\"uid\"\n iconDisplay=\"input\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"true\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"effectiveMinDate()\"\n [maxDate]=\"effectiveMaxDate()\"\n [disabled]=\"effectiveDisabled()\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"false\"\n [showTime]=\"effectiveShowTime()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [appendTo]=\"appendTo()\"\n [baseZIndex]=\"baseZIndex()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"calendar-day\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n <label [for]=\"uid\">{{ labelText() }}</label>\n </p-floatlabel>\n }\n @if (errorMessage() && effectiveControl().invalid && (effectiveControl().dirty || effectiveControl().touched)) {\n <small class=\"p-error\">{{ errorMessage() }}</small>\n }\n</div>\n", styles: [":host ::ng-deep .p-datepicker{width:100%}:host ::ng-deep .p-datepicker-input{border:none;border-bottom:1px solid var(--tk-color-border-default, #cecdcd);border-radius:0;background-color:transparent;padding:var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-25, 4px)!important}:host ::ng-deep .p-datepicker-input:focus{border-color:var(--tk-color-primary-default, #16006f)}:host ::ng-deep .p-datepicker.p-disabled{opacity:1!important}:host ::ng-deep .p-datepicker.p-disabled .p-datepicker-input{background-color:var(--tk-color-base-surface-200, #e4e4e4)!important;color:var(--tk-color-base-surface-500, #8a8a8b);border-bottom-color:var(--tk-color-base-surface-300, #d2d2d2);cursor:not-allowed}:host ::ng-deep .p-datepicker.p-disabled .p-datepicker-input-icon-container{color:var(--tk-color-base-surface-500, #8a8a8b);pointer-events:none}:host ::ng-deep .p-floatlabel:has(.p-disabled) label{color:var(--tk-color-base-surface-500, #8a8a8b)!important}:host ::ng-deep .p-datepicker-decade{color:var(--tk-color-text-default, #121214)}:host ::ng-deep .p-datepicker-clear-icon{color:var(--tk-surface-700, #424243);inset-inline-end:2.5rem!important}:host ::ng-deep .p-floatlabel{position:relative}:host ::ng-deep .p-floatlabel:has(.p-inputwrapper-filled) label,:host ::ng-deep .p-floatlabel:has(input:focus) label{color:var(--tk-primary-500, #16006f)}:host ::ng-deep .p-floatlabel label{color:var(--tk-surface-700, #8a8a8b);font-family:var(--tk-font-family, Poppins, sans-serif);font-size:var(--tk-font-size-2xs, 1rem);font-weight:var(--tk-font-weight-400, 400);left:var(--tk-spacing-base-25, .25rem)}:host ::ng-deep .p-datepicker-day-selected-range{background-color:var(--tk-primary-100, #b7b0d2);color:var(--tk-primary-700, #10004f)}:host ::ng-deep .p-datepicker-panel{min-width:0!important;max-width:300px!important;width:100%!important}:host ::ng-deep .p-inputtext:disabled{background:var(--tk-color-base-surface-200, #e4e4e4)!important}.datepicker-container{margin-top:var(--tk-spacing-base-200, 2rem)}.datepicker-container.inline{margin-top:0}small.p-error{display:block;margin-top:var(--tk-spacing-base-25, .25rem);color:var(--tk-color-base-red-700, #cf2604);font-size:var(--tk-font-size-xs, .75rem)}\n"] }]
458
- }], ctorParameters: () => [], propDecorators: { required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], showClear: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClear", required: false }] }], showIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcon", required: false }] }], dateFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFormat", required: false }] }], stepHour: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepHour", required: false }] }], stepMinute: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepMinute", required: false }] }], stepSecond: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepSecond", required: false }] }], showSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeconds", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], inline: [{ type: i0.Input, args: [{ isSignal: true, alias: "inline", required: false }] }], showTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTime", required: false }] }], hourFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "hourFormat", required: false }] }], appendTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "appendTo", required: false }] }], baseZIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "baseZIndex", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], labelText: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelText", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], control: [{ type: i0.Input, args: [{ isSignal: true, alias: "control", required: false }] }], modelValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "modelValue", required: false }] }, { type: i0.Output, args: ["modelValueChange"] }], handleSelect: [{ type: i0.Output, args: ["handleSelect"] }], handleClear: [{ type: i0.Output, args: ["handleClear"] }] } });
470
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"datepicker-container\" [class.inline]=\"inline()\">\n @if (inline()) {\n <p-datepicker\n [inputId]=\"uid\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"true\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"effectiveMinDate()\"\n [maxDate]=\"effectiveMaxDate()\"\n [disabled]=\"effectiveDisabled()\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"false\"\n [inline]=\"true\"\n [showTime]=\"effectiveShowTime()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\">\n </p-datepicker>\n } @else {\n <p-floatlabel>\n <p-datepicker\n [inputId]=\"uid\"\n iconDisplay=\"input\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"true\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"effectiveMinDate()\"\n [maxDate]=\"effectiveMaxDate()\"\n [disabled]=\"effectiveDisabled()\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"false\"\n [showTime]=\"effectiveShowTime()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [appendTo]=\"appendTo()\"\n [baseZIndex]=\"baseZIndex()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"calendar-day\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n <label [for]=\"uid\">{{ labelText() }}</label>\n </p-floatlabel>\n }\n @let showError = errorMessage() && effectiveControl().invalid && (effectiveControl().dirty || effectiveControl().touched);\n @if (showError || hint()) {\n <div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n @if (showError) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{ errorMessage() }}</p-message>\n } @else if (hint()) {\n <p-message severity=\"secondary\" size=\"small\" variant=\"simple\">{{ hint() }}</p-message>\n }\n </div>\n </div>\n }\n</div>\n", styles: [":host ::ng-deep .p-datepicker{width:100%}:host ::ng-deep .p-datepicker-input{border:none;border-bottom:1px solid var(--tk-color-border-default, #cecdcd);border-radius:0;background-color:transparent;padding:var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-25, 4px)!important}:host ::ng-deep .p-datepicker-input:focus{border-color:var(--tk-color-primary-default, #16006f)}:host ::ng-deep .p-datepicker.p-disabled{opacity:1!important}:host ::ng-deep .p-datepicker.p-disabled .p-datepicker-input{background-color:var(--tk-color-base-surface-200, #e4e4e4)!important;color:var(--tk-color-base-surface-500, #8a8a8b);border-bottom-color:var(--tk-color-base-surface-300, #d2d2d2);cursor:not-allowed}:host ::ng-deep .p-datepicker.p-disabled .p-datepicker-input-icon-container{color:var(--tk-color-base-surface-500, #8a8a8b);pointer-events:none}:host ::ng-deep .p-floatlabel:has(.p-disabled) label{color:var(--tk-color-base-surface-500, #8a8a8b)!important}:host ::ng-deep .p-datepicker-decade{color:var(--tk-color-text-default, #121214)}:host ::ng-deep .p-datepicker-clear-icon{color:var(--tk-surface-700, #424243);inset-inline-end:2.5rem!important}:host ::ng-deep .p-floatlabel{position:relative}:host ::ng-deep .p-floatlabel:has(.p-inputwrapper-filled) label,:host ::ng-deep .p-floatlabel:has(input:focus) label{color:var(--tk-primary-500, #16006f)}:host ::ng-deep .p-floatlabel label{color:var(--tk-surface-700, #8a8a8b);font-family:var(--tk-font-family, Poppins, sans-serif);font-size:var(--tk-font-size-2xs, 1rem);font-weight:var(--tk-font-weight-400, 400);left:var(--tk-spacing-base-25, .25rem)}:host ::ng-deep .p-datepicker-day-selected-range{background-color:var(--tk-primary-100, #b7b0d2);color:var(--tk-primary-700, #10004f)}:host ::ng-deep .p-datepicker-panel{min-width:0!important;max-width:300px!important;width:100%!important}:host ::ng-deep .p-inputtext:disabled{background:var(--tk-color-base-surface-200, #e4e4e4)!important}.datepicker-container{margin-top:var(--tk-spacing-base-200, 2rem)}.datepicker-container.inline{margin-top:0}:host ::ng-deep p-message[severity=error] .p-inline-message-text,:host ::ng-deep p-message[severity=error] span{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep p-message[severity=secondary] .p-inline-message-text,:host ::ng-deep p-message[severity=secondary] span{color:var(--tk-color-base-surface-600, #5d5d5e)}.tk-input-bottom{display:flex;justify-content:space-between;align-items:flex-start;margin-top:var(--tk-spacing-base-25, .25rem);min-height:var(--tk-spacing-base-125, 1.25rem)}.tk-input-messages{flex:1;margin-right:var(--tk-spacing-base-100, 1rem)}\n"] }]
471
+ }], ctorParameters: () => [], propDecorators: { required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], showClear: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClear", required: false }] }], showIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcon", required: false }] }], dateFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFormat", required: false }] }], stepHour: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepHour", required: false }] }], stepMinute: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepMinute", required: false }] }], stepSecond: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepSecond", required: false }] }], showSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeconds", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], inline: [{ type: i0.Input, args: [{ isSignal: true, alias: "inline", required: false }] }], showTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTime", required: false }] }], hourFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "hourFormat", required: false }] }], appendTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "appendTo", required: false }] }], baseZIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "baseZIndex", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], labelText: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelText", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], control: [{ type: i0.Input, args: [{ isSignal: true, alias: "control", required: false }] }], modelValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "modelValue", required: false }] }, { type: i0.Output, args: ["modelValueChange"] }], handleSelect: [{ type: i0.Output, args: ["handleSelect"] }], handleClear: [{ type: i0.Output, args: ["handleClear"] }] } });
459
472
 
460
473
  /**
461
474
  * Generated bundle index. Do not edit.