@neuravision/ng-construct 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neuravision-ng-construct.mjs","sources":["../../../projects/angular/src/lib/components/alert/alert.component.ts","../../../projects/angular/src/lib/components/alert/alert.harness.ts","../../../projects/angular/src/lib/utils/aria-live-announcer.ts","../../../projects/angular/src/lib/components/accordion/accordion.i18n.ts","../../../projects/angular/src/lib/components/accordion/accordion.component.ts","../../../projects/angular/src/lib/components/accordion/accordion.harness.ts","../../../projects/angular/src/lib/components/skip-link/skip-link.component.ts","../../../projects/angular/src/lib/components/app-shell/app-shell.component.ts","../../../projects/angular/src/lib/components/app-shell-v2/app-shell-v2.component.ts","../../../projects/angular/src/lib/components/avatar/avatar.component.ts","../../../projects/angular/src/lib/components/button/button.component.ts","../../../projects/angular/src/lib/components/button/button.harness.ts","../../../projects/angular/src/lib/components/input/input.i18n.ts","../../../projects/angular/src/lib/components/input/input.component.ts","../../../projects/angular/src/lib/components/input/input.harness.ts","../../../projects/angular/src/lib/components/select/select.component.ts","../../../projects/angular/src/lib/components/textarea/textarea.component.ts","../../../projects/angular/src/lib/components/checkbox/checkbox.component.ts","../../../projects/angular/src/lib/components/radio/radio.component.ts","../../../projects/angular/src/lib/components/switch/switch.component.ts","../../../projects/angular/src/lib/components/card/card.component.ts","../../../projects/angular/src/lib/components/data-table/cell-def.directive.ts","../../../projects/angular/src/lib/components/data-table/data-table.component.ts","../../../projects/angular/src/lib/components/data-table/data-table.component.html","../../../projects/angular/src/lib/utils/focus-trap.ts","../../../projects/angular/src/lib/components/modal/modal.component.ts","../../../projects/angular/src/lib/services/toast.service.ts","../../../projects/angular/src/lib/components/toast/toast.component.ts","../../../projects/angular/src/lib/components/tabs/tabs.component.ts","../../../projects/angular/src/lib/components/nav-tabs/nav-tabs.component.ts","../../../projects/angular/src/lib/components/dropdown/dropdown.component.ts","../../../projects/angular/src/lib/components/pagination/pagination.component.ts","../../../projects/angular/src/lib/components/breadcrumbs/breadcrumbs.component.ts","../../../projects/angular/src/lib/components/datepicker/datepicker.component.ts","../../../projects/angular/src/lib/components/chip/chip.component.ts","../../../projects/angular/src/lib/components/chip-input/chip-input.component.ts","../../../projects/angular/src/lib/components/tooltip/tooltip.directive.ts","../../../projects/angular/src/lib/components/badge/badge.component.ts","../../../projects/angular/src/lib/components/badge/badge.harness.ts","../../../projects/angular/src/lib/components/progress-bar/progress-bar.component.ts","../../../projects/angular/src/lib/components/spinner/spinner.component.ts","../../../projects/angular/src/lib/components/toggle-group/toggle-group.component.ts","../../../projects/angular/src/lib/components/toolbar/toolbar.component.ts","../../../projects/angular/src/lib/components/sidebar/sidebar.component.ts","../../../projects/angular/src/lib/components/icon/icon.component.ts","../../../projects/angular/src/lib/components/slider/slider.component.ts","../../../projects/angular/src/lib/components/drawer/drawer.component.ts","../../../projects/angular/src/lib/components/combobox/combobox.component.ts","../../../projects/angular/src/lib/components/file-upload/file-upload.component.ts","../../../projects/angular/src/lib/components/select-menu/select-menu.i18n.ts","../../../projects/angular/src/lib/components/select-menu/select-menu.component.ts","../../../projects/angular/src/lib/components/select-menu/select-menu.harness.ts","../../../projects/angular/src/lib/components/navbar/navbar.component.ts","../../../projects/angular/src/lib/components/popover/popover.component.ts","../../../projects/angular/src/lib/components/banner/banner.component.ts","../../../projects/angular/src/lib/components/empty-state/empty-state.component.ts","../../../projects/angular/src/lib/components/skeleton/skeleton.component.ts","../../../projects/angular/src/lib/components/divider/divider.component.ts","../../../projects/angular/src/lib/components/field/field.component.ts","../../../projects/angular/src/lib/components/table/table.component.ts","../../../projects/angular/src/lib/components/index.ts","../../../projects/angular/src/lib/pipes/format-label.pipe.ts","../../../projects/angular/src/public-api.ts","../../../projects/angular/src/neuravision-ng-construct.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n InjectionToken,\n inject,\n input,\n output,\n signal,\n computed,\n} from '@angular/core';\n\nexport type AfAlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\n/** Translatable strings used by the alert component. */\nexport interface AfAlertI18n {\n /** Label for the dismiss button (default: `'Dismiss alert'`). */\n dismiss: string;\n /** Screen-reader announcement when the alert is dismissed (default: `'Alert dismissed'`). */\n dismissed: string;\n}\n\n/**\n * Injection token to provide custom i18n strings for {@link AfAlertComponent}.\n *\n * @example\n * providers: [{ provide: AF_ALERT_I18N, useValue: { dismiss: 'Schliessen', dismissed: 'Warnung geschlossen' } }]\n */\nexport const AF_ALERT_I18N = new InjectionToken<AfAlertI18n>('AF_ALERT_I18N', {\n factory: () => ({ dismiss: 'Dismiss alert', dismissed: 'Alert dismissed' }),\n});\n\n/**\n * Alert component for displaying contextual feedback messages.\n *\n * Automatically assigns the appropriate ARIA role based on variant:\n * - `danger` / `warning` → `role=\"alert\"` (assertive announcement)\n * - `info` / `success` → `role=\"status\"` (polite announcement)\n *\n * ### Accessibility\n * - The dismiss button is keyboard-accessible via Tab, activated by Enter/Space (native `<button>`)\n * - When dismissed, a screen-reader announcement is made via an `aria-live=\"polite\"` region\n * - The icon slot is marked `aria-hidden=\"true\"` to prevent redundant announcements\n * - The `aria-label` on the dismiss button is configurable via {@link AF_ALERT_I18N} for i18n\n * - Supports `forced-colors` (Windows High Contrast) mode\n * - Uses CSS logical properties for RTL layout support\n *\n * @example\n * <af-alert variant=\"warning\" [dismissible]=\"true\" (dismissed)=\"onDismiss()\">\n * <span icon>⚠</span>\n * <span title>Action required</span>\n * Please review the pending changes before continuing.\n * <div actions>\n * <button class=\"ct-button ct-button--secondary ct-button--sm\">Review</button>\n * </div>\n * </af-alert>\n */\n@Component({\n selector: 'af-alert',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (visible()) {\n <div\n [class]=\"alertClasses()\"\n [attr.data-variant]=\"variant()\"\n [attr.role]=\"alertRole()\">\n <span class=\"ct-alert__icon\" aria-hidden=\"true\">\n <ng-content select=\"[icon]\" />\n </span>\n <div class=\"ct-alert__content\">\n <div class=\"ct-alert__title\">\n <ng-content select=\"[title]\" />\n </div>\n <div class=\"ct-alert__description\">\n <ng-content />\n </div>\n <div class=\"ct-alert__actions\">\n <ng-content select=\"[actions]\" />\n </div>\n </div>\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"af-alert__dismiss\"\n [attr.aria-label]=\"i18n.dismiss\"\n (click)=\"dismiss()\">\n <span class=\"ct-icon ct-icon--sm\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg></span>\n </button>\n }\n </div>\n }\n <span class=\"af-alert__sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ liveAnnouncement() }}\n </span>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n\n .ct-alert--dismissible {\n position: relative;\n padding-inline-end: 2.5rem;\n }\n\n .af-alert__dismiss {\n position: absolute;\n inset-block-start: 0.625rem;\n inset-inline-end: 0.625rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.5rem;\n height: 1.5rem;\n min-width: 24px;\n min-height: 24px;\n padding: 0;\n border: none;\n background: none;\n border-radius: var(--radius-sm, 0.25rem);\n color: var(--color-text-secondary);\n font-size: 1.25rem;\n line-height: 1;\n cursor: pointer;\n }\n\n .af-alert__dismiss:hover {\n color: var(--color-text-primary);\n }\n\n .af-alert__dismiss:focus-visible {\n outline: 2px solid var(--ct-alert-accent, var(--color-brand-primary));\n outline-offset: 2px;\n }\n\n @media (forced-colors: active) {\n .af-alert__dismiss {\n border: 1px solid ButtonText;\n }\n\n .af-alert__dismiss:focus-visible {\n outline-color: Highlight;\n }\n }\n\n .af-alert__sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n ],\n})\nexport class AfAlertComponent {\n protected readonly i18n = inject(AF_ALERT_I18N);\n\n /** Color variant determining the alert's visual style and ARIA role. */\n variant = input<AfAlertVariant>('info');\n\n /** Whether the alert can be dismissed by the user. */\n dismissible = input(false);\n\n /** Emits when the user dismisses the alert. */\n dismissed = output<void>();\n\n /** Controls alert visibility. */\n visible = signal(true);\n\n /** @internal Screen-reader announcement text. */\n liveAnnouncement = signal('');\n\n alertClasses = computed(() => {\n const classes = ['ct-alert'];\n if (this.dismissible()) {\n classes.push('ct-alert--dismissible');\n }\n return classes.join(' ');\n });\n\n /**\n * Maps variant to ARIA role:\n * - danger/warning → 'alert' (assertive, immediate announcement)\n * - info/success → 'status' (polite, non-intrusive announcement)\n */\n alertRole = computed(() => {\n const v = this.variant();\n return v === 'danger' || v === 'warning' ? 'alert' : 'status';\n });\n\n /** Hides the alert and emits the dismissed event. */\n dismiss(): void {\n this.visible.set(false);\n this.dismissed.emit();\n this.liveAnnouncement.set('');\n setTimeout(() => this.liveAnnouncement.set(this.i18n.dismissed));\n }\n}\n","/**\n * Test harness for AfAlertComponent.\n *\n * Provides a semantic API for interacting with the alert in tests,\n * abstracting DOM details behind readable method names.\n *\n * @example\n * const harness = new AfAlertHarness(fixture.nativeElement);\n * expect(harness.getVariant()).toBe('info');\n * expect(harness.getRole()).toBe('status');\n * harness.dismiss();\n */\nexport class AfAlertHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-alert');\n if (!el) {\n throw new Error(\n 'AfAlertHarness: af-alert element not found in container.',\n );\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Returns the inner `.ct-alert` wrapper element, or `null` if the alert is not visible. */\n getAlertElement(): HTMLElement | null {\n return this.hostEl.querySelector('.ct-alert');\n }\n\n /** Returns the `data-variant` attribute value. Throws if the alert is not visible. */\n getVariant(): string {\n const el = this.requireVisible();\n return el.getAttribute('data-variant') ?? '';\n }\n\n /** Returns the ARIA `role` attribute value. Throws if the alert is not visible. */\n getRole(): string {\n const el = this.requireVisible();\n return el.getAttribute('role') ?? '';\n }\n\n /** Returns the full trimmed text content of the alert. Throws if not visible. */\n getText(): string {\n const el = this.requireVisible();\n return el.textContent?.trim() ?? '';\n }\n\n /** Returns the trimmed text content of the title slot. Throws if not visible. */\n getTitle(): string {\n const el = this.requireVisible();\n const title = el.querySelector('.ct-alert__title');\n return title?.textContent?.trim() ?? '';\n }\n\n /** Returns whether the alert is currently visible in the DOM. */\n isVisible(): boolean {\n return this.getAlertElement() !== null;\n }\n\n /** Returns whether the alert has a dismiss button. Throws if not visible. */\n isDismissible(): boolean {\n const el = this.requireVisible();\n return el.querySelector('.af-alert__dismiss') !== null;\n }\n\n /** Clicks the dismiss button. Throws if the alert is not visible or not dismissible. */\n dismiss(): void {\n const btn = this.getDismissButton();\n if (!btn) {\n throw new Error(\n 'AfAlertHarness: dismiss button not found. Is the alert dismissible?',\n );\n }\n btn.click();\n }\n\n /** Returns the dismiss button element, or `null` if not present. */\n getDismissButton(): HTMLButtonElement | null {\n return (\n this.getAlertElement()?.querySelector<HTMLButtonElement>(\n '.af-alert__dismiss',\n ) ?? null\n );\n }\n\n /** Returns the `aria-live` region element for screen-reader announcements. */\n getLiveRegion(): HTMLElement | null {\n return this.hostEl.querySelector('[aria-live=\"polite\"]');\n }\n\n private requireVisible(): HTMLElement {\n const el = this.getAlertElement();\n if (!el) {\n throw new Error('AfAlertHarness: alert is not visible.');\n }\n return el;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable, OnDestroy } from '@angular/core';\n\n/**\n * Lightweight service that announces messages to screen readers\n * via an `aria-live` region. No `@angular/cdk` dependency required.\n *\n * @example\n * private announcer = inject(AriaLiveAnnouncer);\n * this.announcer.announce('Section expanded');\n */\n@Injectable({ providedIn: 'root' })\nexport class AriaLiveAnnouncer implements OnDestroy {\n private readonly document = inject(DOCUMENT);\n private liveEl: HTMLElement | null = null;\n private clearTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** Announce a message to screen readers. */\n announce(message: string, politeness: 'polite' | 'assertive' = 'polite'): void {\n const el = this.getOrCreateLiveElement();\n el.setAttribute('aria-live', politeness);\n\n // Clear then re-set so assistive tech registers the change.\n el.textContent = '';\n\n if (this.clearTimer) {\n clearTimeout(this.clearTimer);\n }\n\n // Small delay so the DOM mutation is picked up as a new announcement.\n setTimeout(() => {\n el.textContent = message;\n }, 50);\n\n // Auto-clear after 3 seconds to avoid stale text.\n this.clearTimer = setTimeout(() => {\n el.textContent = '';\n }, 3000);\n }\n\n ngOnDestroy(): void {\n if (this.clearTimer) {\n clearTimeout(this.clearTimer);\n }\n this.liveEl?.remove();\n this.liveEl = null;\n }\n\n private getOrCreateLiveElement(): HTMLElement {\n if (this.liveEl) return this.liveEl;\n\n const el = this.document.createElement('div');\n el.setAttribute('aria-live', 'polite');\n el.setAttribute('aria-atomic', 'true');\n el.classList.add('cdk-visually-hidden');\n\n // Visually hidden but accessible to screen readers.\n Object.assign(el.style, {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: '0',\n });\n\n this.document.body.appendChild(el);\n this.liveEl = el;\n return el;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Translatable strings used by the accordion component. */\nexport interface AfAccordionI18n {\n /** Announcement when a section is expanded. Use `{heading}` as placeholder. */\n expanded: string;\n /** Announcement when a section is collapsed. Use `{heading}` as placeholder. */\n collapsed: string;\n}\n\n/**\n * Injection token to override accordion screen-reader announcements.\n *\n * @example\n * providers: [{\n * provide: AF_ACCORDION_I18N,\n * useValue: { expanded: '{heading} ausgeklappt', collapsed: '{heading} eingeklappt' },\n * }]\n */\nexport const AF_ACCORDION_I18N = new InjectionToken<AfAccordionI18n>('AfAccordionI18n', {\n factory: () => ({\n expanded: '{heading} expanded',\n collapsed: '{heading} collapsed',\n }),\n});\n","import {\n Component,\n ChangeDetectionStrategy,\n booleanAttribute,\n input,\n model,\n computed,\n contentChildren,\n effect,\n ElementRef,\n viewChild,\n inject,\n forwardRef,\n} from '@angular/core';\nimport { AriaLiveAnnouncer } from '../../utils/aria-live-announcer';\nimport { AF_ACCORDION_I18N } from './accordion.i18n';\n\nlet nextId = 0;\n\n/**\n * Individual accordion item used within af-accordion.\n *\n * @example\n * <af-accordion-item heading=\"Section Title\">\n * <p>Content goes here</p>\n * </af-accordion-item>\n */\n@Component({\n selector: 'af-accordion-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <details\n #details\n class=\"ct-accordion__item\"\n [open]=\"expanded()\"\n (toggle)=\"onToggle($event)\">\n <summary\n class=\"ct-accordion__trigger\"\n [attr.id]=\"triggerId()\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"panelId()\"\n [attr.aria-disabled]=\"disabled() || null\"\n (click)=\"onClick($event)\">\n <span class=\"ct-accordion__heading\">{{ heading() }}</span>\n <svg\n class=\"ct-accordion__icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </summary>\n <div\n class=\"ct-accordion__content\"\n role=\"region\"\n [attr.id]=\"panelId()\"\n [attr.aria-labelledby]=\"triggerId()\">\n <ng-content></ng-content>\n </div>\n </details>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfAccordionItemComponent {\n private itemId = nextId++;\n private accordion = inject(forwardRef(() => AfAccordionComponent), { optional: true });\n private announcer = inject(AriaLiveAnnouncer);\n private i18n = inject(AF_ACCORDION_I18N);\n\n /** Heading text displayed in the accordion trigger. */\n heading = input.required<string>();\n\n /** Whether this item is expanded (supports two-way binding). */\n expanded = model(false);\n\n /** Whether this item is disabled. */\n disabled = input(false, { transform: booleanAttribute });\n\n detailsRef = viewChild.required<ElementRef<HTMLDetailsElement>>('details');\n\n triggerId = computed(() => `af-accordion-trigger-${this.itemId}`);\n panelId = computed(() => `af-accordion-panel-${this.itemId}`);\n\n /** Sync signal when the native details state diverges (e.g. programmatic open). */\n onToggle(event: Event): void {\n const details = event.target as HTMLDetailsElement;\n if (details.open !== this.expanded()) {\n this.expanded.set(details.open);\n if (details.open) {\n this.accordion?.onItemExpanded(this);\n }\n }\n }\n\n /**\n * Prevent native details toggle and manage state via signals\n * so the expanded signal is always the source of truth.\n */\n onClick(event: MouseEvent): void {\n event.preventDefault();\n if (this.disabled()) return;\n const willExpand = !this.expanded();\n this.expanded.set(willExpand);\n if (willExpand) {\n this.accordion?.onItemExpanded(this);\n }\n const template = willExpand ? this.i18n.expanded : this.i18n.collapsed;\n this.announcer.announce(template.replace('{heading}', this.heading()));\n }\n\n /** Programmatically collapse this item. */\n collapse(): void {\n this.expanded.set(false);\n }\n\n /** Focus the trigger (summary) element. */\n focusTrigger(): void {\n this.detailsRef().nativeElement.querySelector('summary')?.focus();\n }\n}\n\n/**\n * Accordion container that manages expand/collapse behaviour of child items.\n *\n * @example\n * <af-accordion>\n * <af-accordion-item heading=\"Section 1\">Content 1</af-accordion-item>\n * <af-accordion-item heading=\"Section 2\">Content 2</af-accordion-item>\n * </af-accordion>\n *\n * @example Single-expand mode\n * <af-accordion [multi]=\"false\">\n * <af-accordion-item heading=\"Only one open\">Content</af-accordion-item>\n * </af-accordion>\n */\n@Component({\n selector: 'af-accordion',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(keydown)': 'handleKeydown($event)',\n },\n template: `\n <div [class]=\"accordionClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfAccordionComponent {\n /** Allow multiple items to be open at the same time (default: true). */\n multi = input(true, { transform: booleanAttribute });\n\n /** Use the bordered variant. */\n bordered = input(false, { transform: booleanAttribute });\n\n items = contentChildren(AfAccordionItemComponent);\n\n accordionClasses = computed(() => {\n const classes = ['ct-accordion'];\n if (this.bordered()) {\n classes.push('ct-accordion--bordered');\n }\n return classes.join(' ');\n });\n\n /**\n * Enforce single-expand constraint when `multi` is false\n * and multiple items are initially expanded.\n */\n private enforceConstraint = effect(() => {\n if (this.multi()) return;\n const expanded = this.items().filter((i) => i.expanded());\n if (expanded.length > 1) {\n for (let i = 1; i < expanded.length; i++) {\n expanded[i].collapse();\n }\n }\n });\n\n /** Called by child items when they expand. */\n onItemExpanded(expandedItem: AfAccordionItemComponent): void {\n if (this.multi()) return;\n for (const item of this.items()) {\n if (item !== expandedItem && item.expanded()) {\n item.collapse();\n }\n }\n }\n\n handleKeydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n if (target.tagName !== 'SUMMARY') return;\n\n const enabledItems = this.items().filter((i) => !i.disabled());\n if (enabledItems.length === 0) return;\n\n const currentIndex = enabledItems.findIndex(\n (item) => item.detailsRef().nativeElement.querySelector('summary') === target,\n );\n if (currentIndex === -1) return;\n\n const last = enabledItems.length - 1;\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n enabledItems[(currentIndex + 1) % enabledItems.length].focusTrigger();\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n enabledItems[(currentIndex - 1 + enabledItems.length) % enabledItems.length].focusTrigger();\n break;\n }\n case 'Home': {\n event.preventDefault();\n enabledItems[0].focusTrigger();\n break;\n }\n case 'End': {\n event.preventDefault();\n enabledItems[last].focusTrigger();\n break;\n }\n }\n }\n}\n","/**\n * Test harness for AfAccordionItemComponent.\n *\n * Provides a semantic API for interacting with a single accordion item,\n * abstracting DOM details behind readable method names.\n */\nexport class AfAccordionItemHarness {\n constructor(private readonly hostEl: HTMLElement) {}\n\n /** Returns the heading text. */\n getHeading(): string {\n const heading = this.hostEl.querySelector('.ct-accordion__heading');\n return heading?.textContent?.trim() ?? '';\n }\n\n /** Returns whether the item is expanded. */\n isExpanded(): boolean {\n return this.getTriggerElement().getAttribute('aria-expanded') === 'true';\n }\n\n /** Returns whether the item is disabled. */\n isDisabled(): boolean {\n return this.getTriggerElement().getAttribute('aria-disabled') === 'true';\n }\n\n /** Clicks the trigger to toggle the item. */\n toggle(): void {\n this.getTriggerElement().click();\n }\n\n /** Returns the trigger (summary) element. */\n getTriggerElement(): HTMLElement {\n const summary = this.hostEl.querySelector('summary');\n if (!summary) {\n throw new Error('AfAccordionItemHarness: <summary> element not found.');\n }\n return summary;\n }\n\n /** Returns the content panel element. */\n getContentElement(): HTMLElement {\n const panel = this.hostEl.querySelector('[role=\"region\"]');\n if (!panel) {\n throw new Error('AfAccordionItemHarness: content region not found.');\n }\n return panel as HTMLElement;\n }\n\n /** Returns the `aria-controls` value of the trigger. */\n getAriaControls(): string | null {\n return this.getTriggerElement().getAttribute('aria-controls');\n }\n\n /** Returns the `aria-expanded` value of the trigger. */\n getAriaExpanded(): string | null {\n return this.getTriggerElement().getAttribute('aria-expanded');\n }\n}\n\n/**\n * Test harness for AfAccordionComponent.\n *\n * @example\n * const harness = new AfAccordionHarness(fixture.nativeElement);\n * expect(harness.getItems()).toHaveLength(3);\n * harness.getItem(0).toggle();\n */\nexport class AfAccordionHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-accordion');\n if (!el) {\n throw new Error('AfAccordionHarness: af-accordion element not found in container.');\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Returns harnesses for all accordion items. */\n getItems(): AfAccordionItemHarness[] {\n const items = Array.from(this.hostEl.querySelectorAll('af-accordion-item'));\n return items.map((el) => new AfAccordionItemHarness(el as HTMLElement));\n }\n\n /** Returns the harness for the accordion item at the given index. */\n getItem(index: number): AfAccordionItemHarness {\n const items = this.getItems();\n if (index < 0 || index >= items.length) {\n throw new Error(\n `AfAccordionHarness: index ${index} out of range (${items.length} items).`,\n );\n }\n return items[index];\n }\n\n /** Returns whether the bordered variant is applied. */\n isBordered(): boolean {\n const wrapper = this.hostEl.querySelector('.ct-accordion');\n return wrapper?.classList.contains('ct-accordion--bordered') ?? false;\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n inject,\n ElementRef,\n DOCUMENT,\n} from '@angular/core';\n\n/**\n * Skip-link component for keyboard-only navigation bypass.\n *\n * Renders an anchor that is visually hidden off-screen and slides into view\n * when focused. On activation it moves focus to the target element, allowing\n * keyboard users to skip repetitive navigation blocks.\n *\n * Must be placed as the first focusable element in the document.\n *\n * @example\n * <af-skip-link target=\"main-content\" />\n * <nav>…</nav>\n * <main id=\"main-content\" tabindex=\"-1\">…</main>\n */\n@Component({\n selector: 'af-skip-link',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <a\n class=\"ct-skip-link\"\n [attr.href]=\"'#' + target()\"\n (click)=\"focusTarget($event)\"\n >\n {{ label() }}\n </a>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfSkipLinkComponent {\n /** ID of the element to skip to (without the leading `#`). */\n target = input.required<string>();\n\n /** Visible label text shown when the link receives focus. */\n label = input('Skip to main content');\n\n private readonly document = inject(DOCUMENT);\n\n /**\n * Moves focus to the target element so keyboard navigation\n * continues from there instead of the top of the page.\n */\n focusTarget(event: Event): void {\n event.preventDefault();\n\n const el = this.document.getElementById(this.target());\n if (!el) {\n return;\n }\n\n if (!el.hasAttribute('tabindex')) {\n el.setAttribute('tabindex', '-1');\n }\n el.focus();\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n booleanAttribute,\n input,\n model,\n computed,\n} from '@angular/core';\nimport { AfSkipLinkComponent } from '../skip-link';\n\nexport type AfShellSidebarState = 'expanded' | 'collapsed' | 'hidden';\nexport type AfShellPanelState = 'open' | 'closed';\n\n/**\n * Page header rendered inside the main content area of an App Shell.\n *\n * Displays breadcrumbs, page title, and actions in a flex row.\n * Place inside `<af-app-shell>` without any slot attribute so it\n * projects into the main area.\n *\n * @example\n * <af-app-shell>\n * <af-app-shell-page-header sticky>\n * <nav aria-label=\"Breadcrumb\">Home / Dashboard</nav>\n * <h1>Dashboard</h1>\n * <button class=\"ct-button\">New Item</button>\n * </af-app-shell-page-header>\n * <p>Main content…</p>\n * </af-app-shell>\n */\n@Component({\n selector: 'af-app-shell-page-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [class]=\"classes()\">\n <ng-content />\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfAppShellPageHeaderComponent {\n /** Pin the page header to the top of the scrollable main area. */\n sticky = input(false, { transform: booleanAttribute });\n\n classes = computed(() => {\n const c = ['ct-app-shell__page-header'];\n if (this.sticky()) {\n c.push('ct-app-shell__page-header--sticky');\n }\n return c.join(' ');\n });\n}\n\n/**\n * Classic CSS-Grid App Shell that orchestrates header, sidebar,\n * main content, optional panel, and footer.\n *\n * Wraps the `ct-app-shell` CSS component from the Construct Design System.\n * Sidebar and panel states are two-way bindable via `model()` signals.\n *\n * Content projection slots:\n * - `[header]` — Navbar / top bar\n * - `[sidebar]` — Navigation sidebar\n * - `[panel]` — Right-side contextual panel\n * - `[footer]` — Footer area\n * - `[bottomNav]` — Mobile bottom navigation (requires `bottomNav` modifier)\n * - *(default)* — Main content (including `<af-app-shell-page-header>`)\n *\n * @example\n * <af-app-shell [(sidebarState)]=\"sidebarState\" [(panelState)]=\"panelState\" sidebarFullHeight>\n * <af-navbar header ariaLabel=\"Main\">…</af-navbar>\n * <af-sidebar sidebar ariaLabel=\"Navigation\">…</af-sidebar>\n * <af-app-shell-page-header sticky>\n * <h1>Dashboard</h1>\n * </af-app-shell-page-header>\n * <p>Content goes here</p>\n * <div panel>Inspector</div>\n * <footer footer>© 2026</footer>\n * </af-app-shell>\n */\n@Component({\n selector: 'af-app-shell',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AfSkipLinkComponent],\n template: `\n <div\n [class]=\"shellClasses()\"\n [attr.data-sidebar-state]=\"sidebarState()\"\n [attr.data-panel-state]=\"panelState()\">\n <af-skip-link [target]=\"mainId()\" [label]=\"skipLinkLabel()\" />\n\n <header class=\"ct-app-shell__header\">\n <ng-content select=\"[header]\" />\n </header>\n\n <aside class=\"ct-app-shell__sidebar\" [attr.aria-label]=\"sidebarLabel()\">\n <ng-content select=\"[sidebar]\" />\n </aside>\n\n <main class=\"ct-app-shell__main\" [id]=\"mainId()\" tabindex=\"0\">\n <ng-content />\n </main>\n\n <aside class=\"ct-app-shell__panel\" [attr.aria-label]=\"panelLabel()\">\n <ng-content select=\"[panel]\" />\n </aside>\n\n <footer class=\"ct-app-shell__footer\">\n <ng-content select=\"[footer]\" />\n </footer>\n\n <div class=\"ct-app-shell__bottom-nav\">\n <ng-content select=\"[bottomNav]\" />\n </div>\n\n <div\n class=\"ct-app-shell__backdrop\"\n (click)=\"onBackdropClick()\"\n aria-hidden=\"true\"></div>\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfAppShellComponent {\n /** Current sidebar state — two-way bindable. */\n sidebarState = model<AfShellSidebarState>('expanded');\n\n /** Current panel state — two-way bindable. */\n panelState = model<AfShellPanelState>('closed');\n\n /** Remove the sidebar column entirely. */\n noSidebar = input(false, { transform: booleanAttribute });\n\n /** Place the sidebar on the right side. */\n sidebarRight = input(false, { transform: booleanAttribute });\n\n /** Sidebar spans the full viewport height (header sits beside it). */\n sidebarFullHeight = input(false, { transform: booleanAttribute });\n\n /** Stick the footer to the bottom with a top border. */\n footerSticky = input(false, { transform: booleanAttribute });\n\n /** Enable bottom navigation on mobile (hides sidebar and footer). */\n bottomNav = input(false, { transform: booleanAttribute });\n\n /** Accessible label for the sidebar landmark. */\n sidebarLabel = input('Site navigation');\n\n /** Accessible label for the panel landmark. */\n panelLabel = input('Details');\n\n /** ID of the main content element (used by skip-link). */\n mainId = input('main-content');\n\n /** Visible text of the skip-link. */\n skipLinkLabel = input('Skip to content');\n\n shellClasses = computed(() => {\n const classes = ['ct-app-shell'];\n\n if (this.noSidebar()) {\n classes.push('ct-app-shell--no-sidebar');\n }\n if (this.sidebarRight()) {\n classes.push('ct-app-shell--sidebar-right');\n }\n if (this.sidebarFullHeight()) {\n classes.push('ct-app-shell--sidebar-full-height');\n }\n if (this.footerSticky()) {\n classes.push('ct-app-shell--footer-sticky');\n }\n if (this.bottomNav()) {\n classes.push('ct-app-shell--bottom-nav');\n }\n\n return classes.join(' ');\n });\n\n /** Dismiss the mobile sidebar overlay. */\n onBackdropClick(): void {\n this.sidebarState.set('hidden');\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n booleanAttribute,\n input,\n model,\n computed,\n} from '@angular/core';\nimport { AfSkipLinkComponent } from '../skip-link';\nimport { AfShellSidebarState, AfShellPanelState } from '../app-shell';\n\n/**\n * Toolbar rendered inside the main content area of an App Shell V2.\n *\n * Replaces the classic full-width page header with a toolbar row\n * for breadcrumbs, page title, and actions. Place inside\n * `<af-app-shell-v2>` without any slot attribute so it projects\n * into the main area.\n *\n * @example\n * <af-app-shell-v2>\n * <af-app-shell-v2-toolbar sticky>\n * <nav aria-label=\"Breadcrumb\">Home / Dashboard</nav>\n * <div>\n * <button class=\"ct-button\">Export</button>\n * </div>\n * </af-app-shell-v2-toolbar>\n * <p>Main content…</p>\n * </af-app-shell-v2>\n */\n@Component({\n selector: 'af-app-shell-v2-toolbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [class]=\"classes()\">\n <ng-content />\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfAppShellV2ToolbarComponent {\n /** Pin the toolbar to the top of the scrollable main area. */\n sticky = input(false, { transform: booleanAttribute });\n\n classes = computed(() => {\n const c = ['ct-app-shell-v2__toolbar'];\n if (this.sticky()) {\n c.push('ct-app-shell-v2__toolbar--sticky');\n }\n return c.join(' ');\n });\n}\n\n/**\n * Floating-canvas App Shell with elevated surfaces, rounded corners,\n * and optional glass/branded modifiers.\n *\n * Wraps the `ct-app-shell-v2` CSS component from the Construct Design System.\n * Sidebar and panel states are two-way bindable via `model()` signals.\n *\n * Content projection slots:\n * - `[header]` — Optional floating header bar (requires `withHeader` input)\n * - `[sidebar]` — Floating sidebar surface\n * - `[panel]` — Right-side contextual panel (inside body flex container)\n * - `[footer]` — Footer inside the main area\n * - *(default)* — Main content (including `<af-app-shell-v2-toolbar>`)\n *\n * @example\n * <af-app-shell-v2\n * [(sidebarState)]=\"sidebarState\"\n * [(panelState)]=\"panelState\"\n * withHeader\n * sidebarBranded\n * glass>\n * <af-navbar header ariaLabel=\"Main\">…</af-navbar>\n * <af-sidebar sidebar ariaLabel=\"Navigation\">…</af-sidebar>\n * <af-app-shell-v2-toolbar sticky>\n * <h1>Dashboard</h1>\n * </af-app-shell-v2-toolbar>\n * <p>Content goes here</p>\n * <div panel>Inspector</div>\n * <footer footer>© 2026</footer>\n * </af-app-shell-v2>\n */\n@Component({\n selector: 'af-app-shell-v2',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AfSkipLinkComponent],\n template: `\n <div\n [class]=\"shellClasses()\"\n [attr.data-sidebar-state]=\"sidebarState()\"\n [attr.data-panel-state]=\"panelState()\">\n <af-skip-link [target]=\"mainId()\" [label]=\"skipLinkLabel()\" />\n\n @if (withHeader()) {\n <header class=\"ct-app-shell-v2__header\">\n <ng-content select=\"[header]\" />\n </header>\n }\n\n <aside class=\"ct-app-shell-v2__sidebar\" [attr.aria-label]=\"sidebarLabel()\">\n <ng-content select=\"[sidebar]\" />\n </aside>\n\n <div class=\"ct-app-shell-v2__body\">\n <main class=\"ct-app-shell-v2__main\" [id]=\"mainId()\" tabindex=\"0\">\n <ng-content />\n <div class=\"ct-app-shell-v2__footer\">\n <ng-content select=\"[footer]\" />\n </div>\n </main>\n\n <aside class=\"ct-app-shell-v2__panel\" [attr.aria-label]=\"panelLabel()\">\n <ng-content select=\"[panel]\" />\n </aside>\n </div>\n\n <div\n class=\"ct-app-shell-v2__backdrop\"\n (click)=\"onBackdropClick()\"\n aria-hidden=\"true\"></div>\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfAppShellV2Component {\n /** Current sidebar state — two-way bindable. */\n sidebarState = model<AfShellSidebarState>('expanded');\n\n /** Current panel state — two-way bindable. */\n panelState = model<AfShellPanelState>('closed');\n\n /** Remove the sidebar entirely. */\n noSidebar = input(false, { transform: booleanAttribute });\n\n /** Place the sidebar on the right side. */\n sidebarRight = input(false, { transform: booleanAttribute });\n\n /** Sidebar spans the full viewport height (header sits beside it). */\n sidebarFullHeight = input(false, { transform: booleanAttribute });\n\n /** Show the optional floating header bar. */\n withHeader = input(false, { transform: booleanAttribute });\n\n /** Dark-branded sidebar (Slack / Linear / Discord aesthetic). */\n sidebarBranded = input(false, { transform: booleanAttribute });\n\n /** Frosted glass morphism effect on all floating surfaces. */\n glass = input(false, { transform: booleanAttribute });\n\n /** Accessible label for the sidebar landmark. */\n sidebarLabel = input('Site navigation');\n\n /** Accessible label for the panel landmark. */\n panelLabel = input('Details');\n\n /** ID of the main content element (used by skip-link). */\n mainId = input('main-content');\n\n /** Visible text of the skip-link. */\n skipLinkLabel = input('Skip to content');\n\n shellClasses = computed(() => {\n const classes = ['ct-app-shell-v2'];\n\n if (this.noSidebar()) {\n classes.push('ct-app-shell-v2--no-sidebar');\n }\n if (this.sidebarRight()) {\n classes.push('ct-app-shell-v2--sidebar-right');\n }\n if (this.sidebarFullHeight()) {\n classes.push('ct-app-shell-v2--sidebar-full-height');\n }\n if (this.withHeader()) {\n classes.push('ct-app-shell-v2--with-header');\n }\n if (this.sidebarBranded()) {\n classes.push('ct-app-shell-v2--sidebar-branded');\n }\n if (this.glass()) {\n classes.push('ct-app-shell-v2--glass');\n }\n\n return classes.join(' ');\n });\n\n /** Dismiss the mobile sidebar overlay. */\n onBackdropClick(): void {\n this.sidebarState.set('hidden');\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n signal,\n computed,\n} from '@angular/core';\n\nexport type AfAvatarSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type AfAvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\n/**\n * Avatar component displaying a user image with fallback to initials.\n *\n * When `src` is provided the component renders an `<img>`. If the image\n * fails to load or no `src` is given, initials derived from `name` are\n * shown instead.\n *\n * @example\n * <af-avatar src=\"/photo.jpg\" name=\"Jane Doe\" alt=\"Jane Doe\" size=\"lg\" />\n * <af-avatar name=\"John Smith\" status=\"online\" />\n */\n@Component({\n selector: 'af-avatar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span [class]=\"avatarClasses()\" role=\"img\" [attr.aria-label]=\"ariaLabel()\">\n @if (showImage()) {\n <img\n class=\"ct-avatar__image\"\n [src]=\"src()\"\n [alt]=\"alt() || name()\"\n (error)=\"onImageError()\" />\n } @else {\n <span class=\"ct-avatar__initials\" aria-hidden=\"true\">{{ initials() }}</span>\n }\n @if (status()) {\n <span\n class=\"ct-avatar__status\"\n [attr.data-status]=\"status()\"\n [attr.aria-label]=\"status() + ' status'\"\n role=\"img\">\n </span>\n }\n </span>\n `,\n styles: [\n `\n :host {\n display: inline-block;\n }\n `,\n ],\n})\nexport class AfAvatarComponent {\n /** Image URL. Falls back to initials when missing or on load error. */\n src = input('');\n\n /** Full name used to compute initials and as default alt text. */\n name = input('');\n\n /** Size variant. */\n size = input<AfAvatarSize>('md');\n\n /** Alt text for the avatar image. Defaults to `name` if not set. */\n alt = input('');\n\n /** Online status indicator. */\n status = input<AfAvatarStatus | undefined>(undefined);\n\n /** Tracks whether the image failed to load. */\n imageError = signal(false);\n\n /** Whether to render the `<img>` element. */\n showImage = computed(() => !!this.src() && !this.imageError());\n\n /** Initials derived from the first letter of each word in `name`. */\n initials = computed(() => {\n const parts = this.name().trim().split(/\\s+/);\n if (parts.length === 0 || parts[0] === '') return '';\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase();\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();\n });\n\n /** Accessible label for the avatar. */\n ariaLabel = computed(() => this.alt() || this.name() || 'Avatar');\n\n avatarClasses = computed(() => {\n const classes = ['ct-avatar'];\n if (this.size() !== 'md') {\n classes.push(`ct-avatar--${this.size()}`);\n }\n return classes.join(' ');\n });\n\n /** Handles image load failure by switching to initials fallback. */\n onImageError(): void {\n this.imageError.set(true);\n }\n}\n","import { Component, ChangeDetectionStrategy, booleanAttribute, input, output, computed, isDevMode, effect } from '@angular/core';\n\nexport type AfButtonVariant = 'primary' | 'secondary' | 'ghost' | 'outline' | 'danger' | 'accent' | 'link';\nexport type AfButtonSize = 'sm' | 'md' | 'lg';\nexport type AfButtonType = 'button' | 'submit' | 'reset';\n\n/**\n * Button component from the Construct Design System.\n *\n * Wraps a native `<button>` element with design system tokens and\n * variant/size modifiers.\n *\n * @example Basic usage\n * <af-button variant=\"primary\" (clicked)=\"save()\">Save</af-button>\n *\n * @example Variants\n * <af-button variant=\"secondary\">Secondary</af-button>\n * <af-button variant=\"ghost\">Ghost</af-button>\n * <af-button variant=\"outline\">Outline</af-button>\n * <af-button variant=\"danger\">Danger</af-button>\n * <af-button variant=\"accent\">Accent</af-button>\n * <af-button variant=\"link\">Link</af-button>\n *\n * @example Icon-only button (ariaLabel required)\n * <af-button variant=\"ghost\" size=\"sm\" iconOnly ariaLabel=\"Delete item\">\n * <af-icon name=\"delete\" />\n * </af-button>\n *\n * @example Disabled button\n * <af-button [disabled]=\"true\">Cannot click</af-button>\n *\n * @accessibility\n * - Uses native `<button>` element — keyboard (Enter/Space) and screen reader support built-in.\n * - Disabled state uses the native `disabled` attribute.\n * - Icon-only buttons must provide `ariaLabel` for screen reader users.\n * A dev-mode warning is emitted if `ariaLabel` is missing on an icon-only button.\n * - Focus indicator: 2px outline via `:focus-visible` (design system CSS).\n * - Reduced motion: `transform` animation disabled via `prefers-reduced-motion`.\n */\n@Component({\n selector: 'af-button',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n [type]=\"type()\"\n [disabled]=\"disabled()\"\n [class]=\"buttonClasses()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.title]=\"title() || null\"\n (click)=\"handleClick($event)\">\n <ng-content></ng-content>\n </button>\n `,\n styles: [`\n :host {\n display: inline-block;\n }\n `]\n})\nexport class AfButtonComponent {\n /** Button variant/style */\n variant = input<AfButtonVariant>('primary');\n\n /** Button size */\n size = input<AfButtonSize>('md');\n\n /** Button type attribute */\n type = input<AfButtonType>('button');\n\n /** Whether button is disabled */\n disabled = input(false, { transform: booleanAttribute });\n\n /** Whether this is an icon-only button (no visible text) */\n iconOnly = input(false, { transform: booleanAttribute });\n\n /** Accessible label for icon-only buttons */\n ariaLabel = input('');\n\n /** Tooltip text shown on hover */\n title = input('');\n\n /** Click event emitter */\n clicked = output<MouseEvent>();\n\n buttonClasses = computed(() => {\n const classes = ['ct-button'];\n\n if (this.variant() !== 'primary') {\n classes.push(`ct-button--${this.variant()}`);\n }\n\n if (this.size() !== 'md') {\n classes.push(`ct-button--${this.size()}`);\n }\n\n if (this.iconOnly()) {\n classes.push('ct-button--icon');\n }\n\n return classes.join(' ');\n });\n\n private readonly iconOnlyWarning = effect(() => {\n if (isDevMode() && this.iconOnly() && !this.ariaLabel()) {\n console.warn('af-button: iconOnly buttons require an ariaLabel for screen readers.');\n }\n });\n\n handleClick(event: MouseEvent): void {\n if (!this.disabled()) {\n this.clicked.emit(event);\n }\n }\n}\n","/**\n * Test harness for AfButtonComponent.\n *\n * Provides a semantic API for interacting with the button in tests,\n * abstracting DOM details behind readable method names.\n *\n * @example\n * const harness = new AfButtonHarness(fixture.nativeElement);\n * expect(harness.getText()).toBe('Save');\n * expect(harness.isDisabled()).toBe(false);\n * harness.click();\n */\nexport class AfButtonHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-button');\n if (!el) {\n throw new Error('AfButtonHarness: af-button element not found in container.');\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Returns the inner native `<button>` element. */\n getButtonElement(): HTMLButtonElement {\n const btn = this.hostEl.querySelector('button');\n if (!btn) {\n throw new Error('AfButtonHarness: inner <button> element not found.');\n }\n return btn;\n }\n\n /** Returns the trimmed text content of the button. */\n getText(): string {\n return this.getButtonElement().textContent?.trim() ?? '';\n }\n\n /** Returns whether the button is disabled. */\n isDisabled(): boolean {\n return this.getButtonElement().disabled;\n }\n\n /** Clicks the inner button element. */\n click(): void {\n this.getButtonElement().click();\n }\n\n /** Returns the `aria-label` attribute value, or `null` if absent. */\n getAriaLabel(): string | null {\n return this.getButtonElement().getAttribute('aria-label');\n }\n\n /** Returns the `title` attribute value, or `null` if absent. */\n getTitle(): string | null {\n return this.getButtonElement().getAttribute('title');\n }\n\n /** Returns the `type` attribute of the button. */\n getType(): string {\n return this.getButtonElement().type;\n }\n\n /** Returns the full `class` attribute string of the inner button. */\n getClasses(): string {\n return this.getButtonElement().className;\n }\n\n /** Returns whether the inner button has the given CSS class. */\n hasClass(className: string): boolean {\n return this.getButtonElement().classList.contains(className);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Translatable strings used by the input component. */\nexport interface AfInputI18n {\n /** Screen-reader label for the required indicator. */\n required: string;\n}\n\n/**\n * Injection token to override input screen-reader announcements.\n *\n * @example\n * providers: [{\n * provide: AF_INPUT_I18N,\n * useValue: { required: 'Pflichtfeld' },\n * }]\n */\nexport const AF_INPUT_I18N = new InjectionToken<AfInputI18n>('AfInputI18n', {\n factory: () => ({\n required: 'required',\n }),\n});\n","import {\n Component,\n ChangeDetectionStrategy,\n computed,\n input,\n model,\n forwardRef,\n inject,\n booleanAttribute,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AF_INPUT_I18N } from './input.i18n';\n\nexport type AfInputType = 'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url';\n\n/**\n * Input field component with form control support.\n *\n * Wraps a native `<input>` element with label, hint, error, and icon slots.\n * Implements `ControlValueAccessor` for seamless `ngModel` and `formControl` integration.\n *\n * @example\n * <af-input\n * label=\"Email\"\n * type=\"email\"\n * placeholder=\"name@company.com\"\n * [(ngModel)]=\"email\"\n * hint=\"We will not share this.\"\n * />\n *\n * @example\n * <af-input\n * label=\"Name\"\n * [error]=\"nameError\"\n * required\n * />\n */\n@Component({\n selector: 'af-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfInputComponent),\n multi: true,\n },\n ],\n host: {\n style: 'display: block',\n },\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span [attr.aria-label]=\"i18n.required\"> *</span>\n }\n </label>\n }\n\n @if (iconPosition()) {\n <div class=\"ct-input-wrap\">\n @if (iconPosition() === 'left') {\n <span class=\"ct-input__icon\" aria-hidden=\"true\">\n <ng-content select=\"[icon]\" />\n </span>\n }\n <input\n [id]=\"inputId()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [class]=\"inputClasses()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n @if (iconPosition() === 'right') {\n <span class=\"ct-input__icon\" aria-hidden=\"true\">\n <ng-content select=\"[icon]\" />\n </span>\n }\n </div>\n } @else {\n <input\n [id]=\"inputId()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [class]=\"inputClasses()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n }\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId()\">\n {{ hint() }}\n </div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" role=\"alert\" [id]=\"errorId()\">\n {{ error() }}\n </div>\n }\n </div>\n `,\n})\nexport class AfInputComponent implements ControlValueAccessor {\n private static nextId = 0;\n\n readonly i18n = inject(AF_INPUT_I18N);\n\n /** Input label. */\n label = input('');\n\n /** Input type. */\n type = input<AfInputType>('text');\n\n /** Placeholder text. */\n placeholder = input('');\n\n /** Hint text shown below input. */\n hint = input('');\n\n /** Error message — shows error state and message. */\n error = input('');\n\n /** Whether input is required. */\n required = input(false, { transform: booleanAttribute });\n\n /** Whether input is disabled. */\n disabled = model(false);\n\n /** Icon position (if icon content is projected). */\n iconPosition = input<'left' | 'right' | null>(null);\n\n /** Unique input ID. */\n inputId = input(`af-input-${AfInputComponent.nextId++}`);\n\n /** @docs-private — internal form value managed by CVA. */\n readonly value = signal('');\n onChange: (value: string) => void = () => {};\n onTouched: () => void = () => {};\n\n /** Computed hint element ID. */\n hintId = computed(() => `${this.inputId()}-hint`);\n\n /** Computed error element ID. */\n errorId = computed(() => `${this.inputId()}-error`);\n\n /** Computed CSS classes for the inner input. */\n inputClasses = computed(() => {\n const classes = ['ct-input'];\n if (this.iconPosition()) {\n classes.push('ct-input--with-icon');\n }\n return classes.join(' ');\n });\n\n /** Computed `aria-describedby` value linking to hint or error. */\n ariaDescribedBy = computed(() => {\n if (this.error()) return this.errorId();\n if (this.hint()) return this.hintId();\n return null;\n });\n\n onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value.set(target.value);\n this.onChange(this.value());\n }\n\n /** @docs-private */\n writeValue(value: string): void {\n this.value.set(value || '');\n }\n\n /** @docs-private */\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n /** @docs-private */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @docs-private */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","/**\n * Test harness for AfInputComponent.\n *\n * Provides a semantic API for interacting with the input in tests,\n * abstracting DOM details behind readable method names.\n *\n * @example\n * const harness = new AfInputHarness(fixture.nativeElement);\n * expect(harness.getValue()).toBe('');\n * harness.setValue('hello');\n * expect(harness.getValue()).toBe('hello');\n */\nexport class AfInputHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-input');\n if (!el) {\n throw new Error('AfInputHarness: af-input element not found in container.');\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Returns the inner native `<input>` element. */\n getInputElement(): HTMLInputElement {\n const input = this.hostEl.querySelector('input');\n if (!input) {\n throw new Error('AfInputHarness: inner <input> element not found.');\n }\n return input;\n }\n\n /** Returns the current value of the input. */\n getValue(): string {\n return this.getInputElement().value;\n }\n\n /** Sets the input value and dispatches an `input` event. */\n setValue(value: string): void {\n const input = this.getInputElement();\n input.value = value;\n input.dispatchEvent(new Event('input', { bubbles: true }));\n }\n\n /** Returns the label text, or `null` if no label is rendered. */\n getLabel(): string | null {\n const label = this.hostEl.querySelector('.ct-field__label');\n return label?.textContent?.trim() ?? null;\n }\n\n /** Returns the hint text, or `null` if no hint is rendered. */\n getHint(): string | null {\n const hint = this.hostEl.querySelector('.ct-field__hint');\n return hint?.textContent?.trim() ?? null;\n }\n\n /** Returns the error text, or `null` if no error is rendered. */\n getError(): string | null {\n const error = this.hostEl.querySelector('.ct-field__error');\n return error?.textContent?.trim() ?? null;\n }\n\n /** Returns whether the input is disabled. */\n isDisabled(): boolean {\n return this.getInputElement().disabled;\n }\n\n /** Returns whether the input is required. */\n isRequired(): boolean {\n return this.getInputElement().required;\n }\n\n /** Returns whether `aria-invalid` is set to `\"true\"`. */\n isInvalid(): boolean {\n return this.getInputElement().getAttribute('aria-invalid') === 'true';\n }\n\n /** Returns the `type` attribute of the input. */\n getType(): string {\n return this.getInputElement().type;\n }\n\n /** Returns the `placeholder` attribute of the input. */\n getPlaceholder(): string {\n return this.getInputElement().placeholder;\n }\n\n /** Returns the `aria-describedby` attribute value, or `null` if absent. */\n getAriaDescribedBy(): string | null {\n return this.getInputElement().getAttribute('aria-describedby');\n }\n\n /** Focuses the input element. */\n focus(): void {\n this.getInputElement().focus();\n }\n\n /** Blurs the input element and dispatches a `blur` event. */\n blur(): void {\n this.getInputElement().dispatchEvent(new Event('blur', { bubbles: true }));\n }\n\n /** Returns the `id` attribute of the input. */\n getId(): string {\n return this.getInputElement().id;\n }\n\n /** Returns whether the field wrapper has the error modifier class. */\n hasFieldError(): boolean {\n return this.hostEl.querySelector('.ct-field--error') !== null;\n }\n\n /** Returns whether an icon wrapper is rendered. */\n hasIcon(): boolean {\n return this.hostEl.querySelector('.ct-input__icon') !== null;\n }\n\n /** Returns the full `class` attribute string of the inner input. */\n getClasses(): string {\n return this.getInputElement().className;\n }\n\n /** Returns whether the inner input has the given CSS class. */\n hasClass(className: string): boolean {\n return this.getInputElement().classList.contains(className);\n }\n}\n","import { Component, ChangeDetectionStrategy, computed, input, model, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface AfSelectOption {\n value: unknown;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Select dropdown component with form control support\n *\n * @example\n * <af-select\n * label=\"Role\"\n * [options]=\"roleOptions\"\n * [(ngModel)]=\"selectedRole\"\n * hint=\"Choose your primary role\"\n * ></af-select>\n */\n@Component({\n selector: 'af-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfSelectComponent),\n multi: true\n }\n ],\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [attr.for]=\"selectId()\">\n {{ label() }}\n @if (required()) {\n <span aria-label=\"required\"> *</span>\n }\n </label>\n }\n\n <select\n [id]=\"selectId()\"\n class=\"ct-select\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"getAriaDescribedBy()\"\n (change)=\"onChange($event)\"\n (blur)=\"onTouched()\"\n >\n @if (placeholder()) {\n <option value=\"\" [disabled]=\"true\" [selected]=\"isPlaceholderSelected\">\n {{ placeholder() }}\n </option>\n }\n @for (option of options(); track option.value) {\n <option\n [selected]=\"isOptionSelected(option)\"\n [disabled]=\"option.disabled || false\"\n >\n {{ option.label }}\n </option>\n }\n </select>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId()\">\n {{ hint() }}\n </div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" [id]=\"errorId()\">\n {{ error() }}\n </div>\n }\n </div>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfSelectComponent implements ControlValueAccessor {\n private static nextId = 0;\n\n /** Select label */\n label = input('');\n\n /** Placeholder option */\n placeholder = input('');\n\n /** Options array */\n options = input<AfSelectOption[]>([]);\n\n /** Hint text shown below select */\n hint = input('');\n\n /** Error message */\n error = input('');\n\n /** Whether select is required */\n required = input(false);\n\n /** Whether select is disabled */\n disabled = model(false);\n\n /** Value comparison function (for object values) */\n compareWith = input<(a: unknown, b: unknown) => boolean>((a, b) => a === b);\n\n /** Unique select ID */\n selectId = input(`af-select-${AfSelectComponent.nextId++}`);\n\n value: unknown = null;\n onChangeCallback: (value: unknown) => void = () => {};\n onTouched: () => void = () => {};\n\n hintId = computed(() => `${this.selectId()}-hint`);\n\n errorId = computed(() => `${this.selectId()}-error`);\n\n getAriaDescribedBy(): string | null {\n if (this.error()) return this.errorId();\n if (this.hint()) return this.hintId();\n return null;\n }\n\n get isPlaceholderSelected(): boolean {\n if (!this.placeholder()) return false;\n if (this.value === null || this.value === undefined || this.value === '') return true;\n return !this.hasMatchingOption();\n }\n\n private hasMatchingOption(): boolean {\n return this.options().some(option => this.compareWith()(option.value, this.value));\n }\n\n isOptionSelected(option: AfSelectOption): boolean {\n if (this.isPlaceholderSelected) return false;\n return this.compareWith()(option.value, this.value);\n }\n\n onChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const index = target.selectedIndex;\n const offset = this.placeholder() ? 1 : 0;\n\n if (this.placeholder() && index === 0) {\n this.value = null;\n this.onChangeCallback(null);\n return;\n }\n\n const option = this.options()[index - offset];\n const nextValue = option ? option.value : null;\n this.value = nextValue;\n this.onChangeCallback(nextValue);\n }\n\n /** ControlValueAccessor implementation */\n writeValue(value: unknown): void {\n this.value = value ?? null;\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","import { Component, ChangeDetectionStrategy, computed, input, model, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Textarea component with form control support\n *\n * @example\n * <af-textarea\n * label=\"Notes\"\n * placeholder=\"Enter your notes...\"\n * [(ngModel)]=\"notes\"\n * [rows]=\"5\"\n * ></af-textarea>\n */\n@Component({\n selector: 'af-textarea',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfTextareaComponent),\n multi: true\n }\n ],\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [attr.for]=\"textareaId()\">\n {{ label() }}\n @if (required()) {\n <span aria-label=\"required\"> *</span>\n }\n </label>\n }\n\n <textarea\n [id]=\"textareaId()\"\n class=\"ct-textarea\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [rows]=\"rows()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"getAriaDescribedBy()\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n ></textarea>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId()\">\n {{ hint() }}\n </div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" [id]=\"errorId()\">\n {{ error() }}\n </div>\n }\n </div>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfTextareaComponent implements ControlValueAccessor {\n private static nextId = 0;\n\n /** Textarea label */\n label = input('');\n\n /** Placeholder text */\n placeholder = input('');\n\n /** Hint text shown below textarea */\n hint = input('');\n\n /** Error message */\n error = input('');\n\n /** Whether textarea is required */\n required = input(false);\n\n /** Whether textarea is disabled */\n disabled = model(false);\n\n /** Number of visible rows */\n rows = input(3);\n\n /** Unique textarea ID */\n textareaId = input(`af-textarea-${AfTextareaComponent.nextId++}`);\n\n value = '';\n onChange: (value: string) => void = () => {};\n onTouched: () => void = () => {};\n\n hintId = computed(() => `${this.textareaId()}-hint`);\n\n errorId = computed(() => `${this.textareaId()}-error`);\n\n getAriaDescribedBy(): string | null {\n if (this.error()) return this.errorId();\n if (this.hint()) return this.hintId();\n return null;\n }\n\n onInput(event: Event): void {\n const target = event.target as HTMLTextAreaElement;\n this.value = target.value;\n this.onChange(this.value);\n }\n\n /** ControlValueAccessor implementation */\n writeValue(value: string): void {\n this.value = value || '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","import { Component, ChangeDetectionStrategy, model, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Checkbox component with form control support\n *\n * Supports both ControlValueAccessor (reactive forms / ngModel) and\n * standalone usage via [(checked)] bindings (two-way via model).\n *\n * @example Reactive Forms\n * <af-checkbox formControlName=\"rememberMe\">Remember me</af-checkbox>\n *\n * @example Standalone with indeterminate (e.g. \"select all\" in tables)\n * <af-checkbox\n * [(checked)]=\"allSelected\"\n * [indeterminate]=\"hasPartialSelection()\"\n * (checkedChange)=\"onToggleAll($event)\">\n * </af-checkbox>\n */\n@Component({\n selector: 'af-checkbox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfCheckboxComponent),\n multi: true\n }\n ],\n template: `\n <label class=\"ct-check\">\n <input\n class=\"ct-check__input\"\n type=\"checkbox\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [indeterminate]=\"indeterminate()\"\n (change)=\"onChange($event)\"\n (blur)=\"onTouched()\"\n />\n <span class=\"ct-check__label\">\n <ng-content></ng-content>\n </span>\n </label>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfCheckboxComponent implements ControlValueAccessor {\n /** Whether checkbox is disabled */\n disabled = model(false);\n\n /** Whether checkbox shows indeterminate state (partial selection) */\n indeterminate = model(false);\n\n /** Checked state - supports two-way binding via [(checked)] */\n checked = model(false);\n\n private onChangeCallback: (value: boolean) => void = () => {};\n onTouched: () => void = () => {};\n\n onChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.checked.set(target.checked);\n this.indeterminate.set(false);\n this.onChangeCallback(target.checked);\n }\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n computed,\n contentChildren,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n// ── Radio Button ─────────────────────────────────────────────────────────────\n\n/**\n * Individual radio button. Use inside `af-radio-group` for full\n * accessibility, or standalone with its own `ControlValueAccessor`.\n *\n * @example\n * <af-radio-group ariaLabel=\"Plan\" name=\"plan\" [(ngModel)]=\"plan\">\n * <af-radio value=\"standard\">Standard</af-radio>\n * <af-radio value=\"premium\">Premium</af-radio>\n * </af-radio-group>\n */\n@Component({\n selector: 'af-radio',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfRadioComponent),\n multi: true,\n },\n ],\n template: `\n <label class=\"ct-radio\">\n <input\n #inputEl\n class=\"ct-radio__input\"\n type=\"radio\"\n [name]=\"resolvedName()\"\n [value]=\"value()\"\n [checked]=\"isChecked()\"\n [disabled]=\"isDisabled()\"\n [attr.tabindex]=\"resolvedTabindex()\"\n (change)=\"onChangeEvent()\"\n (blur)=\"onTouched()\"\n (focus)=\"onFocus()\"\n (keydown)=\"onKeydown($event)\" />\n <span class=\"ct-radio__label\">\n <ng-content />\n </span>\n </label>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfRadioComponent implements ControlValueAccessor {\n private group = inject(forwardRef(() => AfRadioGroupComponent), { optional: true });\n\n /** Radio group name (only used without `af-radio-group`). */\n name = input('');\n\n /** Radio value. */\n value = input<unknown>(undefined);\n\n /** Whether this radio is disabled. */\n disabled = model(false);\n\n inputRef = viewChild.required<ElementRef<HTMLInputElement>>('inputEl');\n\n modelValue = signal<unknown>(undefined);\n onChangeCallback: (value: unknown) => void = () => {};\n onTouched: () => void = () => {};\n\n resolvedName = computed(() => this.group?.name() || this.name());\n\n isChecked = computed(() => {\n const selected = this.group ? this.group.selectedValue() : this.modelValue();\n return selected === this.value();\n });\n\n isDisabled = computed(() => {\n if (this.group?.disabled()) return true;\n return this.disabled();\n });\n\n resolvedTabindex = computed(() => {\n if (!this.group) return null;\n return this.group.tabindexFor(this);\n });\n\n /** Focuses the native input element. */\n focus(): void {\n this.inputRef().nativeElement.focus();\n }\n\n onChangeEvent(): void {\n if (this.group) {\n this.group.selectRadio(this);\n } else {\n this.modelValue.set(this.value());\n this.onChangeCallback(this.value());\n }\n }\n\n onFocus(): void {\n this.group?.onRadioFocus(this);\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.group) {\n this.group.onRadioKeydown(event, this);\n }\n }\n\n writeValue(value: unknown): void {\n this.modelValue.set(value);\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n\n// ── Radio Group ──────────────────────────────────────────────────────────────\n\n/**\n * Groups `af-radio` components with `role=\"radiogroup\"`, ARIA labeling,\n * roving tabindex, and arrow-key navigation per WAI-ARIA Radio Group Pattern.\n *\n * Implements `ControlValueAccessor` so the group value can be bound via\n * `[(ngModel)]` or reactive forms.\n *\n * @example\n * <af-radio-group ariaLabel=\"Select plan\" name=\"plan\" [(ngModel)]=\"plan\">\n * <af-radio value=\"standard\">Standard</af-radio>\n * <af-radio value=\"premium\">Premium</af-radio>\n * </af-radio-group>\n */\n@Component({\n selector: 'af-radio-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfRadioGroupComponent),\n multi: true,\n },\n ],\n template: `\n <div\n role=\"radiogroup\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n [attr.aria-disabled]=\"disabled() || null\">\n <ng-content />\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfRadioGroupComponent implements ControlValueAccessor {\n /** Shared `name` attribute for all child radios. */\n name = input.required<string>();\n\n /** Accessible label for the radio group. */\n ariaLabel = input('');\n\n /** ID of an external element labeling this group. */\n ariaLabelledBy = input('');\n\n /** Disables all radios in the group. */\n disabled = model(false);\n\n radios = contentChildren(AfRadioComponent);\n\n selectedValue = signal<unknown>(undefined);\n private focusedIndex = signal(0);\n\n private onChangeCallback: (value: unknown) => void = () => {};\n private onTouchedCallback: () => void = () => {};\n\n private syncEffect = effect(() => {\n const radios = this.radios();\n const value = this.selectedValue();\n const checkedIdx = radios.findIndex((r) => r.value() === value);\n this.focusedIndex.set(checkedIdx >= 0 ? checkedIdx : 0);\n });\n\n /** Returns the tabindex a child radio should use for roving tabindex. */\n tabindexFor(radio: AfRadioComponent): number {\n const radios = this.enabledRadios();\n const idx = radios.indexOf(radio);\n if (idx === -1) return -1;\n return idx === this.focusedIndex() ? 0 : -1;\n }\n\n /** Selects a radio and propagates the value. */\n selectRadio(radio: AfRadioComponent): void {\n const value = radio.value();\n this.selectedValue.set(value);\n this.onChangeCallback(value);\n this.onTouchedCallback();\n }\n\n /** Called when a child radio receives focus. */\n onRadioFocus(radio: AfRadioComponent): void {\n const idx = this.enabledRadios().indexOf(radio);\n if (idx >= 0) {\n this.focusedIndex.set(idx);\n }\n }\n\n /** Handles keyboard navigation within the group. */\n onRadioKeydown(event: KeyboardEvent, _current: AfRadioComponent): void {\n const enabled = this.enabledRadios();\n if (enabled.length === 0) return;\n\n let nextIndex: number | null = null;\n\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n event.preventDefault();\n nextIndex = (this.focusedIndex() + 1) % enabled.length;\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n event.preventDefault();\n nextIndex = (this.focusedIndex() - 1 + enabled.length) % enabled.length;\n break;\n case 'Home':\n event.preventDefault();\n nextIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n nextIndex = enabled.length - 1;\n break;\n case ' ':\n event.preventDefault();\n this.selectRadio(enabled[this.focusedIndex()]);\n return;\n }\n\n if (nextIndex !== null) {\n this.focusedIndex.set(nextIndex);\n const target = enabled[nextIndex];\n target.focus();\n this.selectRadio(target);\n }\n }\n\n writeValue(value: unknown): void {\n this.selectedValue.set(value);\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n private enabledRadios(): AfRadioComponent[] {\n return this.radios().filter((r) => !r.isDisabled());\n }\n}\n","import { Component, ChangeDetectionStrategy, input, model, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Switch/Toggle component with form control support\n *\n * @example\n * <af-switch [(ngModel)]=\"autoRenew\">\n * Auto renew\n * </af-switch>\n */\n@Component({\n selector: 'af-switch',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfSwitchComponent),\n multi: true\n }\n ],\n template: `\n <label class=\"ct-switch\">\n <input\n class=\"ct-switch__input\"\n type=\"checkbox\"\n role=\"switch\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (change)=\"onChange($event)\"\n (blur)=\"onTouched()\" />\n <span class=\"ct-switch__label\">\n <ng-content></ng-content>\n </span>\n </label>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfSwitchComponent implements ControlValueAccessor {\n /** Accessible label for icon-only or unlabeled switches. */\n ariaLabel = input('');\n\n /** Whether switch is disabled. */\n disabled = model(false);\n\n /** Checked state - supports two-way binding via [(checked)] */\n checked = model(false);\n\n private onChangeCallback: (value: boolean) => void = () => {};\n onTouched: () => void = () => {};\n\n onChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.checked.set(target.checked);\n this.onChangeCallback(target.checked);\n }\n\n /** ControlValueAccessor implementation */\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n input,\n output,\n computed,\n contentChild,\n} from '@angular/core';\n\nexport type AfCardElevation = 'none' | 'sm' | 'md' | 'lg';\nexport type AfCardPadding = 'none' | 'sm' | 'md' | 'lg';\n\n/**\n * Card component for containing content.\n *\n * When `interactive` is set the card becomes keyboard-accessible with\n * `role=\"button\"`, roving `tabindex`, and Enter/Space activation.\n *\n * @example\n * <af-card elevation=\"md\" padding=\"lg\">\n * <div header><h3>Title</h3></div>\n * <div body><p>Card content</p></div>\n * </af-card>\n *\n * <af-card interactive ariaLabel=\"Open project\" (cardClick)=\"open()\">\n * <p body>Click me</p>\n * </af-card>\n */\n@Component({\n selector: 'af-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <section\n [class]=\"cardClasses()\"\n [style]=\"cardStyles()\"\n [attr.role]=\"interactive() ? 'button' : null\"\n [attr.tabindex]=\"interactive() ? 0 : null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (click)=\"onCardClick()\"\n (keydown)=\"onCardKeydown($event)\">\n <div class=\"ct-card__header\" [hidden]=\"!hasHeader()\">\n <ng-content select=\"[header]\" />\n </div>\n <div class=\"ct-card__body\">\n <ng-content select=\"[body]\" />\n <ng-content />\n </div>\n <div class=\"ct-card__footer\" [hidden]=\"!hasFooter()\">\n <ng-content select=\"[footer]\" />\n </div>\n </section>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfCardComponent {\n /** Makes the card interactive (clickable, keyboard-accessible). */\n interactive = input(false);\n\n /** Shadow elevation level. */\n elevation = input<AfCardElevation | null>(null);\n\n /** Content padding level. */\n padding = input<AfCardPadding | null>(null);\n\n /** Accessible label for interactive cards. */\n ariaLabel = input('');\n\n /** Emitted when an interactive card is activated (click, Enter, or Space). */\n cardClick = output<void>();\n\n private headerRef = contentChild('[header]', { read: ElementRef });\n private footerRef = contentChild('[footer]', { read: ElementRef });\n hasHeader = computed(() => !!this.headerRef());\n hasFooter = computed(() => !!this.footerRef());\n\n private static readonly ELEVATION_MAP: Record<AfCardElevation, string> = {\n none: 'none',\n sm: '0 1px 3px rgba(0, 0, 0, 0.08)',\n md: '0 4px 12px rgba(0, 0, 0, 0.08)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.12)',\n };\n\n private static readonly PADDING_MAP: Record<AfCardPadding, string> = {\n none: '0',\n sm: 'var(--space-3, 0.75rem)',\n md: 'var(--space-5, 1.25rem)',\n lg: 'var(--space-7, 2rem)',\n };\n\n cardClasses = computed(() => {\n const classes = ['ct-card'];\n if (this.interactive()) {\n classes.push('ct-card--interactive');\n }\n return classes.join(' ');\n });\n\n cardStyles = computed(() => {\n const styles: string[] = [];\n if (this.elevation() !== null) {\n styles.push(`box-shadow: ${AfCardComponent.ELEVATION_MAP[this.elevation()!]}`);\n }\n if (this.padding() !== null) {\n styles.push(`--ct-card-padding: ${AfCardComponent.PADDING_MAP[this.padding()!]}`);\n }\n return styles.join('; ');\n });\n\n onCardClick(): void {\n if (this.interactive()) {\n this.cardClick.emit();\n }\n }\n\n onCardKeydown(event: KeyboardEvent): void {\n if (!this.interactive()) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.cardClick.emit();\n }\n }\n}\n","import { Directive, TemplateRef, input, inject } from '@angular/core';\n\n/**\n * Directive for defining custom cell templates in AfDataTableComponent.\n *\n * @example\n * <af-data-table [data]=\"items\" [columns]=\"columns\">\n * <ng-template afCellDef=\"status\" let-row>\n * <af-badge [variant]=\"getVariant(row.status)\">{{ row.status }}</af-badge>\n * </ng-template>\n * <ng-template afCellDef=\"actions\" let-row>\n * <af-button variant=\"ghost\" iconOnly (clicked)=\"onEdit(row)\">\n * <af-icon name=\"edit\" />\n * </af-button>\n * </ng-template>\n * </af-data-table>\n */\n@Directive({\n selector: '[afCellDef]'\n})\nexport class AfCellDefDirective {\n /** Column key this template applies to */\n columnKey = input('', { alias: 'afCellDef' });\n\n readonly templateRef = inject(TemplateRef<unknown>);\n}\n","import {\n Component,\n TemplateRef,\n input,\n output,\n computed,\n effect,\n contentChildren,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { AfCellDefDirective } from './cell-def.directive';\n\nexport interface AfColumn {\n key: string;\n header: string;\n sortable?: boolean;\n /** CSS class(es) for the cell */\n cellClass?: string;\n}\n\nexport interface AfDataTableConfig {\n striped?: boolean;\n compact?: boolean;\n /** Whether to show the selection checkbox column */\n selectable?: boolean;\n}\n\n/** Row type for the data table — uses `any` values to allow typed interfaces without index signatures. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AfDataRow = Record<string, any>;\n\nexport type AfSortDirection = 'asc' | 'desc';\n\nexport interface AfSortState {\n key: string;\n direction: AfSortDirection;\n}\n\n/**\n * Data table with sorting, selection, and custom cell templates.\n *\n * @example\n * <af-data-table\n * [data]=\"items()\"\n * [columns]=\"columns\"\n * [config]=\"{ striped: true, selectable: true }\"\n * rowId=\"id\"\n * (sortChange)=\"onSort($event)\"\n * (selectionChange)=\"onSelect($event)\">\n *\n * <ng-template afCellDef=\"status\" let-row>\n * <af-badge [variant]=\"getVariant(row.status)\">\n * {{ row.status | afFormatLabel }}\n * </af-badge>\n * </ng-template>\n *\n * <ng-template afCellDef=\"actions\" let-row>\n * <af-button variant=\"ghost\" iconOnly (clicked)=\"onDelete(row)\">\n * <af-icon name=\"delete\" />\n * </af-button>\n * </ng-template>\n * </af-data-table>\n */\n@Component({\n selector: 'af-data-table',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n templateUrl: './data-table.component.html',\n styleUrl: './data-table.component.css'\n})\nexport class AfDataTableComponent {\n data = input<AfDataRow[]>([]);\n columns = input<AfColumn[]>([]);\n config = input<AfDataTableConfig>({ striped: true, compact: true });\n\n /** Sort state (controlled). */\n sort = input<AfSortState | null>(null);\n\n /** Row id key or accessor for stable selection. */\n rowId = input<string | ((row: AfDataRow) => string | number) | null>(null);\n\n rowClick = output<AfDataRow>();\n selectionChange = output<AfDataRow[]>();\n sortChange = output<AfSortState | null>();\n\n cellDefs = contentChildren(AfCellDefDirective);\n\n private selectedRowIds = new Set<unknown>();\n private internalSort: AfSortState | null = null;\n private cellTemplateMap = new Map<string, TemplateRef<unknown>>();\n\n allSelected = false;\n someSelected = false;\n\n private cellDefsEffect = effect(() => {\n const defs = this.cellDefs();\n this.cellTemplateMap.clear();\n defs.forEach(def => {\n this.cellTemplateMap.set(def.columnKey(), def.templateRef);\n });\n });\n\n private dataEffect = effect(() => {\n this.data();\n this.rowId();\n this.syncSelectionWithData();\n this.updateSelectionState();\n });\n\n isSelectable = computed(() => {\n return this.config().selectable !== false;\n });\n\n tableClasses = computed(() => {\n const classes = ['ct-table'];\n if (this.config().striped) classes.push('ct-table--striped');\n if (this.config().compact) classes.push('ct-table--compact');\n return classes.join(' ');\n });\n\n sortedData = computed(() => {\n const sort = this.activeSort();\n if (!sort) return [...this.data()];\n if (!this.columns().some(column => column.key === sort.key)) return [...this.data()];\n const sorted = [...this.data()];\n sorted.sort((a, b) => this.compareValues(a?.[sort.key], b?.[sort.key], sort.direction));\n return sorted;\n });\n\n activeSort = computed(() => {\n return this.sort() ?? this.internalSort;\n });\n\n /** Returns the custom cell template for a column, or null for default rendering. */\n getCellTemplate(columnKey: string): TemplateRef<unknown> | null {\n return this.cellTemplateMap.get(columnKey) ?? null;\n }\n\n getAriaSort(column: AfColumn): string | null {\n if (!column.sortable) return null;\n const sort = this.activeSort();\n if (!sort || sort.key !== column.key) return 'none';\n return sort.direction === 'asc' ? 'ascending' : 'descending';\n }\n\n toggleSort(column: AfColumn): void {\n if (!column.sortable) return;\n const current = this.activeSort();\n let next: AfSortState | null;\n\n if (!current || current.key !== column.key) {\n next = { key: column.key, direction: 'asc' };\n } else if (current.direction === 'asc') {\n next = { key: column.key, direction: 'desc' };\n } else {\n next = null;\n }\n\n if (this.sort()) {\n this.sortChange.emit(next);\n } else {\n this.internalSort = next;\n this.sortChange.emit(next);\n }\n }\n\n onRowClick(row: AfDataRow): void {\n this.rowClick.emit(row);\n }\n\n toggleSelection(row: AfDataRow, event: Event): void {\n event.stopPropagation();\n const rowId = this.getRowId(row);\n if (this.selectedRowIds.has(rowId)) {\n this.selectedRowIds.delete(rowId);\n } else {\n this.selectedRowIds.add(rowId);\n }\n this.updateSelectionState();\n this.selectionChange.emit(this.getSelectedRows());\n }\n\n toggleAll(checked: boolean): void {\n if (checked) {\n this.data().forEach(row => this.selectedRowIds.add(this.getRowId(row)));\n } else {\n this.selectedRowIds.clear();\n }\n this.updateSelectionState();\n this.selectionChange.emit(this.getSelectedRows());\n }\n\n isSelected(row: AfDataRow): boolean {\n return this.selectedRowIds.has(this.getRowId(row));\n }\n\n private updateSelectionState(): void {\n const data = this.data();\n const hasData = data.length > 0;\n const selectedCount = data.filter(row => this.selectedRowIds.has(this.getRowId(row))).length;\n this.allSelected = hasData && selectedCount === data.length;\n this.someSelected = hasData && selectedCount > 0 && selectedCount < data.length;\n }\n\n private getRowId(row: AfDataRow): unknown {\n const rowId = this.rowId();\n if (typeof rowId === 'function') {\n return rowId(row);\n }\n if (typeof rowId === 'string' && row && row[rowId] !== undefined) {\n return row[rowId];\n }\n return row;\n }\n\n private getSelectedRows(): AfDataRow[] {\n return this.data().filter(row => this.selectedRowIds.has(this.getRowId(row)));\n }\n\n private syncSelectionWithData(): void {\n if (!this.rowId()) {\n this.selectedRowIds.clear();\n return;\n }\n const validIds = new Set(this.data().map(row => this.getRowId(row)));\n this.selectedRowIds.forEach(id => {\n if (!validIds.has(id)) {\n this.selectedRowIds.delete(id);\n }\n });\n }\n\n private compareValues(a: unknown, b: unknown, direction: AfSortDirection): number {\n const sortFactor = direction === 'asc' ? 1 : -1;\n if (a == null && b == null) return 0;\n if (a == null) return 1 * sortFactor;\n if (b == null) return -1 * sortFactor;\n\n if (typeof a === 'number' && typeof b === 'number') {\n return (a - b) * sortFactor;\n }\n if (a instanceof Date && b instanceof Date) {\n return (a.getTime() - b.getTime()) * sortFactor;\n }\n\n return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: 'base' }) * sortFactor;\n }\n}\n","<div class=\"ct-data-table ct-data-table--simple\">\n <div class=\"ct-data-table__table\">\n <table [class]=\"tableClasses()\">\n <thead>\n <tr>\n @if (isSelectable()) {\n <th scope=\"col\" class=\"ct-table__cell--checkbox\">\n <label class=\"ct-check\">\n <input\n class=\"ct-check__input\"\n type=\"checkbox\"\n [checked]=\"allSelected\"\n [indeterminate]=\"someSelected\"\n (change)=\"toggleAll($any($event.target).checked)\"\n aria-label=\"Select all rows\" />\n </label>\n </th>\n }\n @for (col of columns(); track col.key) {\n <th scope=\"col\" [attr.aria-sort]=\"getAriaSort(col)\">\n @if (col.sortable) {\n <button class=\"ct-table__sort\" type=\"button\" (click)=\"toggleSort(col)\">\n {{ col.header }}\n <span class=\"ct-table__sort-indicator\" aria-hidden=\"true\"></span>\n </button>\n } @else {\n {{ col.header }}\n }\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of sortedData(); track row) {\n <tr (click)=\"onRowClick(row)\">\n @if (isSelectable()) {\n <td class=\"ct-table__cell--checkbox\">\n <label class=\"ct-check\">\n <input\n class=\"ct-check__input\"\n type=\"checkbox\"\n [checked]=\"isSelected(row)\"\n (change)=\"toggleSelection(row, $event)\"\n aria-label=\"Select row\" />\n </label>\n </td>\n }\n @for (col of columns(); track col.key) {\n <td [class]=\"col.cellClass || ''\">\n @if (getCellTemplate(col.key); as tmpl) {\n <ng-container *ngTemplateOutlet=\"tmpl; context: { $implicit: row, column: col }\"></ng-container>\n } @else {\n {{ row[col.key] }}\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n","const FOCUSABLE_SELECTORS = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\n/**\n * Manages focus trapping within a container element.\n *\n * Handles Tab/Shift+Tab cycling, save/restore of the previously focused\n * element, and initial focus placement. Create one instance per overlay\n * (modal, drawer, popover, etc.).\n */\nexport class FocusTrap {\n private previousActiveElement: HTMLElement | null = null;\n\n /** Saves the currently focused element for later restoration. */\n saveFocus(): void {\n this.previousActiveElement = document.activeElement as HTMLElement;\n }\n\n /** Restores focus to the element saved via `saveFocus()`. */\n restoreFocus(): void {\n if (this.previousActiveElement) {\n this.previousActiveElement.focus();\n this.previousActiveElement = null;\n }\n }\n\n /** Overrides the saved focus target (e.g. to return focus to a specific trigger). */\n setReturnFocus(element: HTMLElement): void {\n this.previousActiveElement = element;\n }\n\n /**\n * Focuses the first focusable element inside the container,\n * or the fallback element if no focusable children exist.\n */\n focusFirst(container: HTMLElement | null | undefined, fallback?: HTMLElement | null): void {\n const elements = queryFocusableElements(container);\n const first = elements[0];\n if (first) {\n first.focus();\n } else {\n fallback?.focus();\n }\n }\n\n /**\n * Handles a Tab keydown event to trap focus within the container.\n * Call this from a `(keydown)` handler when the key is `Tab`.\n */\n handleTab(\n event: KeyboardEvent,\n container: HTMLElement | null | undefined,\n fallback?: HTMLElement | null,\n ): void {\n const elements = queryFocusableElements(container);\n\n if (elements.length === 0) {\n event.preventDefault();\n fallback?.focus();\n return;\n }\n\n const first = elements[0];\n const last = elements[elements.length - 1];\n const active = document.activeElement as HTMLElement | null;\n\n if (event.shiftKey && active === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\n }\n}\n\n/** Queries all visible, enabled, focusable elements within a container. */\nfunction queryFocusableElements(container: HTMLElement | null | undefined): HTMLElement[] {\n if (!container) return [];\n return Array.from(\n container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTORS),\n ).filter(\n (el) =>\n !el.hasAttribute('disabled') &&\n el.getAttribute('aria-hidden') !== 'true',\n );\n}\n","import { Component, ChangeDetectionStrategy, ElementRef, OnDestroy, AfterViewInit, input, output, signal, computed, effect, viewChild, contentChild } from '@angular/core';\nimport { FocusTrap } from '../../utils/focus-trap';\n\n/**\n * Modal/Dialog component with accessibility features\n *\n * @example\n * <af-modal\n * [open]=\"isOpen\"\n * title=\"Confirm action\"\n * (closed)=\"handleClose()\">\n * <div body>\n * <p>Are you sure?</p>\n * </div>\n * <div footer>\n * <button (click)=\"cancel()\">Cancel</button>\n * <button (click)=\"confirm()\">Confirm</button>\n * </div>\n * </af-modal>\n */\n@Component({\n selector: 'af-modal',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:keydown.escape)': 'onEscapeKey()',\n '(document:keydown)': 'onKeydown($event)',\n },\n template: `\n @if (open()) {\n <div\n class=\"ct-modal\"\n [attr.data-state]=\"open() ? 'open' : 'closed'\"\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"titleId\"\n (click)=\"onBackdropClick($event)\">\n <div\n #dialog\n class=\"ct-modal__dialog\"\n tabindex=\"-1\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"ct-modal__header\">\n <h2 [id]=\"titleId\">{{ title() }}</h2>\n @if (showCloseButton()) {\n <button\n class=\"ct-button ct-button--ghost ct-button--icon\"\n type=\"button\"\n aria-label=\"Close\"\n (click)=\"close()\">\n <span class=\"ct-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg></span>\n </button>\n }\n </div>\n <div class=\"ct-modal__body\">\n <ng-content select=\"[body]\"></ng-content>\n <ng-content></ng-content>\n </div>\n <div class=\"ct-modal__footer\" [hidden]=\"!hasFooter()\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n </div>\n </div>\n }\n `,\n styles: [`\n :host {\n display: contents;\n }\n `]\n})\nexport class AfModalComponent implements OnDestroy, AfterViewInit {\n private static nextId = 0;\n private focusTrap = new FocusTrap();\n\n /** Whether modal is open */\n open = input(false);\n\n /** Modal title */\n title = input('');\n\n /** Whether to show close button */\n showCloseButton = input(true);\n\n /** Whether clicking backdrop closes modal */\n closeOnBackdropClick = input(true);\n\n /** Close event emitter */\n closed = output<void>();\n\n /** Unique title ID for aria-labelledby */\n titleId = `af-modal-title-${AfModalComponent.nextId++}`;\n\n private footerRef = contentChild('[footer]', { read: ElementRef });\n hasFooter = computed(() => !!this.footerRef());\n\n private viewInitialized = signal(false);\n\n dialogRef = viewChild<ElementRef<HTMLElement>>('dialog');\n\n private openEffect = effect(() => {\n const isOpen = this.open();\n const initialized = this.viewInitialized();\n if (isOpen && initialized) {\n this.onOpen();\n } else if (!isOpen) {\n this.focusTrap.restoreFocus();\n }\n });\n\n ngAfterViewInit(): void {\n this.viewInitialized.set(true);\n }\n\n ngOnDestroy(): void {\n this.focusTrap.restoreFocus();\n }\n\n onEscapeKey(): void {\n if (this.open()) {\n this.close();\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (!this.open() || event.key !== 'Tab') return;\n this.focusTrap.handleTab(event, this.dialogRef()?.nativeElement, this.dialogRef()?.nativeElement);\n }\n\n onBackdropClick(event: MouseEvent): void {\n if (this.closeOnBackdropClick() && event.target === event.currentTarget) {\n this.close();\n }\n }\n\n close(): void {\n this.closed.emit();\n }\n\n private onOpen(): void {\n this.focusTrap.saveFocus();\n queueMicrotask(() => {\n if (!this.open()) return;\n this.focusTrap.focusFirst(this.dialogRef()?.nativeElement, this.dialogRef()?.nativeElement);\n });\n }\n}\n","import { Injectable, signal } from '@angular/core';\n\nexport type AfToastVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport interface AfToast {\n id: string;\n title: string;\n description?: string;\n variant?: AfToastVariant;\n duration?: number;\n action?: {\n label: string;\n callback: () => void;\n };\n}\n\n/**\n * Toast notification service\n *\n * @example\n * const toast = inject(AfToastService);\n *\n * showSuccess() {\n * this.toast.success('Saved', 'Your changes were saved successfully.');\n * }\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AfToastService {\n private toastsSignal = signal<AfToast[]>([]);\n private nextId = 0;\n\n /** Reactive signal for toast list */\n toasts = this.toastsSignal.asReadonly();\n\n /**\n * Show a toast notification\n */\n show(toast: Omit<AfToast, 'id'>): string {\n const id = `toast-${this.nextId++}`;\n const newToast: AfToast = {\n id,\n variant: 'info',\n duration: 5000,\n ...toast\n };\n\n this.toastsSignal.update(toasts => [...toasts, newToast]);\n\n if (newToast.duration && newToast.duration > 0) {\n setTimeout(() => this.dismiss(id), newToast.duration);\n }\n\n return id;\n }\n\n /**\n * Show success toast\n */\n success(title: string, description?: string): string {\n return this.show({ title, description, variant: 'success' });\n }\n\n /**\n * Show error toast\n */\n error(title: string, description?: string): string {\n return this.show({ title, description, variant: 'error' });\n }\n\n /**\n * Show warning toast\n */\n warning(title: string, description?: string): string {\n return this.show({ title, description, variant: 'warning' });\n }\n\n /**\n * Show info toast\n */\n info(title: string, description?: string): string {\n return this.show({ title, description, variant: 'info' });\n }\n\n /**\n * Dismiss a toast by ID\n */\n dismiss(id: string): void {\n this.toastsSignal.update(toasts => toasts.filter(t => t.id !== id));\n }\n\n /**\n * Clear all toasts\n */\n clear(): void {\n this.toastsSignal.set([]);\n }\n}\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { AfToastService, AfToast } from '../../services/toast.service';\n\n/**\n * Toast notification container component\n * Place once in your app root template\n *\n * @example\n * <!-- app.component.html -->\n * <ct-toast-container></ct-toast-container>\n */\n@Component({\n selector: 'af-toast-container',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"ct-toast-region\" aria-live=\"polite\" aria-atomic=\"false\">\n @for (toast of toastService.toasts(); track toast.id) {\n <div\n class=\"ct-toast\"\n [attr.data-variant]=\"toast.variant\"\n [attr.data-state]=\"'open'\"\n role=\"status\">\n <div class=\"ct-toast__title\">{{ toast.title }}</div>\n @if (toast.description) {\n <div class=\"ct-toast__description\">\n {{ toast.description }}\n </div>\n }\n @if (toast.action) {\n <button\n class=\"ct-button ct-button--ghost\"\n (click)=\"handleAction(toast)\">\n {{ toast.action.label }}\n </button>\n }\n <button\n class=\"ct-button ct-button--ghost ct-button--icon ct-button--sm\"\n type=\"button\"\n aria-label=\"Close\"\n (click)=\"toastService.dismiss(toast.id)\">\n <span class=\"ct-icon ct-icon--sm\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg></span>\n </button>\n </div>\n }\n </div>\n `,\n styles: [`\n :host {\n display: contents;\n }\n `]\n})\nexport class AfToastContainerComponent {\n toastService = inject(AfToastService);\n\n handleAction(toast: AfToast): void {\n if (toast.action) {\n toast.action.callback();\n this.toastService.dismiss(toast.id);\n }\n }\n}\n","import { Component, contentChildren, viewChildren, ElementRef, effect, input, output, model, ChangeDetectionStrategy } from '@angular/core';\n\nexport interface AfTab {\n id: string;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Tab panel component (used within af-tabs)\n */\n@Component({\n selector: 'af-tab-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (isActive()) {\n <div\n class=\"ct-tabs__panel\"\n role=\"tabpanel\"\n [attr.id]=\"'panel-' + id()\"\n [attr.aria-labelledby]=\"'tab-' + id()\">\n <ng-content></ng-content>\n </div>\n }\n `\n})\nexport class AfTabPanelComponent {\n private static nextId = 0;\n\n id = model('');\n label = input('');\n isActive = model(false);\n disabled = input(false);\n\n ensureId(): string {\n if (!this.id()) {\n this.id.set(`af-tab-${AfTabPanelComponent.nextId++}`);\n }\n return this.id();\n }\n}\n\n/**\n * Tabs component for organizing content into panels\n *\n * @example\n * <af-tabs [(activeTab)]=\"activeTab\">\n * <af-tab-panel id=\"overview\" label=\"Overview\">\n * <p>Overview content</p>\n * </af-tab-panel>\n * <af-tab-panel id=\"settings\" label=\"Settings\">\n * <p>Settings content</p>\n * </af-tab-panel>\n * </af-tabs>\n */\n@Component({\n selector: 'af-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"ct-tabs\">\n <div class=\"ct-tabs__list\" role=\"tablist\">\n @for (tab of tabs; track tab.id) {\n <button\n #tabButton\n class=\"ct-tabs__trigger\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab() === tab.id\"\n [attr.aria-controls]=\"'panel-' + tab.id\"\n [attr.id]=\"'tab-' + tab.id\"\n [attr.tabindex]=\"activeTab() === tab.id ? 0 : -1\"\n [disabled]=\"tab.disabled\"\n [attr.data-tab-id]=\"tab.id\"\n type=\"button\"\n (click)=\"selectTab(tab.id)\"\n (keydown)=\"onKeydown($event, tab.id)\">\n {{ tab.label }}\n </button>\n }\n </div>\n <ng-content></ng-content>\n </div>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfTabsComponent {\n /** Array of tabs (generated from projected tab panels) */\n tabs: AfTab[] = [];\n\n /** Currently active tab ID (two-way bound) */\n activeTab = model('');\n\n panels = contentChildren(AfTabPanelComponent);\n tabButtons = viewChildren<ElementRef<HTMLButtonElement>>('tabButton');\n\n private panelsEffect = effect(() => {\n this.syncTabsFromPanels();\n });\n\n selectTab(id: string): void {\n if (this.activeTab() !== id) {\n this.activeTab.set(id);\n this.syncActivePanel();\n }\n }\n\n onKeydown(event: KeyboardEvent, currentId: string): void {\n const enabledTabs = this.tabs.filter(tab => !tab.disabled);\n if (enabledTabs.length === 0) return;\n\n const currentIndex = enabledTabs.findIndex(tab => tab.id === currentId);\n const lastIndex = enabledTabs.length - 1;\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown': {\n event.preventDefault();\n const next = enabledTabs[(currentIndex + 1) % enabledTabs.length];\n this.focusTab(next.id);\n break;\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n event.preventDefault();\n const prev = enabledTabs[(currentIndex - 1 + enabledTabs.length) % enabledTabs.length];\n this.focusTab(prev.id);\n break;\n }\n case 'Home': {\n event.preventDefault();\n this.focusTab(enabledTabs[0].id);\n break;\n }\n case 'End': {\n event.preventDefault();\n this.focusTab(enabledTabs[lastIndex].id);\n break;\n }\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.selectTab(currentId);\n break;\n }\n default:\n break;\n }\n }\n\n private syncTabsFromPanels(): void {\n const panels = this.panels();\n this.tabs = panels.map(panel => ({\n id: panel.ensureId(),\n label: panel.label() || panel.id(),\n disabled: panel.disabled()\n }));\n\n if (!this.activeTab() || !this.tabs.some(tab => tab.id === this.activeTab() && !tab.disabled)) {\n const firstEnabled = this.tabs.find(tab => !tab.disabled);\n if (firstEnabled) {\n this.activeTab.set(firstEnabled.id);\n }\n }\n\n this.syncActivePanel();\n }\n\n private syncActivePanel(): void {\n const panels = this.panels();\n if (!panels.length) return;\n panels.forEach(panel => {\n panel.isActive.set(panel.id() === this.activeTab());\n });\n }\n\n private focusTab(id: string): void {\n const button = this.tabButtons().find(ref => ref.nativeElement.dataset['tabId'] === id);\n button?.nativeElement.focus();\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n} from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\n\nexport interface AfNavTab {\n /** Unique identifier for the tab. */\n id: string;\n /** Display label. */\n label: string;\n /** Angular Router link for navigation. */\n routerLink: string | string[];\n /** Disables the tab. */\n disabled?: boolean;\n}\n\nexport type AfNavTabsVariant = 'default' | 'pill';\nexport type AfNavTabsSize = 'sm' | 'md' | 'lg';\n\n/**\n * Router-based tab navigation component.\n *\n * Uses the `ct-tabs` CSS classes from the Construct Design System but renders\n * `<a routerLink>` elements for navigation. Active state is determined\n * automatically via `routerLinkActive`.\n *\n * For content-panel tabs (show/hide content without routing), use `<af-tabs>` instead.\n *\n * @example\n * <af-nav-tabs\n * [tabs]=\"[\n * { id: 'my', label: 'My Documents', routerLink: '/documents/my' },\n * { id: 'all', label: 'All Documents', routerLink: '/documents/all' }\n * ]\">\n * </af-nav-tabs>\n */\n@Component({\n selector: 'af-nav-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive],\n template: `\n <nav [class]=\"containerClasses()\" [attr.aria-label]=\"ariaLabel()\">\n <ul class=\"ct-tabs__list\">\n @for (tab of tabs(); track tab.id) {\n <li>\n @if (tab.disabled) {\n <span\n class=\"ct-tabs__trigger\"\n aria-disabled=\"true\"\n [attr.id]=\"'nav-tab-' + tab.id\">\n {{ tab.label }}\n </span>\n } @else {\n <a\n class=\"ct-tabs__trigger\"\n [routerLink]=\"tab.routerLink\"\n routerLinkActive=\"ct-tabs__trigger--active\"\n #rla=\"routerLinkActive\"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [attr.id]=\"'nav-tab-' + tab.id\">\n {{ tab.label }}\n </a>\n }\n </li>\n }\n </ul>\n </nav>\n `,\n styles: [`\n :host {\n display: block;\n }\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n li {\n display: contents;\n }\n\n .ct-tabs__trigger--active {\n color: var(--color-text-primary);\n }\n\n .ct-tabs__trigger--active::after {\n background: var(--ct-tabs-indicator-color, var(--color-brand-primary));\n }\n\n .ct-tabs--pill .ct-tabs__trigger--active {\n background: var(--color-bg-elevated);\n box-shadow: var(--shadow-sm);\n }\n\n .ct-tabs--pill .ct-tabs__trigger--active::after {\n display: none;\n }\n\n .ct-tabs__trigger[aria-disabled='true'] {\n color: var(--color-text-muted);\n opacity: var(--opacity-disabled, 0.5);\n cursor: not-allowed;\n pointer-events: none;\n }\n `]\n})\nexport class AfNavTabsComponent {\n /** Tab items to render. */\n tabs = input.required<AfNavTab[]>();\n\n /** Visual variant. `'pill'` renders pill-shaped tabs with background. */\n variant = input<AfNavTabsVariant>('default');\n\n /** Size variant. */\n size = input<AfNavTabsSize>('md');\n\n /** Accessible label for the tab navigation. */\n ariaLabel = input('Sub navigation');\n\n containerClasses = computed(() => {\n const classes = ['ct-tabs'];\n const v = this.variant();\n if (v === 'pill') classes.push('ct-tabs--pill');\n const s = this.size();\n if (s !== 'md') classes.push(`ct-tabs--${s}`);\n return classes.join(' ');\n });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n computed,\n inject,\n input,\n output,\n signal,\n viewChild,\n viewChildren,\n} from '@angular/core';\n\nimport { AfButtonSize } from '../button/button.component';\n\nexport interface AfDropdownItem {\n label: string;\n value: unknown;\n disabled?: boolean;\n separator?: boolean;\n}\n\n/**\n * Dropdown menu component implementing the WAI-ARIA Menu Pattern.\n *\n * Provides full keyboard navigation (Arrow keys, Home/End, type-ahead),\n * proper ARIA roles (`menu` / `menuitem`), and roving tabindex focus management.\n *\n * @example\n * <af-dropdown\n * label=\"Actions\"\n * [items]=\"menuItems\"\n * (itemSelected)=\"handleAction($event)\">\n * </af-dropdown>\n */\n@Component({\n selector: 'af-dropdown',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n <div class=\"ct-dropdown\" [attr.data-state]=\"isOpen() ? 'open' : 'closed'\" [attr.data-align]=\"align()\" [attr.data-side]=\"side()\">\n <button\n #trigger\n [id]=\"triggerId\"\n [class]=\"triggerClasses()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"menuId\"\n aria-haspopup=\"menu\"\n type=\"button\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\">\n {{ label() }}\n </button>\n @if (isOpen()) {\n <div\n #menu\n class=\"ct-dropdown__menu\"\n [id]=\"menuId\"\n role=\"menu\"\n aria-orientation=\"vertical\"\n [attr.aria-labelledby]=\"triggerId\"\n (keydown)=\"onMenuKeydown($event)\">\n @for (item of items(); track $index) {\n @if (item.separator) {\n <div class=\"ct-dropdown__separator\" role=\"separator\"></div>\n } @else {\n <button\n #itemButton\n class=\"ct-dropdown__item\"\n role=\"menuitem\"\n [attr.tabindex]=\"focusedItemIndex() === getActionableIndex(item) ? 0 : -1\"\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\n type=\"button\"\n (click)=\"selectItem(item)\">\n {{ item.label }}\n </button>\n }\n }\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: inline-block;\n }\n `,\n ],\n})\nexport class AfDropdownComponent {\n private static nextId = 0;\n private readonly hostRef = inject(ElementRef);\n\n /** Dropdown button label. */\n label = input('Actions');\n\n /** Trigger button size. */\n size = input<AfButtonSize>('md');\n\n /** Horizontal alignment of the menu relative to the trigger. */\n align = input<'start' | 'end'>('start');\n\n /** Which side of the trigger the menu opens on. */\n side = input<'bottom' | 'top'>('bottom');\n\n /** Menu items. */\n items = input<AfDropdownItem[]>([]);\n\n /** Emits the selected item's value. */\n itemSelected = output<unknown>();\n\n /** Computed CSS classes for the trigger button. */\n triggerClasses = computed(() => {\n const classes = ['ct-button', 'ct-button--secondary', 'ct-dropdown__trigger'];\n if (this.size() !== 'md') {\n classes.push(`ct-button--${this.size()}`);\n }\n return classes.join(' ');\n });\n\n triggerRef = viewChild<ElementRef<HTMLButtonElement>>('trigger');\n menuRef = viewChild<ElementRef<HTMLElement>>('menu');\n itemButtons = viewChildren<ElementRef<HTMLButtonElement>>('itemButton');\n\n /** Non-separator items that can receive focus and be selected. */\n private actionableItems = computed(() => this.items().filter((item) => !item.separator));\n\n isOpen = signal(false);\n focusedItemIndex = signal(0);\n\n private instanceId = AfDropdownComponent.nextId++;\n menuId = `af-dropdown-menu-${this.instanceId}`;\n triggerId = `af-dropdown-trigger-${this.instanceId}`;\n\n private typeAheadBuffer = '';\n private typeAheadTimer: ReturnType<typeof setTimeout> | null = null;\n\n toggle(): void {\n if (this.isOpen()) {\n this.close(true);\n } else {\n this.open();\n }\n }\n\n selectItem(item: AfDropdownItem): void {\n if (!item.disabled) {\n this.itemSelected.emit(item.value);\n this.close(true);\n }\n }\n\n /** Handles keyboard events on the trigger button. */\n onTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open(true);\n }\n break;\n }\n }\n\n /** Handles keyboard events within the open menu. */\n onMenuKeydown(event: KeyboardEvent): void {\n const actionableItems = this.actionableItems();\n if (actionableItems.length === 0) return;\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n const next = this.nextEnabledIndex(this.focusedItemIndex(), 1);\n this.focusItem(next);\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n const prev = this.nextEnabledIndex(this.focusedItemIndex(), -1);\n this.focusItem(prev);\n break;\n }\n case 'Home': {\n event.preventDefault();\n const first = this.nextEnabledIndex(-1, 1);\n this.focusItem(first);\n break;\n }\n case 'End': {\n event.preventDefault();\n const last = this.nextEnabledIndex(actionableItems.length, -1);\n this.focusItem(last);\n break;\n }\n case 'Escape':\n event.preventDefault();\n this.close(true);\n break;\n case 'Tab':\n this.close(false);\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n const item = actionableItems[this.focusedItemIndex()];\n if (item && !item.disabled) {\n this.selectItem(item);\n }\n break;\n }\n default:\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey) {\n this.handleTypeAhead(event.key);\n }\n }\n }\n\n onDocumentClick(event: MouseEvent): void {\n if (!this.hostRef.nativeElement.contains(event.target)) {\n this.close(false);\n }\n }\n\n /**\n * Returns the index of a non-separator item within the list of\n * actionable (non-separator) items.\n */\n getActionableIndex(item: AfDropdownItem): number {\n return this.actionableItems().indexOf(item);\n }\n\n private open(focusLast = false): void {\n this.isOpen.set(true);\n const actionableItems = this.actionableItems();\n const startIndex = focusLast\n ? this.nextEnabledIndex(actionableItems.length, -1)\n : this.nextEnabledIndex(-1, 1);\n this.focusedItemIndex.set(startIndex);\n queueMicrotask(() => this.focusCurrent());\n }\n\n private close(returnFocus: boolean): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.typeAheadBuffer = '';\n if (returnFocus) {\n this.triggerRef()?.nativeElement.focus();\n }\n }\n\n private focusItem(index: number): void {\n this.focusedItemIndex.set(index);\n this.focusCurrent();\n }\n\n private focusCurrent(): void {\n const buttons = this.itemButtons();\n const idx = this.focusedItemIndex();\n buttons[idx]?.nativeElement.focus();\n }\n\n private nextEnabledIndex(from: number, direction: 1 | -1): number {\n const actionableItems = this.actionableItems();\n const len = actionableItems.length;\n if (len === 0) return 0;\n\n let idx = from + direction;\n for (let i = 0; i < len; i++) {\n if (idx < 0) idx = len - 1;\n if (idx >= len) idx = 0;\n if (!actionableItems[idx].disabled) return idx;\n idx += direction;\n }\n return from;\n }\n\n private handleTypeAhead(char: string): void {\n if (this.typeAheadTimer) {\n clearTimeout(this.typeAheadTimer);\n }\n this.typeAheadBuffer += char.toLowerCase();\n this.typeAheadTimer = setTimeout(() => {\n this.typeAheadBuffer = '';\n this.typeAheadTimer = null;\n }, 500);\n\n const actionableItems = this.actionableItems();\n const startIndex = this.focusedItemIndex() + 1;\n\n for (let i = 0; i < actionableItems.length; i++) {\n const idx = (startIndex + i) % actionableItems.length;\n const item = actionableItems[idx];\n if (!item.disabled && item.label.toLowerCase().startsWith(this.typeAheadBuffer)) {\n this.focusItem(idx);\n return;\n }\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input, output, computed } from '@angular/core';\n\n/**\n * Pagination component\n *\n * @example\n * <af-pagination\n * [currentPage]=\"page\"\n * [totalPages]=\"10\"\n * (pageChange)=\"onPageChange($event)\">\n * </af-pagination>\n */\n@Component({\n selector: 'af-pagination',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nav class=\"ct-pagination\" aria-label=\"Pagination\">\n <ul class=\"ct-pagination__list\">\n <li>\n <button\n class=\"ct-pagination__link\"\n [attr.aria-disabled]=\"currentPage() === 1 ? 'true' : null\"\n [disabled]=\"currentPage() === 1\"\n type=\"button\"\n (click)=\"goToPage(currentPage() - 1)\">\n {{ previousLabel() }}\n </button>\n </li>\n @for (page of visiblePages(); track page) {\n <li>\n @if (page === '...') {\n <span class=\"ct-pagination__ellipsis\">…</span>\n } @else {\n <button\n class=\"ct-pagination__link\"\n [attr.aria-current]=\"currentPage() === page ? 'page' : null\"\n type=\"button\"\n (click)=\"goToPage(page)\">\n {{ page }}\n </button>\n }\n </li>\n }\n <li>\n <button\n class=\"ct-pagination__link\"\n [attr.aria-disabled]=\"currentPage() === totalPages() ? 'true' : null\"\n [disabled]=\"currentPage() === totalPages()\"\n type=\"button\"\n (click)=\"goToPage(currentPage() + 1)\">\n {{ nextLabel() }}\n </button>\n </li>\n </ul>\n </nav>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfPaginationComponent {\n /** Current page number (1-indexed) */\n currentPage = input(1);\n\n /** Total number of pages */\n totalPages = input(1);\n\n /** Label for previous button */\n previousLabel = input('Prev');\n\n /** Label for next button */\n nextLabel = input('Next');\n\n /** Maximum number of page buttons to show */\n maxVisiblePages = input(7);\n\n /** Page change event */\n pageChange = output<number>();\n\n visiblePages = computed(() => {\n const pages: (number | string)[] = [];\n const halfMax = Math.floor(this.maxVisiblePages() / 2);\n\n let start = Math.max(1, this.currentPage() - halfMax);\n let end = Math.min(this.totalPages(), start + this.maxVisiblePages() - 1);\n\n if (end - start < this.maxVisiblePages() - 1) {\n start = Math.max(1, end - this.maxVisiblePages() + 1);\n }\n\n if (start > 1) {\n pages.push(1);\n if (start > 2) pages.push('...');\n }\n\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n if (end < this.totalPages()) {\n if (end < this.totalPages() - 1) pages.push('...');\n pages.push(this.totalPages());\n }\n\n return pages;\n });\n\n goToPage(page: number | string): void {\n if (typeof page === 'number' && page >= 1 && page <= this.totalPages() && page !== this.currentPage()) {\n this.pageChange.emit(page);\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\nexport interface AfBreadcrumb {\n label: string;\n /** Angular Router link for SPA navigation (preferred for internal routes). */\n routerLink?: string | string[];\n /** Plain HTML href for external links. Causes a full page reload. */\n url?: string;\n}\n\n/**\n * Breadcrumbs navigation component with Angular Router support.\n *\n * Items with `routerLink` navigate via the Angular Router (no page reload).\n * Items with `url` render a plain `<a href>` (for external links).\n * The last item is always rendered as static text (current page).\n *\n * @example\n * <af-breadcrumbs [items]=\"[\n * { label: 'Home', routerLink: '/' },\n * { label: 'Documents', routerLink: '/documents' },\n * { label: 'My Documents' }\n * ]\"></af-breadcrumbs>\n */\n@Component({\n selector: 'af-breadcrumbs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink],\n template: `\n <nav class=\"ct-breadcrumbs\" aria-label=\"Breadcrumb\">\n <ol class=\"ct-breadcrumbs__list\">\n @for (item of items(); track $index; let isLast = $last) {\n <li class=\"ct-breadcrumbs__item\">\n @if (isLast) {\n <span class=\"ct-breadcrumbs__current\" aria-current=\"page\">{{ item.label }}</span>\n } @else if (item.routerLink) {\n <a class=\"ct-breadcrumbs__link\" [routerLink]=\"item.routerLink\">\n {{ item.label }}\n </a>\n <span class=\"ct-breadcrumbs__separator\" aria-hidden=\"true\">/</span>\n } @else if (item.url) {\n <a class=\"ct-breadcrumbs__link\" [href]=\"item.url\">\n {{ item.label }}\n </a>\n <span class=\"ct-breadcrumbs__separator\" aria-hidden=\"true\">/</span>\n } @else {\n <span class=\"ct-breadcrumbs__text\">{{ item.label }}</span>\n <span class=\"ct-breadcrumbs__separator\" aria-hidden=\"true\">/</span>\n }\n </li>\n }\n </ol>\n </nav>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfBreadcrumbsComponent {\n /** Breadcrumb items */\n items = input<AfBreadcrumb[]>([]);\n}\n","import {\n Component,\n forwardRef,\n signal,\n computed,\n ElementRef,\n viewChild,\n input,\n output,\n model,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NG_VALIDATORS,\n Validator,\n AbstractControl,\n ValidationErrors,\n} from '@angular/forms';\n\n/** Supported calendar views */\nexport type AfDatepickerView = 'days' | 'months' | 'years';\n\n/** Selection mode */\nexport type AfDatepickerMode = 'single' | 'range';\n\n/** Value format emitted by ControlValueAccessor */\nexport type AfDatepickerValueFormat = 'date' | 'iso';\n\n/** Date range value for range mode */\nexport interface AfDateRange {\n start: Date | null;\n end: Date | null;\n}\n\ninterface CalendarDay {\n date: Date;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isDisabled: boolean;\n isUnavailable: boolean;\n isInRange: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n}\n\ninterface MonthItem {\n index: number;\n label: string;\n shortLabel: string;\n isSelected: boolean;\n isDisabled: boolean;\n}\n\ninterface YearItem {\n value: number;\n isSelected: boolean;\n isDisabled: boolean;\n}\n\nconst MONTH_NAMES = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nconst MONTH_SHORT = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\nconst WEEKDAY_LABELS = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n\n/**\n * Datepicker component with calendar popup, month/year views, range selection,\n * min/max constraints, disabled dates, and full keyboard navigation.\n *\n * Implements WAI-ARIA Date Picker Dialog pattern with roving tabindex.\n *\n * @example\n * <af-datepicker\n * label=\"Start date\"\n * placeholder=\"Pick a date\"\n * [(ngModel)]=\"selectedDate\"\n * [min]=\"minDate\"\n * [max]=\"maxDate\"\n * hint=\"Choose a date within the project timeline\"\n * />\n *\n * @example\n * <af-datepicker\n * label=\"Period\"\n * mode=\"range\"\n * [(ngModel)]=\"dateRange\"\n * valueFormat=\"iso\"\n * />\n */\n@Component({\n selector: 'af-datepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfDatepickerComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => AfDatepickerComponent),\n multi: true,\n },\n ],\n host: {\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span aria-label=\"required\"> *</span>\n }\n </label>\n }\n\n <div class=\"ct-datepicker\" [attr.data-state]=\"isOpen() ? 'open' : 'closed'\">\n <div class=\"ct-datepicker__input-wrap\">\n <input\n #inputEl\n class=\"ct-input\"\n type=\"text\"\n [id]=\"inputId()\"\n [placeholder]=\"placeholder()\"\n [value]=\"formattedValue()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"popoverId()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-label]=\"label() ? null : (placeholder() || 'Select date')\"\n (click)=\"toggle()\"\n (keydown)=\"onInputKeydown($event)\"\n (blur)=\"onTouched()\"\n readonly\n />\n @if (hasClearableValue() && !disabled()) {\n <button\n class=\"ct-datepicker__clear\"\n type=\"button\"\n aria-label=\"Clear date\"\n (click)=\"clearValue($event)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n </div>\n\n <div\n #popoverEl\n class=\"ct-datepicker__popover\"\n role=\"dialog\"\n [id]=\"popoverId()\"\n [attr.aria-label]=\"dialogAriaLabel()\"\n [attr.aria-hidden]=\"!isOpen() || null\">\n\n <div class=\"ct-datepicker__header\">\n <button\n class=\"ct-button ct-button--ghost ct-button--icon\"\n type=\"button\"\n [attr.aria-label]=\"prevButtonAriaLabel()\"\n (click)=\"navigatePrevious()\">\n ‹\n </button>\n <button\n class=\"ct-datepicker__title\"\n type=\"button\"\n [attr.aria-label]=\"titleAriaLabel()\"\n (click)=\"drillUp()\">\n {{ headerTitle() }}\n </button>\n <button\n class=\"ct-button ct-button--ghost ct-button--icon\"\n type=\"button\"\n [attr.aria-label]=\"nextButtonAriaLabel()\"\n (click)=\"navigateNext()\">\n ›\n </button>\n </div>\n\n @switch (currentView()) {\n @case ('days') {\n <div\n class=\"ct-datepicker__grid\"\n role=\"grid\"\n [attr.aria-label]=\"gridAriaLabel()\"\n (keydown)=\"onDayGridKeydown($event)\">\n <div class=\"ct-datepicker__row\" role=\"row\">\n @for (day of weekdayLabels; track $index) {\n <div class=\"ct-datepicker__weekday\" role=\"columnheader\" [attr.aria-label]=\"weekdayFullLabels[$index]\">\n {{ day }}\n </div>\n }\n </div>\n @for (day of calendarDays(); track day.date.getTime()) {\n <button\n class=\"ct-datepicker__day\"\n [attr.data-date]=\"getDateKey(day.date)\"\n [attr.data-outside]=\"!day.isCurrentMonth || null\"\n [attr.data-today]=\"day.isToday || null\"\n [attr.data-unavailable]=\"day.isUnavailable || null\"\n [attr.data-highlighted]=\"isDayHighlighted(day) || null\"\n [attr.data-in-range]=\"day.isInRange || null\"\n [attr.data-range-start]=\"day.isRangeStart || null\"\n [attr.data-range-end]=\"day.isRangeEnd || null\"\n [attr.aria-selected]=\"day.isSelected ? 'true' : null\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n [attr.aria-disabled]=\"day.isDisabled || day.isUnavailable ? 'true' : null\"\n [disabled]=\"day.isDisabled || day.isUnavailable\"\n [attr.tabindex]=\"getDayTabIndex(day)\"\n role=\"gridcell\"\n type=\"button\"\n (click)=\"onDayClick(day)\">\n {{ day.date.getDate() }}\n </button>\n }\n </div>\n <div class=\"ct-datepicker__footer\">\n <button\n class=\"ct-datepicker__today\"\n type=\"button\"\n [disabled]=\"isTodayDisabled()\"\n (click)=\"goToToday()\">\n Today\n </button>\n </div>\n }\n @case ('months') {\n <div\n class=\"ct-datepicker__month-grid\"\n role=\"grid\"\n aria-label=\"Select month\"\n (keydown)=\"onMonthGridKeydown($event)\">\n @for (m of monthItems(); track m.index) {\n <button\n class=\"ct-datepicker__month\"\n [attr.aria-selected]=\"m.isSelected ? 'true' : null\"\n [attr.data-highlighted]=\"isMonthHighlighted(m.index) || null\"\n [disabled]=\"m.isDisabled\"\n [attr.tabindex]=\"getMonthTabIndex(m.index)\"\n role=\"gridcell\"\n type=\"button\"\n (click)=\"selectMonth(m.index)\">\n {{ m.shortLabel }}\n </button>\n }\n </div>\n }\n @case ('years') {\n <div\n class=\"ct-datepicker__year-grid\"\n role=\"grid\"\n aria-label=\"Select year\"\n (keydown)=\"onYearGridKeydown($event)\">\n @for (y of yearItems(); track y.value) {\n <button\n class=\"ct-datepicker__year\"\n [attr.aria-selected]=\"y.isSelected ? 'true' : null\"\n [attr.data-highlighted]=\"isYearHighlighted(y.value) || null\"\n [disabled]=\"y.isDisabled\"\n [attr.tabindex]=\"getYearTabIndex(y.value)\"\n role=\"gridcell\"\n type=\"button\"\n (click)=\"selectYear(y.value)\">\n {{ y.value }}\n </button>\n }\n </div>\n }\n }\n </div>\n </div>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId()\">{{ hint() }}</div>\n }\n @if (error()) {\n <div class=\"ct-field__error\" [id]=\"errorId()\">{{ error() }}</div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .ct-datepicker__input-wrap {\n position: relative;\n display: flex;\n align-items: center;\n }\n .ct-datepicker__input-wrap .ct-input {\n width: 100%;\n padding-inline-end: 2.25rem;\n }\n .ct-datepicker__clear {\n position: absolute;\n inset-inline-end: 0.5rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--color-text-muted);\n padding: 0.25rem;\n border-radius: var(--radius-sm);\n }\n .ct-datepicker__clear:hover {\n color: var(--color-text-primary);\n }\n .ct-datepicker__clear:focus-visible {\n outline: var(--border-medium) solid var(--color-focus-ring);\n outline-offset: 2px;\n }\n .ct-datepicker__footer {\n display: flex;\n justify-content: center;\n }\n .ct-datepicker__today {\n appearance: none;\n border: none;\n background: transparent;\n color: var(--color-brand-primary);\n cursor: pointer;\n font-size: var(--font-size-sm);\n padding: var(--space-1) var(--space-3);\n border-radius: var(--radius-sm);\n font-weight: var(--font-weight-medium, 500);\n }\n .ct-datepicker__today:hover:not(:disabled) {\n background: var(--color-bg-muted);\n }\n .ct-datepicker__today:focus-visible {\n outline: var(--border-medium) solid var(--color-focus-ring);\n outline-offset: 2px;\n }\n .ct-datepicker__today:disabled {\n opacity: var(--opacity-disabled, 0.5);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class AfDatepickerComponent implements ControlValueAccessor, Validator {\n private static nextId = 0;\n\n // ── Public Inputs ────────────────────────────────────────────\n\n /** Field label */\n label = input('');\n\n /** Input placeholder text */\n placeholder = input('Select date');\n\n /** Whether the datepicker is disabled */\n disabled = model(false);\n\n /** Display format for the selected date */\n dateFormat = input('MMM dd, yyyy');\n\n /** Unique ID for the input element */\n inputId = input(`af-datepicker-${AfDatepickerComponent.nextId++}`);\n\n /** Minimum selectable date */\n min = input<Date | string | null>(null);\n\n /** Maximum selectable date */\n max = input<Date | string | null>(null);\n\n /** Array of specific dates that cannot be selected */\n disabledDates = input<Date[]>([]);\n\n /**\n * Predicate function to determine if a date is selectable.\n * Return `true` to allow selection, `false` to disable.\n */\n dateFilter = input<((date: Date) => boolean) | null>(null);\n\n /** Hint text displayed below the input */\n hint = input('');\n\n /** Error message — displays error state and message */\n error = input('');\n\n /** Whether the field is required */\n required = input(false);\n\n /** Selection mode: single date or date range */\n mode = input<AfDatepickerMode>('single');\n\n /**\n * Value format for ControlValueAccessor.\n * `'date'` emits `Date` objects, `'iso'` emits ISO date strings (`yyyy-MM-dd`).\n */\n valueFormat = input<AfDatepickerValueFormat>('date');\n\n /** Emitted when a single date is selected */\n dateChange = output<Date>();\n\n /** Emitted when a date range is selected (range mode only) */\n rangeChange = output<AfDateRange>();\n\n // ── Template References ──────────────────────────────────────\n\n inputRef = viewChild<ElementRef<HTMLInputElement>>('inputEl');\n popoverRef = viewChild<ElementRef<HTMLDivElement>>('popoverEl');\n\n // ── Constants ────────────────────────────────────────────────\n\n weekdayLabels = WEEKDAY_LABELS;\n weekdayFullLabels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n\n // ── Internal State ───────────────────────────────────────────\n\n selectedDate = signal<Date | null>(null);\n rangeStart = signal<Date | null>(null);\n rangeEnd = signal<Date | null>(null);\n rangeSelecting = signal(false);\n\n currentMonth = signal(new Date().getMonth());\n currentYear = signal(new Date().getFullYear());\n isOpen = signal(false);\n focusedDate = signal<Date | null>(null);\n currentView = signal<AfDatepickerView>('days');\n focusedMonth = signal(new Date().getMonth());\n focusedYear = signal(new Date().getFullYear());\n yearPageStart = signal(Math.floor(new Date().getFullYear() / 12) * 12);\n\n onChange: (value: unknown) => void = () => {};\n onTouched: () => void = () => {};\n private onValidatorChange: () => void = () => {};\n\n // ── Computed ─────────────────────────────────────────────────\n\n parsedMin = computed(() => this.parseDate(this.min()));\n parsedMax = computed(() => this.parseDate(this.max()));\n\n popoverId = computed(() => `${this.inputId()}-popover`);\n hintId = computed(() => `${this.inputId()}-hint`);\n errorId = computed(() => `${this.inputId()}-error`);\n\n ariaDescribedBy = computed(() => {\n if (this.error()) return this.errorId();\n if (this.hint()) return this.hintId();\n return null;\n });\n\n dialogAriaLabel = computed(() => {\n if (this.mode() === 'range') return 'Choose date range';\n return 'Choose date';\n });\n\n headerTitle = computed(() => {\n switch (this.currentView()) {\n case 'days':\n return `${MONTH_NAMES[this.currentMonth()]} ${this.currentYear()}`;\n case 'months':\n return `${this.currentYear()}`;\n case 'years':\n return `${this.yearPageStart()} – ${this.yearPageStart() + 11}`;\n }\n });\n\n titleAriaLabel = computed(() => {\n switch (this.currentView()) {\n case 'days':\n return 'Switch to month view';\n case 'months':\n return 'Switch to year view';\n case 'years':\n return null;\n }\n });\n\n prevButtonAriaLabel = computed(() => {\n switch (this.currentView()) {\n case 'days':\n return 'Previous month';\n case 'months':\n return 'Previous year';\n case 'years':\n return 'Previous 12 years';\n }\n });\n\n nextButtonAriaLabel = computed(() => {\n switch (this.currentView()) {\n case 'days':\n return 'Next month';\n case 'months':\n return 'Next year';\n case 'years':\n return 'Next 12 years';\n }\n });\n\n gridAriaLabel = computed(\n () => `${MONTH_NAMES[this.currentMonth()]} ${this.currentYear()}`\n );\n\n hasClearableValue = computed(() => {\n if (this.mode() === 'range') {\n return this.rangeStart() !== null || this.rangeEnd() !== null;\n }\n return this.selectedDate() !== null;\n });\n\n formattedValue = computed(() => {\n if (this.mode() === 'range') {\n const start = this.rangeStart();\n const end = this.rangeEnd();\n if (!start && !end) return '';\n const startStr = start ? this.formatDate(start) : '...';\n const endStr = end ? this.formatDate(end) : '...';\n return `${startStr} – ${endStr}`;\n }\n const date = this.selectedDate();\n return date ? this.formatDate(date) : '';\n });\n\n isTodayDisabled = computed(() => this.isDateDisabled(new Date()));\n\n calendarDays = computed((): CalendarDay[] => {\n const year = this.currentYear();\n const month = this.currentMonth();\n const today = new Date();\n const selected = this.selectedDate();\n const rStart = this.rangeStart();\n const rEnd = this.rangeEnd();\n const previewEnd =\n this.mode() === 'range' && this.rangeSelecting() ? this.focusedDate() : null;\n const effectiveEnd = rEnd ?? previewEnd;\n\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const days: CalendarDay[] = [];\n\n let startPad = firstDay.getDay() - 1;\n if (startPad < 0) startPad = 6;\n\n const prevLast = new Date(year, month, 0).getDate();\n for (let i = startPad - 1; i >= 0; i--) {\n days.push(this.buildDay(new Date(year, month - 1, prevLast - i), false, today, selected, rStart, effectiveEnd));\n }\n\n for (let i = 1; i <= lastDay.getDate(); i++) {\n days.push(this.buildDay(new Date(year, month, i), true, today, selected, rStart, effectiveEnd));\n }\n\n const remaining = 42 - days.length;\n for (let i = 1; i <= remaining; i++) {\n days.push(this.buildDay(new Date(year, month + 1, i), false, today, selected, rStart, effectiveEnd));\n }\n\n return days;\n });\n\n monthItems = computed((): MonthItem[] => {\n const year = this.currentYear();\n const selected = this.selectedDate();\n const min = this.parsedMin();\n const max = this.parsedMax();\n\n return Array.from({ length: 12 }, (_, i) => {\n const isDisabled = this.isMonthDisabled(year, i, min, max);\n return {\n index: i,\n label: MONTH_NAMES[i],\n shortLabel: MONTH_SHORT[i],\n isSelected: selected ? selected.getMonth() === i && selected.getFullYear() === year : false,\n isDisabled,\n };\n });\n });\n\n yearItems = computed((): YearItem[] => {\n const start = this.yearPageStart();\n const selected = this.selectedDate();\n const min = this.parsedMin();\n const max = this.parsedMax();\n\n return Array.from({ length: 12 }, (_, i) => {\n const value = start + i;\n return {\n value,\n isSelected: selected ? selected.getFullYear() === value : false,\n isDisabled: this.isYearDisabled(value, min, max),\n };\n });\n });\n\n // ── Open / Close ─────────────────────────────────────────────\n\n toggle(): void {\n if (this.isOpen()) {\n this.close(true);\n } else {\n this.open();\n }\n }\n\n /** Opens the calendar popover */\n open(): void {\n if (this.disabled() || this.isOpen()) return;\n const selected = this.selectedDate();\n const focusDate = selected ?? new Date();\n this.currentMonth.set(focusDate.getMonth());\n this.currentYear.set(focusDate.getFullYear());\n this.focusedDate.set(focusDate);\n this.focusedMonth.set(focusDate.getMonth());\n this.focusedYear.set(focusDate.getFullYear());\n this.currentView.set('days');\n this.isOpen.set(true);\n queueMicrotask(() => this.focusDayButton(focusDate));\n }\n\n /** Closes the calendar popover */\n close(returnFocus = false): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.onTouched();\n if (returnFocus) {\n this.inputRef()?.nativeElement.focus();\n }\n }\n\n // ── Day Selection ────────────────────────────────────────────\n\n /** Handles click on a calendar day */\n onDayClick(day: CalendarDay): void {\n if (day.isDisabled || day.isUnavailable) return;\n if (this.mode() === 'range') {\n this.selectRangeDate(day.date);\n } else {\n this.selectSingleDate(day.date);\n }\n }\n\n /** Selects a single date and closes the popover */\n selectSingleDate(date: Date): void {\n this.selectedDate.set(date);\n this.focusedDate.set(date);\n this.emitSingleValue(date);\n this.dateChange.emit(date);\n this.close(true);\n }\n\n /** Handles range date selection (two-click: start then end) */\n selectRangeDate(date: Date): void {\n if (!this.rangeSelecting()) {\n this.rangeStart.set(date);\n this.rangeEnd.set(null);\n this.rangeSelecting.set(true);\n this.focusedDate.set(date);\n } else {\n let start = this.rangeStart()!;\n let end = date;\n if (this.compareDays(end, start) < 0) {\n [start, end] = [end, start];\n }\n this.rangeStart.set(start);\n this.rangeEnd.set(end);\n this.rangeSelecting.set(false);\n this.emitRangeValue(start, end);\n this.rangeChange.emit({ start, end });\n this.close(true);\n }\n }\n\n /** Navigates to today and selects it (single mode) or focuses it */\n goToToday(): void {\n const today = new Date();\n if (this.isDateDisabled(today)) return;\n\n this.currentMonth.set(today.getMonth());\n this.currentYear.set(today.getFullYear());\n this.focusedDate.set(today);\n\n if (this.mode() === 'single') {\n this.selectSingleDate(today);\n } else {\n this.selectRangeDate(today);\n }\n }\n\n /** Clears the selected value */\n clearValue(event: Event): void {\n event.stopPropagation();\n if (this.mode() === 'range') {\n this.rangeStart.set(null);\n this.rangeEnd.set(null);\n this.rangeSelecting.set(false);\n this.emitRangeValue(null, null);\n } else {\n this.selectedDate.set(null);\n this.emitSingleValue(null);\n }\n this.inputRef()?.nativeElement.focus();\n }\n\n // ── View Navigation ──────────────────────────────────────────\n\n /** Drills up: days -> months -> years */\n drillUp(): void {\n const view = this.currentView();\n if (view === 'days') {\n this.focusedMonth.set(this.currentMonth());\n this.currentView.set('months');\n queueMicrotask(() => this.focusMonthButton(this.focusedMonth()));\n } else if (view === 'months') {\n this.focusedYear.set(this.currentYear());\n this.yearPageStart.set(Math.floor(this.currentYear() / 12) * 12);\n this.currentView.set('years');\n queueMicrotask(() => this.focusYearButton(this.focusedYear()));\n }\n }\n\n /** Navigates to previous period based on current view */\n navigatePrevious(): void {\n switch (this.currentView()) {\n case 'days':\n this.shiftMonth(-1);\n break;\n case 'months':\n this.currentYear.update((y) => y - 1);\n break;\n case 'years':\n this.yearPageStart.update((s) => s - 12);\n break;\n }\n }\n\n /** Navigates to next period based on current view */\n navigateNext(): void {\n switch (this.currentView()) {\n case 'days':\n this.shiftMonth(1);\n break;\n case 'months':\n this.currentYear.update((y) => y + 1);\n break;\n case 'years':\n this.yearPageStart.update((s) => s + 12);\n break;\n }\n }\n\n /** Selects a month from the month view and switches to days */\n selectMonth(monthIndex: number): void {\n this.currentMonth.set(monthIndex);\n this.focusedMonth.set(monthIndex);\n this.currentView.set('days');\n const focusDate = new Date(this.currentYear(), monthIndex, 1);\n this.focusedDate.set(focusDate);\n queueMicrotask(() => this.focusDayButton(focusDate));\n }\n\n /** Selects a year from the year view and switches to months */\n selectYear(year: number): void {\n this.currentYear.set(year);\n this.focusedYear.set(year);\n this.currentView.set('months');\n queueMicrotask(() => this.focusMonthButton(this.focusedMonth()));\n }\n\n // ── Day Helpers for Template ─────────────────────────────────\n\n /** Returns true if the given day matches the keyboard-focused date */\n isDayHighlighted(day: CalendarDay): boolean {\n const focused = this.focusedDate();\n return focused !== null && this.isSameDay(day.date, focused);\n }\n\n /** Returns the tabindex for a day button (roving tabindex pattern) */\n getDayTabIndex(day: CalendarDay): number {\n const focused = this.focusedDate();\n if (focused && this.isSameDay(day.date, focused)) return 0;\n if (!focused && day.isSelected) return 0;\n return -1;\n }\n\n /** Returns true if the given month index matches the keyboard-focused month */\n isMonthHighlighted(monthIndex: number): boolean {\n return this.currentView() === 'months' && this.focusedMonth() === monthIndex;\n }\n\n /** Returns the tabindex for a month button */\n getMonthTabIndex(monthIndex: number): number {\n return this.focusedMonth() === monthIndex ? 0 : -1;\n }\n\n /** Returns true if the given year matches the keyboard-focused year */\n isYearHighlighted(year: number): boolean {\n return this.currentView() === 'years' && this.focusedYear() === year;\n }\n\n /** Returns the tabindex for a year button */\n getYearTabIndex(year: number): number {\n return this.focusedYear() === year ? 0 : -1;\n }\n\n /** Returns a date key string for DOM identification */\n getDateKey(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n }\n\n // ── Keyboard Handlers ────────────────────────────────────────\n\n onInputKeydown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n switch (event.key) {\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.open();\n break;\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close(true);\n }\n break;\n case 'Delete':\n case 'Backspace':\n if (this.hasClearableValue()) {\n event.preventDefault();\n this.clearValue(event);\n }\n break;\n }\n }\n\n /** Keyboard navigation within the day grid */\n onDayGridKeydown(event: KeyboardEvent): void {\n if (!this.isOpen()) return;\n const focused =\n this.focusedDate() ??\n this.selectedDate() ??\n new Date(this.currentYear(), this.currentMonth(), 1);\n\n let nextDate: Date | null = null;\n\n switch (event.key) {\n case 'ArrowRight':\n nextDate = this.findNextEnabledDate(focused, 1);\n break;\n case 'ArrowLeft':\n nextDate = this.findNextEnabledDate(focused, -1);\n break;\n case 'ArrowDown':\n nextDate = this.findNextEnabledDate(focused, 7);\n break;\n case 'ArrowUp':\n nextDate = this.findNextEnabledDate(focused, -7);\n break;\n case 'Home':\n nextDate = this.addDays(focused, -this.getWeekdayIndex(focused));\n break;\n case 'End':\n nextDate = this.addDays(focused, 6 - this.getWeekdayIndex(focused));\n break;\n case 'PageUp':\n nextDate = event.shiftKey ? this.addYears(focused, -1) : this.addMonths(focused, -1);\n break;\n case 'PageDown':\n nextDate = event.shiftKey ? this.addYears(focused, 1) : this.addMonths(focused, 1);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!this.isDateDisabled(focused)) {\n this.onDayClick({ date: focused } as CalendarDay);\n }\n return;\n case 'Escape':\n event.preventDefault();\n this.close(true);\n return;\n default:\n return;\n }\n\n if (nextDate) {\n event.preventDefault();\n this.setFocusedDate(nextDate);\n }\n }\n\n /** Keyboard navigation within the month grid */\n onMonthGridKeydown(event: KeyboardEvent): void {\n let nextMonth = this.focusedMonth();\n\n switch (event.key) {\n case 'ArrowRight':\n nextMonth = Math.min(11, nextMonth + 1);\n break;\n case 'ArrowLeft':\n nextMonth = Math.max(0, nextMonth - 1);\n break;\n case 'ArrowDown':\n nextMonth = Math.min(11, nextMonth + 3);\n break;\n case 'ArrowUp':\n nextMonth = Math.max(0, nextMonth - 3);\n break;\n case 'Home':\n nextMonth = 0;\n break;\n case 'End':\n nextMonth = 11;\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!this.isMonthDisabled(this.currentYear(), nextMonth, this.parsedMin(), this.parsedMax())) {\n this.selectMonth(nextMonth);\n }\n return;\n case 'Escape':\n event.preventDefault();\n this.currentView.set('days');\n queueMicrotask(() => this.focusDayButton(this.focusedDate() ?? new Date()));\n return;\n default:\n return;\n }\n\n event.preventDefault();\n this.focusedMonth.set(nextMonth);\n queueMicrotask(() => this.focusMonthButton(nextMonth));\n }\n\n /** Keyboard navigation within the year grid */\n onYearGridKeydown(event: KeyboardEvent): void {\n let nextYear = this.focusedYear();\n const pageStart = this.yearPageStart();\n\n switch (event.key) {\n case 'ArrowRight':\n nextYear += 1;\n break;\n case 'ArrowLeft':\n nextYear -= 1;\n break;\n case 'ArrowDown':\n nextYear += 3;\n break;\n case 'ArrowUp':\n nextYear -= 3;\n break;\n case 'Home':\n nextYear = pageStart;\n break;\n case 'End':\n nextYear = pageStart + 11;\n break;\n case 'PageUp':\n nextYear -= 12;\n break;\n case 'PageDown':\n nextYear += 12;\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!this.isYearDisabled(nextYear, this.parsedMin(), this.parsedMax())) {\n this.selectYear(nextYear);\n }\n return;\n case 'Escape':\n event.preventDefault();\n this.currentView.set('months');\n queueMicrotask(() => this.focusMonthButton(this.focusedMonth()));\n return;\n default:\n return;\n }\n\n event.preventDefault();\n if (nextYear < pageStart) {\n this.yearPageStart.update((s) => s - 12);\n } else if (nextYear >= pageStart + 12) {\n this.yearPageStart.update((s) => s + 12);\n }\n this.focusedYear.set(nextYear);\n queueMicrotask(() => this.focusYearButton(nextYear));\n }\n\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (this.isOpen() && !target.closest('.ct-datepicker')) {\n this.close(false);\n }\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────\n\n writeValue(value: unknown): void {\n if (this.mode() === 'range') {\n this.writeRangeValue(value);\n } else {\n this.writeSingleValue(value);\n }\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // ── Validator ────────────────────────────────────────────────\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n\n if (this.mode() === 'range') {\n return this.validateRange(value);\n }\n return this.validateSingle(value);\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n // ── Private: Value Handling ──────────────────────────────────\n\n private writeSingleValue(value: unknown): void {\n const date = this.coerceToDate(value);\n this.selectedDate.set(date);\n if (date) {\n this.currentMonth.set(date.getMonth());\n this.currentYear.set(date.getFullYear());\n this.focusedDate.set(date);\n } else {\n this.focusedDate.set(null);\n }\n }\n\n private writeRangeValue(value: unknown): void {\n if (!value || typeof value !== 'object') {\n this.rangeStart.set(null);\n this.rangeEnd.set(null);\n this.rangeSelecting.set(false);\n return;\n }\n const range = value as Record<string, unknown>;\n this.rangeStart.set(this.coerceToDate(range['start']));\n this.rangeEnd.set(this.coerceToDate(range['end']));\n this.rangeSelecting.set(false);\n\n const focus = this.rangeStart() ?? this.rangeEnd();\n if (focus) {\n this.currentMonth.set(focus.getMonth());\n this.currentYear.set(focus.getFullYear());\n }\n }\n\n private emitSingleValue(date: Date | null): void {\n if (this.valueFormat() === 'iso') {\n this.onChange(date ? this.toIsoString(date) : null);\n } else {\n this.onChange(date);\n }\n this.onValidatorChange();\n }\n\n private emitRangeValue(start: Date | null, end: Date | null): void {\n if (this.valueFormat() === 'iso') {\n this.onChange({\n start: start ? this.toIsoString(start) : null,\n end: end ? this.toIsoString(end) : null,\n });\n } else {\n this.onChange({ start, end });\n }\n this.onValidatorChange();\n }\n\n // ── Private: Validation ──────────────────────────────────────\n\n private validateSingle(value: unknown): ValidationErrors | null {\n if (!value) return null;\n const date = this.coerceToDate(value);\n if (!date) return null;\n\n const min = this.parsedMin();\n const max = this.parsedMax();\n\n if (min && this.compareDays(date, min) < 0) {\n return { afDatepickerMin: { min, actual: date } };\n }\n if (max && this.compareDays(date, max) > 0) {\n return { afDatepickerMax: { max, actual: date } };\n }\n if (this.isDateUnavailable(date)) {\n return { afDatepickerFilter: true };\n }\n return null;\n }\n\n private validateRange(value: unknown): ValidationErrors | null {\n if (!value || typeof value !== 'object') return null;\n const range = value as Record<string, unknown>;\n const start = this.coerceToDate(range['start']);\n const end = this.coerceToDate(range['end']);\n\n const errors: ValidationErrors = {};\n const min = this.parsedMin();\n const max = this.parsedMax();\n\n if (start && min && this.compareDays(start, min) < 0) {\n errors['afDatepickerMin'] = { min, actual: start };\n }\n if (end && max && this.compareDays(end, max) > 0) {\n errors['afDatepickerMax'] = { max, actual: end };\n }\n if (start && end && this.compareDays(start, end) > 0) {\n errors['afDatepickerRange'] = { start, end };\n }\n\n return Object.keys(errors).length > 0 ? errors : null;\n }\n\n // ── Private: Calendar Building ───────────────────────────────\n\n private buildDay(\n date: Date,\n isCurrentMonth: boolean,\n today: Date,\n selected: Date | null,\n rangeStart: Date | null,\n rangeEnd: Date | null,\n ): CalendarDay {\n const isToday = this.isSameDay(date, today);\n const isSelected =\n this.mode() === 'single' && selected !== null ? this.isSameDay(date, selected) : false;\n const isDisabled = this.isDateDisabled(date);\n const isUnavailable = this.isDateUnavailable(date);\n\n let isInRange = false;\n let isRangeStart = false;\n let isRangeEnd = false;\n\n if (this.mode() === 'range' && rangeStart) {\n isRangeStart = this.isSameDay(date, rangeStart);\n if (rangeEnd) {\n const [lo, hi] =\n this.compareDays(rangeStart, rangeEnd) <= 0\n ? [rangeStart, rangeEnd]\n : [rangeEnd, rangeStart];\n isRangeStart = this.isSameDay(date, lo);\n isRangeEnd = this.isSameDay(date, hi);\n isInRange =\n !isRangeStart &&\n !isRangeEnd &&\n this.compareDays(date, lo) > 0 &&\n this.compareDays(date, hi) < 0;\n }\n }\n\n return {\n date,\n isCurrentMonth,\n isToday,\n isSelected,\n isDisabled,\n isUnavailable,\n isInRange,\n isRangeStart,\n isRangeEnd,\n };\n }\n\n // ── Private: Disability Checks ───────────────────────────────\n\n /** Checks whether a date falls outside min/max bounds */\n isDateDisabled(date: Date): boolean {\n const min = this.parsedMin();\n const max = this.parsedMax();\n if (min && this.compareDays(date, min) < 0) return true;\n if (max && this.compareDays(date, max) > 0) return true;\n return false;\n }\n\n /** Checks whether a date is explicitly unavailable (disabledDates or dateFilter) */\n private isDateUnavailable(date: Date): boolean {\n const disabled = this.disabledDates();\n if (disabled.some((d) => this.isSameDay(d, date))) return true;\n const filter = this.dateFilter();\n if (filter && !filter(date)) return true;\n return false;\n }\n\n private isMonthDisabled(\n year: number,\n month: number,\n min: Date | null,\n max: Date | null,\n ): boolean {\n if (min) {\n const minMonth = new Date(min.getFullYear(), min.getMonth(), 1);\n if (new Date(year, month + 1, 0) < minMonth) return true;\n }\n if (max) {\n const maxMonth = new Date(max.getFullYear(), max.getMonth() + 1, 0);\n if (new Date(year, month, 1) > maxMonth) return true;\n }\n return false;\n }\n\n private isYearDisabled(year: number, min: Date | null, max: Date | null): boolean {\n if (min && year < min.getFullYear()) return true;\n if (max && year > max.getFullYear()) return true;\n return false;\n }\n\n // ── Private: Focus Management ────────────────────────────────\n\n private setFocusedDate(date: Date): void {\n this.currentMonth.set(date.getMonth());\n this.currentYear.set(date.getFullYear());\n this.focusedDate.set(date);\n queueMicrotask(() => this.focusDayButton(date));\n }\n\n private focusDayButton(date: Date): void {\n const popover = this.popoverRef()?.nativeElement;\n if (!popover) return;\n const key = this.getDateKey(date);\n const button = popover.querySelector<HTMLButtonElement>(\n `.ct-datepicker__day[data-date=\"${key}\"]`,\n );\n button?.focus();\n }\n\n private focusMonthButton(monthIndex: number): void {\n const popover = this.popoverRef()?.nativeElement;\n if (!popover) return;\n const buttons = popover.querySelectorAll<HTMLButtonElement>('.ct-datepicker__month');\n buttons[monthIndex]?.focus();\n }\n\n private focusYearButton(year: number): void {\n const popover = this.popoverRef()?.nativeElement;\n if (!popover) return;\n const buttons = popover.querySelectorAll<HTMLButtonElement>('.ct-datepicker__year');\n const pageStart = this.yearPageStart();\n const index = year - pageStart;\n if (index >= 0 && index < buttons.length) {\n buttons[index]?.focus();\n }\n }\n\n /** Finds the next non-disabled date in the given direction */\n private findNextEnabledDate(from: Date, step: number): Date {\n let next = this.addDays(from, step);\n let attempts = 0;\n const singleStep = step > 0 ? 1 : -1;\n while (this.isDateDisabled(next) && attempts < 365) {\n next = this.addDays(next, singleStep);\n attempts++;\n }\n return next;\n }\n\n // ── Private: Date Arithmetic ─────────────────────────────────\n\n private shiftMonth(delta: number): void {\n const base =\n this.focusedDate() ?? new Date(this.currentYear(), this.currentMonth(), 1);\n const next = this.addMonths(base, delta);\n this.setFocusedDate(next);\n }\n\n private addDays(date: Date, delta: number): Date {\n const next = new Date(date);\n next.setDate(date.getDate() + delta);\n return next;\n }\n\n private addMonths(date: Date, delta: number): Date {\n const next = new Date(date);\n next.setMonth(date.getMonth() + delta);\n return next;\n }\n\n private addYears(date: Date, delta: number): Date {\n const next = new Date(date);\n next.setFullYear(date.getFullYear() + delta);\n return next;\n }\n\n private getWeekdayIndex(date: Date): number {\n const day = date.getDay();\n return day === 0 ? 6 : day - 1;\n }\n\n // ── Private: Date Comparison & Parsing ───────────────────────\n\n private isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n }\n\n private compareDays(a: Date, b: Date): number {\n const da = new Date(a.getFullYear(), a.getMonth(), a.getDate()).getTime();\n const db = new Date(b.getFullYear(), b.getMonth(), b.getDate()).getTime();\n return da - db;\n }\n\n private parseDate(value: Date | string | null | undefined): Date | null {\n if (!value) return null;\n if (value instanceof Date) return value;\n if (typeof value === 'string') {\n const parsed = new Date(value);\n return isNaN(parsed.getTime()) ? null : parsed;\n }\n return null;\n }\n\n private coerceToDate(value: unknown): Date | null {\n if (!value) return null;\n if (value instanceof Date) return value;\n if (typeof value === 'string') {\n const parsed = new Date(value);\n return isNaN(parsed.getTime()) ? null : parsed;\n }\n return null;\n }\n\n private toIsoString(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n }\n\n private formatDate(date: Date): string {\n const tokens: Record<string, string> = {\n yyyy: String(date.getFullYear()),\n MMM: MONTH_SHORT[date.getMonth()],\n MM: String(date.getMonth() + 1).padStart(2, '0'),\n dd: String(date.getDate()).padStart(2, '0'),\n d: String(date.getDate()),\n };\n return this.dateFormat().replace(/yyyy|MMM|MM|dd|d/g, (token) => tokens[token] ?? token);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n input,\n model,\n output,\n} from '@angular/core';\n\nexport type AfChipVariant = 'default' | 'info' | 'success' | 'warning' | 'danger';\nexport type AfChipAppearance = 'subtle' | 'outline' | 'solid';\nexport type AfChipSize = 'sm' | 'md' | 'lg';\n\n/**\n * Chip component for labels, tags, statuses, and interactive filters.\n *\n * @example Static chip\n * <af-chip variant=\"success\" size=\"sm\">Resolved</af-chip>\n *\n * @example Toggle chip with two-way binding\n * <af-chip selectable [(selected)]=\"isActive\">Filter</af-chip>\n *\n * @example Removable chip\n * <af-chip removable (removed)=\"onRemove()\">Status: Active</af-chip>\n */\n@Component({\n selector: 'af-chip',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'chipClasses()',\n '[attr.role]': 'chipRole()',\n '[attr.tabindex]': 'selectable() && !removable() && !disabled() ? \"0\" : null',\n '[attr.aria-pressed]': 'selectable() && !removable() ? selected() : null',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.aria-label]': 'ariaLabel() || null',\n '(click)': 'handleClick()',\n '(keydown.enter)': 'handleKeydown($event)',\n '(keydown.space)': 'handleKeydown($event)',\n '(keydown.delete)': 'handleRemoveKeydown($event)',\n '(keydown.backspace)': 'handleRemoveKeydown($event)',\n },\n template: `\n <span\n class=\"ct-chip__action\"\n [attr.role]=\"selectable() && removable() ? 'button' : null\"\n [attr.tabindex]=\"selectable() && removable() && !disabled() ? '0' : null\"\n [attr.aria-pressed]=\"selectable() && removable() ? selected() : null\">\n @if (dot()) {\n <span class=\"ct-chip__dot\" aria-hidden=\"true\"></span>\n } @else {\n <span class=\"ct-chip__avatar\">\n <ng-content select=\"[chipAvatar]\" />\n </span>\n\n <span [class]=\"iconClasses()\" aria-hidden=\"true\">\n <ng-content select=\"af-icon,[chipIcon]\" />\n </span>\n }\n\n <span class=\"ct-chip__label\">\n <ng-content />\n </span>\n\n @if (selectable()) {\n <span class=\"ct-chip__check\" aria-hidden=\"true\"></span>\n }\n </span>\n\n @if (removable() && !disabled()) {\n <button\n type=\"button\"\n class=\"ct-chip__remove\"\n [attr.aria-label]=\"removeAriaLabel()\"\n (click)=\"handleRemove($event)\">\n <svg\n viewBox=\"0 0 24 24\"\n width=\"16\"\n height=\"16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n `,\n styles: `\n :host {\n display: inline-flex;\n align-items: center;\n }\n .ct-chip__action {\n display: contents;\n }\n .ct-chip__action:focus-visible {\n outline: none;\n }\n :host:has(.ct-chip__action:focus-visible) {\n outline: 2px solid var(--color-focus-ring, Highlight);\n outline-offset: 2px;\n }\n .ct-chip__icon:not(:has(*)),\n .ct-chip__avatar:not(:has(*)) {\n display: none;\n }\n `,\n})\nexport class AfChipComponent {\n /** Semantic color variant. */\n variant = input<AfChipVariant>('default');\n\n /** Visual style: subtle (filled background), outline, or solid. */\n appearance = input<AfChipAppearance>('subtle');\n\n /** Size of the chip. */\n size = input<AfChipSize>('md');\n\n /** Opaque value for identifying this chip in lists or groups. */\n value = input<unknown>();\n\n /** Enables toggle behavior with hover, active, focus styles, and keyboard support. */\n selectable = input(false, { transform: booleanAttribute });\n\n /** Selected state for toggle chips. Supports two-way binding via `[(selected)]`. */\n selected = model(false);\n\n /** Disables the chip, preventing all interaction. */\n disabled = input(false, { transform: booleanAttribute });\n\n /** Shows a remove button inside the chip. */\n removable = input(false, { transform: booleanAttribute });\n\n /** Shows a dot status indicator instead of an icon. */\n dot = input(false, { transform: booleanAttribute });\n\n /** Accessible label for icon-only or truncated chips. */\n ariaLabel = input<string>();\n\n /** Accessible label for the remove button. Should be localized by the consumer. */\n removeAriaLabel = input('Remove');\n\n /** Emits the chip's `value` when the remove button is clicked or Delete/Backspace is pressed. */\n removed = output<unknown>();\n\n chipRole = computed(() => {\n if (!this.selectable()) return null;\n return this.removable() ? 'group' : 'button';\n });\n\n iconClasses = computed(() => {\n const classes = ['ct-chip__icon'];\n if (this.variant() !== 'default') {\n classes.push(`ct-chip__icon--${this.variant()}`);\n }\n return classes.join(' ');\n });\n\n chipClasses = computed(() => {\n const classes = ['ct-chip'];\n\n if (this.size() !== 'md') {\n classes.push(`ct-chip--${this.size()}`);\n }\n\n if (this.appearance() !== 'subtle') {\n classes.push(`ct-chip--${this.appearance()}`);\n }\n\n if (this.variant() !== 'default') {\n classes.push(`ct-chip--${this.variant()}`);\n }\n\n if (this.selectable()) {\n classes.push('ct-chip--interactive');\n }\n\n if (this.selectable() && this.selected()) {\n classes.push('ct-chip--selected');\n }\n\n if (this.disabled()) {\n classes.push('ct-chip--disabled');\n }\n\n return classes.join(' ');\n });\n\n handleClick(): void {\n if (!this.selectable() || this.disabled()) return;\n this.selected.update(v => !v);\n }\n\n handleKeydown(event: Event): void {\n if ((event.target as HTMLElement).closest('.ct-chip__remove')) return;\n if (!this.selectable() || this.disabled()) return;\n event.preventDefault();\n this.selected.update(v => !v);\n }\n\n handleRemoveKeydown(event: Event): void {\n if (!this.removable() || this.disabled()) return;\n event.preventDefault();\n this.removed.emit(this.value());\n }\n\n handleRemove(event: MouseEvent): void {\n event.stopPropagation();\n this.removed.emit(this.value());\n }\n}\n","import {\n Component,\n ElementRef,\n viewChild,\n forwardRef,\n input,\n output,\n model,\n signal,\n computed,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Chip input component for managing a list of string values.\n *\n * Renders existing values as removable chips and provides a text input\n * that creates new chips on configurable separator keys (Enter, Comma, Semicolon).\n * Implements ControlValueAccessor for seamless integration with Angular Reactive Forms\n * and template-driven forms, binding to a `string[]` value.\n *\n * @example\n * <af-chip-input\n * label=\"Roles\"\n * placeholder=\"Add role...\"\n * [(ngModel)]=\"roles\">\n * </af-chip-input>\n *\n * @example\n * <af-chip-input\n * label=\"Tags\"\n * [separators]=\"[',', ';']\"\n * [formControl]=\"tagsControl\">\n * </af-chip-input>\n */\n@Component({\n selector: 'af-chip-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfChipInputComponent),\n multi: true,\n },\n ],\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [attr.for]=\"inputId\">\n {{ label() }}\n @if (required()) {\n <span aria-label=\"required\"> *</span>\n }\n </label>\n }\n\n <div\n class=\"ct-chip-input\"\n [class.ct-chip-input--disabled]=\"disabled()\"\n [class.ct-chip-input--focused]=\"focused()\"\n (click)=\"focusInput()\">\n @for (chip of chips(); track chip) {\n <span\n class=\"ct-chip\"\n [attr.aria-disabled]=\"disabled() || null\">\n <span class=\"ct-chip__label\">{{ chip }}</span>\n @if (!disabled()) {\n <button\n type=\"button\"\n class=\"ct-chip__remove\"\n [attr.aria-label]=\"'Remove ' + chip\"\n (click)=\"remove(chip, $event)\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg>\n </button>\n }\n </span>\n }\n\n <input\n #chipInput\n [id]=\"inputId\"\n type=\"text\"\n class=\"ct-chip-input__input\"\n [placeholder]=\"chips().length === 0 ? placeholder() : ''\"\n [disabled]=\"disabled()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"getAriaDescribedBy()\"\n (keydown)=\"onKeydown($event)\"\n (input)=\"onInputChange($event)\"\n (focus)=\"focused.set(true)\"\n (blur)=\"onBlur()\"\n />\n </div>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId()\">\n {{ hint() }}\n </div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" [id]=\"errorId()\">\n {{ error() }}\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .ct-chip-input {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2, 0.5rem);\n padding: var(--space-2, 0.5rem);\n border: var(--border-thin, 1px solid) var(--color-border-default, #d1d5db);\n border-radius: var(--radius-md, 0.375rem);\n background: var(--color-bg-default, #fff);\n cursor: text;\n transition: border-color var(--duration-fast, 150ms) var(--easing-standard, ease);\n }\n\n .ct-chip-input--focused {\n border-color: var(--color-focus-ring, #2563eb);\n outline: 2px solid var(--color-focus-ring, #2563eb);\n outline-offset: 2px;\n }\n\n .ct-chip-input--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .ct-chip-input__input {\n flex: 1 1 auto;\n min-width: 80px;\n border: none;\n outline: none;\n background: transparent;\n font: inherit;\n color: inherit;\n padding: var(--space-1, 0.25rem) 0;\n }\n\n .ct-chip-input__input:disabled {\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class AfChipInputComponent implements ControlValueAccessor {\n private static nextId = 0;\n\n /** Label shown above the input */\n label = input('');\n\n /** Placeholder text for the text input */\n placeholder = input('');\n\n /** Hint text shown below the input */\n hint = input('');\n\n /** Error message -- shows error state */\n error = input('');\n\n /** Whether the field is required */\n required = input(false);\n\n /** Whether the component is disabled */\n disabled = model(false);\n\n /** Whether to allow duplicate chip values */\n allowDuplicates = input(false);\n\n /** Separator characters that trigger chip creation (in addition to Enter) */\n separators = input<string[]>([',', ';']);\n\n /** Emitted when a chip is added */\n added = output<string>();\n\n /** Emitted when a chip is removed */\n removed = output<string>();\n\n inputRef = viewChild.required<ElementRef<HTMLInputElement>>('chipInput');\n\n inputId = `af-chip-input-${AfChipInputComponent.nextId++}`;\n chips = signal<string[]>([]);\n focused = signal(false);\n\n private onChange: (value: string[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n hintId = computed(() => `${this.inputId}-hint`);\n\n errorId = computed(() => `${this.inputId}-error`);\n\n getAriaDescribedBy(): string | null {\n if (this.error()) return this.errorId();\n if (this.hint()) return this.hintId();\n return null;\n }\n\n focusInput(): void {\n this.inputRef().nativeElement.focus();\n }\n\n onKeydown(event: KeyboardEvent): void {\n const inputEl = event.target as HTMLInputElement;\n const value = inputEl.value.trim();\n\n if (event.key === 'Enter') {\n event.preventDefault();\n this.addChip(value, inputEl);\n return;\n }\n\n if (this.separators().includes(event.key)) {\n event.preventDefault();\n this.addChip(value, inputEl);\n return;\n }\n\n const currentChips = this.chips();\n if (event.key === 'Backspace' && value === '' && currentChips.length > 0) {\n this.remove(currentChips[currentChips.length - 1]);\n }\n }\n\n onInputChange(event: Event): void {\n const inputEl = event.target as HTMLInputElement;\n const value = inputEl.value;\n\n // Handle paste with separators\n for (const sep of this.separators()) {\n if (value.includes(sep)) {\n const parts = value.split(new RegExp(`[${this.escapeSeparators()}]`));\n inputEl.value = '';\n for (const part of parts) {\n const trimmed = part.trim();\n if (trimmed) {\n this.addChipValue(trimmed);\n }\n }\n return;\n }\n }\n }\n\n onBlur(): void {\n this.focused.set(false);\n this.onTouched();\n }\n\n /** Removes a chip by value */\n remove(chip: string, event?: Event): void {\n event?.stopPropagation();\n const current = this.chips();\n const index = current.indexOf(chip);\n if (index >= 0) {\n this.chips.set([...current.slice(0, index), ...current.slice(index + 1)]);\n this.emitChange();\n this.removed.emit(chip);\n }\n }\n\n // ControlValueAccessor\n writeValue(value: string[]): void {\n this.chips.set(Array.isArray(value) ? [...value] : []);\n }\n\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n private addChip(value: string, inputEl: HTMLInputElement): void {\n if (value) {\n this.addChipValue(value);\n inputEl.value = '';\n }\n }\n\n private addChipValue(value: string): void {\n if (!this.allowDuplicates() && this.chips().includes(value)) {\n return;\n }\n this.chips.update(c => [...c, value]);\n this.emitChange();\n this.added.emit(value);\n }\n\n private emitChange(): void {\n this.onChange([...this.chips()]);\n }\n\n private escapeSeparators(): string {\n return this.separators().map(s => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('');\n }\n}\n","import {\n Directive,\n ElementRef,\n Renderer2,\n OnDestroy,\n effect,\n input,\n inject,\n} from '@angular/core';\n\nexport type AfTooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\nlet tooltipIdCounter = 0;\n\n/**\n * Directive that attaches a tooltip to any host element.\n *\n * Uses the design system's `ct-tooltip` CSS classes for styling and animation.\n * Shows on hover and focus, hides on blur, mouse leave, and Escape key.\n * Includes a configurable delay before showing.\n *\n * @example\n * <button afTooltip=\"Save changes\">Save</button>\n *\n * @example\n * <button\n * afTooltip=\"Delete item\"\n * afTooltipPosition=\"bottom\"\n * [afTooltipDelay]=\"500\">\n * Delete\n * </button>\n */\n@Directive({\n selector: '[afTooltip]',\n})\nexport class AfTooltipDirective implements OnDestroy {\n /** Tooltip text content */\n text = input('', { alias: 'afTooltip' });\n\n /** Position relative to the host element */\n afTooltipPosition = input<AfTooltipPosition>('top');\n\n /** Delay in ms before showing the tooltip */\n afTooltipDelay = input(300);\n\n /** Whether the tooltip is disabled */\n afTooltipDisabled = input(false);\n\n private el = inject(ElementRef<HTMLElement>);\n private renderer = inject(Renderer2);\n\n private contentEl: HTMLElement | null = null;\n private tooltipId = `af-tooltip-${tooltipIdCounter++}`;\n private showTimeout: ReturnType<typeof setTimeout> | null = null;\n private readonly listeners: (() => void)[] = [];\n\n constructor() {\n this.initHost();\n this.setupListeners();\n }\n\n private textEffect = effect(() => {\n if (this.contentEl) {\n this.contentEl.textContent = this.text();\n }\n });\n\n private positionEffect = effect(() => {\n this.el.nativeElement.setAttribute('data-side', this.afTooltipPosition());\n });\n\n ngOnDestroy(): void {\n this.hide();\n this.listeners.forEach(unlisten => unlisten());\n }\n\n private initHost(): void {\n const host = this.el.nativeElement;\n this.renderer.addClass(host, 'ct-tooltip');\n host.setAttribute('data-state', 'closed');\n host.setAttribute('data-side', this.afTooltipPosition());\n }\n\n private setupListeners(): void {\n const host = this.el.nativeElement;\n\n this.listeners.push(\n this.renderer.listen(host, 'mouseenter', () => this.scheduleShow()),\n this.renderer.listen(host, 'mouseleave', () => this.hide()),\n this.renderer.listen(host, 'focusin', () => this.scheduleShow()),\n this.renderer.listen(host, 'focusout', () => this.hide()),\n this.renderer.listen(host, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape') this.hide();\n }),\n );\n }\n\n private scheduleShow(): void {\n if (this.afTooltipDisabled() || !this.text()) return;\n this.clearTimeout();\n this.showTimeout = setTimeout(() => this.show(), this.afTooltipDelay());\n }\n\n private show(): void {\n if (this.contentEl) return;\n\n const host = this.el.nativeElement;\n const content = this.renderer.createElement('span') as HTMLElement;\n content.classList.add('ct-tooltip__content');\n content.setAttribute('role', 'tooltip');\n content.setAttribute('id', this.tooltipId);\n content.textContent = this.text();\n\n this.renderer.appendChild(host, content);\n host.setAttribute('aria-describedby', this.tooltipId);\n this.contentEl = content;\n\n // Trigger open state on next frame so CSS transition plays\n requestAnimationFrame(() => {\n host.setAttribute('data-state', 'open');\n });\n }\n\n private hide(): void {\n this.clearTimeout();\n if (this.contentEl) {\n const host = this.el.nativeElement;\n host.setAttribute('data-state', 'closed');\n host.removeAttribute('aria-describedby');\n this.contentEl.remove();\n this.contentEl = null;\n }\n }\n\n private clearTimeout(): void {\n if (this.showTimeout !== null) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, booleanAttribute, input, computed } from '@angular/core';\n\nexport type AfBadgeVariant = 'default' | 'info' | 'success' | 'warning' | 'danger';\n\n/**\n * Badge component for status indicators, labels, and counts.\n *\n * Wraps the Construct Design System `ct-badge` with semantic color\n * variants and optional icon or dot indicators.\n *\n * @example Basic usage\n * <af-badge variant=\"success\">Approved</af-badge>\n *\n * @example With icon\n * <af-badge variant=\"danger\" icon=\"+\">Blocked</af-badge>\n *\n * @example With dot indicator\n * <af-badge variant=\"info\" dot>Online</af-badge>\n *\n * @example Status badge for screen readers\n * <af-badge variant=\"warning\" role=\"status\" ariaLabel=\"Build status: failing\">\n * Failing\n * </af-badge>\n *\n * @accessibility\n * - Non-interactive element — no keyboard navigation required.\n * - Decorative elements (icon, dot) are hidden from screen readers via `aria-hidden`.\n * - Use `ariaLabel` when the badge has no visible text or when the visual content\n * alone does not convey the full meaning.\n * - Set `role=\"status\"` when the badge reflects a live value that screen readers\n * should announce on change.\n */\n@Component({\n selector: 'af-badge',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'badgeClasses()',\n '[attr.role]': 'role() || null',\n '[attr.aria-label]': 'ariaLabel() || null',\n },\n template: `\n @if (icon()) {\n <span class=\"ct-badge__icon\" aria-hidden=\"true\">{{ icon() }}</span>\n }\n @if (dot()) {\n <span class=\"ct-badge__dot\" aria-hidden=\"true\"></span>\n }\n <ng-content />\n `,\n})\nexport class AfBadgeComponent {\n /** ARIA role, e.g. `\"status\"` for live status badges. */\n role = input('');\n\n /** Accessible label, useful when the badge has no visible text. */\n ariaLabel = input('');\n\n /** Semantic color variant. */\n variant = input<AfBadgeVariant>('default');\n\n /** Icon character to display before the label. */\n icon = input('');\n\n /** Show a dot indicator instead of an icon. */\n dot = input(false, { transform: booleanAttribute });\n\n /** Computed CSS classes combining base class and variant/icon modifiers. */\n badgeClasses = computed(() => {\n const classes = ['ct-badge'];\n if (this.variant() !== 'default') {\n classes.push(`ct-badge--${this.variant()}`);\n }\n if (this.icon() || this.dot()) {\n classes.push('ct-badge--icon');\n }\n return classes.join(' ');\n });\n}\n","/**\n * Test harness for AfBadgeComponent.\n *\n * Provides a semantic API for querying badge state in tests,\n * abstracting DOM details behind readable method names.\n *\n * @example\n * const harness = new AfBadgeHarness(fixture.nativeElement);\n * expect(harness.getText()).toBe('Approved');\n * expect(harness.hasClass('ct-badge--success')).toBe(true);\n */\nexport class AfBadgeHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-badge');\n if (!el) {\n throw new Error('AfBadgeHarness: af-badge element not found in container.');\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Returns the trimmed text content of the badge (projected content only). */\n getText(): string {\n return this.hostEl.textContent?.trim() ?? '';\n }\n\n /** Returns the full `class` attribute string of the host element. */\n getClasses(): string {\n return this.hostEl.className;\n }\n\n /** Returns whether the host element has the given CSS class. */\n hasClass(className: string): boolean {\n return this.hostEl.classList.contains(className);\n }\n\n /** Returns the `aria-label` attribute value, or `null` if absent. */\n getAriaLabel(): string | null {\n return this.hostEl.getAttribute('aria-label');\n }\n\n /** Returns the `role` attribute value, or `null` if absent. */\n getRole(): string | null {\n return this.hostEl.getAttribute('role');\n }\n\n /** Returns whether the badge contains an icon element. */\n hasIcon(): boolean {\n return this.hostEl.querySelector('.ct-badge__icon') !== null;\n }\n\n /** Returns whether the badge contains a dot indicator. */\n hasDot(): boolean {\n return this.hostEl.querySelector('.ct-badge__dot') !== null;\n }\n\n /** Returns the text content of the icon element, or empty string if absent. */\n getIconText(): string {\n return this.hostEl.querySelector('.ct-badge__icon')?.textContent?.trim() ?? '';\n }\n}\n","import { Component, ChangeDetectionStrategy, input, computed } from '@angular/core';\n\nexport type AfProgressBarVariant = 'default' | 'info' | 'success' | 'warning' | 'danger';\nexport type AfProgressBarSize = 'sm' | 'md' | 'lg';\n\n/**\n * Progress bar for showing completion state\n *\n * @example\n * <af-progress-bar [value]=\"75\" variant=\"success\" label=\"Upload progress\"></af-progress-bar>\n * <af-progress-bar [indeterminate]=\"true\" label=\"Loading\"></af-progress-bar>\n */\n@Component({\n selector: 'af-progress-bar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n [class]=\"barClasses()\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"indeterminate() ? null : value()\"\n [attr.aria-valuemin]=\"indeterminate() ? null : 0\"\n [attr.aria-valuemax]=\"indeterminate() ? null : 100\"\n [attr.aria-label]=\"label()\">\n <div\n class=\"ct-progress-bar__track\"\n [style.width]=\"indeterminate() ? null : value() + '%'\">\n </div>\n </div>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfProgressBarComponent {\n /** Current progress value (0-100) */\n value = input(0);\n\n /** Color variant */\n variant = input<AfProgressBarVariant>('default');\n\n /** Track height */\n size = input<AfProgressBarSize>('md');\n\n /** Accessible label for screen readers */\n label = input('');\n\n /** Indeterminate mode (animated, no fixed value) */\n indeterminate = input(false);\n\n barClasses = computed(() => {\n const classes = ['ct-progress-bar'];\n if (this.variant() !== 'default') {\n classes.push(`ct-progress-bar--${this.variant()}`);\n }\n if (this.size() !== 'md') {\n classes.push(`ct-progress-bar--${this.size()}`);\n }\n if (this.indeterminate()) {\n classes.push('ct-progress-bar--indeterminate');\n }\n return classes.join(' ');\n });\n}\n","import { Component, ChangeDetectionStrategy, input, computed } from '@angular/core';\n\nexport type AfSpinnerSize = 'sm' | 'md' | 'lg';\n\n/**\n * Spinner component for loading states\n *\n * @example\n * <af-spinner label=\"Loading data\"></af-spinner>\n * <af-spinner size=\"lg\" label=\"Processing\"></af-spinner>\n */\n@Component({\n selector: 'af-spinner',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span\n [class]=\"spinnerClasses()\"\n role=\"status\"\n [attr.aria-label]=\"label()\">\n </span>\n `,\n styles: [`\n :host {\n display: inline-block;\n }\n `]\n})\nexport class AfSpinnerComponent {\n /** Spinner size */\n size = input<AfSpinnerSize>('md');\n\n /** Accessible label for screen readers */\n label = input('Loading');\n\n spinnerClasses = computed(() => {\n const classes = ['ct-spinner'];\n if (this.size() !== 'md') {\n classes.push(`ct-spinner--${this.size()}`);\n }\n return classes.join(' ');\n });\n}\n","import { Component, forwardRef, input, output, model, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface AfToggleItem {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport type AfToggleGroupSize = 'sm' | 'md' | 'lg';\n\n/**\n * Toggle group for single or multi-select button groups\n *\n * @example\n * <af-toggle-group\n * [items]=\"viewModes\"\n * [(value)]=\"selectedMode\"\n * ariaLabel=\"View mode\">\n * </af-toggle-group>\n *\n * <af-toggle-group\n * [items]=\"filters\"\n * [multiple]=\"true\"\n * [(value)]=\"activeFilters\"\n * ariaLabel=\"Status filter\">\n * </af-toggle-group>\n */\n@Component({\n selector: 'af-toggle-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [class]=\"groupClasses()\" role=\"group\" [attr.aria-label]=\"ariaLabel()\">\n @for (item of items(); track item.value) {\n <button\n class=\"ct-toggle-group__item\"\n type=\"button\"\n [attr.aria-pressed]=\"isPressed(item.value)\"\n [disabled]=\"item.disabled || disabled()\"\n (click)=\"toggle(item.value)\">\n {{ item.label }}\n </button>\n }\n </div>\n `,\n styles: [`\n :host {\n display: inline-block;\n }\n `],\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfToggleGroupComponent),\n multi: true\n }]\n})\nexport class AfToggleGroupComponent implements ControlValueAccessor {\n /** Toggle items */\n items = input<AfToggleItem[]>([]);\n\n /** Group size */\n size = input<AfToggleGroupSize>('md');\n\n /** Allow multiple selections */\n multiple = input(false);\n\n /** Accessible group label */\n ariaLabel = input('');\n\n /** Disabled state */\n disabled = model(false);\n\n /** Current value (string for single, string[] for multiple) */\n value = model<string | string[]>('');\n\n private onChange: (value: string | string[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n groupClasses = computed(() => {\n const classes = ['ct-toggle-group'];\n if (this.size() !== 'md') {\n classes.push(`ct-toggle-group--${this.size()}`);\n }\n return classes.join(' ');\n });\n\n isPressed(itemValue: string): boolean {\n if (this.multiple()) {\n return Array.isArray(this.value()) && (this.value() as string[]).includes(itemValue);\n }\n return this.value() === itemValue;\n }\n\n toggle(itemValue: string): void {\n this.onTouched();\n\n if (this.multiple()) {\n const current = Array.isArray(this.value()) ? [...this.value() as string[]] : [];\n const index = current.indexOf(itemValue);\n if (index >= 0) {\n current.splice(index, 1);\n } else {\n current.push(itemValue);\n }\n this.value.set(current);\n } else {\n this.value.set(itemValue);\n }\n\n this.onChange(this.value());\n }\n\n writeValue(value: string | string[]): void {\n this.value.set(value ?? (this.multiple() ? [] : ''));\n }\n\n registerOnChange(fn: (value: string | string[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n/**\n * Toolbar component for top-level app navigation\n *\n * @example\n * <af-toolbar ariaLabel=\"Main navigation\">\n * <a brand href=\"#\">Construct</a>\n * <ul nav>\n * <li><a href=\"/dashboard\" class=\"ct-toolbar__nav-link ct-toolbar__nav-link--active\" aria-current=\"page\">Dashboard</a></li>\n * <li><a href=\"/documents\" class=\"ct-toolbar__nav-link\">Documents</a></li>\n * </ul>\n * <div actions>\n * <button class=\"ct-button ct-button--ghost\">Profile</button>\n * </div>\n * </af-toolbar>\n */\n@Component({\n selector: 'af-toolbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nav class=\"ct-toolbar\" [attr.aria-label]=\"ariaLabel()\">\n <div class=\"ct-toolbar__brand\">\n <ng-content select=\"[brand]\"></ng-content>\n </div>\n <ng-content select=\"[nav]\"></ng-content>\n <div class=\"ct-toolbar__spacer\"></div>\n <div class=\"ct-toolbar__actions\">\n <ng-content select=\"[actions]\"></ng-content>\n </div>\n </nav>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfToolbarComponent {\n /** Accessible label for the navigation landmark */\n ariaLabel = input('Main navigation');\n}\n","import { Component, ChangeDetectionStrategy, input, model, computed } from '@angular/core';\n\nexport type AfSidebarMode = 'side' | 'over';\n\n/**\n * Sidebar component for collapsible navigation\n *\n * @example\n * <af-sidebar [open]=\"sidebarOpen\" mode=\"side\" ariaLabel=\"Folder navigation\" (openChange)=\"sidebarOpen = $event\">\n * <div header>\n * <strong>Folders</strong>\n * </div>\n * <ul content class=\"ct-nav-list\">\n * <li><a class=\"ct-nav-item ct-nav-item--active\" href=\"#\" aria-current=\"page\">\n * <span class=\"ct-nav-item__label\">Inbox</span>\n * <span class=\"ct-nav-item__badge\">12</span>\n * </a></li>\n * </ul>\n * </af-sidebar>\n */\n@Component({\n selector: 'af-sidebar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:keydown.escape)': 'onEscape()',\n },\n template: `\n <aside\n [class]=\"sidebarClasses()\"\n [attr.data-state]=\"open() ? 'open' : 'closed'\"\n [attr.aria-label]=\"ariaLabel()\">\n <div class=\"ct-sidebar__header\">\n <ng-content select=\"[header]\"></ng-content>\n @if (showCloseButton() && mode() === 'over') {\n <button\n class=\"ct-button ct-button--ghost ct-button--icon ct-button--sm\"\n type=\"button\"\n aria-label=\"Close menu\"\n (click)=\"close()\">\n <span class=\"ct-icon ct-icon--sm\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg></span>\n </button>\n }\n </div>\n <div class=\"ct-sidebar__content\">\n <ng-content select=\"[content]\"></ng-content>\n <ng-content></ng-content>\n </div>\n </aside>\n @if (mode() === 'over' && open()) {\n <div class=\"ct-sidebar__backdrop\" (click)=\"close()\"></div>\n }\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfSidebarComponent {\n /** Sidebar open state */\n open = model(true);\n\n /** Display mode: side (pushes content) or over (overlays) */\n mode = input<AfSidebarMode>('side');\n\n /** Accessible label for the sidebar landmark */\n ariaLabel = input('Navigation');\n\n /** Show close button in overlay mode */\n showCloseButton = input(true);\n\n sidebarClasses = computed(() => {\n const classes = ['ct-sidebar'];\n classes.push(`ct-sidebar--${this.mode()}`);\n return classes.join(' ');\n });\n\n close(): void {\n this.open.set(false);\n }\n\n onEscape(): void {\n if (this.mode() === 'over' && this.open()) {\n this.close();\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input, computed } from '@angular/core';\n\nexport type AfIconSize = 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Icon wrapper that applies Construct Design System sizing via `ct-icon` classes.\n *\n * Uses content projection so any icon source can be used:\n * Lucide, custom SVGs, or other icon libraries.\n *\n * @example Using with Lucide\n * ```html\n * <af-icon size=\"sm\">\n * <lucide-x />\n * </af-icon>\n * ```\n *\n * @example Using with inline SVG\n * ```html\n * <af-icon size=\"lg\">\n * <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n * <circle cx=\"12\" cy=\"12\" r=\"10\" />\n * </svg>\n * </af-icon>\n * ```\n */\n@Component({\n selector: 'af-icon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span [class]=\"iconClasses()\" aria-hidden=\"true\">\n <ng-content />\n </span>\n `,\n styles: [`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n `]\n})\nexport class AfIconComponent {\n /** Icon size variant */\n size = input<AfIconSize>('md');\n\n iconClasses = computed(() => {\n const classes = ['ct-icon'];\n if (this.size() !== 'md') {\n classes.push(`ct-icon--${this.size()}`);\n }\n return classes.join(' ');\n });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n computed,\n input,\n model,\n forwardRef,\n ElementRef,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport type AfSliderSize = 'sm' | 'md' | 'lg';\n\n/**\n * Slider component with full form control and accessibility support.\n *\n * Wraps the `ct-slider` design system CSS. Supports min/max/step,\n * keyboard navigation, ARIA attributes, and reactive forms.\n *\n * @example Reactive Forms\n * <af-slider formControlName=\"volume\" [min]=\"0\" [max]=\"100\" label=\"Volume\" />\n *\n * @example Standalone two-way binding\n * <af-slider [(value)]=\"brightness\" [min]=\"0\" [max]=\"100\" [step]=\"5\" [showValue]=\"true\" />\n *\n * @example With min/max labels\n * <af-slider [(value)]=\"temperature\" [min]=\"16\" [max]=\"30\" [showMinMax]=\"true\" label=\"Temperature\" />\n */\n@Component({\n selector: 'af-slider',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfSliderComponent),\n multi: true,\n },\n ],\n template: `\n <div [class]=\"hostClasses()\" [style.--_value]=\"valuePercent()\">\n @if (showMinMax()) {\n <span class=\"ct-slider__min\" aria-hidden=\"true\">{{ min() }}</span>\n }\n\n <input\n #sliderInput\n class=\"ct-slider__input\"\n type=\"range\"\n [id]=\"sliderId()\"\n [attr.min]=\"min()\"\n [attr.max]=\"max()\"\n [attr.step]=\"step()\"\n [disabled]=\"disabled()\"\n [value]=\"value()\"\n [attr.aria-label]=\"label()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuetext]=\"ariaValueText()\"\n [attr.aria-invalid]=\"invalid() ? true : null\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n\n @if (showMinMax()) {\n <span class=\"ct-slider__max\" aria-hidden=\"true\">{{ max() }}</span>\n }\n\n @if (showValue()) {\n <output class=\"ct-slider__value\" [attr.for]=\"sliderId()\">\n {{ value() }}\n </output>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfSliderComponent implements ControlValueAccessor {\n private static nextId = 0;\n\n /** Accessible label for the slider */\n label = input('');\n\n /** Minimum value */\n min = input(0);\n\n /** Maximum value */\n max = input(100);\n\n /** Step increment */\n step = input(1);\n\n /** Component size variant */\n size = input<AfSliderSize>('md');\n\n /** Whether the slider is disabled */\n disabled = model(false);\n\n /** Whether the slider is in an invalid state */\n invalid = input(false);\n\n /** Show the current value next to the slider */\n showValue = input(false);\n\n /** Show min/max labels */\n showMinMax = input(false);\n\n /** Custom aria-valuetext for screen readers */\n valueTextFn = input<((value: number) => string) | null>(null);\n\n /** Unique slider ID */\n sliderId = input(`af-slider-${AfSliderComponent.nextId++}`);\n\n /** Current value — supports two-way binding via [(value)] */\n value = model(0);\n\n sliderInput = viewChild.required<ElementRef<HTMLInputElement>>('sliderInput');\n\n private onChangeCallback: (value: number) => void = () => {};\n onTouched: () => void = () => {};\n\n hostClasses = computed(() => {\n const classes = ['ct-slider'];\n const s = this.size();\n if (s !== 'md') {\n classes.push(`ct-slider--${s}`);\n }\n return classes.join(' ');\n });\n\n valuePercent = computed(() => {\n const minVal = this.min();\n const maxVal = this.max();\n const range = maxVal - minVal;\n if (range === 0) return 0;\n return ((this.value() - minVal) / range) * 100;\n });\n\n ariaValueText = computed(() => {\n const fn = this.valueTextFn();\n return fn ? fn(this.value()) : null;\n });\n\n onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n const numValue = Number(target.value);\n this.value.set(numValue);\n this.onChangeCallback(numValue);\n }\n\n /** Writes a new value from the form model. */\n writeValue(value: number): void {\n this.value.set(value ?? 0);\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n OnDestroy,\n input,\n output,\n model,\n computed,\n effect,\n viewChild,\n ElementRef,\n} from '@angular/core';\nimport { FocusTrap } from '../../utils/focus-trap';\n\nexport type AfDrawerPosition = 'right' | 'left' | 'top' | 'bottom';\nexport type AfDrawerSize = 'sm' | 'md' | 'lg' | 'full';\n\n/**\n * Drawer/slide-out panel with full accessibility support.\n *\n * @example\n * ```html\n * <af-drawer [(open)]=\"isOpen\" position=\"right\" ariaLabel=\"Settings\">\n * <div header>\n * <h2>Settings</h2>\n * </div>\n * <div body>\n * <p>Drawer content here.</p>\n * </div>\n * <div footer>\n * <button (click)=\"isOpen = false\">Close</button>\n * </div>\n * </af-drawer>\n * ```\n */\n@Component({\n selector: 'af-drawer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:keydown)': 'onKeydown($event)',\n },\n template: `\n <div\n #drawer\n [class]=\"containerClasses()\"\n [attr.data-state]=\"open() ? 'open' : 'closed'\"\n role=\"dialog\"\n [attr.aria-modal]=\"open() ? 'true' : null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"!ariaLabel() ? titleId : null\"\n (click)=\"onBackdropClick($event)\">\n <div\n #panel\n class=\"ct-drawer__panel\"\n tabindex=\"-1\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"ct-drawer__header\">\n <ng-content select=\"[header]\"></ng-content>\n @if (showCloseButton()) {\n <button\n class=\"ct-button ct-button--ghost ct-button--icon ct-button--sm\"\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel()\"\n (click)=\"close()\">\n <span class=\"ct-icon ct-icon--sm\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg></span>\n </button>\n }\n </div>\n <div class=\"ct-drawer__body\">\n <ng-content select=\"[body]\"></ng-content>\n <ng-content></ng-content>\n </div>\n <div class=\"ct-drawer__footer\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfDrawerComponent implements OnDestroy {\n private static nextId = 0;\n private focusTrap = new FocusTrap();\n\n /** Two-way bindable open state */\n open = model(false);\n\n /** Slide-in position */\n position = input<AfDrawerPosition>('right');\n\n /** Panel size */\n size = input<AfDrawerSize>('md');\n\n /** Accessible label for the drawer dialog */\n ariaLabel = input('');\n\n /** Show built-in close button in the header */\n showCloseButton = input(true);\n\n /** Whether clicking the backdrop closes the drawer */\n closeOnBackdropClick = input(true);\n\n /** Aria label for the close button */\n closeButtonAriaLabel = input('Close drawer');\n\n /** Emits when the drawer requests to be closed */\n closed = output<void>();\n\n /** Unique ID for aria-labelledby fallback */\n readonly titleId = `af-drawer-title-${AfDrawerComponent.nextId++}`;\n\n private panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n containerClasses = computed(() => {\n const classes = ['ct-drawer'];\n\n const pos = this.position();\n if (pos !== 'right') {\n classes.push(`ct-drawer--${pos}`);\n }\n\n const sz = this.size();\n if (sz !== 'md') {\n classes.push(`ct-drawer--${sz}`);\n }\n\n return classes.join(' ');\n });\n\n private openEffect = effect(() => {\n const isOpen = this.open();\n if (isOpen) {\n this.onOpen();\n } else {\n this.onClose();\n }\n });\n\n ngOnDestroy(): void {\n this.unlockBodyScroll();\n this.focusTrap.restoreFocus();\n }\n\n /** Closes the drawer and emits the closed event */\n close(): void {\n this.open.set(false);\n this.closed.emit();\n }\n\n onBackdropClick(event: MouseEvent): void {\n if (this.closeOnBackdropClick() && event.target === event.currentTarget) {\n this.close();\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (!this.open()) return;\n\n if (event.key === 'Escape') {\n this.close();\n return;\n }\n\n if (event.key === 'Tab') {\n const panel = this.panelRef()?.nativeElement;\n this.focusTrap.handleTab(event, panel, panel);\n }\n }\n\n private onOpen(): void {\n this.focusTrap.saveFocus();\n this.lockBodyScroll();\n queueMicrotask(() => {\n if (!this.open()) return;\n const panel = this.panelRef()?.nativeElement;\n this.focusTrap.focusFirst(panel, panel);\n });\n }\n\n private onClose(): void {\n this.unlockBodyScroll();\n this.focusTrap.restoreFocus();\n }\n\n private lockBodyScroll(): void {\n document.body.style.overflow = 'hidden';\n }\n\n private unlockBodyScroll(): void {\n document.body.style.overflow = '';\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n computed,\n forwardRef,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface AfComboboxOption {\n value: unknown;\n label: string;\n disabled?: boolean;\n description?: string;\n}\n\n/**\n * Combobox component with autocomplete filtering, keyboard navigation,\n * and full ARIA support following the WAI-ARIA 1.2 combobox pattern.\n *\n * @example\n * <af-combobox\n * label=\"Country\"\n * placeholder=\"Search countries...\"\n * [options]=\"countries\"\n * [(ngModel)]=\"selectedCountry\"\n * hint=\"Start typing to filter\"\n * ></af-combobox>\n *\n * @example\n * <af-combobox\n * label=\"Assignee\"\n * [options]=\"teamMembers\"\n * [formControl]=\"assigneeControl\"\n * [error]=\"assigneeError\"\n * required\n * ></af-combobox>\n */\n@Component({\n selector: 'af-combobox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfComboboxComponent),\n multi: true,\n },\n ],\n host: {\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [attr.for]=\"inputId\">\n {{ label() }}\n @if (required()) {\n <span aria-label=\"required\"> *</span>\n }\n </label>\n }\n\n <div\n [class]=\"comboboxClasses()\"\n [attr.data-state]=\"isOpen() ? 'open' : 'closed'\"\n >\n <div class=\"ct-combobox__input-wrap\">\n <input\n #inputEl\n class=\"ct-combobox__input\"\n [id]=\"inputId\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"listboxId\"\n aria-autocomplete=\"list\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"getAriaDescribedBy()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [attr.aria-required]=\"required() || null\"\n [value]=\"query()\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\"\n />\n <button\n type=\"button\"\n class=\"ct-combobox__trigger\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [disabled]=\"disabled()\"\n (click)=\"toggleListbox()\"\n (mousedown)=\"$event.preventDefault()\"\n >\n <svg\n class=\"ct-combobox__trigger-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 6l4 4 4-4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <ul\n #listboxEl\n [id]=\"listboxId\"\n class=\"ct-combobox__listbox\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || 'Options'\"\n >\n @for (option of filteredOptions(); track option.value; let i = $index) {\n <li\n class=\"ct-combobox__option\"\n role=\"option\"\n [id]=\"getOptionId(i)\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-disabled]=\"option.disabled || null\"\n [attr.data-highlighted]=\"highlightedIndex() === i ? '' : null\"\n (click)=\"selectOption(option)\"\n (mouseenter)=\"highlightedIndex.set(i)\"\n (mousedown)=\"$event.preventDefault()\"\n >\n <span class=\"ct-combobox__option-check\" aria-hidden=\"true\">\n @if (isSelected(option)) {\n <svg viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M3 8.5l3.5 3.5 6.5-8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </span>\n <span class=\"ct-combobox__option-label\">{{ option.label }}</span>\n @if (option.description) {\n <span class=\"ct-combobox__option-description\">{{ option.description }}</span>\n }\n </li>\n }\n @if (filteredOptions().length === 0) {\n <li class=\"ct-combobox__empty\" aria-disabled=\"true\">\n {{ emptyText() }}\n </li>\n }\n </ul>\n\n <div\n class=\"ct-combobox__status\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {{ statusMessage() }}\n </div>\n </div>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId\">{{ hint() }}</div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" [id]=\"errorId\">{{ error() }}</div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfComboboxComponent implements ControlValueAccessor {\n private static nextId = 0;\n\n /** Label for the combobox field */\n label = input('');\n\n /** Placeholder text for the input */\n placeholder = input('');\n\n /** Available options */\n options = input<AfComboboxOption[]>([]);\n\n /** Hint text shown below the combobox */\n hint = input('');\n\n /** Error message — shows error state and message */\n error = input('');\n\n /** Whether the combobox is required */\n required = input(false);\n\n /** Whether the combobox is disabled */\n disabled = model(false);\n\n /** Size variant */\n size = input<'sm' | 'md' | 'lg'>('md');\n\n /** Text shown when no options match the filter */\n emptyText = input('No results found');\n\n /** Value comparison function for object values */\n compareWith = input<(a: unknown, b: unknown) => boolean>((a, b) => a === b);\n\n /** Unique combobox ID */\n comboboxId = input(`af-combobox-${AfComboboxComponent.nextId++}`);\n\n inputRef = viewChild<ElementRef<HTMLInputElement>>('inputEl');\n listboxRef = viewChild<ElementRef<HTMLUListElement>>('listboxEl');\n\n isOpen = signal(false);\n query = signal('');\n highlightedIndex = signal(-1);\n\n private value = signal<unknown>(null);\n private onChange: (value: unknown) => void = () => {};\n private onTouchedCallback: () => void = () => {};\n\n get inputId(): string {\n return `${this.comboboxId()}-input`;\n }\n\n get listboxId(): string {\n return `${this.comboboxId()}-listbox`;\n }\n\n get hintId(): string {\n return `${this.comboboxId()}-hint`;\n }\n\n get errorId(): string {\n return `${this.comboboxId()}-error`;\n }\n\n comboboxClasses = computed(() => {\n const classes = ['ct-combobox'];\n const s = this.size();\n if (s === 'sm') classes.push('ct-combobox--sm');\n if (s === 'lg') classes.push('ct-combobox--lg');\n return classes.join(' ');\n });\n\n selectedOption = computed(() => {\n const v = this.value();\n if (v === null || v === undefined) return null;\n return this.options().find((o) => this.compareWith()(o.value, v)) ?? null;\n });\n\n filteredOptions = computed(() => {\n const q = this.query().toLowerCase().trim();\n const opts = this.options();\n if (!q) return opts;\n const selected = this.selectedOption();\n if (selected && selected.label.toLowerCase() === q) return opts;\n return opts.filter((o) => o.label.toLowerCase().includes(q));\n });\n\n activeDescendantId = computed(() => {\n const idx = this.highlightedIndex();\n if (idx < 0 || idx >= this.filteredOptions().length) return null;\n return this.getOptionId(idx);\n });\n\n statusMessage = computed(() => {\n if (!this.isOpen()) return '';\n const count = this.filteredOptions().length;\n if (count === 0) return this.emptyText();\n return `${count} result${count === 1 ? '' : 's'} available`;\n });\n\n getAriaDescribedBy(): string | null {\n if (this.error()) return this.errorId;\n if (this.hint()) return this.hintId;\n return null;\n }\n\n getOptionId(index: number): string {\n return `${this.comboboxId()}-option-${index}`;\n }\n\n isSelected(option: AfComboboxOption): boolean {\n const v = this.value();\n if (v === null || v === undefined) return false;\n return this.compareWith()(option.value, v);\n }\n\n /** Opens the listbox and highlights the selected option or first enabled option */\n openListbox(): void {\n if (this.disabled() || this.isOpen()) return;\n this.isOpen.set(true);\n this.highlightedIndex.set(this.findSelectedIndex());\n }\n\n /** Closes the listbox and restores the display value */\n closeListbox(restoreDisplay = true): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.highlightedIndex.set(-1);\n if (restoreDisplay) {\n const selected = this.selectedOption();\n this.query.set(selected ? selected.label : '');\n }\n }\n\n /** Toggles the listbox open/closed */\n toggleListbox(): void {\n if (this.isOpen()) {\n this.closeListbox();\n } else {\n this.openListbox();\n this.inputRef()?.nativeElement.focus();\n }\n }\n\n /** Selects an option and closes the listbox */\n selectOption(option: AfComboboxOption): void {\n if (option.disabled) return;\n this.value.set(option.value);\n this.query.set(option.label);\n this.onChange(option.value);\n this.closeListbox(false);\n this.inputRef()?.nativeElement.focus();\n }\n\n onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.query.set(target.value);\n if (!this.isOpen()) {\n this.openListbox();\n }\n this.highlightedIndex.set(this.findFirstEnabledIndex());\n if (!target.value.trim()) {\n this.value.set(null);\n this.onChange(null);\n }\n }\n\n onFocus(): void {\n this.openListbox();\n }\n\n onBlur(): void {\n this.closeListbox();\n this.onTouchedCallback();\n }\n\n onKeydown(event: KeyboardEvent): void {\n const filtered = this.filteredOptions();\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openListbox();\n return;\n }\n this.moveHighlight(1);\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openListbox();\n return;\n }\n this.moveHighlight(-1);\n break;\n\n case 'Enter':\n event.preventDefault();\n if (this.isOpen()) {\n const idx = this.highlightedIndex();\n if (idx >= 0 && idx < filtered.length && !filtered[idx].disabled) {\n this.selectOption(filtered[idx]);\n }\n } else {\n this.openListbox();\n }\n break;\n\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.closeListbox();\n }\n break;\n\n case 'Home':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightedIndex.set(this.findFirstEnabledIndex());\n this.scrollHighlightedIntoView();\n }\n break;\n\n case 'End':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightedIndex.set(this.findLastEnabledIndex());\n this.scrollHighlightedIntoView();\n }\n break;\n\n case 'Tab':\n if (this.isOpen()) {\n const idx = this.highlightedIndex();\n if (idx >= 0 && idx < filtered.length && !filtered[idx].disabled) {\n this.selectOption(filtered[idx]);\n }\n this.closeListbox();\n }\n break;\n }\n }\n\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n const host = this.inputRef()?.nativeElement.closest('.ct-combobox');\n if (host && !host.contains(target)) {\n this.closeListbox();\n this.onTouchedCallback();\n }\n }\n\n /** Writes a value from the form model */\n writeValue(value: unknown): void {\n this.value.set(value ?? null);\n const option = this.options().find((o) => this.compareWith()(o.value, this.value()));\n this.query.set(option ? option.label : '');\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n private moveHighlight(direction: number): void {\n const filtered = this.filteredOptions();\n if (filtered.length === 0) return;\n\n let idx = this.highlightedIndex();\n let attempts = 0;\n\n do {\n idx += direction;\n if (idx < 0) idx = filtered.length - 1;\n if (idx >= filtered.length) idx = 0;\n attempts++;\n } while (filtered[idx]?.disabled && attempts < filtered.length);\n\n if (!filtered[idx]?.disabled) {\n this.highlightedIndex.set(idx);\n this.scrollHighlightedIntoView();\n }\n }\n\n private scrollHighlightedIntoView(): void {\n queueMicrotask(() => {\n const listbox = this.listboxRef()?.nativeElement;\n if (!listbox) return;\n const optionEl = listbox.querySelector('[data-highlighted]') as HTMLElement;\n optionEl?.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n private findSelectedIndex(): number {\n const v = this.value();\n if (v === null || v === undefined) return this.findFirstEnabledIndex();\n const filtered = this.filteredOptions();\n const idx = filtered.findIndex((o) => this.compareWith()(o.value, v));\n return idx >= 0 ? idx : this.findFirstEnabledIndex();\n }\n\n private findFirstEnabledIndex(): number {\n return this.filteredOptions().findIndex((o) => !o.disabled);\n }\n\n private findLastEnabledIndex(): number {\n const filtered = this.filteredOptions();\n for (let i = filtered.length - 1; i >= 0; i--) {\n if (!filtered[i].disabled) return i;\n }\n return -1;\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n forwardRef,\n input,\n output,\n model,\n signal,\n computed,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AfButtonComponent } from '../button';\nimport { AfBadgeComponent } from '../badge';\n\nexport interface AfFileValidationError {\n file: File;\n type: 'type' | 'size';\n message: string;\n}\n\nexport interface AfFileEntry {\n file: File;\n status: 'success' | 'error';\n error?: string;\n}\n\n/**\n * File upload component with drag-and-drop, validation, and form control support.\n *\n * @example\n * <af-file-upload\n * label=\"Attachments\"\n * hint=\"PDF, DOCX up to 10MB\"\n * accept=\".pdf,.docx\"\n * [maxSize]=\"10485760\"\n * multiple\n * [(ngModel)]=\"files\">\n * </af-file-upload>\n *\n * @example\n * <af-file-upload\n * label=\"Avatar\"\n * accept=\"image/*\"\n * [maxSize]=\"2097152\"\n * [formControl]=\"avatarControl\">\n * </af-file-upload>\n */\n@Component({\n selector: 'af-file-upload',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AfButtonComponent, AfBadgeComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfFileUploadComponent),\n multi: true,\n },\n ],\n template: `\n <div class=\"ct-file-upload\">\n @if (label()) {\n <span class=\"ct-field__label\" [id]=\"labelId()\">\n {{ label() }}\n @if (required()) {\n <span aria-label=\"required\"> *</span>\n }\n </span>\n }\n\n <label\n class=\"ct-file-upload__dropzone\"\n [attr.for]=\"inputId()\"\n [attr.data-state]=\"dragOver() ? 'dragover' : null\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-disabled]=\"disabled() || null\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\">\n <input\n class=\"ct-file-upload__input\"\n [id]=\"inputId()\"\n type=\"file\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [attr.aria-label]=\"label() || 'File upload'\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n (change)=\"onFileSelected($event)\"\n (blur)=\"onTouched()\" />\n <span class=\"ct-file-upload__title\">Drop files here or browse</span>\n @if (hint()) {\n <span class=\"ct-file-upload__hint\" [id]=\"hintId()\">{{ hint() }}</span>\n }\n <span class=\"ct-button ct-button--secondary ct-button--sm\" aria-hidden=\"true\">\n Browse files\n </span>\n </label>\n\n @if (fileEntries().length > 0) {\n <ul class=\"ct-file-upload__list\" aria-label=\"Selected files\">\n @for (entry of fileEntries(); track $index) {\n <li class=\"ct-file-upload__item\" [attr.data-status]=\"entry.status\">\n <div class=\"ct-file-upload__file\">\n <span class=\"ct-file-upload__name\">{{ entry.file.name }}</span>\n <span class=\"ct-file-upload__meta\">{{ formatSize(entry.file.size) }}</span>\n @if (entry.error) {\n <span class=\"ct-file-upload__error\">{{ entry.error }}</span>\n }\n </div>\n <div class=\"ct-file-upload__actions\">\n @if (entry.status === 'success') {\n <af-badge variant=\"success\">Ready</af-badge>\n }\n @if (entry.status === 'error') {\n <af-badge variant=\"danger\">Invalid</af-badge>\n }\n @if (!disabled()) {\n <af-button\n variant=\"ghost\"\n size=\"sm\"\n [ariaLabel]=\"'Remove ' + entry.file.name\"\n (clicked)=\"removeFile(entry)\">\n Remove\n </af-button>\n }\n </div>\n </li>\n }\n </ul>\n }\n\n @if (error()) {\n <div class=\"ct-file-upload__error\" [id]=\"errorId()\" role=\"alert\">\n {{ error() }}\n </div>\n }\n\n <span class=\"af-file-upload__sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ liveAnnouncement() }}\n </span>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .af-file-upload__sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n ],\n})\nexport class AfFileUploadComponent implements ControlValueAccessor {\n private static nextId = 0;\n\n /** Label shown above the dropzone */\n label = input('');\n\n /** Hint text shown in the dropzone (e.g. accepted types and size limit) */\n hint = input('');\n\n /** Error message — shows error state */\n error = input('');\n\n /** Accepted file types (e.g. '.pdf,.docx' or 'image/*') */\n accept = input('');\n\n /** Maximum file size in bytes (0 = unlimited) */\n maxSize = input(0);\n\n /** Allow selecting multiple files */\n multiple = input(false);\n\n /** Whether the field is required */\n required = input(false);\n\n /** Whether the component is disabled */\n disabled = model(false);\n\n /** Emits validation errors when invalid files are added */\n validationErrors = output<AfFileValidationError[]>();\n\n /** Unique component ID */\n inputId = input(`af-file-upload-${AfFileUploadComponent.nextId++}`);\n\n fileEntries = signal<AfFileEntry[]>([]);\n dragOver = signal(false);\n liveAnnouncement = signal('');\n\n onChange: (value: File | File[] | null) => void = () => {};\n onTouched: () => void = () => {};\n\n labelId = computed(() => `${this.inputId()}-label`);\n hintId = computed(() => `${this.inputId()}-hint`);\n errorId = computed(() => `${this.inputId()}-error`);\n\n ariaDescribedBy = computed(() => {\n const ids: string[] = [];\n if (this.error()) ids.push(this.errorId());\n if (this.hint()) ids.push(this.hintId());\n return ids.length > 0 ? ids.join(' ') : null;\n });\n\n onDragEnter(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled()) {\n this.dragOver.set(true);\n }\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.dragOver.set(false);\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.dragOver.set(false);\n\n if (this.disabled()) return;\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n this.processFiles(Array.from(files));\n }\n }\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.processFiles(Array.from(input.files));\n }\n input.value = '';\n }\n\n /** Removes a file entry from the list */\n removeFile(entry: AfFileEntry): void {\n this.fileEntries.update((entries) => entries.filter((e) => e !== entry));\n this.emitValue();\n this.announce(`${entry.file.name} removed`);\n }\n\n /** Formats bytes into a human-readable size string */\n formatSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n const units = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n const size = bytes / Math.pow(1024, i);\n return `${size < 10 ? size.toFixed(1) : Math.round(size)} ${units[i]}`;\n }\n\n writeValue(value: File | File[] | null): void {\n if (!value) {\n this.fileEntries.set([]);\n return;\n }\n const files = Array.isArray(value) ? value : [value];\n this.fileEntries.set(files.map((file) => ({ file, status: 'success' as const })));\n }\n\n registerOnChange(fn: (value: File | File[] | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n private processFiles(files: File[]): void {\n const newEntries: AfFileEntry[] = [];\n const errors: AfFileValidationError[] = [];\n\n for (const file of files) {\n const fileErrors = this.validateFile(file);\n if (fileErrors.length > 0) {\n newEntries.push({ file, status: 'error', error: fileErrors[0].message });\n errors.push(...fileErrors);\n } else {\n newEntries.push({ file, status: 'success' });\n }\n }\n\n if (this.multiple()) {\n this.fileEntries.update((existing) => [...existing, ...newEntries]);\n } else {\n this.fileEntries.set(newEntries.slice(0, 1));\n }\n\n if (errors.length > 0) {\n this.validationErrors.emit(errors);\n }\n\n this.emitValue();\n\n const validCount = newEntries.filter((e) => e.status === 'success').length;\n const errorCount = newEntries.filter((e) => e.status === 'error').length;\n const parts: string[] = [];\n if (validCount > 0) parts.push(`${validCount} file${validCount > 1 ? 's' : ''} added`);\n if (errorCount > 0) parts.push(`${errorCount} file${errorCount > 1 ? 's' : ''} rejected`);\n this.announce(parts.join(', '));\n }\n\n private validateFile(file: File): AfFileValidationError[] {\n const errors: AfFileValidationError[] = [];\n\n if (this.accept() && !this.isFileTypeAccepted(file)) {\n errors.push({\n file,\n type: 'type',\n message: `File type not accepted: ${file.name}`,\n });\n }\n\n if (this.maxSize() > 0 && file.size > this.maxSize()) {\n errors.push({\n file,\n type: 'size',\n message: `File too large: ${file.name} (${this.formatSize(file.size)})`,\n });\n }\n\n return errors;\n }\n\n private isFileTypeAccepted(file: File): boolean {\n const acceptStr = this.accept();\n if (!acceptStr) return true;\n\n const acceptedTypes = acceptStr.split(',').map((t) => t.trim().toLowerCase());\n const fileName = file.name.toLowerCase();\n const fileType = file.type.toLowerCase();\n\n return acceptedTypes.some((accepted) => {\n if (accepted.startsWith('.')) {\n return fileName.endsWith(accepted);\n }\n if (accepted.endsWith('/*')) {\n return fileType.startsWith(accepted.slice(0, -1));\n }\n return fileType === accepted;\n });\n }\n\n private emitValue(): void {\n const validFiles = this.fileEntries()\n .filter((e) => e.status === 'success')\n .map((e) => e.file);\n\n if (this.multiple()) {\n this.onChange(validFiles);\n } else {\n this.onChange(validFiles[0] ?? null);\n }\n }\n\n private announce(message: string): void {\n this.liveAnnouncement.set('');\n setTimeout(() => this.liveAnnouncement.set(message));\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Translatable strings used by the select-menu component. */\nexport interface AfSelectMenuI18n {\n /** Fallback `aria-label` when no `label` input is provided. */\n selectOption: string;\n /** Announcement when the listbox opens. Use `{count}` as placeholder. */\n opened: string;\n /** Announcement when the listbox closes. */\n closed: string;\n /** Announcement when an option is selected. Use `{label}` as placeholder. */\n selected: string;\n /** Announcement when an option is deselected (multi-select). Use `{label}` as placeholder. */\n deselected: string;\n /** Announcement for the number of selected options (multi-select). Use `{count}` as placeholder. */\n countSelected: string;\n}\n\n/**\n * Injection token to override select-menu screen-reader announcements\n * and the fallback `aria-label`.\n *\n * @example\n * providers: [{\n * provide: AF_SELECT_MENU_I18N,\n * useValue: {\n * selectOption: 'Option auswählen',\n * opened: '{count} Optionen verfügbar',\n * closed: 'Auswahl geschlossen',\n * selected: '{label} ausgewählt',\n * deselected: '{label} abgewählt',\n * countSelected: '{count} Optionen ausgewählt',\n * },\n * }]\n */\nexport const AF_SELECT_MENU_I18N = new InjectionToken<AfSelectMenuI18n>('AfSelectMenuI18n', {\n factory: () => ({\n selectOption: 'Select option',\n opened: '{count} options available',\n closed: 'Selection closed',\n selected: '{label} selected',\n deselected: '{label} deselected',\n countSelected: '{count} options selected',\n }),\n});\n","import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AriaLiveAnnouncer } from '../../utils/aria-live-announcer';\nimport { AF_SELECT_MENU_I18N } from './select-menu.i18n';\n\nexport interface AfSelectMenuOption {\n value: unknown;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Custom dropdown select component with keyboard navigation\n * and full ARIA listbox pattern for single and multi-select.\n *\n * @example Single select\n * <af-select-menu\n * label=\"Country\"\n * placeholder=\"Select a country\"\n * [options]=\"countries\"\n * [(ngModel)]=\"selectedCountry\">\n * </af-select-menu>\n *\n * @example Multi-select with reactive forms\n * <af-select-menu\n * label=\"Roles\"\n * placeholder=\"Select roles\"\n * [options]=\"roles\"\n * [multiple]=\"true\"\n * [formControl]=\"rolesControl\">\n * </af-select-menu>\n *\n * @accessibility\n * - Implements the WAI-ARIA Listbox pattern with a combobox trigger.\n * - Keyboard: ArrowDown/Up to move highlight, Enter/Space to select,\n * Escape to close, Home/End to jump, Tab to select-and-close (single) or close (multi).\n * - Focus stays on the combobox trigger; `aria-activedescendant` tracks the highlighted option.\n * - Screen-reader announcements via {@link AriaLiveAnnouncer} for open/close/selection changes.\n * - All user-facing strings are configurable via {@link AF_SELECT_MENU_I18N} for i18n.\n * - Uses CSS logical properties for RTL layout support.\n * - `aria-describedby` links to hint or error text; `aria-invalid` is set on error state.\n * - Disabled options are marked with `aria-disabled` and skipped during keyboard navigation.\n */\n@Component({\n selector: 'af-select-menu',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfSelectMenuComponent),\n multi: true,\n },\n ],\n host: {\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [id]=\"labelId\">\n {{ label() }}\n @if (required()) {\n <span aria-label=\"required\"> *</span>\n }\n </label>\n }\n\n <div\n #menuEl\n [class]=\"menuClasses()\"\n [attr.data-state]=\"isOpen() ? 'open' : 'closed'\">\n <button\n #triggerEl\n class=\"ct-select-menu__trigger\"\n type=\"button\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"listboxId\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [attr.aria-label]=\"label() ? null : i18n.selectOption\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"getAriaDescribedBy()\"\n [attr.aria-required]=\"required() || null\"\n [disabled]=\"disabled()\"\n (click)=\"toggleListbox()\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\">\n <span\n class=\"ct-select-menu__value\"\n [attr.data-placeholder]=\"isPlaceholder() ? '' : null\">\n {{ displayValue() }}\n </span>\n <span class=\"ct-select-menu__icon\" aria-hidden=\"true\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </span>\n </button>\n\n <div\n #listboxEl\n [id]=\"listboxId\"\n class=\"ct-select-menu__content\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [attr.aria-multiselectable]=\"multiple() || null\"\n tabindex=\"-1\">\n @for (option of options(); track option.value; let i = $index) {\n <div\n class=\"ct-select-menu__option\"\n role=\"option\"\n [id]=\"getOptionId(i)\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-disabled]=\"option.disabled || null\"\n [attr.data-highlighted]=\"highlightedIndex() === i ? '' : null\"\n (click)=\"selectOption(option)\"\n (mouseenter)=\"highlightedIndex.set(i)\"\n (mousedown)=\"$event.preventDefault()\">\n <span class=\"ct-select-menu__option-check\" aria-hidden=\"true\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </span>\n <span class=\"ct-select-menu__option-label\">{{ option.label }}</span>\n </div>\n }\n </div>\n </div>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId\">{{ hint() }}</div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" [id]=\"errorId\">{{ error() }}</div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfSelectMenuComponent implements ControlValueAccessor {\n private static nextId = 0;\n protected readonly i18n = inject(AF_SELECT_MENU_I18N);\n private readonly announcer = inject(AriaLiveAnnouncer);\n\n /** Label shown above the select */\n label = input('');\n\n /** Placeholder text when nothing is selected */\n placeholder = input('');\n\n /** Available options */\n options = input<AfSelectMenuOption[]>([]);\n\n /** Hint text shown below the select */\n hint = input('');\n\n /** Error message — shows error state */\n error = input('');\n\n /** Whether the field is required */\n required = input(false);\n\n /** Whether the component is disabled */\n disabled = model(false);\n\n /** Allow selecting multiple options */\n multiple = input(false);\n\n /** Size variant */\n size = input<'sm' | 'md' | 'lg'>('md');\n\n /** Value comparison function for object values */\n compareWith = input<(a: unknown, b: unknown) => boolean>((a, b) => a === b);\n\n /** Unique component ID */\n componentId = input(`af-select-menu-${AfSelectMenuComponent.nextId++}`);\n\n triggerRef = viewChild<ElementRef<HTMLButtonElement>>('triggerEl');\n listboxRef = viewChild<ElementRef<HTMLDivElement>>('listboxEl');\n menuRef = viewChild<ElementRef<HTMLDivElement>>('menuEl');\n\n isOpen = signal(false);\n highlightedIndex = signal(-1);\n private value = signal<unknown>(null);\n\n private onChange: (value: unknown) => void = () => {};\n private onTouchedCallback: () => void = () => {};\n\n get labelId(): string {\n return `${this.componentId()}-label`;\n }\n\n get listboxId(): string {\n return `${this.componentId()}-listbox`;\n }\n\n get hintId(): string {\n return `${this.componentId()}-hint`;\n }\n\n get errorId(): string {\n return `${this.componentId()}-error`;\n }\n\n menuClasses = computed(() => {\n const classes = ['ct-select-menu'];\n const s = this.size();\n if (s === 'sm') classes.push('ct-select-menu--sm');\n if (s === 'lg') classes.push('ct-select-menu--lg');\n return classes.join(' ');\n });\n\n isPlaceholder = computed(() => {\n const v = this.value();\n if (this.multiple()) {\n return ((v as unknown[]) ?? []).length === 0;\n }\n return v === null || v === undefined;\n });\n\n displayValue = computed(() => {\n const v = this.value();\n const opts = this.options();\n const cmp = this.compareWith();\n\n if (this.multiple()) {\n const vals = (v as unknown[]) ?? [];\n if (vals.length === 0) return this.placeholder();\n return vals\n .map((val) => opts.find((o) => cmp(o.value, val))?.label)\n .filter(Boolean)\n .join(', ');\n }\n\n if (v === null || v === undefined) return this.placeholder();\n return opts.find((o) => cmp(o.value, v))?.label ?? this.placeholder();\n });\n\n activeDescendantId = computed(() => {\n const idx = this.highlightedIndex();\n if (idx < 0 || idx >= this.options().length) return null;\n return this.getOptionId(idx);\n });\n\n getAriaDescribedBy(): string | null {\n if (this.error()) return this.errorId;\n if (this.hint()) return this.hintId;\n return null;\n }\n\n getOptionId(index: number): string {\n return `${this.componentId()}-option-${index}`;\n }\n\n isSelected(option: AfSelectMenuOption): boolean {\n const v = this.value();\n const cmp = this.compareWith();\n if (this.multiple()) {\n return ((v as unknown[]) ?? []).some((val) => cmp(val, option.value));\n }\n if (v === null || v === undefined) return false;\n return cmp(v, option.value);\n }\n\n /** Toggles the listbox open/closed */\n toggleListbox(): void {\n if (this.isOpen()) {\n this.closeListbox();\n } else {\n this.openListbox();\n }\n }\n\n /** Opens the listbox and highlights the selected or first enabled option */\n openListbox(): void {\n if (this.disabled() || this.isOpen()) return;\n this.isOpen.set(true);\n this.highlightedIndex.set(this.findSelectedOrFirstIndex());\n this.scrollHighlightedIntoView();\n\n const enabledCount = this.options().filter((o) => !o.disabled).length;\n this.announcer.announce(\n this.i18n.opened.replace('{count}', String(enabledCount)),\n );\n }\n\n /** Closes the listbox */\n closeListbox(): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.highlightedIndex.set(-1);\n this.announcer.announce(this.i18n.closed);\n }\n\n /** Selects or toggles an option */\n selectOption(option: AfSelectMenuOption): void {\n if (option.disabled) return;\n\n const cmp = this.compareWith();\n\n if (this.multiple()) {\n const current = (this.value() as unknown[]) ?? [];\n const idx = current.findIndex((v) => cmp(v, option.value));\n const wasSelected = idx >= 0;\n const next = wasSelected\n ? [...current.slice(0, idx), ...current.slice(idx + 1)]\n : [...current, option.value];\n this.value.set(next);\n this.onChange(next);\n\n const msg = wasSelected\n ? this.i18n.deselected.replace('{label}', option.label)\n : this.i18n.selected.replace('{label}', option.label);\n this.announcer.announce(\n `${msg}, ${this.i18n.countSelected.replace('{count}', String(next.length))}`,\n );\n } else {\n this.value.set(option.value);\n this.onChange(option.value);\n this.announcer.announce(this.i18n.selected.replace('{label}', option.label));\n this.closeListbox();\n this.triggerRef()?.nativeElement.focus();\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n const opts = this.options();\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openListbox();\n return;\n }\n this.moveHighlight(1);\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openListbox();\n return;\n }\n this.moveHighlight(-1);\n break;\n\n case 'Enter':\n case ' ':\n if (this.isOpen()) {\n event.preventDefault();\n const idx = this.highlightedIndex();\n if (idx >= 0 && idx < opts.length && !opts[idx].disabled) {\n this.selectOption(opts[idx]);\n }\n } else {\n event.preventDefault();\n this.openListbox();\n }\n break;\n\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.closeListbox();\n this.triggerRef()?.nativeElement.focus();\n }\n break;\n\n case 'Home':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightedIndex.set(this.findFirstEnabledIndex());\n this.scrollHighlightedIntoView();\n }\n break;\n\n case 'End':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightedIndex.set(this.findLastEnabledIndex());\n this.scrollHighlightedIntoView();\n }\n break;\n\n case 'Tab':\n if (this.isOpen()) {\n if (!this.multiple()) {\n const idx = this.highlightedIndex();\n if (idx >= 0 && idx < opts.length && !opts[idx].disabled) {\n this.selectOption(opts[idx]);\n }\n }\n this.closeListbox();\n }\n break;\n }\n }\n\n onBlur(): void {\n this.closeListbox();\n this.onTouchedCallback();\n }\n\n onDocumentClick(event: MouseEvent): void {\n if (!this.isOpen()) return;\n const target = event.target as HTMLElement;\n const menu = this.menuRef()?.nativeElement;\n if (menu && !menu.contains(target)) {\n this.closeListbox();\n this.onTouchedCallback();\n }\n }\n\n writeValue(value: unknown): void {\n if (this.multiple()) {\n this.value.set(Array.isArray(value) ? value : []);\n } else {\n this.value.set(value ?? null);\n }\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n private moveHighlight(direction: number): void {\n const opts = this.options();\n if (opts.length === 0) return;\n\n let idx = this.highlightedIndex();\n let attempts = 0;\n\n do {\n idx += direction;\n if (idx < 0) idx = opts.length - 1;\n if (idx >= opts.length) idx = 0;\n attempts++;\n } while (opts[idx]?.disabled && attempts < opts.length);\n\n if (!opts[idx]?.disabled) {\n this.highlightedIndex.set(idx);\n this.scrollHighlightedIntoView();\n }\n }\n\n private scrollHighlightedIntoView(): void {\n queueMicrotask(() => {\n const listbox = this.listboxRef()?.nativeElement;\n if (!listbox) return;\n const el = listbox.querySelector('[data-highlighted]') as HTMLElement;\n el?.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n private findSelectedOrFirstIndex(): number {\n const v = this.value();\n const opts = this.options();\n const cmp = this.compareWith();\n\n if (this.multiple()) {\n const vals = (v as unknown[]) ?? [];\n if (vals.length > 0) {\n const idx = opts.findIndex((o) => cmp(o.value, vals[0]));\n if (idx >= 0 && !opts[idx].disabled) return idx;\n }\n } else if (v !== null && v !== undefined) {\n const idx = opts.findIndex((o) => cmp(o.value, v));\n if (idx >= 0) return idx;\n }\n\n return this.findFirstEnabledIndex();\n }\n\n private findFirstEnabledIndex(): number {\n return this.options().findIndex((o) => !o.disabled);\n }\n\n private findLastEnabledIndex(): number {\n const opts = this.options();\n for (let i = opts.length - 1; i >= 0; i--) {\n if (!opts[i].disabled) return i;\n }\n return -1;\n }\n}\n","/**\n * Test harness for AfSelectMenuComponent.\n *\n * Provides a semantic API for interacting with the select-menu in tests,\n * abstracting DOM details behind readable method names.\n *\n * @example\n * const harness = new AfSelectMenuHarness(fixture.nativeElement);\n * harness.click();\n * expect(harness.isOpen()).toBe(true);\n * expect(harness.getOptionCount()).toBe(4);\n * harness.clickOption(1);\n * expect(harness.getTriggerText()).toBe('Banana');\n */\nexport class AfSelectMenuHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-select-menu');\n if (!el) {\n throw new Error('AfSelectMenuHarness: af-select-menu element not found in container.');\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Returns the trigger `<button>` element. */\n getTriggerElement(): HTMLButtonElement {\n const btn = this.hostEl.querySelector('.ct-select-menu__trigger');\n if (!btn) {\n throw new Error('AfSelectMenuHarness: trigger button not found.');\n }\n return btn as HTMLButtonElement;\n }\n\n /** Returns the trimmed display text of the trigger. */\n getTriggerText(): string {\n const value = this.hostEl.querySelector('.ct-select-menu__value');\n return value?.textContent?.trim() ?? '';\n }\n\n /** Clicks the trigger button. */\n click(): void {\n this.getTriggerElement().click();\n }\n\n /** Returns whether the trigger is disabled. */\n isDisabled(): boolean {\n return this.getTriggerElement().disabled;\n }\n\n /** Returns whether the listbox is currently open. */\n isOpen(): boolean {\n const menu = this.hostEl.querySelector('.ct-select-menu');\n return menu?.getAttribute('data-state') === 'open';\n }\n\n /** Returns the `aria-expanded` attribute value. */\n getAriaExpanded(): string | null {\n return this.getTriggerElement().getAttribute('aria-expanded');\n }\n\n /** Returns the `aria-label` attribute value. */\n getAriaLabel(): string | null {\n return this.getTriggerElement().getAttribute('aria-label');\n }\n\n /** Returns the `aria-labelledby` attribute value. */\n getAriaLabelledBy(): string | null {\n return this.getTriggerElement().getAttribute('aria-labelledby');\n }\n\n /** Returns the `aria-activedescendant` attribute value. */\n getAriaActiveDescendant(): string | null {\n return this.getTriggerElement().getAttribute('aria-activedescendant');\n }\n\n /** Returns the `aria-invalid` attribute value. */\n getAriaInvalid(): string | null {\n return this.getTriggerElement().getAttribute('aria-invalid');\n }\n\n /** Returns the `aria-required` attribute value. */\n getAriaRequired(): string | null {\n return this.getTriggerElement().getAttribute('aria-required');\n }\n\n /** Returns the `aria-describedby` attribute value. */\n getAriaDescribedBy(): string | null {\n return this.getTriggerElement().getAttribute('aria-describedby');\n }\n\n /** Returns all option elements inside the listbox. */\n getOptions(): HTMLElement[] {\n return Array.from(this.hostEl.querySelectorAll('[role=\"option\"]'));\n }\n\n /** Returns the trimmed text of the option at the given index. */\n getOptionText(index: number): string {\n const options = this.getOptions();\n if (index < 0 || index >= options.length) {\n throw new Error(`AfSelectMenuHarness: option index ${index} out of bounds (${options.length} options).`);\n }\n return options[index].textContent?.trim() ?? '';\n }\n\n /** Returns the number of options. */\n getOptionCount(): number {\n return this.getOptions().length;\n }\n\n /** Returns whether the option at the given index is selected. */\n isOptionSelected(index: number): boolean {\n return this.getOptions()[index]?.getAttribute('aria-selected') === 'true';\n }\n\n /** Returns whether the option at the given index is disabled. */\n isOptionDisabled(index: number): boolean {\n return this.getOptions()[index]?.getAttribute('aria-disabled') === 'true';\n }\n\n /** Returns whether the option at the given index is highlighted. */\n isOptionHighlighted(index: number): boolean {\n return this.getOptions()[index]?.hasAttribute('data-highlighted') ?? false;\n }\n\n /** Clicks the option at the given index. */\n clickOption(index: number): void {\n const options = this.getOptions();\n if (index < 0 || index >= options.length) {\n throw new Error(`AfSelectMenuHarness: option index ${index} out of bounds (${options.length} options).`);\n }\n options[index].click();\n }\n\n /** Returns the trimmed label text, or empty string if no label. */\n getLabelText(): string {\n const label = this.hostEl.querySelector('.ct-field__label');\n return label?.textContent?.trim() ?? '';\n }\n\n /** Returns the trimmed hint text, or empty string if no hint. */\n getHintText(): string {\n const hint = this.hostEl.querySelector('.ct-field__hint');\n return hint?.textContent?.trim() ?? '';\n }\n\n /** Returns the trimmed error text, or empty string if no error. */\n getErrorText(): string {\n const error = this.hostEl.querySelector('.ct-field__error');\n return error?.textContent?.trim() ?? '';\n }\n\n /** Returns whether the select-menu wrapper has the given CSS class. */\n hasClass(className: string): boolean {\n const menu = this.hostEl.querySelector('.ct-select-menu');\n return menu?.classList.contains(className) ?? false;\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n booleanAttribute,\n input,\n output,\n signal,\n computed,\n contentChildren,\n effect,\n viewChild,\n viewChildren,\n ElementRef,\n inject,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\n\nlet nextId = 0;\n\nexport type AfNavbarSize = 'sm' | 'md' | 'lg';\nexport type AfNavbarVariant =\n | 'default'\n | 'sticky'\n | 'fixed'\n | 'elevated'\n | 'transparent'\n | 'dark'\n | 'bordered';\n\n/**\n * Individual navigation item used within af-navbar or af-toolbar.\n *\n * Supports Angular Router via `routerLink`, standard links via `href`,\n * and button mode when neither is provided. Content projection allows\n * icons and custom markup inside the link.\n *\n * @example\n * <af-nav-item label=\"Dashboard\" routerLink=\"/dashboard\">\n * <af-icon name=\"dashboard\" /> Dashboard\n * </af-nav-item>\n */\n@Component({\n selector: 'af-nav-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive, NgTemplateOutlet],\n template: `\n <li class=\"ct-navbar__item\" role=\"none\">\n <ng-template #contentTpl>\n <ng-content>{{ label() }}</ng-content>\n </ng-template>\n\n @if (routerLink()) {\n <a\n #linkEl\n class=\"ct-navbar__link\"\n [routerLink]=\"routerLink()!\"\n routerLinkActive=\"ct-navbar__link--active\"\n role=\"menuitem\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.tabindex]=\"rovingTabindex()\"\n (click)=\"onClick($event)\">\n <ng-container [ngTemplateOutlet]=\"contentTpl\" />\n </a>\n } @else if (href()) {\n <a\n #linkEl\n class=\"ct-navbar__link\"\n [class.ct-navbar__link--active]=\"active()\"\n [href]=\"href()\"\n role=\"menuitem\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.tabindex]=\"rovingTabindex()\"\n (click)=\"onClick($event)\">\n <ng-container [ngTemplateOutlet]=\"contentTpl\" />\n </a>\n } @else {\n <button\n #linkEl\n class=\"ct-navbar__link\"\n [class.ct-navbar__link--active]=\"active()\"\n type=\"button\"\n role=\"menuitem\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.tabindex]=\"rovingTabindex()\"\n (click)=\"onClick($event)\">\n <ng-container [ngTemplateOutlet]=\"contentTpl\" />\n </button>\n }\n </li>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfNavItemComponent {\n /** Text label shown as fallback when no content is projected. Also used by the mobile menu. */\n label = input.required<string>();\n\n /** URL for the navigation link. Renders as `<a>` when provided, `<button>` otherwise. */\n href = input('');\n\n /** Angular Router link. Renders as `<a>` with routerLink and auto-active detection. */\n routerLink = input<string | string[] | null>(null);\n\n /** Marks this item as the currently active page (used for href/button mode, routerLink auto-detects). */\n active = input(false, { transform: booleanAttribute });\n\n /** Disables interaction with this item. */\n disabled = input(false, { transform: booleanAttribute });\n\n /** Emits when the item is clicked (only fires when not disabled). */\n clicked = output<MouseEvent>();\n\n /** Roving tabindex managed by the parent AfNavbarComponent. */\n rovingTabindex = signal(0);\n\n linkRef = viewChild<ElementRef<HTMLElement>>('linkEl');\n\n /** Focus the link or button element. */\n focusLink(): void {\n this.linkRef()?.nativeElement.focus();\n }\n\n onClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n return;\n }\n this.clicked.emit(event);\n }\n}\n\n/**\n * Responsive navbar with mobile menu, keyboard navigation, and ARIA landmarks.\n *\n * @example\n * <af-navbar ariaLabel=\"Main navigation\">\n * <a brand class=\"ct-navbar__brand\" href=\"/\">My App</a>\n * <af-nav-item label=\"Dashboard\" routerLink=\"/dashboard\">\n * <af-icon name=\"dashboard\" /> Dashboard\n * </af-nav-item>\n * <af-nav-item label=\"Settings\" routerLink=\"/settings\" />\n * <button actions class=\"ct-button\">Profile</button>\n * </af-navbar>\n */\n@Component({\n selector: 'af-navbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive],\n host: {\n '(keydown)': 'handleKeydown($event)',\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n <header [class]=\"navbarClasses()\">\n <div class=\"ct-navbar__brand-wrapper\">\n <ng-content select=\"[brand]\" />\n </div>\n\n <button\n #toggleBtn\n class=\"ct-navbar__toggle\"\n type=\"button\"\n [attr.aria-expanded]=\"mobileMenuOpen()\"\n [attr.aria-label]=\"mobileMenuOpen() ? 'Close menu' : 'Open menu'\"\n [attr.aria-controls]=\"mobileMenuId\"\n (click)=\"toggleMobileMenu()\">\n <span class=\"ct-navbar__toggle-icon\">\n <span></span>\n <span></span>\n <span></span>\n </span>\n </button>\n\n <nav [attr.aria-label]=\"ariaLabel()\">\n <ul class=\"ct-navbar__nav\" role=\"menubar\">\n <ng-content />\n </ul>\n </nav>\n\n <div class=\"ct-navbar__spacer\"></div>\n\n <div class=\"ct-navbar__actions\">\n <ng-content select=\"[actions]\" />\n </div>\n\n <div\n class=\"ct-navbar__mobile-menu\"\n [attr.id]=\"mobileMenuId\"\n [attr.data-state]=\"mobileMenuOpen() ? 'open' : 'closed'\"\n role=\"menu\"\n aria-label=\"Mobile navigation\">\n @for (item of items(); track item) {\n @if (item.routerLink(); as rl) {\n <a\n #mobileLink\n class=\"ct-navbar__link\"\n [routerLink]=\"rl\"\n routerLinkActive=\"ct-navbar__link--active\"\n role=\"menuitem\"\n [attr.aria-disabled]=\"item.disabled() || null\"\n [attr.tabindex]=\"mobileMenuOpen() ? 0 : -1\"\n (click)=\"onMobileItemClick($event, item)\">\n {{ item.label() }}\n </a>\n } @else if (item.href()) {\n <a\n #mobileLink\n class=\"ct-navbar__link\"\n [href]=\"item.href()\"\n role=\"menuitem\"\n [attr.aria-current]=\"item.active() ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled() || null\"\n [attr.tabindex]=\"mobileMenuOpen() ? 0 : -1\"\n (click)=\"onMobileItemClick($event, item)\">\n {{ item.label() }}\n </a>\n } @else {\n <button\n #mobileLink\n class=\"ct-navbar__link\"\n type=\"button\"\n role=\"menuitem\"\n [attr.aria-current]=\"item.active() ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled() || null\"\n [attr.tabindex]=\"mobileMenuOpen() ? 0 : -1\"\n (click)=\"onMobileItemClick($event, item)\">\n {{ item.label() }}\n </button>\n }\n }\n </div>\n </header>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfNavbarComponent {\n private componentId = nextId++;\n private hostEl = inject(ElementRef);\n\n /** Size variant of the navbar. */\n size = input<AfNavbarSize>('md');\n\n /** Visual variant of the navbar. */\n variant = input<AfNavbarVariant>('default');\n\n /** Center the navigation items. */\n center = input(false, { transform: booleanAttribute });\n\n /** Accessible label for the navigation landmark. */\n ariaLabel = input('Main navigation');\n\n /** Projected nav item children. */\n items = contentChildren(AfNavItemComponent);\n\n /** Whether the mobile menu is currently open. */\n mobileMenuOpen = signal(false);\n\n readonly mobileMenuId = `af-navbar-mobile-${this.componentId}`;\n\n private focusedIndex = signal(0);\n private toggleRef = viewChild<ElementRef<HTMLButtonElement>>('toggleBtn');\n private mobileLinks = viewChildren<ElementRef<HTMLElement>>('mobileLink');\n\n navbarClasses = computed(() => {\n const classes = ['ct-navbar'];\n\n const sz = this.size();\n if (sz !== 'md') {\n classes.push(`ct-navbar--${sz}`);\n }\n\n const variant = this.variant();\n if (variant !== 'default') {\n classes.push(`ct-navbar--${variant}`);\n }\n\n if (this.center()) {\n classes.push('ct-navbar--center');\n }\n\n return classes.join(' ');\n });\n\n /** Manage roving tabindex across child nav items. */\n private rovingTabindexEffect = effect(() => {\n const items = this.items();\n const enabledItems = items.filter((i) => !i.disabled());\n let idx = this.focusedIndex();\n\n if (enabledItems.length === 0) {\n items.forEach((item) => item.rovingTabindex.set(-1));\n return;\n }\n\n if (idx >= enabledItems.length) {\n idx = 0;\n }\n\n let enabledCount = 0;\n items.forEach((item) => {\n if (item.disabled()) {\n item.rovingTabindex.set(-1);\n } else {\n item.rovingTabindex.set(enabledCount === idx ? 0 : -1);\n enabledCount++;\n }\n });\n });\n\n /** Toggle mobile menu open/closed and auto-focus the first enabled item. */\n toggleMobileMenu(): void {\n const willOpen = !this.mobileMenuOpen();\n this.mobileMenuOpen.set(willOpen);\n\n if (willOpen) {\n queueMicrotask(() => {\n const links = this.mobileLinks();\n const firstEnabledIdx = this.items().findIndex((i) => !i.disabled());\n if (firstEnabledIdx >= 0 && links[firstEnabledIdx]) {\n links[firstEnabledIdx].nativeElement.focus();\n }\n });\n }\n }\n\n onMobileItemClick(event: MouseEvent, item: AfNavItemComponent): void {\n if (item.disabled()) {\n event.preventDefault();\n return;\n }\n item.clicked.emit(event);\n this.mobileMenuOpen.set(false);\n }\n\n onDocumentClick(event: Event): void {\n if (!this.mobileMenuOpen()) return;\n const target = event.target as HTMLElement;\n if (!this.hostEl.nativeElement.contains(target)) {\n this.mobileMenuOpen.set(false);\n }\n }\n\n handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.mobileMenuOpen()) {\n event.preventDefault();\n this.mobileMenuOpen.set(false);\n this.toggleRef()?.nativeElement.focus();\n return;\n }\n\n const target = event.target as HTMLElement;\n\n if (this.isMobileMenuTarget(target)) {\n this.handleMobileKeydown(event, target);\n return;\n }\n\n if (\n target.getAttribute('role') === 'menuitem' &&\n target.closest('[role=\"menubar\"]')\n ) {\n this.handleDesktopKeydown(event);\n }\n }\n\n private handleDesktopKeydown(event: KeyboardEvent): void {\n const enabledItems = this.items().filter((i) => !i.disabled());\n if (enabledItems.length === 0) return;\n\n const currentIndex = this.focusedIndex();\n const last = enabledItems.length - 1;\n\n switch (event.key) {\n case 'ArrowRight': {\n event.preventDefault();\n const next = (currentIndex + 1) % enabledItems.length;\n this.focusedIndex.set(next);\n enabledItems[next].focusLink();\n break;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n const prev =\n (currentIndex - 1 + enabledItems.length) % enabledItems.length;\n this.focusedIndex.set(prev);\n enabledItems[prev].focusLink();\n break;\n }\n case 'Home': {\n event.preventDefault();\n this.focusedIndex.set(0);\n enabledItems[0].focusLink();\n break;\n }\n case 'End': {\n event.preventDefault();\n this.focusedIndex.set(last);\n enabledItems[last].focusLink();\n break;\n }\n }\n }\n\n private handleMobileKeydown(\n event: KeyboardEvent,\n target: HTMLElement,\n ): void {\n const links = this.mobileLinks();\n const enabledIndices = this.items()\n .map((item, i) => ({ item, i }))\n .filter(({ item }) => !item.disabled())\n .map(({ i }) => i);\n\n if (enabledIndices.length === 0) return;\n\n const currentIdx = links.findIndex(\n (ref) => ref.nativeElement === target,\n );\n const enabledPosition = enabledIndices.indexOf(currentIdx);\n if (enabledPosition === -1) return;\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n const next =\n enabledIndices[(enabledPosition + 1) % enabledIndices.length];\n links[next].nativeElement.focus();\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n const prev =\n enabledIndices[\n (enabledPosition - 1 + enabledIndices.length) %\n enabledIndices.length\n ];\n links[prev].nativeElement.focus();\n break;\n }\n case 'Home': {\n event.preventDefault();\n links[enabledIndices[0]].nativeElement.focus();\n break;\n }\n case 'End': {\n event.preventDefault();\n links[\n enabledIndices[enabledIndices.length - 1]\n ].nativeElement.focus();\n break;\n }\n }\n }\n\n private isMobileMenuTarget(target: HTMLElement): boolean {\n return target.closest('.ct-navbar__mobile-menu') !== null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n InjectionToken,\n OnDestroy,\n Signal,\n computed,\n contentChild,\n effect,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FocusTrap } from '../../utils/focus-trap';\n\nexport type AfPopoverPosition = 'top' | 'bottom' | 'left' | 'right';\nexport type AfPopoverAlign = 'start' | 'center' | 'end';\nexport type AfPopoverSize = 'sm' | 'md' | 'lg';\n\n/** @internal API surface exposed to the trigger directive. */\ninterface AfPopoverApi {\n toggle(): void;\n open: Signal<boolean>;\n contentId: string;\n}\n\n/** @internal */\nconst AF_POPOVER = new InjectionToken<AfPopoverApi>('AfPopover');\n\n/**\n * Marks the trigger element for an `af-popover`.\n * Automatically sets ARIA attributes and toggles on click.\n *\n * @example\n * ```html\n * <af-popover>\n * <button afPopoverTrigger>Open</button>\n * ...\n * </af-popover>\n * ```\n */\n@Directive({\n selector: '[afPopoverTrigger]',\n host: {\n '(click)': 'popover.toggle()',\n '[attr.aria-haspopup]': '\"dialog\"',\n '[attr.aria-expanded]': 'popover.open()',\n '[attr.aria-controls]': 'popover.contentId',\n },\n})\nexport class AfPopoverTriggerDirective {\n /** @internal */\n readonly popover = inject(AF_POPOVER);\n /** @internal */\n readonly elementRef = inject(ElementRef<HTMLElement>);\n}\n\n/**\n * Popover with configurable positioning, auto-flip, focus management,\n * and full ARIA support.\n *\n * @example\n * ```html\n * <af-popover position=\"bottom\" align=\"center\" title=\"Info\">\n * <button afPopoverTrigger>More info</button>\n * <p>Some helpful content.</p>\n * </af-popover>\n * ```\n */\n@Component({\n selector: 'af-popover',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: AF_POPOVER, useExisting: forwardRef(() => AfPopoverComponent) },\n ],\n host: {\n '(document:click)': 'onDocumentClick($event)',\n '(document:keydown.escape)': 'onEscapeKey()',\n '(document:keydown)': 'onKeydown($event)',\n },\n template: `\n <div\n #wrapper\n [class]=\"containerClasses()\"\n [attr.data-state]=\"open() ? 'open' : 'closed'\"\n [attr.data-side]=\"activeSide()\"\n [attr.data-align]=\"align()\">\n <ng-content select=\"[afPopoverTrigger]\"></ng-content>\n <div\n #popoverContent\n class=\"ct-popover__content\"\n role=\"dialog\"\n [id]=\"contentId\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"!ariaLabel() && title() ? headerId : null\"\n tabindex=\"-1\">\n @if (showArrow()) {\n <div class=\"ct-popover__arrow\"></div>\n }\n @if (title()) {\n <div class=\"ct-popover__header\">\n <h3 [id]=\"headerId\">{{ title() }}</h3>\n </div>\n }\n <div class=\"ct-popover__body\">\n <ng-content select=\"[body]\"></ng-content>\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfPopoverComponent implements AfPopoverApi, OnDestroy {\n private static nextId = 0;\n private focusTrap = new FocusTrap();\n\n /** Two-way bindable open state. */\n open = model(false);\n\n /** Preferred position relative to the trigger. Flips automatically when space is insufficient. */\n position = input<AfPopoverPosition>('bottom');\n\n /** Alignment along the position axis. */\n align = input<AfPopoverAlign>('center');\n\n /** Size variant (`sm` = 240px, `md` = default, `lg` = 480px). */\n size = input<AfPopoverSize>('md');\n\n /** Title displayed in the header section. */\n title = input('');\n\n /** Accessible label (overrides `aria-labelledby` from title). */\n ariaLabel = input('');\n\n /** Whether to show the decorative arrow. */\n showArrow = input(true);\n\n /** Whether clicking outside closes the popover. */\n closeOnClickOutside = input(true);\n\n /** Emits when the popover closes. */\n closed = output<void>();\n\n readonly contentId = `af-popover-${AfPopoverComponent.nextId}`;\n readonly headerId = `af-popover-header-${AfPopoverComponent.nextId++}`;\n\n private wrapperRef = viewChild<ElementRef<HTMLElement>>('wrapper');\n private contentRef = viewChild<ElementRef<HTMLElement>>('popoverContent');\n private triggerDirective = contentChild(AfPopoverTriggerDirective);\n private flippedSide = signal<AfPopoverPosition | null>(null);\n\n /** Effective side after auto-flip evaluation. */\n activeSide = computed(() => this.flippedSide() ?? this.position());\n\n containerClasses = computed(() => {\n const classes = ['ct-popover'];\n const sz = this.size();\n if (sz !== 'md') {\n classes.push(`ct-popover--${sz}`);\n }\n return classes.join(' ');\n });\n\n private openEffect = effect(() => {\n if (this.open()) {\n this.onOpen();\n } else {\n this.onClose();\n }\n });\n\n ngOnDestroy(): void {\n this.focusTrap.restoreFocus();\n }\n\n /** Toggle the popover open state. */\n toggle(): void {\n if (this.open()) {\n this.close();\n } else {\n this.open.set(true);\n }\n }\n\n /** Close the popover and emit the `closed` event. */\n close(): void {\n this.open.set(false);\n this.closed.emit();\n }\n\n onDocumentClick(event: MouseEvent): void {\n if (!this.open() || !this.closeOnClickOutside()) return;\n const wrapper = this.wrapperRef()?.nativeElement;\n if (wrapper && !wrapper.contains(event.target as Node)) {\n this.close();\n }\n }\n\n onEscapeKey(): void {\n if (!this.open()) return;\n const trigger = this.triggerDirective()?.elementRef.nativeElement;\n if (trigger) {\n this.focusTrap.setReturnFocus(trigger);\n }\n this.close();\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (!this.open() || event.key !== 'Tab') return;\n const content = this.contentRef()?.nativeElement;\n this.focusTrap.handleTab(event, content, content);\n }\n\n private onOpen(): void {\n this.focusTrap.saveFocus();\n this.flippedSide.set(this.computeFlippedSide());\n queueMicrotask(() => {\n if (!this.open()) return;\n const content = this.contentRef()?.nativeElement;\n this.focusTrap.focusFirst(content, content);\n });\n }\n\n private onClose(): void {\n this.flippedSide.set(null);\n this.focusTrap.restoreFocus();\n }\n\n private computeFlippedSide(): AfPopoverPosition {\n const trigger = this.triggerDirective()?.elementRef.nativeElement;\n const content = this.contentRef()?.nativeElement;\n if (!trigger || !content) return this.position();\n\n const triggerRect = trigger.getBoundingClientRect();\n const contentRect = content.getBoundingClientRect();\n const preferred = this.position();\n\n const opposites: Record<AfPopoverPosition, AfPopoverPosition> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n };\n\n const space: Record<AfPopoverPosition, number> = {\n top: triggerRect.top,\n bottom: window.innerHeight - triggerRect.bottom,\n left: triggerRect.left,\n right: window.innerWidth - triggerRect.right,\n };\n\n const needed: Record<AfPopoverPosition, number> = {\n top: contentRect.height,\n bottom: contentRect.height,\n left: contentRect.width,\n right: contentRect.width,\n };\n\n if (space[preferred] >= needed[preferred]) return preferred;\n\n const opposite = opposites[preferred];\n if (space[opposite] >= needed[opposite]) return opposite;\n\n return preferred;\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n OnDestroy,\n input,\n output,\n signal,\n computed,\n effect,\n} from '@angular/core';\n\n/** Semantic variants controlling colors and ARIA behavior */\nexport type AfBannerVariant = 'info' | 'warning' | 'danger' | 'success' | 'neutral';\n\n/** Visual appearance styles */\nexport type AfBannerAppearance = 'subtle' | 'solid' | 'left-accent' | 'top-accent';\n\n/** Positioning strategies */\nexport type AfBannerPosition = 'inline' | 'fixed-top' | 'fixed-bottom' | 'sticky';\n\n/**\n * Persistent page- or section-level notice component.\n * Wraps the `ct-banner` design system component with dismiss logic,\n * optional auto-close timer, and ARIA live region support.\n *\n * Uses attribute-based content projection for icon, heading, message,\n * and actions slots. The component automatically applies the correct\n * `ct-banner__*` CSS wrapper classes.\n *\n * @example\n * ```html\n * <af-banner variant=\"warning\" [dismissible]=\"true\" (dismissed)=\"onDismissed()\">\n * <span icon>⚠️</span>\n * <span heading>Attention</span>\n * <span message>Something needs your attention.</span>\n * <div actions>\n * <button class=\"ct-button ct-button--sm\">Fix now</button>\n * </div>\n * </af-banner>\n * ```\n */\n@Component({\n selector: 'af-banner',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n [class]=\"hostClasses()\"\n [attr.data-variant]=\"variant()\"\n [attr.data-state]=\"state()\"\n [attr.role]=\"ariaRole()\">\n <div class=\"ct-banner__icon\">\n <ng-content select=\"[icon]\" />\n </div>\n <div class=\"ct-banner__content\">\n <div class=\"ct-banner__title\">\n <ng-content select=\"[heading]\" />\n </div>\n <div class=\"ct-banner__message\">\n <ng-content select=\"[message]\" />\n </div>\n <ng-content />\n </div>\n <div class=\"ct-banner__actions\">\n <ng-content select=\"[actions]\" />\n </div>\n @if (dismissible()) {\n <button\n class=\"ct-banner__close\"\n type=\"button\"\n [attr.aria-label]=\"closeAriaLabel()\"\n (click)=\"dismiss()\">\n <span class=\"ct-icon ct-icon--sm\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg></span>\n </button>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfBannerComponent implements OnDestroy {\n /** Semantic variant controlling colors and ARIA role */\n variant = input<AfBannerVariant>('info');\n\n /** Visual appearance style */\n appearance = input<AfBannerAppearance>('subtle');\n\n /** Positioning strategy */\n position = input<AfBannerPosition>('inline');\n\n /** Whether the banner displays a close/dismiss button */\n dismissible = input(false);\n\n /** Compact size mode */\n compact = input(false);\n\n /** Full-width layout (no radius, no inline border) */\n full = input(false);\n\n /** Auto-close delay in milliseconds. 0 means no auto-close */\n autoClose = input(0);\n\n /** Aria label for the close button */\n closeAriaLabel = input('Close banner');\n\n /** Emits when the banner is dismissed (by user or auto-close) */\n dismissed = output<void>();\n\n private readonly isDismissed = signal(false);\n private autoCloseTimerId: ReturnType<typeof setTimeout> | null = null;\n\n /** Current open/closed state for the data-state attribute */\n state = computed(() => (this.isDismissed() ? 'closed' : 'open'));\n\n /** ARIA role based on variant: alert for danger/warning, status for others */\n ariaRole = computed(() => {\n const v = this.variant();\n return v === 'danger' || v === 'warning' ? 'alert' : 'status';\n });\n\n /** Computed CSS class string for the banner element */\n hostClasses = computed(() => {\n const classes = ['ct-banner'];\n\n const app = this.appearance();\n if (app !== 'subtle') {\n classes.push(`ct-banner--${app}`);\n }\n\n const pos = this.position();\n if (pos !== 'inline') {\n classes.push(`ct-banner--${pos}`);\n }\n\n if (this.compact()) {\n classes.push('ct-banner--compact');\n }\n\n if (this.full()) {\n classes.push('ct-banner--full');\n }\n\n return classes.join(' ');\n });\n\n private autoCloseEffect = effect(() => {\n const delay = this.autoClose();\n this.clearAutoCloseTimer();\n if (delay > 0 && !this.isDismissed()) {\n this.autoCloseTimerId = setTimeout(() => this.dismiss(), delay);\n }\n });\n\n ngOnDestroy(): void {\n this.clearAutoCloseTimer();\n }\n\n /** Dismisses the banner and emits the dismissed event */\n dismiss(): void {\n if (this.isDismissed()) return;\n this.isDismissed.set(true);\n this.clearAutoCloseTimer();\n this.dismissed.emit();\n }\n\n private clearAutoCloseTimer(): void {\n if (this.autoCloseTimerId !== null) {\n clearTimeout(this.autoCloseTimerId);\n this.autoCloseTimerId = null;\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n} from '@angular/core';\n\nexport type AfEmptyStateSize = 'sm' | 'md' | 'lg';\nexport type AfEmptyStateVariant = 'default' | 'error';\n\n/**\n * Empty state component for displaying placeholder content when no data is available.\n *\n * Supports content projection for icon, title, description, and actions.\n * Alternatively, use the `icon` input for simple text/emoji icons.\n *\n * @example\n * <af-empty-state variant=\"default\" size=\"md\" [bordered]=\"true\">\n * <span icon>📦</span>\n * <span title>No items found</span>\n * <span description>Try adjusting your search or filter criteria.</span>\n * <div actions>\n * <button class=\"ct-button ct-button--primary\">Add Item</button>\n * </div>\n * </af-empty-state>\n *\n * @example\n * <af-empty-state icon=\"🔍\" variant=\"error\">\n * <span title>Search failed</span>\n * <span description>An error occurred while searching.</span>\n * </af-empty-state>\n */\n@Component({\n selector: 'af-empty-state',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [class]=\"containerClasses()\" role=\"status\">\n <div class=\"ct-empty-state__icon\" aria-hidden=\"true\">\n @if (icon()) {\n {{ icon() }}\n } @else {\n <ng-content select=\"[icon]\" />\n }\n </div>\n <p class=\"ct-empty-state__title\">\n <ng-content select=\"[title]\" />\n </p>\n <p class=\"ct-empty-state__description\">\n <ng-content select=\"[description]\" />\n </p>\n <div class=\"ct-empty-state__actions\">\n <ng-content select=\"[actions]\" />\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfEmptyStateComponent {\n /** Size variant controlling icon size, padding, and font sizes */\n size = input<AfEmptyStateSize>('md');\n\n /** Visual variant — `error` highlights icon and title in danger color */\n variant = input<AfEmptyStateVariant>('default');\n\n /** Whether to display a dashed border around the empty state */\n bordered = input(false);\n\n /** Icon character or emoji to display (alternative to icon content projection) */\n icon = input('');\n\n containerClasses = computed(() => {\n const classes = ['ct-empty-state'];\n\n const s = this.size();\n if (s !== 'md') {\n classes.push(`ct-empty-state--${s}`);\n }\n\n if (this.variant() === 'error') {\n classes.push('ct-empty-state--error');\n }\n\n if (this.bordered()) {\n classes.push('ct-empty-state--bordered');\n }\n\n return classes.join(' ');\n });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n numberAttribute,\n} from '@angular/core';\n\nexport type AfSkeletonVariant = 'text' | 'title' | 'avatar' | 'rect';\n\n/**\n * Skeleton placeholder component for loading states.\n * Renders animated placeholders while content is loading.\n *\n * @example\n * <af-skeleton variant=\"text\" count=\"3\"></af-skeleton>\n * <af-skeleton variant=\"avatar\"></af-skeleton>\n * <af-skeleton variant=\"rect\" width=\"200px\" height=\"120px\"></af-skeleton>\n */\n@Component({\n selector: 'af-skeleton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'status',\n '[attr.aria-busy]': '\"true\"',\n '[attr.aria-label]': 'label()',\n },\n template: `\n @for (_ of items(); track $index) {\n <span\n [class]=\"skeletonClasses()\"\n [attr.style]=\"skeletonStyle()\"\n aria-hidden=\"true\"\n ></span>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n }\n span + span {\n margin-top: 0.5rem;\n }\n `,\n ],\n})\nexport class AfSkeletonComponent {\n /** Visual variant of the skeleton placeholder */\n variant = input<AfSkeletonVariant>('text');\n\n /** Custom width (CSS value, e.g. '200px', '50%') */\n width = input<string>();\n\n /** Custom height (CSS value, e.g. '100px', '2em') */\n height = input<string>();\n\n /** Number of skeleton lines to render */\n count = input(1, { transform: numberAttribute });\n\n /** Accessible label for screen readers */\n label = input('Loading\\u2026');\n\n items = computed(() => Array.from({ length: this.count() }));\n\n skeletonClasses = computed(() => {\n return `ct-skeleton ct-skeleton--${this.variant()}`;\n });\n\n skeletonStyle = computed(() => {\n const w = this.width();\n const h = this.height();\n if (!w && !h) return null;\n const parts: string[] = [];\n if (w) parts.push(`--ct-skeleton-width: ${w}`);\n if (h) parts.push(`--ct-skeleton-height: ${h}`);\n return parts.join('; ');\n });\n}\n","import { Component, ChangeDetectionStrategy, input, computed } from '@angular/core';\n\nexport type AfDividerOrientation = 'horizontal' | 'vertical';\nexport type AfDividerColor = 'default' | 'strong' | 'muted';\nexport type AfDividerSpacing = 'sm' | 'md' | 'lg' | 'none';\n\n/**\n * Divider component for visually separating content sections.\n *\n * @example\n * <af-divider />\n * <af-divider orientation=\"vertical\" />\n * <af-divider color=\"strong\" spacing=\"lg\" />\n * <af-divider label=\"Section\" />\n */\n@Component({\n selector: 'af-divider',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'separator',\n '[attr.aria-orientation]': 'orientation()',\n '[class]': 'dividerClasses()',\n },\n template: `\n @if (label()) {\n <span class=\"ct-divider__label\">{{ label() }}</span>\n }\n `,\n})\nexport class AfDividerComponent {\n /** Orientation of the divider. */\n orientation = input<AfDividerOrientation>('horizontal');\n\n /** Color variant of the divider line. */\n color = input<AfDividerColor>('default');\n\n /** Spacing around the divider. */\n spacing = input<AfDividerSpacing>('md');\n\n /** Optional label text displayed in the center of the divider. */\n label = input('');\n\n dividerClasses = computed(() => {\n const classes = ['ct-divider'];\n\n if (this.orientation() === 'vertical') {\n classes.push('ct-divider--vertical');\n }\n\n if (this.color() !== 'default') {\n classes.push(`ct-divider--${this.color()}`);\n }\n\n if (this.spacing() !== 'md') {\n classes.push(`ct-divider--${this.spacing()}`);\n }\n\n if (this.label()) {\n classes.push('ct-divider--labeled');\n }\n\n return classes.join(' ');\n });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n AfterContentInit,\n AfterContentChecked,\n ElementRef,\n computed,\n inject,\n input,\n} from '@angular/core';\n\nconst CONTROL_SELECTORS = [\n 'input',\n 'select',\n 'textarea',\n '[role=\"combobox\"]',\n '[role=\"listbox\"]',\n '[role=\"spinbutton\"]',\n '[role=\"slider\"]',\n].join(',');\n\n/**\n * Form field wrapper that binds label, hint, and error message to a projected form control.\n *\n * Automatically links the label via `for`/`id` and sets `aria-describedby`\n * and `aria-invalid` on the first interactive element found inside the projection.\n *\n * @example\n * <af-field label=\"Email\" hint=\"We will not share this.\">\n * <input class=\"ct-input\" type=\"email\" />\n * </af-field>\n *\n * @example\n * <af-field label=\"Name\" [error]=\"nameError\" required>\n * <input class=\"ct-input\" />\n * </af-field>\n */\n@Component({\n selector: 'af-field',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"ct-field\">\n @if (label()) {\n <label\n class=\"ct-field__label\"\n [class.ct-field__label--required]=\"required()\"\n [attr.for]=\"fieldId()\"\n >\n {{ label() }}\n </label>\n }\n\n <ng-content></ng-content>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId()\">{{ hint() }}</div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" role=\"alert\" [id]=\"errorId()\">\n {{ error() }}\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfFieldComponent implements AfterContentInit, AfterContentChecked {\n private static nextId = 0;\n\n /** Field label text */\n label = input('');\n\n /** Hint text shown below the control */\n hint = input('');\n\n /** Error message — replaces hint and marks the control as invalid */\n error = input('');\n\n /** Whether the field is required (appends visual indicator to label) */\n required = input(false);\n\n /** Unique ID applied to the projected control, auto-generated if omitted */\n fieldId = input(`af-field-${AfFieldComponent.nextId++}`);\n\n hintId = computed(() => `${this.fieldId()}-hint`);\n errorId = computed(() => `${this.fieldId()}-error`);\n\n private elementRef = inject(ElementRef);\n private controlEl: HTMLElement | null = null;\n\n ngAfterContentInit(): void {\n this.controlEl =\n this.elementRef.nativeElement.querySelector(CONTROL_SELECTORS);\n\n if (this.controlEl && !this.controlEl.id) {\n this.controlEl.id = this.fieldId();\n }\n }\n\n ngAfterContentChecked(): void {\n if (!this.controlEl) return;\n\n const error = this.error();\n const hint = this.hint();\n\n // aria-describedby\n if (error) {\n this.controlEl.setAttribute('aria-describedby', this.errorId());\n } else if (hint) {\n this.controlEl.setAttribute('aria-describedby', this.hintId());\n } else {\n this.controlEl.removeAttribute('aria-describedby');\n }\n\n // aria-invalid\n if (error) {\n this.controlEl.setAttribute('aria-invalid', 'true');\n } else {\n this.controlEl.removeAttribute('aria-invalid');\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n booleanAttribute,\n} from '@angular/core';\n\nexport type AfTableVariant = 'default' | 'striped' | 'bordered';\nexport type AfTableCellType = 'text' | 'numeric' | 'checkbox' | 'actions';\n\n/**\n * Lightweight table container wrapping the Construct Design System table styles.\n *\n * @example\n * <af-table variant=\"striped\" caption=\"Team members\">\n * <af-table-header>\n * <af-table-row>\n * <af-table-header-cell>Name</af-table-header-cell>\n * <af-table-header-cell type=\"numeric\">Age</af-table-header-cell>\n * </af-table-row>\n * </af-table-header>\n * <af-table-body>\n * <af-table-row>\n * <af-table-cell>Alice</af-table-cell>\n * <af-table-cell type=\"numeric\">30</af-table-cell>\n * </af-table-row>\n * </af-table-body>\n * </af-table>\n */\n@Component({\n selector: 'af-table',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"ct-table-wrap\">\n <table [class]=\"tableClasses()\">\n @if (caption()) {\n <caption>{{ caption() }}</caption>\n }\n <ng-content />\n </table>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfTableComponent {\n /** Visual variant of the table. */\n variant = input<AfTableVariant>('default');\n\n /** Use compact cell padding. */\n compact = input(false, { transform: booleanAttribute });\n\n /** Accessible caption rendered as a `<caption>` element. */\n caption = input('');\n\n tableClasses = computed(() => {\n const classes = ['ct-table'];\n if (this.variant() !== 'default') {\n classes.push(`ct-table--${this.variant()}`);\n }\n if (this.compact()) {\n classes.push('ct-table--compact');\n }\n return classes.join(' ');\n });\n}\n\n/**\n * Table header section rendering a semantic `<thead>` element.\n *\n * @example\n * <af-table-header>\n * <af-table-row>\n * <af-table-header-cell>Column</af-table-header-cell>\n * </af-table-row>\n * </af-table-header>\n */\n@Component({\n selector: 'af-table-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<thead><ng-content /></thead>`,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfTableHeaderComponent {}\n\n/**\n * Table body section rendering a semantic `<tbody>` element.\n *\n * @example\n * <af-table-body>\n * <af-table-row>\n * <af-table-cell>Data</af-table-cell>\n * </af-table-row>\n * </af-table-body>\n */\n@Component({\n selector: 'af-table-body',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<tbody><ng-content /></tbody>`,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfTableBodyComponent {}\n\n/**\n * Table row rendering a semantic `<tr>` element.\n */\n@Component({\n selector: 'af-table-row',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<tr><ng-content /></tr>`,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfTableRowComponent {}\n\n/**\n * Header cell rendering a semantic `<th>` element.\n *\n * @example\n * <af-table-header>\n * <af-table-row>\n * <af-table-header-cell>Name</af-table-header-cell>\n * <af-table-header-cell type=\"numeric\">Age</af-table-header-cell>\n * </af-table-row>\n * </af-table-header>\n */\n@Component({\n selector: 'af-table-header-cell',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <th [class]=\"cellClasses()\" [attr.scope]=\"scope()\">\n <ng-content />\n </th>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfTableHeaderCellComponent {\n /** Cell type for specialized styling (numeric, checkbox, actions). */\n type = input<AfTableCellType>('text');\n\n /** Scope attribute for the header cell. */\n scope = input<'col' | 'row'>('col');\n\n cellClasses = computed(() => {\n const classes: string[] = [];\n if (this.type() !== 'text') {\n classes.push(`ct-table__cell--${this.type()}`);\n }\n return classes.join(' ');\n });\n}\n\n/**\n * Data cell rendering a semantic `<td>` element.\n *\n * @example\n * <af-table-body>\n * <af-table-row>\n * <af-table-cell>Alice</af-table-cell>\n * <af-table-cell type=\"numeric\">42</af-table-cell>\n * </af-table-row>\n * </af-table-body>\n */\n@Component({\n selector: 'af-table-cell',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <td [class]=\"cellClasses()\">\n <ng-content />\n </td>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfTableCellComponent {\n /** Cell type for specialized styling (numeric, checkbox, actions). */\n type = input<AfTableCellType>('text');\n\n cellClasses = computed(() => {\n const classes: string[] = [];\n if (this.type() !== 'text') {\n classes.push(`ct-table__cell--${this.type()}`);\n }\n return classes.join(' ');\n });\n}\n","// Components\nexport * from './alert';\nexport * from './accordion';\nexport * from './app-shell';\nexport * from './app-shell-v2';\nexport * from './avatar';\nexport * from './button';\nexport * from './input';\nexport * from './select';\nexport * from './textarea';\nexport * from './checkbox';\nexport * from './radio';\nexport * from './switch';\nexport * from './card';\nexport * from './data-table';\nexport * from './modal';\nexport * from './toast';\nexport * from './tabs';\nexport * from './nav-tabs';\nexport * from './dropdown';\nexport * from './pagination';\nexport * from './breadcrumbs';\nexport * from './datepicker';\nexport * from './chip';\nexport * from './chip-input';\nexport * from './tooltip';\nexport * from './badge';\nexport * from './progress-bar';\nexport * from './spinner';\nexport * from './toggle-group';\nexport * from './toolbar';\nexport * from './sidebar';\nexport * from './icon';\nexport * from './slider';\nexport * from './drawer';\nexport * from './combobox';\nexport * from './file-upload';\nexport * from './select-menu';\nexport * from './navbar';\nexport * from './popover';\nexport * from './banner';\nexport * from './skip-link';\nexport * from './empty-state';\nexport * from './skeleton';\nexport * from './divider';\nexport * from './field';\nexport * from './table';\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Transforms snake_case or SCREAMING_SNAKE_CASE strings to Title Case labels.\n *\n * @example\n * {{ 'IN_PROGRESS' | afFormatLabel }} => 'In Progress'\n * {{ 'pending_review' | afFormatLabel }} => 'Pending Review'\n * {{ null | afFormatLabel }} => '—'\n */\n@Pipe({\n name: 'afFormatLabel'\n})\nexport class AfFormatLabelPipe implements PipeTransform {\n transform(value: string | null | undefined): string {\n if (!value) return '\\u2014';\n return value\n .toLowerCase()\n .split('_')\n .map(chunk => chunk.charAt(0).toUpperCase() + chunk.slice(1))\n .join(' ');\n }\n}\n","/*\n * Public API Surface of angular\n */\n\nexport * from './lib/components';\nexport * from './lib/pipes';\nexport * from './lib/services/toast.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextId","DOCUMENT"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"neuravision-ng-construct.mjs","sources":["../../../projects/angular/src/lib/components/alert/alert.component.ts","../../../projects/angular/src/lib/components/alert/alert.harness.ts","../../../projects/angular/src/lib/utils/aria-live-announcer.ts","../../../projects/angular/src/lib/components/accordion/accordion.i18n.ts","../../../projects/angular/src/lib/components/accordion/accordion.component.ts","../../../projects/angular/src/lib/components/accordion/accordion.harness.ts","../../../projects/angular/src/lib/components/skip-link/skip-link.component.ts","../../../projects/angular/src/lib/components/app-shell/app-shell.component.ts","../../../projects/angular/src/lib/components/app-shell-v2/app-shell-v2.component.ts","../../../projects/angular/src/lib/components/avatar/avatar.component.ts","../../../projects/angular/src/lib/components/button/button.component.ts","../../../projects/angular/src/lib/components/button/button.harness.ts","../../../projects/angular/src/lib/components/input/input.i18n.ts","../../../projects/angular/src/lib/components/input/input.component.ts","../../../projects/angular/src/lib/components/input/input.harness.ts","../../../projects/angular/src/lib/components/select/select.i18n.ts","../../../projects/angular/src/lib/components/select/select.component.ts","../../../projects/angular/src/lib/components/select/select.harness.ts","../../../projects/angular/src/lib/components/textarea/textarea.component.ts","../../../projects/angular/src/lib/components/checkbox/checkbox.component.ts","../../../projects/angular/src/lib/components/radio/radio.component.ts","../../../projects/angular/src/lib/components/switch/switch.component.ts","../../../projects/angular/src/lib/components/card/card.component.ts","../../../projects/angular/src/lib/components/data-table/cell-def.directive.ts","../../../projects/angular/src/lib/components/data-table/data-table.component.ts","../../../projects/angular/src/lib/components/data-table/data-table.component.html","../../../projects/angular/src/lib/utils/focus-trap.ts","../../../projects/angular/src/lib/components/modal/modal.component.ts","../../../projects/angular/src/lib/services/toast.service.ts","../../../projects/angular/src/lib/components/toast/toast.component.ts","../../../projects/angular/src/lib/components/tabs/tabs.component.ts","../../../projects/angular/src/lib/components/nav-tabs/nav-tabs.component.ts","../../../projects/angular/src/lib/components/dropdown/dropdown.component.ts","../../../projects/angular/src/lib/components/pagination/pagination.component.ts","../../../projects/angular/src/lib/components/breadcrumbs/breadcrumbs.component.ts","../../../projects/angular/src/lib/components/datepicker/datepicker.component.ts","../../../projects/angular/src/lib/components/chip/chip.component.ts","../../../projects/angular/src/lib/components/chip-input/chip-input.component.ts","../../../projects/angular/src/lib/components/tooltip/tooltip.directive.ts","../../../projects/angular/src/lib/components/badge/badge.component.ts","../../../projects/angular/src/lib/components/badge/badge.harness.ts","../../../projects/angular/src/lib/components/progress-bar/progress-bar.component.ts","../../../projects/angular/src/lib/components/spinner/spinner.component.ts","../../../projects/angular/src/lib/components/toggle-group/toggle-group.component.ts","../../../projects/angular/src/lib/components/toolbar/toolbar.component.ts","../../../projects/angular/src/lib/components/sidebar/sidebar.component.ts","../../../projects/angular/src/lib/components/icon/icon.component.ts","../../../projects/angular/src/lib/components/slider/slider.component.ts","../../../projects/angular/src/lib/components/drawer/drawer.component.ts","../../../projects/angular/src/lib/components/combobox/combobox.component.ts","../../../projects/angular/src/lib/components/file-upload/file-upload.component.ts","../../../projects/angular/src/lib/components/select-menu/select-menu.i18n.ts","../../../projects/angular/src/lib/components/select-menu/select-menu.component.ts","../../../projects/angular/src/lib/components/select-menu/select-menu.harness.ts","../../../projects/angular/src/lib/components/navbar/navbar.component.ts","../../../projects/angular/src/lib/components/popover/popover.component.ts","../../../projects/angular/src/lib/components/banner/banner.component.ts","../../../projects/angular/src/lib/components/empty-state/empty-state.component.ts","../../../projects/angular/src/lib/components/skeleton/skeleton.component.ts","../../../projects/angular/src/lib/components/divider/divider.component.ts","../../../projects/angular/src/lib/components/field/field.component.ts","../../../projects/angular/src/lib/components/table/table.component.ts","../../../projects/angular/src/lib/components/tree/tree.i18n.ts","../../../projects/angular/src/lib/components/tree/tree.component.ts","../../../projects/angular/src/lib/components/tree/tree.harness.ts","../../../projects/angular/src/lib/components/index.ts","../../../projects/angular/src/lib/pipes/format-label.pipe.ts","../../../projects/angular/src/public-api.ts","../../../projects/angular/src/neuravision-ng-construct.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n InjectionToken,\n inject,\n input,\n output,\n signal,\n computed,\n} from '@angular/core';\n\nexport type AfAlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\n/** Translatable strings used by the alert component. */\nexport interface AfAlertI18n {\n /** Label for the dismiss button (default: `'Dismiss alert'`). */\n dismiss: string;\n /** Screen-reader announcement when the alert is dismissed (default: `'Alert dismissed'`). */\n dismissed: string;\n}\n\n/**\n * Injection token to provide custom i18n strings for {@link AfAlertComponent}.\n *\n * @example\n * providers: [{ provide: AF_ALERT_I18N, useValue: { dismiss: 'Schliessen', dismissed: 'Warnung geschlossen' } }]\n */\nexport const AF_ALERT_I18N = new InjectionToken<AfAlertI18n>('AF_ALERT_I18N', {\n factory: () => ({ dismiss: 'Dismiss alert', dismissed: 'Alert dismissed' }),\n});\n\n/**\n * Alert component for displaying contextual feedback messages.\n *\n * Automatically assigns the appropriate ARIA role based on variant:\n * - `danger` / `warning` → `role=\"alert\"` (assertive announcement)\n * - `info` / `success` → `role=\"status\"` (polite announcement)\n *\n * ### Accessibility\n * - The dismiss button is keyboard-accessible via Tab, activated by Enter/Space (native `<button>`)\n * - When dismissed, a screen-reader announcement is made via an `aria-live=\"polite\"` region\n * - The icon slot is marked `aria-hidden=\"true\"` to prevent redundant announcements\n * - The `aria-label` on the dismiss button is configurable via {@link AF_ALERT_I18N} for i18n\n * - Supports `forced-colors` (Windows High Contrast) mode\n * - Uses CSS logical properties for RTL layout support\n *\n * @example\n * <af-alert variant=\"warning\" [dismissible]=\"true\" (dismissed)=\"onDismiss()\">\n * <span icon>⚠</span>\n * <span title>Action required</span>\n * Please review the pending changes before continuing.\n * <div actions>\n * <button class=\"ct-button ct-button--secondary ct-button--sm\">Review</button>\n * </div>\n * </af-alert>\n */\n@Component({\n selector: 'af-alert',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (visible()) {\n <div\n [class]=\"alertClasses()\"\n [attr.data-variant]=\"variant()\"\n [attr.role]=\"alertRole()\">\n <span class=\"ct-alert__icon\" aria-hidden=\"true\">\n <ng-content select=\"[icon]\" />\n </span>\n <div class=\"ct-alert__content\">\n <div class=\"ct-alert__title\">\n <ng-content select=\"[title]\" />\n </div>\n <div class=\"ct-alert__description\">\n <ng-content />\n </div>\n <div class=\"ct-alert__actions\">\n <ng-content select=\"[actions]\" />\n </div>\n </div>\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"af-alert__dismiss\"\n [attr.aria-label]=\"i18n.dismiss\"\n (click)=\"dismiss()\">\n <span class=\"ct-icon ct-icon--sm\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg></span>\n </button>\n }\n </div>\n }\n <span class=\"af-alert__sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ liveAnnouncement() }}\n </span>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n\n .ct-alert--dismissible {\n position: relative;\n padding-inline-end: 2.5rem;\n }\n\n .af-alert__dismiss {\n position: absolute;\n inset-block-start: 0.625rem;\n inset-inline-end: 0.625rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.5rem;\n height: 1.5rem;\n min-width: 24px;\n min-height: 24px;\n padding: 0;\n border: none;\n background: none;\n border-radius: var(--radius-sm, 0.25rem);\n color: var(--color-text-secondary);\n font-size: 1.25rem;\n line-height: 1;\n cursor: pointer;\n }\n\n .af-alert__dismiss:hover {\n color: var(--color-text-primary);\n }\n\n .af-alert__dismiss:focus-visible {\n outline: 2px solid var(--ct-alert-accent, var(--color-brand-primary));\n outline-offset: 2px;\n }\n\n @media (forced-colors: active) {\n .af-alert__dismiss {\n border: 1px solid ButtonText;\n }\n\n .af-alert__dismiss:focus-visible {\n outline-color: Highlight;\n }\n }\n\n .af-alert__sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n ],\n})\nexport class AfAlertComponent {\n protected readonly i18n = inject(AF_ALERT_I18N);\n\n /** Color variant determining the alert's visual style and ARIA role. */\n variant = input<AfAlertVariant>('info');\n\n /** Whether the alert can be dismissed by the user. */\n dismissible = input(false);\n\n /** Emits when the user dismisses the alert. */\n dismissed = output<void>();\n\n /** Controls alert visibility. */\n visible = signal(true);\n\n /** @internal Screen-reader announcement text. */\n liveAnnouncement = signal('');\n\n alertClasses = computed(() => {\n const classes = ['ct-alert'];\n if (this.dismissible()) {\n classes.push('ct-alert--dismissible');\n }\n return classes.join(' ');\n });\n\n /**\n * Maps variant to ARIA role:\n * - danger/warning → 'alert' (assertive, immediate announcement)\n * - info/success → 'status' (polite, non-intrusive announcement)\n */\n alertRole = computed(() => {\n const v = this.variant();\n return v === 'danger' || v === 'warning' ? 'alert' : 'status';\n });\n\n /** Hides the alert and emits the dismissed event. */\n dismiss(): void {\n this.visible.set(false);\n this.dismissed.emit();\n this.liveAnnouncement.set('');\n setTimeout(() => this.liveAnnouncement.set(this.i18n.dismissed));\n }\n}\n","/**\n * Test harness for AfAlertComponent.\n *\n * Provides a semantic API for interacting with the alert in tests,\n * abstracting DOM details behind readable method names.\n *\n * @example\n * const harness = new AfAlertHarness(fixture.nativeElement);\n * expect(harness.getVariant()).toBe('info');\n * expect(harness.getRole()).toBe('status');\n * harness.dismiss();\n */\nexport class AfAlertHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-alert');\n if (!el) {\n throw new Error(\n 'AfAlertHarness: af-alert element not found in container.',\n );\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Returns the inner `.ct-alert` wrapper element, or `null` if the alert is not visible. */\n getAlertElement(): HTMLElement | null {\n return this.hostEl.querySelector('.ct-alert');\n }\n\n /** Returns the `data-variant` attribute value. Throws if the alert is not visible. */\n getVariant(): string {\n const el = this.requireVisible();\n return el.getAttribute('data-variant') ?? '';\n }\n\n /** Returns the ARIA `role` attribute value. Throws if the alert is not visible. */\n getRole(): string {\n const el = this.requireVisible();\n return el.getAttribute('role') ?? '';\n }\n\n /** Returns the full trimmed text content of the alert. Throws if not visible. */\n getText(): string {\n const el = this.requireVisible();\n return el.textContent?.trim() ?? '';\n }\n\n /** Returns the trimmed text content of the title slot. Throws if not visible. */\n getTitle(): string {\n const el = this.requireVisible();\n const title = el.querySelector('.ct-alert__title');\n return title?.textContent?.trim() ?? '';\n }\n\n /** Returns whether the alert is currently visible in the DOM. */\n isVisible(): boolean {\n return this.getAlertElement() !== null;\n }\n\n /** Returns whether the alert has a dismiss button. Throws if not visible. */\n isDismissible(): boolean {\n const el = this.requireVisible();\n return el.querySelector('.af-alert__dismiss') !== null;\n }\n\n /** Clicks the dismiss button. Throws if the alert is not visible or not dismissible. */\n dismiss(): void {\n const btn = this.getDismissButton();\n if (!btn) {\n throw new Error(\n 'AfAlertHarness: dismiss button not found. Is the alert dismissible?',\n );\n }\n btn.click();\n }\n\n /** Returns the dismiss button element, or `null` if not present. */\n getDismissButton(): HTMLButtonElement | null {\n return (\n this.getAlertElement()?.querySelector<HTMLButtonElement>(\n '.af-alert__dismiss',\n ) ?? null\n );\n }\n\n /** Returns the `aria-live` region element for screen-reader announcements. */\n getLiveRegion(): HTMLElement | null {\n return this.hostEl.querySelector('[aria-live=\"polite\"]');\n }\n\n private requireVisible(): HTMLElement {\n const el = this.getAlertElement();\n if (!el) {\n throw new Error('AfAlertHarness: alert is not visible.');\n }\n return el;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable, OnDestroy } from '@angular/core';\n\n/**\n * Lightweight service that announces messages to screen readers\n * via an `aria-live` region. No `@angular/cdk` dependency required.\n *\n * @example\n * private announcer = inject(AriaLiveAnnouncer);\n * this.announcer.announce('Section expanded');\n */\n@Injectable({ providedIn: 'root' })\nexport class AriaLiveAnnouncer implements OnDestroy {\n private readonly document = inject(DOCUMENT);\n private liveEl: HTMLElement | null = null;\n private clearTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** Announce a message to screen readers. */\n announce(message: string, politeness: 'polite' | 'assertive' = 'polite'): void {\n const el = this.getOrCreateLiveElement();\n el.setAttribute('aria-live', politeness);\n\n // Clear then re-set so assistive tech registers the change.\n el.textContent = '';\n\n if (this.clearTimer) {\n clearTimeout(this.clearTimer);\n }\n\n // Small delay so the DOM mutation is picked up as a new announcement.\n setTimeout(() => {\n el.textContent = message;\n }, 50);\n\n // Auto-clear after 3 seconds to avoid stale text.\n this.clearTimer = setTimeout(() => {\n el.textContent = '';\n }, 3000);\n }\n\n ngOnDestroy(): void {\n if (this.clearTimer) {\n clearTimeout(this.clearTimer);\n }\n this.liveEl?.remove();\n this.liveEl = null;\n }\n\n private getOrCreateLiveElement(): HTMLElement {\n if (this.liveEl) return this.liveEl;\n\n const el = this.document.createElement('div');\n el.setAttribute('aria-live', 'polite');\n el.setAttribute('aria-atomic', 'true');\n el.classList.add('cdk-visually-hidden');\n\n // Visually hidden but accessible to screen readers.\n Object.assign(el.style, {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: '0',\n });\n\n this.document.body.appendChild(el);\n this.liveEl = el;\n return el;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Translatable strings used by the accordion component. */\nexport interface AfAccordionI18n {\n /** Announcement when a section is expanded. Use `{heading}` as placeholder. */\n expanded: string;\n /** Announcement when a section is collapsed. Use `{heading}` as placeholder. */\n collapsed: string;\n}\n\n/**\n * Injection token to override accordion screen-reader announcements.\n *\n * @example\n * providers: [{\n * provide: AF_ACCORDION_I18N,\n * useValue: { expanded: '{heading} ausgeklappt', collapsed: '{heading} eingeklappt' },\n * }]\n */\nexport const AF_ACCORDION_I18N = new InjectionToken<AfAccordionI18n>('AfAccordionI18n', {\n factory: () => ({\n expanded: '{heading} expanded',\n collapsed: '{heading} collapsed',\n }),\n});\n","import {\n Component,\n ChangeDetectionStrategy,\n booleanAttribute,\n input,\n model,\n computed,\n contentChildren,\n effect,\n ElementRef,\n viewChild,\n inject,\n forwardRef,\n} from '@angular/core';\nimport { AriaLiveAnnouncer } from '../../utils/aria-live-announcer';\nimport { AF_ACCORDION_I18N } from './accordion.i18n';\n\nlet nextId = 0;\n\n/**\n * Individual accordion item used within af-accordion.\n *\n * @example\n * <af-accordion-item heading=\"Section Title\">\n * <p>Content goes here</p>\n * </af-accordion-item>\n */\n@Component({\n selector: 'af-accordion-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <details\n #details\n class=\"ct-accordion__item\"\n [open]=\"expanded()\"\n (toggle)=\"onToggle($event)\">\n <summary\n class=\"ct-accordion__trigger\"\n [attr.id]=\"triggerId()\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"panelId()\"\n [attr.aria-disabled]=\"disabled() || null\"\n (click)=\"onClick($event)\">\n <span class=\"ct-accordion__heading\">{{ heading() }}</span>\n <svg\n class=\"ct-accordion__icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </summary>\n <div\n class=\"ct-accordion__content\"\n role=\"region\"\n [attr.id]=\"panelId()\"\n [attr.aria-labelledby]=\"triggerId()\">\n <ng-content></ng-content>\n </div>\n </details>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfAccordionItemComponent {\n private itemId = nextId++;\n private accordion = inject(forwardRef(() => AfAccordionComponent), { optional: true });\n private announcer = inject(AriaLiveAnnouncer);\n private i18n = inject(AF_ACCORDION_I18N);\n\n /** Heading text displayed in the accordion trigger. */\n heading = input.required<string>();\n\n /** Whether this item is expanded (supports two-way binding). */\n expanded = model(false);\n\n /** Whether this item is disabled. */\n disabled = input(false, { transform: booleanAttribute });\n\n detailsRef = viewChild.required<ElementRef<HTMLDetailsElement>>('details');\n\n triggerId = computed(() => `af-accordion-trigger-${this.itemId}`);\n panelId = computed(() => `af-accordion-panel-${this.itemId}`);\n\n /** Sync signal when the native details state diverges (e.g. programmatic open). */\n onToggle(event: Event): void {\n const details = event.target as HTMLDetailsElement;\n if (details.open !== this.expanded()) {\n this.expanded.set(details.open);\n if (details.open) {\n this.accordion?.onItemExpanded(this);\n }\n }\n }\n\n /**\n * Prevent native details toggle and manage state via signals\n * so the expanded signal is always the source of truth.\n */\n onClick(event: MouseEvent): void {\n event.preventDefault();\n if (this.disabled()) return;\n const willExpand = !this.expanded();\n this.expanded.set(willExpand);\n if (willExpand) {\n this.accordion?.onItemExpanded(this);\n }\n const template = willExpand ? this.i18n.expanded : this.i18n.collapsed;\n this.announcer.announce(template.replace('{heading}', this.heading()));\n }\n\n /** Programmatically collapse this item. */\n collapse(): void {\n this.expanded.set(false);\n }\n\n /** Focus the trigger (summary) element. */\n focusTrigger(): void {\n this.detailsRef().nativeElement.querySelector('summary')?.focus();\n }\n}\n\n/**\n * Accordion container that manages expand/collapse behaviour of child items.\n *\n * @example\n * <af-accordion>\n * <af-accordion-item heading=\"Section 1\">Content 1</af-accordion-item>\n * <af-accordion-item heading=\"Section 2\">Content 2</af-accordion-item>\n * </af-accordion>\n *\n * @example Single-expand mode\n * <af-accordion [multi]=\"false\">\n * <af-accordion-item heading=\"Only one open\">Content</af-accordion-item>\n * </af-accordion>\n */\n@Component({\n selector: 'af-accordion',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(keydown)': 'handleKeydown($event)',\n },\n template: `\n <div [class]=\"accordionClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfAccordionComponent {\n /** Allow multiple items to be open at the same time (default: true). */\n multi = input(true, { transform: booleanAttribute });\n\n /** Use the bordered variant. */\n bordered = input(false, { transform: booleanAttribute });\n\n items = contentChildren(AfAccordionItemComponent);\n\n accordionClasses = computed(() => {\n const classes = ['ct-accordion'];\n if (this.bordered()) {\n classes.push('ct-accordion--bordered');\n }\n return classes.join(' ');\n });\n\n /**\n * Enforce single-expand constraint when `multi` is false\n * and multiple items are initially expanded.\n */\n private enforceConstraint = effect(() => {\n if (this.multi()) return;\n const expanded = this.items().filter((i) => i.expanded());\n if (expanded.length > 1) {\n for (let i = 1; i < expanded.length; i++) {\n expanded[i].collapse();\n }\n }\n });\n\n /** Called by child items when they expand. */\n onItemExpanded(expandedItem: AfAccordionItemComponent): void {\n if (this.multi()) return;\n for (const item of this.items()) {\n if (item !== expandedItem && item.expanded()) {\n item.collapse();\n }\n }\n }\n\n handleKeydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n if (target.tagName !== 'SUMMARY') return;\n\n const enabledItems = this.items().filter((i) => !i.disabled());\n if (enabledItems.length === 0) return;\n\n const currentIndex = enabledItems.findIndex(\n (item) => item.detailsRef().nativeElement.querySelector('summary') === target,\n );\n if (currentIndex === -1) return;\n\n const last = enabledItems.length - 1;\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n enabledItems[(currentIndex + 1) % enabledItems.length].focusTrigger();\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n enabledItems[(currentIndex - 1 + enabledItems.length) % enabledItems.length].focusTrigger();\n break;\n }\n case 'Home': {\n event.preventDefault();\n enabledItems[0].focusTrigger();\n break;\n }\n case 'End': {\n event.preventDefault();\n enabledItems[last].focusTrigger();\n break;\n }\n }\n }\n}\n","/**\n * Test harness for AfAccordionItemComponent.\n *\n * Provides a semantic API for interacting with a single accordion item,\n * abstracting DOM details behind readable method names.\n */\nexport class AfAccordionItemHarness {\n constructor(private readonly hostEl: HTMLElement) {}\n\n /** Returns the heading text. */\n getHeading(): string {\n const heading = this.hostEl.querySelector('.ct-accordion__heading');\n return heading?.textContent?.trim() ?? '';\n }\n\n /** Returns whether the item is expanded. */\n isExpanded(): boolean {\n return this.getTriggerElement().getAttribute('aria-expanded') === 'true';\n }\n\n /** Returns whether the item is disabled. */\n isDisabled(): boolean {\n return this.getTriggerElement().getAttribute('aria-disabled') === 'true';\n }\n\n /** Clicks the trigger to toggle the item. */\n toggle(): void {\n this.getTriggerElement().click();\n }\n\n /** Returns the trigger (summary) element. */\n getTriggerElement(): HTMLElement {\n const summary = this.hostEl.querySelector('summary');\n if (!summary) {\n throw new Error('AfAccordionItemHarness: <summary> element not found.');\n }\n return summary;\n }\n\n /** Returns the content panel element. */\n getContentElement(): HTMLElement {\n const panel = this.hostEl.querySelector('[role=\"region\"]');\n if (!panel) {\n throw new Error('AfAccordionItemHarness: content region not found.');\n }\n return panel as HTMLElement;\n }\n\n /** Returns the `aria-controls` value of the trigger. */\n getAriaControls(): string | null {\n return this.getTriggerElement().getAttribute('aria-controls');\n }\n\n /** Returns the `aria-expanded` value of the trigger. */\n getAriaExpanded(): string | null {\n return this.getTriggerElement().getAttribute('aria-expanded');\n }\n}\n\n/**\n * Test harness for AfAccordionComponent.\n *\n * @example\n * const harness = new AfAccordionHarness(fixture.nativeElement);\n * expect(harness.getItems()).toHaveLength(3);\n * harness.getItem(0).toggle();\n */\nexport class AfAccordionHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-accordion');\n if (!el) {\n throw new Error('AfAccordionHarness: af-accordion element not found in container.');\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Returns harnesses for all accordion items. */\n getItems(): AfAccordionItemHarness[] {\n const items = Array.from(this.hostEl.querySelectorAll('af-accordion-item'));\n return items.map((el) => new AfAccordionItemHarness(el as HTMLElement));\n }\n\n /** Returns the harness for the accordion item at the given index. */\n getItem(index: number): AfAccordionItemHarness {\n const items = this.getItems();\n if (index < 0 || index >= items.length) {\n throw new Error(\n `AfAccordionHarness: index ${index} out of range (${items.length} items).`,\n );\n }\n return items[index];\n }\n\n /** Returns whether the bordered variant is applied. */\n isBordered(): boolean {\n const wrapper = this.hostEl.querySelector('.ct-accordion');\n return wrapper?.classList.contains('ct-accordion--bordered') ?? false;\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n inject,\n ElementRef,\n DOCUMENT,\n} from '@angular/core';\n\n/**\n * Skip-link component for keyboard-only navigation bypass.\n *\n * Renders an anchor that is visually hidden off-screen and slides into view\n * when focused. On activation it moves focus to the target element, allowing\n * keyboard users to skip repetitive navigation blocks.\n *\n * Must be placed as the first focusable element in the document.\n *\n * @example\n * <af-skip-link target=\"main-content\" />\n * <nav>…</nav>\n * <main id=\"main-content\" tabindex=\"-1\">…</main>\n */\n@Component({\n selector: 'af-skip-link',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <a\n class=\"ct-skip-link\"\n [attr.href]=\"'#' + target()\"\n (click)=\"focusTarget($event)\"\n >\n {{ label() }}\n </a>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfSkipLinkComponent {\n /** ID of the element to skip to (without the leading `#`). */\n target = input.required<string>();\n\n /** Visible label text shown when the link receives focus. */\n label = input('Skip to main content');\n\n private readonly document = inject(DOCUMENT);\n\n /**\n * Moves focus to the target element so keyboard navigation\n * continues from there instead of the top of the page.\n */\n focusTarget(event: Event): void {\n event.preventDefault();\n\n const el = this.document.getElementById(this.target());\n if (!el) {\n return;\n }\n\n if (!el.hasAttribute('tabindex')) {\n el.setAttribute('tabindex', '-1');\n }\n el.focus();\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n booleanAttribute,\n input,\n model,\n computed,\n} from '@angular/core';\nimport { AfSkipLinkComponent } from '../skip-link';\n\nexport type AfShellSidebarState = 'expanded' | 'collapsed' | 'hidden';\nexport type AfShellPanelState = 'open' | 'closed';\n\n/**\n * Page header rendered inside the main content area of an App Shell.\n *\n * Displays breadcrumbs, page title, and actions in a flex row.\n * Place inside `<af-app-shell>` without any slot attribute so it\n * projects into the main area.\n *\n * @example\n * <af-app-shell>\n * <af-app-shell-page-header sticky>\n * <nav aria-label=\"Breadcrumb\">Home / Dashboard</nav>\n * <h1>Dashboard</h1>\n * <button class=\"ct-button\">New Item</button>\n * </af-app-shell-page-header>\n * <p>Main content…</p>\n * </af-app-shell>\n */\n@Component({\n selector: 'af-app-shell-page-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [class]=\"classes()\">\n <ng-content />\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfAppShellPageHeaderComponent {\n /** Pin the page header to the top of the scrollable main area. */\n sticky = input(false, { transform: booleanAttribute });\n\n classes = computed(() => {\n const c = ['ct-app-shell__page-header'];\n if (this.sticky()) {\n c.push('ct-app-shell__page-header--sticky');\n }\n return c.join(' ');\n });\n}\n\n/**\n * Classic CSS-Grid App Shell that orchestrates header, sidebar,\n * main content, optional panel, and footer.\n *\n * Wraps the `ct-app-shell` CSS component from the Construct Design System.\n * Sidebar and panel states are two-way bindable via `model()` signals.\n *\n * Content projection slots:\n * - `[header]` — Navbar / top bar\n * - `[sidebar]` — Navigation sidebar\n * - `[panel]` — Right-side contextual panel\n * - `[footer]` — Footer area\n * - `[bottomNav]` — Mobile bottom navigation (requires `bottomNav` modifier)\n * - *(default)* — Main content (including `<af-app-shell-page-header>`)\n *\n * @example\n * <af-app-shell [(sidebarState)]=\"sidebarState\" [(panelState)]=\"panelState\" sidebarFullHeight>\n * <af-navbar header ariaLabel=\"Main\">…</af-navbar>\n * <af-sidebar sidebar ariaLabel=\"Navigation\">…</af-sidebar>\n * <af-app-shell-page-header sticky>\n * <h1>Dashboard</h1>\n * </af-app-shell-page-header>\n * <p>Content goes here</p>\n * <div panel>Inspector</div>\n * <footer footer>© 2026</footer>\n * </af-app-shell>\n */\n@Component({\n selector: 'af-app-shell',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AfSkipLinkComponent],\n template: `\n <div\n [class]=\"shellClasses()\"\n [attr.data-sidebar-state]=\"sidebarState()\"\n [attr.data-panel-state]=\"panelState()\">\n <af-skip-link [target]=\"mainId()\" [label]=\"skipLinkLabel()\" />\n\n <header class=\"ct-app-shell__header\">\n <ng-content select=\"[header]\" />\n </header>\n\n <aside class=\"ct-app-shell__sidebar\" [attr.aria-label]=\"sidebarLabel()\">\n <ng-content select=\"[sidebar]\" />\n </aside>\n\n <main class=\"ct-app-shell__main\" [id]=\"mainId()\" tabindex=\"0\">\n <ng-content />\n </main>\n\n <aside class=\"ct-app-shell__panel\" [attr.aria-label]=\"panelLabel()\">\n <ng-content select=\"[panel]\" />\n </aside>\n\n <footer class=\"ct-app-shell__footer\">\n <ng-content select=\"[footer]\" />\n </footer>\n\n <div class=\"ct-app-shell__bottom-nav\">\n <ng-content select=\"[bottomNav]\" />\n </div>\n\n <div\n class=\"ct-app-shell__backdrop\"\n (click)=\"onBackdropClick()\"\n aria-hidden=\"true\"></div>\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfAppShellComponent {\n /** Current sidebar state — two-way bindable. */\n sidebarState = model<AfShellSidebarState>('expanded');\n\n /** Current panel state — two-way bindable. */\n panelState = model<AfShellPanelState>('closed');\n\n /** Remove the sidebar column entirely. */\n noSidebar = input(false, { transform: booleanAttribute });\n\n /** Place the sidebar on the right side. */\n sidebarRight = input(false, { transform: booleanAttribute });\n\n /** Sidebar spans the full viewport height (header sits beside it). */\n sidebarFullHeight = input(false, { transform: booleanAttribute });\n\n /** Stick the footer to the bottom with a top border. */\n footerSticky = input(false, { transform: booleanAttribute });\n\n /** Enable bottom navigation on mobile (hides sidebar and footer). */\n bottomNav = input(false, { transform: booleanAttribute });\n\n /** Accessible label for the sidebar landmark. */\n sidebarLabel = input('Site navigation');\n\n /** Accessible label for the panel landmark. */\n panelLabel = input('Details');\n\n /** ID of the main content element (used by skip-link). */\n mainId = input('main-content');\n\n /** Visible text of the skip-link. */\n skipLinkLabel = input('Skip to content');\n\n shellClasses = computed(() => {\n const classes = ['ct-app-shell'];\n\n if (this.noSidebar()) {\n classes.push('ct-app-shell--no-sidebar');\n }\n if (this.sidebarRight()) {\n classes.push('ct-app-shell--sidebar-right');\n }\n if (this.sidebarFullHeight()) {\n classes.push('ct-app-shell--sidebar-full-height');\n }\n if (this.footerSticky()) {\n classes.push('ct-app-shell--footer-sticky');\n }\n if (this.bottomNav()) {\n classes.push('ct-app-shell--bottom-nav');\n }\n\n return classes.join(' ');\n });\n\n /** Dismiss the mobile sidebar overlay. */\n onBackdropClick(): void {\n this.sidebarState.set('hidden');\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n booleanAttribute,\n input,\n model,\n computed,\n} from '@angular/core';\nimport { AfSkipLinkComponent } from '../skip-link';\nimport { AfShellSidebarState, AfShellPanelState } from '../app-shell';\n\n/**\n * Toolbar rendered inside the main content area of an App Shell V2.\n *\n * Replaces the classic full-width page header with a toolbar row\n * for breadcrumbs, page title, and actions. Place inside\n * `<af-app-shell-v2>` without any slot attribute so it projects\n * into the main area.\n *\n * @example\n * <af-app-shell-v2>\n * <af-app-shell-v2-toolbar sticky>\n * <nav aria-label=\"Breadcrumb\">Home / Dashboard</nav>\n * <div>\n * <button class=\"ct-button\">Export</button>\n * </div>\n * </af-app-shell-v2-toolbar>\n * <p>Main content…</p>\n * </af-app-shell-v2>\n */\n@Component({\n selector: 'af-app-shell-v2-toolbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [class]=\"classes()\">\n <ng-content />\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfAppShellV2ToolbarComponent {\n /** Pin the toolbar to the top of the scrollable main area. */\n sticky = input(false, { transform: booleanAttribute });\n\n classes = computed(() => {\n const c = ['ct-app-shell-v2__toolbar'];\n if (this.sticky()) {\n c.push('ct-app-shell-v2__toolbar--sticky');\n }\n return c.join(' ');\n });\n}\n\n/**\n * Floating-canvas App Shell with elevated surfaces, rounded corners,\n * and optional glass/branded modifiers.\n *\n * Wraps the `ct-app-shell-v2` CSS component from the Construct Design System.\n * Sidebar and panel states are two-way bindable via `model()` signals.\n *\n * Content projection slots:\n * - `[header]` — Optional floating header bar (requires `withHeader` input)\n * - `[sidebar]` — Floating sidebar surface\n * - `[panel]` — Right-side contextual panel (inside body flex container)\n * - `[footer]` — Footer inside the main area\n * - *(default)* — Main content (including `<af-app-shell-v2-toolbar>`)\n *\n * @example\n * <af-app-shell-v2\n * [(sidebarState)]=\"sidebarState\"\n * [(panelState)]=\"panelState\"\n * withHeader\n * sidebarBranded\n * glass>\n * <af-navbar header ariaLabel=\"Main\">…</af-navbar>\n * <af-sidebar sidebar ariaLabel=\"Navigation\">…</af-sidebar>\n * <af-app-shell-v2-toolbar sticky>\n * <h1>Dashboard</h1>\n * </af-app-shell-v2-toolbar>\n * <p>Content goes here</p>\n * <div panel>Inspector</div>\n * <footer footer>© 2026</footer>\n * </af-app-shell-v2>\n */\n@Component({\n selector: 'af-app-shell-v2',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AfSkipLinkComponent],\n template: `\n <div\n [class]=\"shellClasses()\"\n [attr.data-sidebar-state]=\"sidebarState()\"\n [attr.data-panel-state]=\"panelState()\">\n <af-skip-link [target]=\"mainId()\" [label]=\"skipLinkLabel()\" />\n\n @if (withHeader()) {\n <header class=\"ct-app-shell-v2__header\">\n <ng-content select=\"[header]\" />\n </header>\n }\n\n <aside class=\"ct-app-shell-v2__sidebar\" [attr.aria-label]=\"sidebarLabel()\">\n <ng-content select=\"[sidebar]\" />\n </aside>\n\n <div class=\"ct-app-shell-v2__body\">\n <main class=\"ct-app-shell-v2__main\" [id]=\"mainId()\" tabindex=\"0\">\n <ng-content />\n <div class=\"ct-app-shell-v2__footer\">\n <ng-content select=\"[footer]\" />\n </div>\n </main>\n\n <aside class=\"ct-app-shell-v2__panel\" [attr.aria-label]=\"panelLabel()\">\n <ng-content select=\"[panel]\" />\n </aside>\n </div>\n\n <div\n class=\"ct-app-shell-v2__backdrop\"\n (click)=\"onBackdropClick()\"\n aria-hidden=\"true\"></div>\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfAppShellV2Component {\n /** Current sidebar state — two-way bindable. */\n sidebarState = model<AfShellSidebarState>('expanded');\n\n /** Current panel state — two-way bindable. */\n panelState = model<AfShellPanelState>('closed');\n\n /** Remove the sidebar entirely. */\n noSidebar = input(false, { transform: booleanAttribute });\n\n /** Place the sidebar on the right side. */\n sidebarRight = input(false, { transform: booleanAttribute });\n\n /** Sidebar spans the full viewport height (header sits beside it). */\n sidebarFullHeight = input(false, { transform: booleanAttribute });\n\n /** Show the optional floating header bar. */\n withHeader = input(false, { transform: booleanAttribute });\n\n /** Dark-branded sidebar (Slack / Linear / Discord aesthetic). */\n sidebarBranded = input(false, { transform: booleanAttribute });\n\n /** Frosted glass morphism effect on all floating surfaces. */\n glass = input(false, { transform: booleanAttribute });\n\n /** Accessible label for the sidebar landmark. */\n sidebarLabel = input('Site navigation');\n\n /** Accessible label for the panel landmark. */\n panelLabel = input('Details');\n\n /** ID of the main content element (used by skip-link). */\n mainId = input('main-content');\n\n /** Visible text of the skip-link. */\n skipLinkLabel = input('Skip to content');\n\n shellClasses = computed(() => {\n const classes = ['ct-app-shell-v2'];\n\n if (this.noSidebar()) {\n classes.push('ct-app-shell-v2--no-sidebar');\n }\n if (this.sidebarRight()) {\n classes.push('ct-app-shell-v2--sidebar-right');\n }\n if (this.sidebarFullHeight()) {\n classes.push('ct-app-shell-v2--sidebar-full-height');\n }\n if (this.withHeader()) {\n classes.push('ct-app-shell-v2--with-header');\n }\n if (this.sidebarBranded()) {\n classes.push('ct-app-shell-v2--sidebar-branded');\n }\n if (this.glass()) {\n classes.push('ct-app-shell-v2--glass');\n }\n\n return classes.join(' ');\n });\n\n /** Dismiss the mobile sidebar overlay. */\n onBackdropClick(): void {\n this.sidebarState.set('hidden');\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n signal,\n computed,\n} from '@angular/core';\n\nexport type AfAvatarSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type AfAvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\n/**\n * Number of distinct colors in the seeded avatar palette. Must match the\n * `[data-seed-color=\"N\"]` selectors shipped by `@neuravision/construct`\n * (see `components/avatar.css`). Bump together when Construct adds slots.\n */\nexport const AVATAR_SEED_PALETTE_SIZE = 8;\n\n/**\n * Avatar component displaying a user image with fallback to initials.\n *\n * When `src` is provided the component renders an `<img>`. If the image\n * fails to load or no `src` is given, initials derived from `name` are\n * shown instead.\n *\n * Set `colorSeed` to give each user a stable, deterministic background\n * color picked from the Construct DS palette — useful in lists where the\n * eye should recognize repeat individuals at a glance. The seed is hashed\n * locally and bound to `data-seed-color`; an empty seed leaves the\n * attribute off and the avatar keeps the default background.\n *\n * @example\n * <af-avatar src=\"/photo.jpg\" name=\"Jane Doe\" alt=\"Jane Doe\" size=\"lg\" />\n * <af-avatar name=\"John Smith\" status=\"online\" />\n * <af-avatar name=\"Jane Doe\" colorSeed=\"user-uuid-7b3e2a4d\" />\n */\n@Component({\n selector: 'af-avatar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span\n [class]=\"avatarClasses()\"\n role=\"img\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.data-seed-color]=\"seedColorIndex()\">\n @if (showImage()) {\n <img\n class=\"ct-avatar__image\"\n [src]=\"src()\"\n [alt]=\"alt() || name()\"\n (error)=\"onImageError()\" />\n } @else {\n <span class=\"ct-avatar__initials\" aria-hidden=\"true\">{{ initials() }}</span>\n }\n @if (status()) {\n <span\n class=\"ct-avatar__status\"\n [attr.data-status]=\"status()\"\n [attr.aria-label]=\"status() + ' status'\"\n role=\"img\">\n </span>\n }\n </span>\n `,\n styles: [\n `\n :host {\n display: inline-block;\n }\n `,\n ],\n})\nexport class AfAvatarComponent {\n /** Image URL. Falls back to initials when missing or on load error. */\n src = input('');\n\n /** Full name used to compute initials and as default alt text. */\n name = input('');\n\n /** Size variant. */\n size = input<AfAvatarSize>('md');\n\n /** Alt text for the avatar image. Defaults to `name` if not set. */\n alt = input('');\n\n /** Online status indicator. */\n status = input<AfAvatarStatus | undefined>(undefined);\n\n /**\n * Stable identifier (e.g. userUUID, email, username) hashed into a\n * deterministic palette index. The same seed always produces the same\n * color. Leave empty to keep the default avatar background.\n */\n colorSeed = input('');\n\n /** Tracks whether the image failed to load. */\n imageError = signal(false);\n\n /** Whether to render the `<img>` element. */\n showImage = computed(() => !!this.src() && !this.imageError());\n\n /** Initials derived from the first letter of each word in `name`. */\n initials = computed(() => {\n const parts = this.name().trim().split(/\\s+/);\n if (parts.length === 0 || parts[0] === '') return '';\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase();\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();\n });\n\n /** Accessible label for the avatar. */\n ariaLabel = computed(() => this.alt() || this.name() || 'Avatar');\n\n /**\n * Palette index in `[1, AVATAR_SEED_PALETTE_SIZE]` derived from `colorSeed`,\n * or `null` when no seed is set. Returning `null` causes Angular to omit\n * the `data-seed-color` attribute, preserving the unseeded default.\n */\n seedColorIndex = computed<number | null>(() => {\n const seed = this.colorSeed();\n if (!seed) return null;\n // Construct's selectors are 1-indexed (data-seed-color=\"1\"..\"8\")\n return (this.hashSeed(seed) % AVATAR_SEED_PALETTE_SIZE) + 1;\n });\n\n avatarClasses = computed(() => {\n const classes = ['ct-avatar'];\n if (this.size() !== 'md') {\n classes.push(`ct-avatar--${this.size()}`);\n }\n return classes.join(' ');\n });\n\n /** Handles image load failure by switching to initials fallback. */\n onImageError(): void {\n this.imageError.set(true);\n }\n\n /**\n * Dependency-free 32-bit string hash (djb2-style). Pure and stable across\n * runs and environments — same input always yields the same non-negative\n * integer.\n */\n private hashSeed(seed: string): number {\n let hash = 0;\n for (let i = 0; i < seed.length; i++) {\n hash = (hash << 5) - hash + seed.charCodeAt(i);\n hash |= 0; // force 32-bit int\n }\n return Math.abs(hash);\n }\n}\n","import { Component, ChangeDetectionStrategy, booleanAttribute, input, output, computed, isDevMode, effect } from '@angular/core';\n\nexport type AfButtonVariant = 'primary' | 'secondary' | 'ghost' | 'outline' | 'danger' | 'accent' | 'link';\nexport type AfButtonSize = 'sm' | 'md' | 'lg';\nexport type AfButtonType = 'button' | 'submit' | 'reset';\n\n/**\n * Button component from the Construct Design System.\n *\n * Wraps a native `<button>` element with design system tokens and\n * variant/size modifiers.\n *\n * @example Basic usage\n * <af-button variant=\"primary\" (clicked)=\"save()\">Save</af-button>\n *\n * @example Variants\n * <af-button variant=\"secondary\">Secondary</af-button>\n * <af-button variant=\"ghost\">Ghost</af-button>\n * <af-button variant=\"outline\">Outline</af-button>\n * <af-button variant=\"danger\">Danger</af-button>\n * <af-button variant=\"accent\">Accent</af-button>\n * <af-button variant=\"link\">Link</af-button>\n *\n * @example Icon-only button (ariaLabel required)\n * <af-button variant=\"ghost\" size=\"sm\" iconOnly ariaLabel=\"Delete item\">\n * <af-icon name=\"delete\" />\n * </af-button>\n *\n * @example Disabled button\n * <af-button [disabled]=\"true\">Cannot click</af-button>\n *\n * @accessibility\n * - Uses native `<button>` element — keyboard (Enter/Space) and screen reader support built-in.\n * - Disabled state uses the native `disabled` attribute.\n * - Icon-only buttons must provide `ariaLabel` for screen reader users.\n * A dev-mode warning is emitted if `ariaLabel` is missing on an icon-only button.\n * - Focus indicator: 2px outline via `:focus-visible` (design system CSS).\n * - Reduced motion: `transform` animation disabled via `prefers-reduced-motion`.\n */\n@Component({\n selector: 'af-button',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n [type]=\"type()\"\n [disabled]=\"disabled()\"\n [class]=\"buttonClasses()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.title]=\"title() || null\"\n (click)=\"handleClick($event)\">\n <ng-content></ng-content>\n </button>\n `,\n styles: [`\n :host {\n display: inline-block;\n }\n `]\n})\nexport class AfButtonComponent {\n /** Button variant/style */\n variant = input<AfButtonVariant>('primary');\n\n /** Button size */\n size = input<AfButtonSize>('md');\n\n /** Button type attribute */\n type = input<AfButtonType>('button');\n\n /** Whether button is disabled */\n disabled = input(false, { transform: booleanAttribute });\n\n /** Whether this is an icon-only button (no visible text) */\n iconOnly = input(false, { transform: booleanAttribute });\n\n /** Accessible label for icon-only buttons */\n ariaLabel = input('');\n\n /** Tooltip text shown on hover */\n title = input('');\n\n /** Click event emitter */\n clicked = output<MouseEvent>();\n\n buttonClasses = computed(() => {\n const classes = ['ct-button'];\n\n if (this.variant() !== 'primary') {\n classes.push(`ct-button--${this.variant()}`);\n }\n\n if (this.size() !== 'md') {\n classes.push(`ct-button--${this.size()}`);\n }\n\n if (this.iconOnly()) {\n classes.push('ct-button--icon');\n }\n\n return classes.join(' ');\n });\n\n private readonly iconOnlyWarning = effect(() => {\n if (isDevMode() && this.iconOnly() && !this.ariaLabel()) {\n console.warn('af-button: iconOnly buttons require an ariaLabel for screen readers.');\n }\n });\n\n handleClick(event: MouseEvent): void {\n if (!this.disabled()) {\n this.clicked.emit(event);\n }\n }\n}\n","/**\n * Test harness for AfButtonComponent.\n *\n * Provides a semantic API for interacting with the button in tests,\n * abstracting DOM details behind readable method names.\n *\n * @example\n * const harness = new AfButtonHarness(fixture.nativeElement);\n * expect(harness.getText()).toBe('Save');\n * expect(harness.isDisabled()).toBe(false);\n * harness.click();\n */\nexport class AfButtonHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-button');\n if (!el) {\n throw new Error('AfButtonHarness: af-button element not found in container.');\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Returns the inner native `<button>` element. */\n getButtonElement(): HTMLButtonElement {\n const btn = this.hostEl.querySelector('button');\n if (!btn) {\n throw new Error('AfButtonHarness: inner <button> element not found.');\n }\n return btn;\n }\n\n /** Returns the trimmed text content of the button. */\n getText(): string {\n return this.getButtonElement().textContent?.trim() ?? '';\n }\n\n /** Returns whether the button is disabled. */\n isDisabled(): boolean {\n return this.getButtonElement().disabled;\n }\n\n /** Clicks the inner button element. */\n click(): void {\n this.getButtonElement().click();\n }\n\n /** Returns the `aria-label` attribute value, or `null` if absent. */\n getAriaLabel(): string | null {\n return this.getButtonElement().getAttribute('aria-label');\n }\n\n /** Returns the `title` attribute value, or `null` if absent. */\n getTitle(): string | null {\n return this.getButtonElement().getAttribute('title');\n }\n\n /** Returns the `type` attribute of the button. */\n getType(): string {\n return this.getButtonElement().type;\n }\n\n /** Returns the full `class` attribute string of the inner button. */\n getClasses(): string {\n return this.getButtonElement().className;\n }\n\n /** Returns whether the inner button has the given CSS class. */\n hasClass(className: string): boolean {\n return this.getButtonElement().classList.contains(className);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Translatable strings used by the input component. */\nexport interface AfInputI18n {\n /** Screen-reader label for the required indicator. */\n required: string;\n}\n\n/**\n * Injection token to override input screen-reader announcements.\n *\n * @example\n * providers: [{\n * provide: AF_INPUT_I18N,\n * useValue: { required: 'Pflichtfeld' },\n * }]\n */\nexport const AF_INPUT_I18N = new InjectionToken<AfInputI18n>('AfInputI18n', {\n factory: () => ({\n required: 'required',\n }),\n});\n","import {\n Component,\n ChangeDetectionStrategy,\n computed,\n input,\n model,\n forwardRef,\n inject,\n booleanAttribute,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AF_INPUT_I18N } from './input.i18n';\n\nexport type AfInputType = 'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url';\n\n/**\n * Input field component with form control support.\n *\n * Wraps a native `<input>` element with label, hint, error, and icon slots.\n * Implements `ControlValueAccessor` for seamless `ngModel` and `formControl` integration.\n *\n * @example\n * <af-input\n * label=\"Email\"\n * type=\"email\"\n * placeholder=\"name@company.com\"\n * [(ngModel)]=\"email\"\n * hint=\"We will not share this.\"\n * />\n *\n * @example\n * <af-input\n * label=\"Name\"\n * [error]=\"nameError\"\n * required\n * />\n */\n@Component({\n selector: 'af-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfInputComponent),\n multi: true,\n },\n ],\n host: {\n style: 'display: block',\n },\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span [attr.aria-label]=\"i18n.required\"> *</span>\n }\n </label>\n }\n\n @if (iconPosition()) {\n <div class=\"ct-input-wrap\">\n @if (iconPosition() === 'left') {\n <span class=\"ct-input__icon\" aria-hidden=\"true\">\n <ng-content select=\"[icon]\" />\n </span>\n }\n <input\n [id]=\"inputId()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [class]=\"inputClasses()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n @if (iconPosition() === 'right') {\n <span class=\"ct-input__icon\" aria-hidden=\"true\">\n <ng-content select=\"[icon]\" />\n </span>\n }\n </div>\n } @else {\n <input\n [id]=\"inputId()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [class]=\"inputClasses()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n }\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId()\">\n {{ hint() }}\n </div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" role=\"alert\" [id]=\"errorId()\">\n {{ error() }}\n </div>\n }\n </div>\n `,\n})\nexport class AfInputComponent implements ControlValueAccessor {\n private static nextId = 0;\n\n readonly i18n = inject(AF_INPUT_I18N);\n\n /** Input label. */\n label = input('');\n\n /** Input type. */\n type = input<AfInputType>('text');\n\n /** Placeholder text. */\n placeholder = input('');\n\n /** Hint text shown below input. */\n hint = input('');\n\n /** Error message — shows error state and message. */\n error = input('');\n\n /** Whether input is required. */\n required = input(false, { transform: booleanAttribute });\n\n /** Whether input is disabled. */\n disabled = model(false);\n\n /** Icon position (if icon content is projected). */\n iconPosition = input<'left' | 'right' | null>(null);\n\n /** Unique input ID. */\n inputId = input(`af-input-${AfInputComponent.nextId++}`);\n\n /** @docs-private — internal form value managed by CVA. */\n readonly value = signal('');\n onChange: (value: string) => void = () => {};\n onTouched: () => void = () => {};\n\n /** Computed hint element ID. */\n hintId = computed(() => `${this.inputId()}-hint`);\n\n /** Computed error element ID. */\n errorId = computed(() => `${this.inputId()}-error`);\n\n /** Computed CSS classes for the inner input. */\n inputClasses = computed(() => {\n const classes = ['ct-input'];\n if (this.iconPosition()) {\n classes.push('ct-input--with-icon');\n }\n return classes.join(' ');\n });\n\n /** Computed `aria-describedby` value linking to hint or error. */\n ariaDescribedBy = computed(() => {\n if (this.error()) return this.errorId();\n if (this.hint()) return this.hintId();\n return null;\n });\n\n onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value.set(target.value);\n this.onChange(this.value());\n }\n\n /** @docs-private */\n writeValue(value: string): void {\n this.value.set(value || '');\n }\n\n /** @docs-private */\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n /** @docs-private */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @docs-private */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","/**\n * Test harness for AfInputComponent.\n *\n * Provides a semantic API for interacting with the input in tests,\n * abstracting DOM details behind readable method names.\n *\n * @example\n * const harness = new AfInputHarness(fixture.nativeElement);\n * expect(harness.getValue()).toBe('');\n * harness.setValue('hello');\n * expect(harness.getValue()).toBe('hello');\n */\nexport class AfInputHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-input');\n if (!el) {\n throw new Error('AfInputHarness: af-input element not found in container.');\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Returns the inner native `<input>` element. */\n getInputElement(): HTMLInputElement {\n const input = this.hostEl.querySelector('input');\n if (!input) {\n throw new Error('AfInputHarness: inner <input> element not found.');\n }\n return input;\n }\n\n /** Returns the current value of the input. */\n getValue(): string {\n return this.getInputElement().value;\n }\n\n /** Sets the input value and dispatches an `input` event. */\n setValue(value: string): void {\n const input = this.getInputElement();\n input.value = value;\n input.dispatchEvent(new Event('input', { bubbles: true }));\n }\n\n /** Returns the label text, or `null` if no label is rendered. */\n getLabel(): string | null {\n const label = this.hostEl.querySelector('.ct-field__label');\n return label?.textContent?.trim() ?? null;\n }\n\n /** Returns the hint text, or `null` if no hint is rendered. */\n getHint(): string | null {\n const hint = this.hostEl.querySelector('.ct-field__hint');\n return hint?.textContent?.trim() ?? null;\n }\n\n /** Returns the error text, or `null` if no error is rendered. */\n getError(): string | null {\n const error = this.hostEl.querySelector('.ct-field__error');\n return error?.textContent?.trim() ?? null;\n }\n\n /** Returns whether the input is disabled. */\n isDisabled(): boolean {\n return this.getInputElement().disabled;\n }\n\n /** Returns whether the input is required. */\n isRequired(): boolean {\n return this.getInputElement().required;\n }\n\n /** Returns whether `aria-invalid` is set to `\"true\"`. */\n isInvalid(): boolean {\n return this.getInputElement().getAttribute('aria-invalid') === 'true';\n }\n\n /** Returns the `type` attribute of the input. */\n getType(): string {\n return this.getInputElement().type;\n }\n\n /** Returns the `placeholder` attribute of the input. */\n getPlaceholder(): string {\n return this.getInputElement().placeholder;\n }\n\n /** Returns the `aria-describedby` attribute value, or `null` if absent. */\n getAriaDescribedBy(): string | null {\n return this.getInputElement().getAttribute('aria-describedby');\n }\n\n /** Focuses the input element. */\n focus(): void {\n this.getInputElement().focus();\n }\n\n /** Blurs the input element and dispatches a `blur` event. */\n blur(): void {\n this.getInputElement().dispatchEvent(new Event('blur', { bubbles: true }));\n }\n\n /** Returns the `id` attribute of the input. */\n getId(): string {\n return this.getInputElement().id;\n }\n\n /** Returns whether the field wrapper has the error modifier class. */\n hasFieldError(): boolean {\n return this.hostEl.querySelector('.ct-field--error') !== null;\n }\n\n /** Returns whether an icon wrapper is rendered. */\n hasIcon(): boolean {\n return this.hostEl.querySelector('.ct-input__icon') !== null;\n }\n\n /** Returns the full `class` attribute string of the inner input. */\n getClasses(): string {\n return this.getInputElement().className;\n }\n\n /** Returns whether the inner input has the given CSS class. */\n hasClass(className: string): boolean {\n return this.getInputElement().classList.contains(className);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Translatable strings used by the select component. */\nexport interface AfSelectI18n {\n /** Screen-reader label for the required asterisk. */\n required: string;\n /** Fallback `aria-label` when no `label` input is provided. */\n selectOption: string;\n /** Announcement when an option is selected. Use `{label}` as placeholder. */\n selected: string;\n}\n\n/**\n * Injection token to override select screen-reader announcements\n * and the fallback `aria-label`.\n *\n * @example\n * providers: [{\n * provide: AF_SELECT_I18N,\n * useValue: {\n * required: 'Pflichtfeld',\n * selectOption: 'Option auswählen',\n * selected: '{label} ausgewählt',\n * },\n * }]\n */\nexport const AF_SELECT_I18N = new InjectionToken<AfSelectI18n>('AfSelectI18n', {\n factory: () => ({\n required: 'required',\n selectOption: 'Select option',\n selected: '{label} selected',\n }),\n});\n","import {\n Component,\n ChangeDetectionStrategy,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AriaLiveAnnouncer } from '../../utils/aria-live-announcer';\nimport { AF_SELECT_I18N } from './select.i18n';\n\nexport interface AfSelectOption {\n value: unknown;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Native select dropdown component with form control support.\n * Wraps a native `<select>` element with design system styling,\n * accessible labelling, and Angular forms integration.\n *\n * For a custom dropdown with keyboard-navigated listbox, see `af-select-menu`.\n *\n * @example Basic usage with ngModel\n * <af-select\n * label=\"Role\"\n * [options]=\"roleOptions\"\n * [(ngModel)]=\"selectedRole\"\n * hint=\"Choose your primary role\"\n * />\n *\n * @example Reactive forms with error state\n * <af-select\n * label=\"Country\"\n * [options]=\"countries\"\n * [formControl]=\"countryControl\"\n * [error]=\"countryControl.hasError('required') ? 'Required field' : ''\"\n * />\n *\n * @accessibility\n * - Uses a native `<select>` element for built-in browser accessibility.\n * - `aria-invalid` is set when an error message is provided.\n * - `aria-describedby` links to hint or error text.\n * - Falls back to `aria-label` via {@link AF_SELECT_I18N} when no `label` input is given.\n * - Screen-reader announcements via {@link AriaLiveAnnouncer} on selection change.\n * - All user-facing strings are configurable via {@link AF_SELECT_I18N} for i18n.\n */\n@Component({\n selector: 'af-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfSelectComponent),\n multi: true,\n },\n ],\n host: {\n style: 'display: block',\n },\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [id]=\"labelId()\" [attr.for]=\"selectId()\">\n {{ label() }}\n @if (required()) {\n <span [attr.aria-label]=\"i18n.required\"> *</span>\n }\n </label>\n }\n\n <div class=\"ct-select-wrap\">\n <select\n [id]=\"selectId()\"\n [class]=\"selectClasses()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-label]=\"label() ? null : i18n.selectOption\"\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\n (change)=\"handleChange($event)\"\n (blur)=\"onTouched()\"\n >\n @if (placeholder()) {\n <option value=\"\" [disabled]=\"true\" [selected]=\"isPlaceholderSelected()\">\n {{ placeholder() }}\n </option>\n }\n @for (option of options(); track option.value) {\n <option\n [selected]=\"isOptionSelected(option)\"\n [disabled]=\"option.disabled || false\"\n >\n {{ option.label }}\n </option>\n }\n </select>\n </div>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId()\">\n {{ hint() }}\n </div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" role=\"alert\" [id]=\"errorId()\">\n {{ error() }}\n </div>\n }\n </div>\n `,\n})\nexport class AfSelectComponent implements ControlValueAccessor {\n private static nextId = 0;\n protected readonly i18n = inject(AF_SELECT_I18N);\n private readonly announcer = inject(AriaLiveAnnouncer);\n\n /** Label shown above the select. */\n label = input('');\n\n /** Placeholder option shown when no value is selected. */\n placeholder = input('');\n\n /** Available options. */\n options = input<AfSelectOption[]>([]);\n\n /** Hint text shown below the select. */\n hint = input('');\n\n /** Error message — shows error state when non-empty. */\n error = input('');\n\n /** Whether the field is required. */\n required = input(false);\n\n /** Whether the select is disabled. */\n disabled = model(false);\n\n /** Size variant. */\n size = input<'sm' | 'md' | 'lg'>('md');\n\n /** Value comparison function for object values. */\n compareWith = input<(a: unknown, b: unknown) => boolean>((a, b) => a === b);\n\n /** Unique select ID. */\n selectId = input(`af-select-${AfSelectComponent.nextId++}`);\n\n /** Emits when the user changes the selected value. */\n valueChange = output<unknown>();\n\n private readonly value = signal<unknown>(null);\n private onChange: (value: unknown) => void = () => {};\n onTouched: () => void = () => {};\n\n labelId = computed(() => `${this.selectId()}-label`);\n hintId = computed(() => `${this.selectId()}-hint`);\n errorId = computed(() => `${this.selectId()}-error`);\n\n selectClasses = computed(() => {\n const classes = ['ct-select'];\n const s = this.size();\n if (s === 'sm') classes.push('ct-select--sm');\n if (s === 'lg') classes.push('ct-select--lg');\n return classes.join(' ');\n });\n\n ariaDescribedBy = computed(() => {\n if (this.error()) return this.errorId();\n if (this.hint()) return this.hintId();\n return null;\n });\n\n isPlaceholderSelected = computed(() => {\n if (!this.placeholder()) return false;\n const v = this.value();\n if (v === null || v === undefined || v === '') return true;\n return !this.hasMatchingOption();\n });\n\n isOptionSelected(option: AfSelectOption): boolean {\n if (this.isPlaceholderSelected()) return false;\n return this.compareWith()(option.value, this.value());\n }\n\n handleChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const index = target.selectedIndex;\n const offset = this.placeholder() ? 1 : 0;\n\n if (this.placeholder() && index === 0) {\n this.value.set(null);\n this.onChange(null);\n this.valueChange.emit(null);\n return;\n }\n\n const option = this.options()[index - offset];\n const nextValue = option ? option.value : null;\n this.value.set(nextValue);\n this.onChange(nextValue);\n this.valueChange.emit(nextValue);\n\n if (option) {\n this.announcer.announce(this.i18n.selected.replace('{label}', option.label));\n }\n }\n\n /** @docs-private */\n writeValue(value: unknown): void {\n this.value.set(value ?? null);\n }\n\n /** @docs-private */\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n /** @docs-private */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @docs-private */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n private hasMatchingOption(): boolean {\n return this.options().some((option) => this.compareWith()(option.value, this.value()));\n }\n}\n","/**\n * Test harness for AfSelectComponent.\n *\n * Provides a semantic API for interacting with the native select in tests,\n * abstracting DOM details behind readable method names.\n *\n * @example\n * const harness = new AfSelectHarness(fixture.nativeElement);\n * expect(harness.isDisabled()).toBe(false);\n * harness.selectByIndex(1);\n * expect(harness.getValue()).toBe('Banana');\n */\nexport class AfSelectHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-select');\n if (!el) {\n throw new Error('AfSelectHarness: af-select element not found in container.');\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Returns the native `<select>` element. */\n getSelectElement(): HTMLSelectElement {\n const select = this.hostEl.querySelector('select');\n if (!select) {\n throw new Error('AfSelectHarness: <select> element not found.');\n }\n return select;\n }\n\n /** Returns the current display value of the select. */\n getValue(): string {\n const select = this.getSelectElement();\n return select.options[select.selectedIndex]?.text?.trim() ?? '';\n }\n\n /** Returns the current selected index. */\n getSelectedIndex(): number {\n return this.getSelectElement().selectedIndex;\n }\n\n /** Selects an option by index and dispatches a change event. */\n selectByIndex(index: number): void {\n const select = this.getSelectElement();\n select.selectedIndex = index;\n select.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n /** Returns the trimmed label text, or null if no label. */\n getLabel(): string | null {\n const label = this.hostEl.querySelector('.ct-field__label');\n return label?.textContent?.trim() ?? null;\n }\n\n /** Returns the trimmed hint text, or null if no hint. */\n getHint(): string | null {\n const hint = this.hostEl.querySelector('.ct-field__hint');\n return hint?.textContent?.trim() ?? null;\n }\n\n /** Returns the trimmed error text, or null if no error. */\n getError(): string | null {\n const error = this.hostEl.querySelector('.ct-field__error');\n return error?.textContent?.trim() ?? null;\n }\n\n /** Returns whether the select is disabled. */\n isDisabled(): boolean {\n return this.getSelectElement().disabled;\n }\n\n /** Returns whether the select is required. */\n isRequired(): boolean {\n return this.getSelectElement().required;\n }\n\n /** Returns whether `aria-invalid=\"true\"` is set. */\n isInvalid(): boolean {\n return this.getSelectElement().getAttribute('aria-invalid') === 'true';\n }\n\n /** Returns the `aria-describedby` attribute value. */\n getAriaDescribedBy(): string | null {\n return this.getSelectElement().getAttribute('aria-describedby');\n }\n\n /** Returns the `aria-label` attribute value. */\n getAriaLabel(): string | null {\n return this.getSelectElement().getAttribute('aria-label');\n }\n\n /** Returns all `<option>` elements. */\n getOptions(): HTMLOptionElement[] {\n return Array.from(this.getSelectElement().options);\n }\n\n /** Returns the number of options (including placeholder). */\n getOptionCount(): number {\n return this.getSelectElement().options.length;\n }\n\n /** Returns the trimmed text of the option at the given index. */\n getOptionText(index: number): string {\n const options = this.getOptions();\n if (index < 0 || index >= options.length) {\n throw new Error(`AfSelectHarness: option index ${index} out of bounds (${options.length} options).`);\n }\n return options[index].text.trim();\n }\n\n /** Returns whether the option at the given index is disabled. */\n isOptionDisabled(index: number): boolean {\n return this.getOptions()[index]?.disabled ?? false;\n }\n\n /** Returns whether the option at the given index is selected. */\n isOptionSelected(index: number): boolean {\n return this.getOptions()[index]?.selected ?? false;\n }\n\n /** Returns the select element's ID. */\n getId(): string {\n return this.getSelectElement().id;\n }\n\n /** Returns whether the field wrapper has the error class. */\n hasFieldError(): boolean {\n return this.hostEl.querySelector('.ct-field--error') !== null;\n }\n\n /** Returns whether the select has the given CSS class. */\n hasClass(className: string): boolean {\n return this.getSelectElement().classList.contains(className);\n }\n\n /** Returns whether the `.ct-select-wrap` wrapper exists. */\n hasSelectWrap(): boolean {\n return this.hostEl.querySelector('.ct-select-wrap') !== null;\n }\n\n /** Dispatches a blur event on the select. */\n blur(): void {\n this.getSelectElement().dispatchEvent(new Event('blur', { bubbles: true }));\n }\n}\n","import { Component, ChangeDetectionStrategy, computed, input, model, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Textarea component with form control support\n *\n * @example\n * <af-textarea\n * label=\"Notes\"\n * placeholder=\"Enter your notes...\"\n * [(ngModel)]=\"notes\"\n * [rows]=\"5\"\n * ></af-textarea>\n */\n@Component({\n selector: 'af-textarea',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfTextareaComponent),\n multi: true\n }\n ],\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [attr.for]=\"textareaId()\">\n {{ label() }}\n @if (required()) {\n <span aria-label=\"required\"> *</span>\n }\n </label>\n }\n\n <textarea\n [id]=\"textareaId()\"\n class=\"ct-textarea\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [rows]=\"rows()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"getAriaDescribedBy()\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n ></textarea>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId()\">\n {{ hint() }}\n </div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" [id]=\"errorId()\">\n {{ error() }}\n </div>\n }\n </div>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfTextareaComponent implements ControlValueAccessor {\n private static nextId = 0;\n\n /** Textarea label */\n label = input('');\n\n /** Placeholder text */\n placeholder = input('');\n\n /** Hint text shown below textarea */\n hint = input('');\n\n /** Error message */\n error = input('');\n\n /** Whether textarea is required */\n required = input(false);\n\n /** Whether textarea is disabled */\n disabled = model(false);\n\n /** Number of visible rows */\n rows = input(3);\n\n /** Unique textarea ID */\n textareaId = input(`af-textarea-${AfTextareaComponent.nextId++}`);\n\n value = '';\n onChange: (value: string) => void = () => {};\n onTouched: () => void = () => {};\n\n hintId = computed(() => `${this.textareaId()}-hint`);\n\n errorId = computed(() => `${this.textareaId()}-error`);\n\n getAriaDescribedBy(): string | null {\n if (this.error()) return this.errorId();\n if (this.hint()) return this.hintId();\n return null;\n }\n\n onInput(event: Event): void {\n const target = event.target as HTMLTextAreaElement;\n this.value = target.value;\n this.onChange(this.value);\n }\n\n /** ControlValueAccessor implementation */\n writeValue(value: string): void {\n this.value = value || '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","import { Component, ChangeDetectionStrategy, model, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Checkbox component with form control support\n *\n * Supports both ControlValueAccessor (reactive forms / ngModel) and\n * standalone usage via [(checked)] bindings (two-way via model).\n *\n * @example Reactive Forms\n * <af-checkbox formControlName=\"rememberMe\">Remember me</af-checkbox>\n *\n * @example Standalone with indeterminate (e.g. \"select all\" in tables)\n * <af-checkbox\n * [(checked)]=\"allSelected\"\n * [indeterminate]=\"hasPartialSelection()\"\n * (checkedChange)=\"onToggleAll($event)\">\n * </af-checkbox>\n */\n@Component({\n selector: 'af-checkbox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfCheckboxComponent),\n multi: true\n }\n ],\n template: `\n <label class=\"ct-check\">\n <input\n class=\"ct-check__input\"\n type=\"checkbox\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [indeterminate]=\"indeterminate()\"\n (change)=\"onChange($event)\"\n (blur)=\"onTouched()\"\n />\n <span class=\"ct-check__label\">\n <ng-content></ng-content>\n </span>\n </label>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfCheckboxComponent implements ControlValueAccessor {\n /** Whether checkbox is disabled */\n disabled = model(false);\n\n /** Whether checkbox shows indeterminate state (partial selection) */\n indeterminate = model(false);\n\n /** Checked state - supports two-way binding via [(checked)] */\n checked = model(false);\n\n private onChangeCallback: (value: boolean) => void = () => {};\n onTouched: () => void = () => {};\n\n onChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.checked.set(target.checked);\n this.indeterminate.set(false);\n this.onChangeCallback(target.checked);\n }\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n computed,\n contentChildren,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n// ── Radio Button ─────────────────────────────────────────────────────────────\n\n/**\n * Individual radio button. Use inside `af-radio-group` for full\n * accessibility, or standalone with its own `ControlValueAccessor`.\n *\n * @example\n * <af-radio-group ariaLabel=\"Plan\" name=\"plan\" [(ngModel)]=\"plan\">\n * <af-radio value=\"standard\">Standard</af-radio>\n * <af-radio value=\"premium\">Premium</af-radio>\n * </af-radio-group>\n */\n@Component({\n selector: 'af-radio',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfRadioComponent),\n multi: true,\n },\n ],\n template: `\n <label class=\"ct-radio\">\n <input\n #inputEl\n class=\"ct-radio__input\"\n type=\"radio\"\n [name]=\"resolvedName()\"\n [value]=\"value()\"\n [checked]=\"isChecked()\"\n [disabled]=\"isDisabled()\"\n [attr.tabindex]=\"resolvedTabindex()\"\n (change)=\"onChangeEvent()\"\n (blur)=\"onTouched()\"\n (focus)=\"onFocus()\"\n (keydown)=\"onKeydown($event)\" />\n <span class=\"ct-radio__label\">\n <ng-content />\n </span>\n </label>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfRadioComponent implements ControlValueAccessor {\n private group = inject(forwardRef(() => AfRadioGroupComponent), { optional: true });\n\n /** Radio group name (only used without `af-radio-group`). */\n name = input('');\n\n /** Radio value. */\n value = input<unknown>(undefined);\n\n /** Whether this radio is disabled. */\n disabled = model(false);\n\n inputRef = viewChild.required<ElementRef<HTMLInputElement>>('inputEl');\n\n modelValue = signal<unknown>(undefined);\n onChangeCallback: (value: unknown) => void = () => {};\n onTouched: () => void = () => {};\n\n resolvedName = computed(() => this.group?.name() || this.name());\n\n isChecked = computed(() => {\n const selected = this.group ? this.group.selectedValue() : this.modelValue();\n return selected === this.value();\n });\n\n isDisabled = computed(() => {\n if (this.group?.disabled()) return true;\n return this.disabled();\n });\n\n resolvedTabindex = computed(() => {\n if (!this.group) return null;\n return this.group.tabindexFor(this);\n });\n\n /** Focuses the native input element. */\n focus(): void {\n this.inputRef().nativeElement.focus();\n }\n\n onChangeEvent(): void {\n if (this.group) {\n this.group.selectRadio(this);\n } else {\n this.modelValue.set(this.value());\n this.onChangeCallback(this.value());\n }\n }\n\n onFocus(): void {\n this.group?.onRadioFocus(this);\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.group) {\n this.group.onRadioKeydown(event, this);\n }\n }\n\n writeValue(value: unknown): void {\n this.modelValue.set(value);\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n\n// ── Radio Group ──────────────────────────────────────────────────────────────\n\n/**\n * Groups `af-radio` components with `role=\"radiogroup\"`, ARIA labeling,\n * roving tabindex, and arrow-key navigation per WAI-ARIA Radio Group Pattern.\n *\n * Implements `ControlValueAccessor` so the group value can be bound via\n * `[(ngModel)]` or reactive forms.\n *\n * @example\n * <af-radio-group ariaLabel=\"Select plan\" name=\"plan\" [(ngModel)]=\"plan\">\n * <af-radio value=\"standard\">Standard</af-radio>\n * <af-radio value=\"premium\">Premium</af-radio>\n * </af-radio-group>\n */\n@Component({\n selector: 'af-radio-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfRadioGroupComponent),\n multi: true,\n },\n ],\n template: `\n <div\n role=\"radiogroup\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n [attr.aria-disabled]=\"disabled() || null\">\n <ng-content />\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfRadioGroupComponent implements ControlValueAccessor {\n /** Shared `name` attribute for all child radios. */\n name = input.required<string>();\n\n /** Accessible label for the radio group. */\n ariaLabel = input('');\n\n /** ID of an external element labeling this group. */\n ariaLabelledBy = input('');\n\n /** Disables all radios in the group. */\n disabled = model(false);\n\n radios = contentChildren(AfRadioComponent);\n\n selectedValue = signal<unknown>(undefined);\n private focusedIndex = signal(0);\n\n private onChangeCallback: (value: unknown) => void = () => {};\n private onTouchedCallback: () => void = () => {};\n\n private syncEffect = effect(() => {\n const radios = this.radios();\n const value = this.selectedValue();\n const checkedIdx = radios.findIndex((r) => r.value() === value);\n this.focusedIndex.set(checkedIdx >= 0 ? checkedIdx : 0);\n });\n\n /** Returns the tabindex a child radio should use for roving tabindex. */\n tabindexFor(radio: AfRadioComponent): number {\n const radios = this.enabledRadios();\n const idx = radios.indexOf(radio);\n if (idx === -1) return -1;\n return idx === this.focusedIndex() ? 0 : -1;\n }\n\n /** Selects a radio and propagates the value. */\n selectRadio(radio: AfRadioComponent): void {\n const value = radio.value();\n this.selectedValue.set(value);\n this.onChangeCallback(value);\n this.onTouchedCallback();\n }\n\n /** Called when a child radio receives focus. */\n onRadioFocus(radio: AfRadioComponent): void {\n const idx = this.enabledRadios().indexOf(radio);\n if (idx >= 0) {\n this.focusedIndex.set(idx);\n }\n }\n\n /** Handles keyboard navigation within the group. */\n onRadioKeydown(event: KeyboardEvent, _current: AfRadioComponent): void {\n const enabled = this.enabledRadios();\n if (enabled.length === 0) return;\n\n let nextIndex: number | null = null;\n\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n event.preventDefault();\n nextIndex = (this.focusedIndex() + 1) % enabled.length;\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n event.preventDefault();\n nextIndex = (this.focusedIndex() - 1 + enabled.length) % enabled.length;\n break;\n case 'Home':\n event.preventDefault();\n nextIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n nextIndex = enabled.length - 1;\n break;\n case ' ':\n event.preventDefault();\n this.selectRadio(enabled[this.focusedIndex()]);\n return;\n }\n\n if (nextIndex !== null) {\n this.focusedIndex.set(nextIndex);\n const target = enabled[nextIndex];\n target.focus();\n this.selectRadio(target);\n }\n }\n\n writeValue(value: unknown): void {\n this.selectedValue.set(value);\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n private enabledRadios(): AfRadioComponent[] {\n return this.radios().filter((r) => !r.isDisabled());\n }\n}\n","import { Component, ChangeDetectionStrategy, input, model, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Switch/Toggle component with form control support\n *\n * @example\n * <af-switch [(ngModel)]=\"autoRenew\">\n * Auto renew\n * </af-switch>\n */\n@Component({\n selector: 'af-switch',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfSwitchComponent),\n multi: true\n }\n ],\n template: `\n <label class=\"ct-switch\">\n <input\n class=\"ct-switch__input\"\n type=\"checkbox\"\n role=\"switch\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (change)=\"onChange($event)\"\n (blur)=\"onTouched()\" />\n <span class=\"ct-switch__label\">\n <ng-content></ng-content>\n </span>\n </label>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfSwitchComponent implements ControlValueAccessor {\n /** Accessible label for icon-only or unlabeled switches. */\n ariaLabel = input('');\n\n /** Whether switch is disabled. */\n disabled = model(false);\n\n /** Checked state - supports two-way binding via [(checked)] */\n checked = model(false);\n\n private onChangeCallback: (value: boolean) => void = () => {};\n onTouched: () => void = () => {};\n\n onChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.checked.set(target.checked);\n this.onChangeCallback(target.checked);\n }\n\n /** ControlValueAccessor implementation */\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n input,\n output,\n computed,\n contentChild,\n} from '@angular/core';\n\nexport type AfCardElevation = 'none' | 'sm' | 'md' | 'lg';\nexport type AfCardPadding = 'none' | 'sm' | 'md' | 'lg';\n\n/**\n * Card component for containing content.\n *\n * When `interactive` is set the card becomes keyboard-accessible with\n * `role=\"button\"`, roving `tabindex`, and Enter/Space activation.\n *\n * @example\n * <af-card elevation=\"md\" padding=\"lg\">\n * <div header><h3>Title</h3></div>\n * <div body><p>Card content</p></div>\n * </af-card>\n *\n * <af-card interactive ariaLabel=\"Open project\" (cardClick)=\"open()\">\n * <p body>Click me</p>\n * </af-card>\n */\n@Component({\n selector: 'af-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <section\n [class]=\"cardClasses()\"\n [style]=\"cardStyles()\"\n [attr.role]=\"interactive() ? 'button' : null\"\n [attr.tabindex]=\"interactive() ? 0 : null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (click)=\"onCardClick()\"\n (keydown)=\"onCardKeydown($event)\">\n <div class=\"ct-card__header\" [hidden]=\"!hasHeader()\">\n <ng-content select=\"[header]\" />\n </div>\n <div class=\"ct-card__body\">\n <ng-content select=\"[body]\" />\n <ng-content />\n </div>\n <div class=\"ct-card__footer\" [hidden]=\"!hasFooter()\">\n <ng-content select=\"[footer]\" />\n </div>\n </section>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfCardComponent {\n /** Makes the card interactive (clickable, keyboard-accessible). */\n interactive = input(false);\n\n /** Shadow elevation level. */\n elevation = input<AfCardElevation | null>(null);\n\n /** Content padding level. */\n padding = input<AfCardPadding | null>(null);\n\n /** Accessible label for interactive cards. */\n ariaLabel = input('');\n\n /** Emitted when an interactive card is activated (click, Enter, or Space). */\n cardClick = output<void>();\n\n private headerRef = contentChild('[header]', { read: ElementRef });\n private footerRef = contentChild('[footer]', { read: ElementRef });\n hasHeader = computed(() => !!this.headerRef());\n hasFooter = computed(() => !!this.footerRef());\n\n private static readonly ELEVATION_MAP: Record<AfCardElevation, string> = {\n none: 'none',\n sm: '0 1px 3px rgba(0, 0, 0, 0.08)',\n md: '0 4px 12px rgba(0, 0, 0, 0.08)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.12)',\n };\n\n private static readonly PADDING_MAP: Record<AfCardPadding, string> = {\n none: '0',\n sm: 'var(--space-3, 0.75rem)',\n md: 'var(--space-5, 1.25rem)',\n lg: 'var(--space-7, 2rem)',\n };\n\n cardClasses = computed(() => {\n const classes = ['ct-card'];\n if (this.interactive()) {\n classes.push('ct-card--interactive');\n }\n return classes.join(' ');\n });\n\n cardStyles = computed(() => {\n const styles: string[] = [];\n if (this.elevation() !== null) {\n styles.push(`box-shadow: ${AfCardComponent.ELEVATION_MAP[this.elevation()!]}`);\n }\n if (this.padding() !== null) {\n styles.push(`--ct-card-padding: ${AfCardComponent.PADDING_MAP[this.padding()!]}`);\n }\n return styles.join('; ');\n });\n\n onCardClick(): void {\n if (this.interactive()) {\n this.cardClick.emit();\n }\n }\n\n onCardKeydown(event: KeyboardEvent): void {\n if (!this.interactive()) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.cardClick.emit();\n }\n }\n}\n","import { Directive, TemplateRef, input, inject } from '@angular/core';\n\n/**\n * Directive for defining custom cell templates in AfDataTableComponent.\n *\n * @example\n * <af-data-table [data]=\"items\" [columns]=\"columns\">\n * <ng-template afCellDef=\"status\" let-row>\n * <af-badge [variant]=\"getVariant(row.status)\">{{ row.status }}</af-badge>\n * </ng-template>\n * <ng-template afCellDef=\"actions\" let-row>\n * <af-button variant=\"ghost\" iconOnly (clicked)=\"onEdit(row)\">\n * <af-icon name=\"edit\" />\n * </af-button>\n * </ng-template>\n * </af-data-table>\n */\n@Directive({\n selector: '[afCellDef]'\n})\nexport class AfCellDefDirective {\n /** Column key this template applies to */\n columnKey = input('', { alias: 'afCellDef' });\n\n readonly templateRef = inject(TemplateRef<unknown>);\n}\n","import {\n Component,\n TemplateRef,\n input,\n output,\n computed,\n effect,\n contentChildren,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { AfCellDefDirective } from './cell-def.directive';\n\nexport interface AfColumn {\n key: string;\n header: string;\n sortable?: boolean;\n /** CSS class(es) for the cell */\n cellClass?: string;\n}\n\nexport interface AfDataTableConfig {\n striped?: boolean;\n compact?: boolean;\n /** Whether to show the selection checkbox column */\n selectable?: boolean;\n}\n\n/** Row type for the data table — uses `any` values to allow typed interfaces without index signatures. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AfDataRow = Record<string, any>;\n\nexport type AfSortDirection = 'asc' | 'desc';\n\nexport interface AfSortState {\n key: string;\n direction: AfSortDirection;\n}\n\n/**\n * Data table with sorting, selection, and custom cell templates.\n *\n * @example\n * <af-data-table\n * [data]=\"items()\"\n * [columns]=\"columns\"\n * [config]=\"{ striped: true, selectable: true }\"\n * rowId=\"id\"\n * (sortChange)=\"onSort($event)\"\n * (selectionChange)=\"onSelect($event)\">\n *\n * <ng-template afCellDef=\"status\" let-row>\n * <af-badge [variant]=\"getVariant(row.status)\">\n * {{ row.status | afFormatLabel }}\n * </af-badge>\n * </ng-template>\n *\n * <ng-template afCellDef=\"actions\" let-row>\n * <af-button variant=\"ghost\" iconOnly (clicked)=\"onDelete(row)\">\n * <af-icon name=\"delete\" />\n * </af-button>\n * </ng-template>\n * </af-data-table>\n */\n@Component({\n selector: 'af-data-table',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n templateUrl: './data-table.component.html',\n styleUrl: './data-table.component.css'\n})\nexport class AfDataTableComponent {\n data = input<AfDataRow[]>([]);\n columns = input<AfColumn[]>([]);\n config = input<AfDataTableConfig>({ striped: true, compact: true });\n\n /** Sort state (controlled). */\n sort = input<AfSortState | null>(null);\n\n /** Row id key or accessor for stable selection. */\n rowId = input<string | ((row: AfDataRow) => string | number) | null>(null);\n\n rowClick = output<AfDataRow>();\n selectionChange = output<AfDataRow[]>();\n sortChange = output<AfSortState | null>();\n\n cellDefs = contentChildren(AfCellDefDirective);\n\n private selectedRowIds = new Set<unknown>();\n private internalSort: AfSortState | null = null;\n private cellTemplateMap = new Map<string, TemplateRef<unknown>>();\n\n allSelected = false;\n someSelected = false;\n\n private cellDefsEffect = effect(() => {\n const defs = this.cellDefs();\n this.cellTemplateMap.clear();\n defs.forEach(def => {\n this.cellTemplateMap.set(def.columnKey(), def.templateRef);\n });\n });\n\n private dataEffect = effect(() => {\n this.data();\n this.rowId();\n this.syncSelectionWithData();\n this.updateSelectionState();\n });\n\n isSelectable = computed(() => {\n return this.config().selectable !== false;\n });\n\n tableClasses = computed(() => {\n const classes = ['ct-table'];\n if (this.config().striped) classes.push('ct-table--striped');\n if (this.config().compact) classes.push('ct-table--compact');\n return classes.join(' ');\n });\n\n sortedData = computed(() => {\n const sort = this.activeSort();\n if (!sort) return [...this.data()];\n if (!this.columns().some(column => column.key === sort.key)) return [...this.data()];\n const sorted = [...this.data()];\n sorted.sort((a, b) => this.compareValues(a?.[sort.key], b?.[sort.key], sort.direction));\n return sorted;\n });\n\n activeSort = computed(() => {\n return this.sort() ?? this.internalSort;\n });\n\n /** Returns the custom cell template for a column, or null for default rendering. */\n getCellTemplate(columnKey: string): TemplateRef<unknown> | null {\n return this.cellTemplateMap.get(columnKey) ?? null;\n }\n\n getAriaSort(column: AfColumn): string | null {\n if (!column.sortable) return null;\n const sort = this.activeSort();\n if (!sort || sort.key !== column.key) return 'none';\n return sort.direction === 'asc' ? 'ascending' : 'descending';\n }\n\n toggleSort(column: AfColumn): void {\n if (!column.sortable) return;\n const current = this.activeSort();\n let next: AfSortState | null;\n\n if (!current || current.key !== column.key) {\n next = { key: column.key, direction: 'asc' };\n } else if (current.direction === 'asc') {\n next = { key: column.key, direction: 'desc' };\n } else {\n next = null;\n }\n\n if (this.sort()) {\n this.sortChange.emit(next);\n } else {\n this.internalSort = next;\n this.sortChange.emit(next);\n }\n }\n\n onRowClick(row: AfDataRow): void {\n this.rowClick.emit(row);\n }\n\n toggleSelection(row: AfDataRow, event: Event): void {\n event.stopPropagation();\n const rowId = this.getRowId(row);\n if (this.selectedRowIds.has(rowId)) {\n this.selectedRowIds.delete(rowId);\n } else {\n this.selectedRowIds.add(rowId);\n }\n this.updateSelectionState();\n this.selectionChange.emit(this.getSelectedRows());\n }\n\n toggleAll(checked: boolean): void {\n if (checked) {\n this.data().forEach(row => this.selectedRowIds.add(this.getRowId(row)));\n } else {\n this.selectedRowIds.clear();\n }\n this.updateSelectionState();\n this.selectionChange.emit(this.getSelectedRows());\n }\n\n isSelected(row: AfDataRow): boolean {\n return this.selectedRowIds.has(this.getRowId(row));\n }\n\n private updateSelectionState(): void {\n const data = this.data();\n const hasData = data.length > 0;\n const selectedCount = data.filter(row => this.selectedRowIds.has(this.getRowId(row))).length;\n this.allSelected = hasData && selectedCount === data.length;\n this.someSelected = hasData && selectedCount > 0 && selectedCount < data.length;\n }\n\n private getRowId(row: AfDataRow): unknown {\n const rowId = this.rowId();\n if (typeof rowId === 'function') {\n return rowId(row);\n }\n if (typeof rowId === 'string' && row && row[rowId] !== undefined) {\n return row[rowId];\n }\n return row;\n }\n\n private getSelectedRows(): AfDataRow[] {\n return this.data().filter(row => this.selectedRowIds.has(this.getRowId(row)));\n }\n\n private syncSelectionWithData(): void {\n if (!this.rowId()) {\n this.selectedRowIds.clear();\n return;\n }\n const validIds = new Set(this.data().map(row => this.getRowId(row)));\n this.selectedRowIds.forEach(id => {\n if (!validIds.has(id)) {\n this.selectedRowIds.delete(id);\n }\n });\n }\n\n private compareValues(a: unknown, b: unknown, direction: AfSortDirection): number {\n const sortFactor = direction === 'asc' ? 1 : -1;\n if (a == null && b == null) return 0;\n if (a == null) return 1 * sortFactor;\n if (b == null) return -1 * sortFactor;\n\n if (typeof a === 'number' && typeof b === 'number') {\n return (a - b) * sortFactor;\n }\n if (a instanceof Date && b instanceof Date) {\n return (a.getTime() - b.getTime()) * sortFactor;\n }\n\n return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: 'base' }) * sortFactor;\n }\n}\n","<div class=\"ct-data-table ct-data-table--simple\">\n <div class=\"ct-data-table__table\">\n <table [class]=\"tableClasses()\">\n <thead>\n <tr>\n @if (isSelectable()) {\n <th scope=\"col\" class=\"ct-table__cell--checkbox\">\n <label class=\"ct-check\">\n <input\n class=\"ct-check__input\"\n type=\"checkbox\"\n [checked]=\"allSelected\"\n [indeterminate]=\"someSelected\"\n (change)=\"toggleAll($any($event.target).checked)\"\n aria-label=\"Select all rows\" />\n </label>\n </th>\n }\n @for (col of columns(); track col.key) {\n <th scope=\"col\" [attr.aria-sort]=\"getAriaSort(col)\">\n @if (col.sortable) {\n <button class=\"ct-table__sort\" type=\"button\" (click)=\"toggleSort(col)\">\n {{ col.header }}\n <span class=\"ct-table__sort-indicator\" aria-hidden=\"true\"></span>\n </button>\n } @else {\n {{ col.header }}\n }\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of sortedData(); track row) {\n <tr (click)=\"onRowClick(row)\">\n @if (isSelectable()) {\n <td class=\"ct-table__cell--checkbox\">\n <label class=\"ct-check\">\n <input\n class=\"ct-check__input\"\n type=\"checkbox\"\n [checked]=\"isSelected(row)\"\n (change)=\"toggleSelection(row, $event)\"\n aria-label=\"Select row\" />\n </label>\n </td>\n }\n @for (col of columns(); track col.key) {\n <td [class]=\"col.cellClass || ''\">\n @if (getCellTemplate(col.key); as tmpl) {\n <ng-container *ngTemplateOutlet=\"tmpl; context: { $implicit: row, column: col }\"></ng-container>\n } @else {\n {{ row[col.key] }}\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n","const FOCUSABLE_SELECTORS = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\n/**\n * Manages focus trapping within a container element.\n *\n * Handles Tab/Shift+Tab cycling, save/restore of the previously focused\n * element, and initial focus placement. Create one instance per overlay\n * (modal, drawer, popover, etc.).\n */\nexport class FocusTrap {\n private previousActiveElement: HTMLElement | null = null;\n\n /** Saves the currently focused element for later restoration. */\n saveFocus(): void {\n this.previousActiveElement = document.activeElement as HTMLElement;\n }\n\n /** Restores focus to the element saved via `saveFocus()`. */\n restoreFocus(): void {\n if (this.previousActiveElement) {\n this.previousActiveElement.focus();\n this.previousActiveElement = null;\n }\n }\n\n /** Overrides the saved focus target (e.g. to return focus to a specific trigger). */\n setReturnFocus(element: HTMLElement): void {\n this.previousActiveElement = element;\n }\n\n /**\n * Focuses the first focusable element inside the container,\n * or the fallback element if no focusable children exist.\n */\n focusFirst(container: HTMLElement | null | undefined, fallback?: HTMLElement | null): void {\n const elements = queryFocusableElements(container);\n const first = elements[0];\n if (first) {\n first.focus();\n } else {\n fallback?.focus();\n }\n }\n\n /**\n * Handles a Tab keydown event to trap focus within the container.\n * Call this from a `(keydown)` handler when the key is `Tab`.\n */\n handleTab(\n event: KeyboardEvent,\n container: HTMLElement | null | undefined,\n fallback?: HTMLElement | null,\n ): void {\n const elements = queryFocusableElements(container);\n\n if (elements.length === 0) {\n event.preventDefault();\n fallback?.focus();\n return;\n }\n\n const first = elements[0];\n const last = elements[elements.length - 1];\n const active = document.activeElement as HTMLElement | null;\n\n if (event.shiftKey && active === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\n }\n}\n\n/** Queries all visible, enabled, focusable elements within a container. */\nfunction queryFocusableElements(container: HTMLElement | null | undefined): HTMLElement[] {\n if (!container) return [];\n return Array.from(\n container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTORS),\n ).filter(\n (el) =>\n !el.hasAttribute('disabled') &&\n el.getAttribute('aria-hidden') !== 'true',\n );\n}\n","import { Component, ChangeDetectionStrategy, ElementRef, OnDestroy, AfterViewInit, input, output, signal, computed, effect, viewChild, contentChild } from '@angular/core';\nimport { FocusTrap } from '../../utils/focus-trap';\n\n/**\n * Modal/Dialog component with accessibility features\n *\n * @example\n * <af-modal\n * [open]=\"isOpen\"\n * title=\"Confirm action\"\n * (closed)=\"handleClose()\">\n * <div body>\n * <p>Are you sure?</p>\n * </div>\n * <div footer>\n * <button (click)=\"cancel()\">Cancel</button>\n * <button (click)=\"confirm()\">Confirm</button>\n * </div>\n * </af-modal>\n */\n@Component({\n selector: 'af-modal',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:keydown.escape)': 'onEscapeKey()',\n '(document:keydown)': 'onKeydown($event)',\n },\n template: `\n @if (open()) {\n <div\n class=\"ct-modal\"\n [attr.data-state]=\"open() ? 'open' : 'closed'\"\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"titleId\"\n (click)=\"onBackdropClick($event)\">\n <div\n #dialog\n class=\"ct-modal__dialog\"\n tabindex=\"-1\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"ct-modal__header\">\n <h2 [id]=\"titleId\">{{ title() }}</h2>\n @if (showCloseButton()) {\n <button\n class=\"ct-button ct-button--ghost ct-button--icon\"\n type=\"button\"\n aria-label=\"Close\"\n (click)=\"close()\">\n <span class=\"ct-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg></span>\n </button>\n }\n </div>\n <div class=\"ct-modal__body\">\n <ng-content select=\"[body]\"></ng-content>\n <ng-content></ng-content>\n </div>\n <div class=\"ct-modal__footer\" [hidden]=\"!hasFooter()\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n </div>\n </div>\n }\n `,\n styles: [`\n :host {\n display: contents;\n }\n `]\n})\nexport class AfModalComponent implements OnDestroy, AfterViewInit {\n private static nextId = 0;\n private focusTrap = new FocusTrap();\n\n /** Whether modal is open */\n open = input(false);\n\n /** Modal title */\n title = input('');\n\n /** Whether to show close button */\n showCloseButton = input(true);\n\n /** Whether clicking backdrop closes modal */\n closeOnBackdropClick = input(true);\n\n /** Close event emitter */\n closed = output<void>();\n\n /** Unique title ID for aria-labelledby */\n titleId = `af-modal-title-${AfModalComponent.nextId++}`;\n\n private footerRef = contentChild('[footer]', { read: ElementRef });\n hasFooter = computed(() => !!this.footerRef());\n\n private viewInitialized = signal(false);\n\n dialogRef = viewChild<ElementRef<HTMLElement>>('dialog');\n\n private openEffect = effect(() => {\n const isOpen = this.open();\n const initialized = this.viewInitialized();\n if (isOpen && initialized) {\n this.onOpen();\n } else if (!isOpen) {\n this.focusTrap.restoreFocus();\n }\n });\n\n ngAfterViewInit(): void {\n this.viewInitialized.set(true);\n }\n\n ngOnDestroy(): void {\n this.focusTrap.restoreFocus();\n }\n\n onEscapeKey(): void {\n if (this.open()) {\n this.close();\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (!this.open() || event.key !== 'Tab') return;\n this.focusTrap.handleTab(event, this.dialogRef()?.nativeElement, this.dialogRef()?.nativeElement);\n }\n\n onBackdropClick(event: MouseEvent): void {\n if (this.closeOnBackdropClick() && event.target === event.currentTarget) {\n this.close();\n }\n }\n\n close(): void {\n this.closed.emit();\n }\n\n private onOpen(): void {\n this.focusTrap.saveFocus();\n queueMicrotask(() => {\n if (!this.open()) return;\n this.focusTrap.focusFirst(this.dialogRef()?.nativeElement, this.dialogRef()?.nativeElement);\n });\n }\n}\n","import { Injectable, signal } from '@angular/core';\n\nexport type AfToastVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport interface AfToast {\n id: string;\n title: string;\n description?: string;\n variant?: AfToastVariant;\n duration?: number;\n action?: {\n label: string;\n callback: () => void;\n };\n}\n\n/**\n * Toast notification service\n *\n * @example\n * const toast = inject(AfToastService);\n *\n * showSuccess() {\n * this.toast.success('Saved', 'Your changes were saved successfully.');\n * }\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AfToastService {\n private toastsSignal = signal<AfToast[]>([]);\n private nextId = 0;\n\n /** Reactive signal for toast list */\n toasts = this.toastsSignal.asReadonly();\n\n /**\n * Show a toast notification\n */\n show(toast: Omit<AfToast, 'id'>): string {\n const id = `toast-${this.nextId++}`;\n const newToast: AfToast = {\n id,\n variant: 'info',\n duration: 5000,\n ...toast\n };\n\n this.toastsSignal.update(toasts => [...toasts, newToast]);\n\n if (newToast.duration && newToast.duration > 0) {\n setTimeout(() => this.dismiss(id), newToast.duration);\n }\n\n return id;\n }\n\n /**\n * Show success toast\n */\n success(title: string, description?: string): string {\n return this.show({ title, description, variant: 'success' });\n }\n\n /**\n * Show error toast\n */\n error(title: string, description?: string): string {\n return this.show({ title, description, variant: 'error' });\n }\n\n /**\n * Show warning toast\n */\n warning(title: string, description?: string): string {\n return this.show({ title, description, variant: 'warning' });\n }\n\n /**\n * Show info toast\n */\n info(title: string, description?: string): string {\n return this.show({ title, description, variant: 'info' });\n }\n\n /**\n * Dismiss a toast by ID\n */\n dismiss(id: string): void {\n this.toastsSignal.update(toasts => toasts.filter(t => t.id !== id));\n }\n\n /**\n * Clear all toasts\n */\n clear(): void {\n this.toastsSignal.set([]);\n }\n}\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { AfToastService, AfToast } from '../../services/toast.service';\n\n/**\n * Toast notification container component\n * Place once in your app root template\n *\n * @example\n * <!-- app.component.html -->\n * <ct-toast-container></ct-toast-container>\n */\n@Component({\n selector: 'af-toast-container',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"ct-toast-region\" aria-live=\"polite\" aria-atomic=\"false\">\n @for (toast of toastService.toasts(); track toast.id) {\n <div\n class=\"ct-toast\"\n [attr.data-variant]=\"toast.variant\"\n [attr.data-state]=\"'open'\"\n role=\"status\">\n <div class=\"ct-toast__title\">{{ toast.title }}</div>\n @if (toast.description) {\n <div class=\"ct-toast__description\">\n {{ toast.description }}\n </div>\n }\n @if (toast.action) {\n <button\n class=\"ct-button ct-button--ghost\"\n (click)=\"handleAction(toast)\">\n {{ toast.action.label }}\n </button>\n }\n <button\n class=\"ct-button ct-button--ghost ct-button--icon ct-button--sm\"\n type=\"button\"\n aria-label=\"Close\"\n (click)=\"toastService.dismiss(toast.id)\">\n <span class=\"ct-icon ct-icon--sm\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg></span>\n </button>\n </div>\n }\n </div>\n `,\n styles: [`\n :host {\n display: contents;\n }\n `]\n})\nexport class AfToastContainerComponent {\n toastService = inject(AfToastService);\n\n handleAction(toast: AfToast): void {\n if (toast.action) {\n toast.action.callback();\n this.toastService.dismiss(toast.id);\n }\n }\n}\n","import { Component, contentChildren, viewChildren, ElementRef, effect, input, output, model, ChangeDetectionStrategy } from '@angular/core';\n\nexport interface AfTab {\n id: string;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Tab panel component (used within af-tabs)\n */\n@Component({\n selector: 'af-tab-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (isActive()) {\n <div\n class=\"ct-tabs__panel\"\n role=\"tabpanel\"\n [attr.id]=\"'panel-' + id()\"\n [attr.aria-labelledby]=\"'tab-' + id()\">\n <ng-content></ng-content>\n </div>\n }\n `\n})\nexport class AfTabPanelComponent {\n private static nextId = 0;\n\n id = model('');\n label = input('');\n isActive = model(false);\n disabled = input(false);\n\n ensureId(): string {\n if (!this.id()) {\n this.id.set(`af-tab-${AfTabPanelComponent.nextId++}`);\n }\n return this.id();\n }\n}\n\n/**\n * Tabs component for organizing content into panels\n *\n * @example\n * <af-tabs [(activeTab)]=\"activeTab\">\n * <af-tab-panel id=\"overview\" label=\"Overview\">\n * <p>Overview content</p>\n * </af-tab-panel>\n * <af-tab-panel id=\"settings\" label=\"Settings\">\n * <p>Settings content</p>\n * </af-tab-panel>\n * </af-tabs>\n */\n@Component({\n selector: 'af-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"ct-tabs\">\n <div class=\"ct-tabs__list\" role=\"tablist\">\n @for (tab of tabs; track tab.id) {\n <button\n #tabButton\n class=\"ct-tabs__trigger\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab() === tab.id\"\n [attr.aria-controls]=\"'panel-' + tab.id\"\n [attr.id]=\"'tab-' + tab.id\"\n [attr.tabindex]=\"activeTab() === tab.id ? 0 : -1\"\n [disabled]=\"tab.disabled\"\n [attr.data-tab-id]=\"tab.id\"\n type=\"button\"\n (click)=\"selectTab(tab.id)\"\n (keydown)=\"onKeydown($event, tab.id)\">\n {{ tab.label }}\n </button>\n }\n </div>\n <ng-content></ng-content>\n </div>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfTabsComponent {\n /** Array of tabs (generated from projected tab panels) */\n tabs: AfTab[] = [];\n\n /** Currently active tab ID (two-way bound) */\n activeTab = model('');\n\n panels = contentChildren(AfTabPanelComponent);\n tabButtons = viewChildren<ElementRef<HTMLButtonElement>>('tabButton');\n\n private panelsEffect = effect(() => {\n this.syncTabsFromPanels();\n });\n\n selectTab(id: string): void {\n if (this.activeTab() !== id) {\n this.activeTab.set(id);\n this.syncActivePanel();\n }\n }\n\n onKeydown(event: KeyboardEvent, currentId: string): void {\n const enabledTabs = this.tabs.filter(tab => !tab.disabled);\n if (enabledTabs.length === 0) return;\n\n const currentIndex = enabledTabs.findIndex(tab => tab.id === currentId);\n const lastIndex = enabledTabs.length - 1;\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown': {\n event.preventDefault();\n const next = enabledTabs[(currentIndex + 1) % enabledTabs.length];\n this.focusTab(next.id);\n break;\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n event.preventDefault();\n const prev = enabledTabs[(currentIndex - 1 + enabledTabs.length) % enabledTabs.length];\n this.focusTab(prev.id);\n break;\n }\n case 'Home': {\n event.preventDefault();\n this.focusTab(enabledTabs[0].id);\n break;\n }\n case 'End': {\n event.preventDefault();\n this.focusTab(enabledTabs[lastIndex].id);\n break;\n }\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.selectTab(currentId);\n break;\n }\n default:\n break;\n }\n }\n\n private syncTabsFromPanels(): void {\n const panels = this.panels();\n this.tabs = panels.map(panel => ({\n id: panel.ensureId(),\n label: panel.label() || panel.id(),\n disabled: panel.disabled()\n }));\n\n if (!this.activeTab() || !this.tabs.some(tab => tab.id === this.activeTab() && !tab.disabled)) {\n const firstEnabled = this.tabs.find(tab => !tab.disabled);\n if (firstEnabled) {\n this.activeTab.set(firstEnabled.id);\n }\n }\n\n this.syncActivePanel();\n }\n\n private syncActivePanel(): void {\n const panels = this.panels();\n if (!panels.length) return;\n panels.forEach(panel => {\n panel.isActive.set(panel.id() === this.activeTab());\n });\n }\n\n private focusTab(id: string): void {\n const button = this.tabButtons().find(ref => ref.nativeElement.dataset['tabId'] === id);\n button?.nativeElement.focus();\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n} from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\n\nexport interface AfNavTab {\n /** Unique identifier for the tab. */\n id: string;\n /** Display label. */\n label: string;\n /** Angular Router link for navigation. */\n routerLink: string | string[];\n /** Disables the tab. */\n disabled?: boolean;\n}\n\nexport type AfNavTabsVariant = 'default' | 'pill';\nexport type AfNavTabsSize = 'sm' | 'md' | 'lg';\n\n/**\n * Router-based tab navigation component.\n *\n * Uses the `ct-tabs` CSS classes from the Construct Design System but renders\n * `<a routerLink>` elements for navigation. Active state is determined\n * automatically via `routerLinkActive`.\n *\n * For content-panel tabs (show/hide content without routing), use `<af-tabs>` instead.\n *\n * @example\n * <af-nav-tabs\n * [tabs]=\"[\n * { id: 'my', label: 'My Documents', routerLink: '/documents/my' },\n * { id: 'all', label: 'All Documents', routerLink: '/documents/all' }\n * ]\">\n * </af-nav-tabs>\n */\n@Component({\n selector: 'af-nav-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive],\n template: `\n <nav [class]=\"containerClasses()\" [attr.aria-label]=\"ariaLabel()\">\n <ul class=\"ct-tabs__list\">\n @for (tab of tabs(); track tab.id) {\n <li>\n @if (tab.disabled) {\n <span\n class=\"ct-tabs__trigger\"\n aria-disabled=\"true\"\n [attr.id]=\"'nav-tab-' + tab.id\">\n {{ tab.label }}\n </span>\n } @else {\n <a\n class=\"ct-tabs__trigger\"\n [routerLink]=\"tab.routerLink\"\n routerLinkActive=\"ct-tabs__trigger--active\"\n #rla=\"routerLinkActive\"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [attr.id]=\"'nav-tab-' + tab.id\">\n {{ tab.label }}\n </a>\n }\n </li>\n }\n </ul>\n </nav>\n `,\n styles: [`\n :host {\n display: block;\n }\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n li {\n display: contents;\n }\n\n .ct-tabs__trigger--active {\n color: var(--color-text-primary);\n }\n\n .ct-tabs__trigger--active::after {\n background: var(--ct-tabs-indicator-color, var(--color-brand-primary));\n }\n\n .ct-tabs--pill .ct-tabs__trigger--active {\n background: var(--color-bg-elevated);\n box-shadow: var(--shadow-sm);\n }\n\n .ct-tabs--pill .ct-tabs__trigger--active::after {\n display: none;\n }\n\n .ct-tabs__trigger[aria-disabled='true'] {\n color: var(--color-text-muted);\n opacity: var(--opacity-disabled, 0.5);\n cursor: not-allowed;\n pointer-events: none;\n }\n `]\n})\nexport class AfNavTabsComponent {\n /** Tab items to render. */\n tabs = input.required<AfNavTab[]>();\n\n /** Visual variant. `'pill'` renders pill-shaped tabs with background. */\n variant = input<AfNavTabsVariant>('default');\n\n /** Size variant. */\n size = input<AfNavTabsSize>('md');\n\n /** Accessible label for the tab navigation. */\n ariaLabel = input('Sub navigation');\n\n containerClasses = computed(() => {\n const classes = ['ct-tabs'];\n const v = this.variant();\n if (v === 'pill') classes.push('ct-tabs--pill');\n const s = this.size();\n if (s !== 'md') classes.push(`ct-tabs--${s}`);\n return classes.join(' ');\n });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n computed,\n inject,\n input,\n output,\n signal,\n viewChild,\n viewChildren,\n} from '@angular/core';\n\nimport { AfButtonSize } from '../button/button.component';\n\nexport interface AfDropdownItem {\n label: string;\n value: unknown;\n disabled?: boolean;\n separator?: boolean;\n}\n\n/**\n * Dropdown menu component implementing the WAI-ARIA Menu Pattern.\n *\n * Provides full keyboard navigation (Arrow keys, Home/End, type-ahead),\n * proper ARIA roles (`menu` / `menuitem`), and roving tabindex focus management.\n *\n * @example\n * <af-dropdown\n * label=\"Actions\"\n * [items]=\"menuItems\"\n * (itemSelected)=\"handleAction($event)\">\n * </af-dropdown>\n */\n@Component({\n selector: 'af-dropdown',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n <div class=\"ct-dropdown\" [attr.data-state]=\"isOpen() ? 'open' : 'closed'\" [attr.data-align]=\"align()\" [attr.data-side]=\"side()\">\n <button\n #trigger\n [id]=\"triggerId\"\n [class]=\"triggerClasses()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"menuId\"\n aria-haspopup=\"menu\"\n type=\"button\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\">\n {{ label() }}\n </button>\n @if (isOpen()) {\n <div\n #menu\n class=\"ct-dropdown__menu\"\n [id]=\"menuId\"\n role=\"menu\"\n aria-orientation=\"vertical\"\n [attr.aria-labelledby]=\"triggerId\"\n (keydown)=\"onMenuKeydown($event)\">\n @for (item of items(); track $index) {\n @if (item.separator) {\n <div class=\"ct-dropdown__separator\" role=\"separator\"></div>\n } @else {\n <button\n #itemButton\n class=\"ct-dropdown__item\"\n role=\"menuitem\"\n [attr.tabindex]=\"focusedItemIndex() === getActionableIndex(item) ? 0 : -1\"\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\n type=\"button\"\n (click)=\"selectItem(item)\">\n {{ item.label }}\n </button>\n }\n }\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: inline-block;\n }\n `,\n ],\n})\nexport class AfDropdownComponent {\n private static nextId = 0;\n private readonly hostRef = inject(ElementRef);\n\n /** Dropdown button label. */\n label = input('Actions');\n\n /** Trigger button size. */\n size = input<AfButtonSize>('md');\n\n /** Horizontal alignment of the menu relative to the trigger. */\n align = input<'start' | 'end'>('start');\n\n /** Which side of the trigger the menu opens on. */\n side = input<'bottom' | 'top'>('bottom');\n\n /** Menu items. */\n items = input<AfDropdownItem[]>([]);\n\n /** Emits the selected item's value. */\n itemSelected = output<unknown>();\n\n /** Computed CSS classes for the trigger button. */\n triggerClasses = computed(() => {\n const classes = ['ct-button', 'ct-button--secondary', 'ct-dropdown__trigger'];\n if (this.size() !== 'md') {\n classes.push(`ct-button--${this.size()}`);\n }\n return classes.join(' ');\n });\n\n triggerRef = viewChild<ElementRef<HTMLButtonElement>>('trigger');\n menuRef = viewChild<ElementRef<HTMLElement>>('menu');\n itemButtons = viewChildren<ElementRef<HTMLButtonElement>>('itemButton');\n\n /** Non-separator items that can receive focus and be selected. */\n private actionableItems = computed(() => this.items().filter((item) => !item.separator));\n\n isOpen = signal(false);\n focusedItemIndex = signal(0);\n\n private instanceId = AfDropdownComponent.nextId++;\n menuId = `af-dropdown-menu-${this.instanceId}`;\n triggerId = `af-dropdown-trigger-${this.instanceId}`;\n\n private typeAheadBuffer = '';\n private typeAheadTimer: ReturnType<typeof setTimeout> | null = null;\n\n toggle(): void {\n if (this.isOpen()) {\n this.close(true);\n } else {\n this.open();\n }\n }\n\n selectItem(item: AfDropdownItem): void {\n if (!item.disabled) {\n this.itemSelected.emit(item.value);\n this.close(true);\n }\n }\n\n /** Handles keyboard events on the trigger button. */\n onTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open(true);\n }\n break;\n }\n }\n\n /** Handles keyboard events within the open menu. */\n onMenuKeydown(event: KeyboardEvent): void {\n const actionableItems = this.actionableItems();\n if (actionableItems.length === 0) return;\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n const next = this.nextEnabledIndex(this.focusedItemIndex(), 1);\n this.focusItem(next);\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n const prev = this.nextEnabledIndex(this.focusedItemIndex(), -1);\n this.focusItem(prev);\n break;\n }\n case 'Home': {\n event.preventDefault();\n const first = this.nextEnabledIndex(-1, 1);\n this.focusItem(first);\n break;\n }\n case 'End': {\n event.preventDefault();\n const last = this.nextEnabledIndex(actionableItems.length, -1);\n this.focusItem(last);\n break;\n }\n case 'Escape':\n event.preventDefault();\n this.close(true);\n break;\n case 'Tab':\n this.close(false);\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n const item = actionableItems[this.focusedItemIndex()];\n if (item && !item.disabled) {\n this.selectItem(item);\n }\n break;\n }\n default:\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey) {\n this.handleTypeAhead(event.key);\n }\n }\n }\n\n onDocumentClick(event: MouseEvent): void {\n if (!this.hostRef.nativeElement.contains(event.target)) {\n this.close(false);\n }\n }\n\n /**\n * Returns the index of a non-separator item within the list of\n * actionable (non-separator) items.\n */\n getActionableIndex(item: AfDropdownItem): number {\n return this.actionableItems().indexOf(item);\n }\n\n private open(focusLast = false): void {\n this.isOpen.set(true);\n const actionableItems = this.actionableItems();\n const startIndex = focusLast\n ? this.nextEnabledIndex(actionableItems.length, -1)\n : this.nextEnabledIndex(-1, 1);\n this.focusedItemIndex.set(startIndex);\n queueMicrotask(() => this.focusCurrent());\n }\n\n private close(returnFocus: boolean): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.typeAheadBuffer = '';\n if (returnFocus) {\n this.triggerRef()?.nativeElement.focus();\n }\n }\n\n private focusItem(index: number): void {\n this.focusedItemIndex.set(index);\n this.focusCurrent();\n }\n\n private focusCurrent(): void {\n const buttons = this.itemButtons();\n const idx = this.focusedItemIndex();\n buttons[idx]?.nativeElement.focus();\n }\n\n private nextEnabledIndex(from: number, direction: 1 | -1): number {\n const actionableItems = this.actionableItems();\n const len = actionableItems.length;\n if (len === 0) return 0;\n\n let idx = from + direction;\n for (let i = 0; i < len; i++) {\n if (idx < 0) idx = len - 1;\n if (idx >= len) idx = 0;\n if (!actionableItems[idx].disabled) return idx;\n idx += direction;\n }\n return from;\n }\n\n private handleTypeAhead(char: string): void {\n if (this.typeAheadTimer) {\n clearTimeout(this.typeAheadTimer);\n }\n this.typeAheadBuffer += char.toLowerCase();\n this.typeAheadTimer = setTimeout(() => {\n this.typeAheadBuffer = '';\n this.typeAheadTimer = null;\n }, 500);\n\n const actionableItems = this.actionableItems();\n const startIndex = this.focusedItemIndex() + 1;\n\n for (let i = 0; i < actionableItems.length; i++) {\n const idx = (startIndex + i) % actionableItems.length;\n const item = actionableItems[idx];\n if (!item.disabled && item.label.toLowerCase().startsWith(this.typeAheadBuffer)) {\n this.focusItem(idx);\n return;\n }\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input, output, computed } from '@angular/core';\n\n/**\n * Pagination component\n *\n * @example\n * <af-pagination\n * [currentPage]=\"page\"\n * [totalPages]=\"10\"\n * (pageChange)=\"onPageChange($event)\">\n * </af-pagination>\n */\n@Component({\n selector: 'af-pagination',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nav class=\"ct-pagination\" aria-label=\"Pagination\">\n <ul class=\"ct-pagination__list\">\n <li>\n <button\n class=\"ct-pagination__link\"\n [attr.aria-disabled]=\"currentPage() === 1 ? 'true' : null\"\n [disabled]=\"currentPage() === 1\"\n type=\"button\"\n (click)=\"goToPage(currentPage() - 1)\">\n {{ previousLabel() }}\n </button>\n </li>\n @for (page of visiblePages(); track page) {\n <li>\n @if (page === '...') {\n <span class=\"ct-pagination__ellipsis\">…</span>\n } @else {\n <button\n class=\"ct-pagination__link\"\n [attr.aria-current]=\"currentPage() === page ? 'page' : null\"\n type=\"button\"\n (click)=\"goToPage(page)\">\n {{ page }}\n </button>\n }\n </li>\n }\n <li>\n <button\n class=\"ct-pagination__link\"\n [attr.aria-disabled]=\"currentPage() === totalPages() ? 'true' : null\"\n [disabled]=\"currentPage() === totalPages()\"\n type=\"button\"\n (click)=\"goToPage(currentPage() + 1)\">\n {{ nextLabel() }}\n </button>\n </li>\n </ul>\n </nav>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfPaginationComponent {\n /** Current page number (1-indexed) */\n currentPage = input(1);\n\n /** Total number of pages */\n totalPages = input(1);\n\n /** Label for previous button */\n previousLabel = input('Prev');\n\n /** Label for next button */\n nextLabel = input('Next');\n\n /** Maximum number of page buttons to show */\n maxVisiblePages = input(7);\n\n /** Page change event */\n pageChange = output<number>();\n\n visiblePages = computed(() => {\n const pages: (number | string)[] = [];\n const halfMax = Math.floor(this.maxVisiblePages() / 2);\n\n let start = Math.max(1, this.currentPage() - halfMax);\n let end = Math.min(this.totalPages(), start + this.maxVisiblePages() - 1);\n\n if (end - start < this.maxVisiblePages() - 1) {\n start = Math.max(1, end - this.maxVisiblePages() + 1);\n }\n\n if (start > 1) {\n pages.push(1);\n if (start > 2) pages.push('...');\n }\n\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n if (end < this.totalPages()) {\n if (end < this.totalPages() - 1) pages.push('...');\n pages.push(this.totalPages());\n }\n\n return pages;\n });\n\n goToPage(page: number | string): void {\n if (typeof page === 'number' && page >= 1 && page <= this.totalPages() && page !== this.currentPage()) {\n this.pageChange.emit(page);\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\nexport interface AfBreadcrumb {\n label: string;\n /** Angular Router link for SPA navigation (preferred for internal routes). */\n routerLink?: string | string[];\n /** Plain HTML href for external links. Causes a full page reload. */\n url?: string;\n}\n\n/**\n * Breadcrumbs navigation component with Angular Router support.\n *\n * Items with `routerLink` navigate via the Angular Router (no page reload).\n * Items with `url` render a plain `<a href>` (for external links).\n * The last item is always rendered as static text (current page).\n *\n * @example\n * <af-breadcrumbs [items]=\"[\n * { label: 'Home', routerLink: '/' },\n * { label: 'Documents', routerLink: '/documents' },\n * { label: 'My Documents' }\n * ]\"></af-breadcrumbs>\n */\n@Component({\n selector: 'af-breadcrumbs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink],\n template: `\n <nav class=\"ct-breadcrumbs\" aria-label=\"Breadcrumb\">\n <ol class=\"ct-breadcrumbs__list\">\n @for (item of items(); track $index; let isLast = $last) {\n <li class=\"ct-breadcrumbs__item\">\n @if (isLast) {\n <span class=\"ct-breadcrumbs__current\" aria-current=\"page\">{{ item.label }}</span>\n } @else if (item.routerLink) {\n <a class=\"ct-breadcrumbs__link\" [routerLink]=\"item.routerLink\">\n {{ item.label }}\n </a>\n <span class=\"ct-breadcrumbs__separator\" aria-hidden=\"true\">/</span>\n } @else if (item.url) {\n <a class=\"ct-breadcrumbs__link\" [href]=\"item.url\">\n {{ item.label }}\n </a>\n <span class=\"ct-breadcrumbs__separator\" aria-hidden=\"true\">/</span>\n } @else {\n <span class=\"ct-breadcrumbs__text\">{{ item.label }}</span>\n <span class=\"ct-breadcrumbs__separator\" aria-hidden=\"true\">/</span>\n }\n </li>\n }\n </ol>\n </nav>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfBreadcrumbsComponent {\n /** Breadcrumb items */\n items = input<AfBreadcrumb[]>([]);\n}\n","import {\n Component,\n forwardRef,\n signal,\n computed,\n ElementRef,\n viewChild,\n input,\n output,\n model,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NG_VALIDATORS,\n Validator,\n AbstractControl,\n ValidationErrors,\n} from '@angular/forms';\n\n/** Supported calendar views */\nexport type AfDatepickerView = 'days' | 'months' | 'years';\n\n/** Selection mode */\nexport type AfDatepickerMode = 'single' | 'range';\n\n/** Value format emitted by ControlValueAccessor */\nexport type AfDatepickerValueFormat = 'date' | 'iso';\n\n/** Date range value for range mode */\nexport interface AfDateRange {\n start: Date | null;\n end: Date | null;\n}\n\ninterface CalendarDay {\n date: Date;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isDisabled: boolean;\n isUnavailable: boolean;\n isInRange: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n}\n\ninterface MonthItem {\n index: number;\n label: string;\n shortLabel: string;\n isSelected: boolean;\n isDisabled: boolean;\n}\n\ninterface YearItem {\n value: number;\n isSelected: boolean;\n isDisabled: boolean;\n}\n\nconst MONTH_NAMES = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nconst MONTH_SHORT = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\nconst WEEKDAY_LABELS = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n\n/**\n * Datepicker component with calendar popup, month/year views, range selection,\n * min/max constraints, disabled dates, and full keyboard navigation.\n *\n * Implements WAI-ARIA Date Picker Dialog pattern with roving tabindex.\n *\n * @example\n * <af-datepicker\n * label=\"Start date\"\n * placeholder=\"Pick a date\"\n * [(ngModel)]=\"selectedDate\"\n * [min]=\"minDate\"\n * [max]=\"maxDate\"\n * hint=\"Choose a date within the project timeline\"\n * />\n *\n * @example\n * <af-datepicker\n * label=\"Period\"\n * mode=\"range\"\n * [(ngModel)]=\"dateRange\"\n * valueFormat=\"iso\"\n * />\n */\n@Component({\n selector: 'af-datepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfDatepickerComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => AfDatepickerComponent),\n multi: true,\n },\n ],\n host: {\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span aria-label=\"required\"> *</span>\n }\n </label>\n }\n\n <div class=\"ct-datepicker\" [attr.data-state]=\"isOpen() ? 'open' : 'closed'\">\n <div class=\"ct-datepicker__input-wrap\">\n <input\n #inputEl\n class=\"ct-input\"\n type=\"text\"\n [id]=\"inputId()\"\n [placeholder]=\"placeholder()\"\n [value]=\"formattedValue()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"popoverId()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-label]=\"label() ? null : (placeholder() || 'Select date')\"\n (click)=\"toggle()\"\n (keydown)=\"onInputKeydown($event)\"\n (blur)=\"onTouched()\"\n readonly\n />\n @if (hasClearableValue() && !disabled()) {\n <button\n class=\"ct-datepicker__clear\"\n type=\"button\"\n aria-label=\"Clear date\"\n (click)=\"clearValue($event)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n </div>\n\n <div\n #popoverEl\n class=\"ct-datepicker__popover\"\n role=\"dialog\"\n [id]=\"popoverId()\"\n [attr.aria-label]=\"dialogAriaLabel()\"\n [attr.aria-hidden]=\"!isOpen() || null\">\n\n <div class=\"ct-datepicker__header\">\n <button\n class=\"ct-button ct-button--ghost ct-button--icon\"\n type=\"button\"\n [attr.aria-label]=\"prevButtonAriaLabel()\"\n (click)=\"navigatePrevious()\">\n ‹\n </button>\n <button\n class=\"ct-datepicker__title\"\n type=\"button\"\n [attr.aria-label]=\"titleAriaLabel()\"\n (click)=\"drillUp()\">\n {{ headerTitle() }}\n </button>\n <button\n class=\"ct-button ct-button--ghost ct-button--icon\"\n type=\"button\"\n [attr.aria-label]=\"nextButtonAriaLabel()\"\n (click)=\"navigateNext()\">\n ›\n </button>\n </div>\n\n @switch (currentView()) {\n @case ('days') {\n <div\n class=\"ct-datepicker__grid\"\n role=\"grid\"\n [attr.aria-label]=\"gridAriaLabel()\"\n (keydown)=\"onDayGridKeydown($event)\">\n <div class=\"ct-datepicker__row\" role=\"row\">\n @for (day of weekdayLabels; track $index) {\n <div class=\"ct-datepicker__weekday\" role=\"columnheader\" [attr.aria-label]=\"weekdayFullLabels[$index]\">\n {{ day }}\n </div>\n }\n </div>\n @for (day of calendarDays(); track day.date.getTime()) {\n <button\n class=\"ct-datepicker__day\"\n [attr.data-date]=\"getDateKey(day.date)\"\n [attr.data-outside]=\"!day.isCurrentMonth || null\"\n [attr.data-today]=\"day.isToday || null\"\n [attr.data-unavailable]=\"day.isUnavailable || null\"\n [attr.data-highlighted]=\"isDayHighlighted(day) || null\"\n [attr.data-in-range]=\"day.isInRange || null\"\n [attr.data-range-start]=\"day.isRangeStart || null\"\n [attr.data-range-end]=\"day.isRangeEnd || null\"\n [attr.aria-selected]=\"day.isSelected ? 'true' : null\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n [attr.aria-disabled]=\"day.isDisabled || day.isUnavailable ? 'true' : null\"\n [disabled]=\"day.isDisabled || day.isUnavailable\"\n [attr.tabindex]=\"getDayTabIndex(day)\"\n role=\"gridcell\"\n type=\"button\"\n (click)=\"onDayClick(day)\">\n {{ day.date.getDate() }}\n </button>\n }\n </div>\n <div class=\"ct-datepicker__footer\">\n <button\n class=\"ct-datepicker__today\"\n type=\"button\"\n [disabled]=\"isTodayDisabled()\"\n (click)=\"goToToday()\">\n Today\n </button>\n </div>\n }\n @case ('months') {\n <div\n class=\"ct-datepicker__month-grid\"\n role=\"grid\"\n aria-label=\"Select month\"\n (keydown)=\"onMonthGridKeydown($event)\">\n @for (m of monthItems(); track m.index) {\n <button\n class=\"ct-datepicker__month\"\n [attr.aria-selected]=\"m.isSelected ? 'true' : null\"\n [attr.data-highlighted]=\"isMonthHighlighted(m.index) || null\"\n [disabled]=\"m.isDisabled\"\n [attr.tabindex]=\"getMonthTabIndex(m.index)\"\n role=\"gridcell\"\n type=\"button\"\n (click)=\"selectMonth(m.index)\">\n {{ m.shortLabel }}\n </button>\n }\n </div>\n }\n @case ('years') {\n <div\n class=\"ct-datepicker__year-grid\"\n role=\"grid\"\n aria-label=\"Select year\"\n (keydown)=\"onYearGridKeydown($event)\">\n @for (y of yearItems(); track y.value) {\n <button\n class=\"ct-datepicker__year\"\n [attr.aria-selected]=\"y.isSelected ? 'true' : null\"\n [attr.data-highlighted]=\"isYearHighlighted(y.value) || null\"\n [disabled]=\"y.isDisabled\"\n [attr.tabindex]=\"getYearTabIndex(y.value)\"\n role=\"gridcell\"\n type=\"button\"\n (click)=\"selectYear(y.value)\">\n {{ y.value }}\n </button>\n }\n </div>\n }\n }\n </div>\n </div>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId()\">{{ hint() }}</div>\n }\n @if (error()) {\n <div class=\"ct-field__error\" [id]=\"errorId()\">{{ error() }}</div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .ct-datepicker__input-wrap {\n position: relative;\n display: flex;\n align-items: center;\n }\n .ct-datepicker__input-wrap .ct-input {\n width: 100%;\n padding-inline-end: 2.25rem;\n }\n .ct-datepicker__clear {\n position: absolute;\n inset-inline-end: 0.5rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--color-text-muted);\n padding: 0.25rem;\n border-radius: var(--radius-sm);\n }\n .ct-datepicker__clear:hover {\n color: var(--color-text-primary);\n }\n .ct-datepicker__clear:focus-visible {\n outline: var(--border-medium) solid var(--color-focus-ring);\n outline-offset: 2px;\n }\n .ct-datepicker__footer {\n display: flex;\n justify-content: center;\n }\n .ct-datepicker__today {\n appearance: none;\n border: none;\n background: transparent;\n color: var(--color-brand-primary);\n cursor: pointer;\n font-size: var(--font-size-sm);\n padding: var(--space-1) var(--space-3);\n border-radius: var(--radius-sm);\n font-weight: var(--font-weight-medium, 500);\n }\n .ct-datepicker__today:hover:not(:disabled) {\n background: var(--color-bg-muted);\n }\n .ct-datepicker__today:focus-visible {\n outline: var(--border-medium) solid var(--color-focus-ring);\n outline-offset: 2px;\n }\n .ct-datepicker__today:disabled {\n opacity: var(--opacity-disabled, 0.5);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class AfDatepickerComponent implements ControlValueAccessor, Validator {\n private static nextId = 0;\n\n // ── Public Inputs ────────────────────────────────────────────\n\n /** Field label */\n label = input('');\n\n /** Input placeholder text */\n placeholder = input('Select date');\n\n /** Whether the datepicker is disabled */\n disabled = model(false);\n\n /** Display format for the selected date */\n dateFormat = input('MMM dd, yyyy');\n\n /** Unique ID for the input element */\n inputId = input(`af-datepicker-${AfDatepickerComponent.nextId++}`);\n\n /** Minimum selectable date */\n min = input<Date | string | null>(null);\n\n /** Maximum selectable date */\n max = input<Date | string | null>(null);\n\n /** Array of specific dates that cannot be selected */\n disabledDates = input<Date[]>([]);\n\n /**\n * Predicate function to determine if a date is selectable.\n * Return `true` to allow selection, `false` to disable.\n */\n dateFilter = input<((date: Date) => boolean) | null>(null);\n\n /** Hint text displayed below the input */\n hint = input('');\n\n /** Error message — displays error state and message */\n error = input('');\n\n /** Whether the field is required */\n required = input(false);\n\n /** Selection mode: single date or date range */\n mode = input<AfDatepickerMode>('single');\n\n /**\n * Value format for ControlValueAccessor.\n * `'date'` emits `Date` objects, `'iso'` emits ISO date strings (`yyyy-MM-dd`).\n */\n valueFormat = input<AfDatepickerValueFormat>('date');\n\n /** Emitted when a single date is selected */\n dateChange = output<Date>();\n\n /** Emitted when a date range is selected (range mode only) */\n rangeChange = output<AfDateRange>();\n\n // ── Template References ──────────────────────────────────────\n\n inputRef = viewChild<ElementRef<HTMLInputElement>>('inputEl');\n popoverRef = viewChild<ElementRef<HTMLDivElement>>('popoverEl');\n\n // ── Constants ────────────────────────────────────────────────\n\n weekdayLabels = WEEKDAY_LABELS;\n weekdayFullLabels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n\n // ── Internal State ───────────────────────────────────────────\n\n selectedDate = signal<Date | null>(null);\n rangeStart = signal<Date | null>(null);\n rangeEnd = signal<Date | null>(null);\n rangeSelecting = signal(false);\n\n currentMonth = signal(new Date().getMonth());\n currentYear = signal(new Date().getFullYear());\n isOpen = signal(false);\n focusedDate = signal<Date | null>(null);\n currentView = signal<AfDatepickerView>('days');\n focusedMonth = signal(new Date().getMonth());\n focusedYear = signal(new Date().getFullYear());\n yearPageStart = signal(Math.floor(new Date().getFullYear() / 12) * 12);\n\n onChange: (value: unknown) => void = () => {};\n onTouched: () => void = () => {};\n private onValidatorChange: () => void = () => {};\n\n // ── Computed ─────────────────────────────────────────────────\n\n parsedMin = computed(() => this.parseDate(this.min()));\n parsedMax = computed(() => this.parseDate(this.max()));\n\n popoverId = computed(() => `${this.inputId()}-popover`);\n hintId = computed(() => `${this.inputId()}-hint`);\n errorId = computed(() => `${this.inputId()}-error`);\n\n ariaDescribedBy = computed(() => {\n if (this.error()) return this.errorId();\n if (this.hint()) return this.hintId();\n return null;\n });\n\n dialogAriaLabel = computed(() => {\n if (this.mode() === 'range') return 'Choose date range';\n return 'Choose date';\n });\n\n headerTitle = computed(() => {\n switch (this.currentView()) {\n case 'days':\n return `${MONTH_NAMES[this.currentMonth()]} ${this.currentYear()}`;\n case 'months':\n return `${this.currentYear()}`;\n case 'years':\n return `${this.yearPageStart()} – ${this.yearPageStart() + 11}`;\n }\n });\n\n titleAriaLabel = computed(() => {\n switch (this.currentView()) {\n case 'days':\n return 'Switch to month view';\n case 'months':\n return 'Switch to year view';\n case 'years':\n return null;\n }\n });\n\n prevButtonAriaLabel = computed(() => {\n switch (this.currentView()) {\n case 'days':\n return 'Previous month';\n case 'months':\n return 'Previous year';\n case 'years':\n return 'Previous 12 years';\n }\n });\n\n nextButtonAriaLabel = computed(() => {\n switch (this.currentView()) {\n case 'days':\n return 'Next month';\n case 'months':\n return 'Next year';\n case 'years':\n return 'Next 12 years';\n }\n });\n\n gridAriaLabel = computed(\n () => `${MONTH_NAMES[this.currentMonth()]} ${this.currentYear()}`\n );\n\n hasClearableValue = computed(() => {\n if (this.mode() === 'range') {\n return this.rangeStart() !== null || this.rangeEnd() !== null;\n }\n return this.selectedDate() !== null;\n });\n\n formattedValue = computed(() => {\n if (this.mode() === 'range') {\n const start = this.rangeStart();\n const end = this.rangeEnd();\n if (!start && !end) return '';\n const startStr = start ? this.formatDate(start) : '...';\n const endStr = end ? this.formatDate(end) : '...';\n return `${startStr} – ${endStr}`;\n }\n const date = this.selectedDate();\n return date ? this.formatDate(date) : '';\n });\n\n isTodayDisabled = computed(() => this.isDateDisabled(new Date()));\n\n calendarDays = computed((): CalendarDay[] => {\n const year = this.currentYear();\n const month = this.currentMonth();\n const today = new Date();\n const selected = this.selectedDate();\n const rStart = this.rangeStart();\n const rEnd = this.rangeEnd();\n const previewEnd =\n this.mode() === 'range' && this.rangeSelecting() ? this.focusedDate() : null;\n const effectiveEnd = rEnd ?? previewEnd;\n\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const days: CalendarDay[] = [];\n\n let startPad = firstDay.getDay() - 1;\n if (startPad < 0) startPad = 6;\n\n const prevLast = new Date(year, month, 0).getDate();\n for (let i = startPad - 1; i >= 0; i--) {\n days.push(this.buildDay(new Date(year, month - 1, prevLast - i), false, today, selected, rStart, effectiveEnd));\n }\n\n for (let i = 1; i <= lastDay.getDate(); i++) {\n days.push(this.buildDay(new Date(year, month, i), true, today, selected, rStart, effectiveEnd));\n }\n\n const remaining = 42 - days.length;\n for (let i = 1; i <= remaining; i++) {\n days.push(this.buildDay(new Date(year, month + 1, i), false, today, selected, rStart, effectiveEnd));\n }\n\n return days;\n });\n\n monthItems = computed((): MonthItem[] => {\n const year = this.currentYear();\n const selected = this.selectedDate();\n const min = this.parsedMin();\n const max = this.parsedMax();\n\n return Array.from({ length: 12 }, (_, i) => {\n const isDisabled = this.isMonthDisabled(year, i, min, max);\n return {\n index: i,\n label: MONTH_NAMES[i],\n shortLabel: MONTH_SHORT[i],\n isSelected: selected ? selected.getMonth() === i && selected.getFullYear() === year : false,\n isDisabled,\n };\n });\n });\n\n yearItems = computed((): YearItem[] => {\n const start = this.yearPageStart();\n const selected = this.selectedDate();\n const min = this.parsedMin();\n const max = this.parsedMax();\n\n return Array.from({ length: 12 }, (_, i) => {\n const value = start + i;\n return {\n value,\n isSelected: selected ? selected.getFullYear() === value : false,\n isDisabled: this.isYearDisabled(value, min, max),\n };\n });\n });\n\n // ── Open / Close ─────────────────────────────────────────────\n\n toggle(): void {\n if (this.isOpen()) {\n this.close(true);\n } else {\n this.open();\n }\n }\n\n /** Opens the calendar popover */\n open(): void {\n if (this.disabled() || this.isOpen()) return;\n const selected = this.selectedDate();\n const focusDate = selected ?? new Date();\n this.currentMonth.set(focusDate.getMonth());\n this.currentYear.set(focusDate.getFullYear());\n this.focusedDate.set(focusDate);\n this.focusedMonth.set(focusDate.getMonth());\n this.focusedYear.set(focusDate.getFullYear());\n this.currentView.set('days');\n this.isOpen.set(true);\n queueMicrotask(() => this.focusDayButton(focusDate));\n }\n\n /** Closes the calendar popover */\n close(returnFocus = false): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.onTouched();\n if (returnFocus) {\n this.inputRef()?.nativeElement.focus();\n }\n }\n\n // ── Day Selection ────────────────────────────────────────────\n\n /** Handles click on a calendar day */\n onDayClick(day: CalendarDay): void {\n if (day.isDisabled || day.isUnavailable) return;\n if (this.mode() === 'range') {\n this.selectRangeDate(day.date);\n } else {\n this.selectSingleDate(day.date);\n }\n }\n\n /** Selects a single date and closes the popover */\n selectSingleDate(date: Date): void {\n this.selectedDate.set(date);\n this.focusedDate.set(date);\n this.emitSingleValue(date);\n this.dateChange.emit(date);\n this.close(true);\n }\n\n /** Handles range date selection (two-click: start then end) */\n selectRangeDate(date: Date): void {\n if (!this.rangeSelecting()) {\n this.rangeStart.set(date);\n this.rangeEnd.set(null);\n this.rangeSelecting.set(true);\n this.focusedDate.set(date);\n } else {\n let start = this.rangeStart()!;\n let end = date;\n if (this.compareDays(end, start) < 0) {\n [start, end] = [end, start];\n }\n this.rangeStart.set(start);\n this.rangeEnd.set(end);\n this.rangeSelecting.set(false);\n this.emitRangeValue(start, end);\n this.rangeChange.emit({ start, end });\n this.close(true);\n }\n }\n\n /** Navigates to today and selects it (single mode) or focuses it */\n goToToday(): void {\n const today = new Date();\n if (this.isDateDisabled(today)) return;\n\n this.currentMonth.set(today.getMonth());\n this.currentYear.set(today.getFullYear());\n this.focusedDate.set(today);\n\n if (this.mode() === 'single') {\n this.selectSingleDate(today);\n } else {\n this.selectRangeDate(today);\n }\n }\n\n /** Clears the selected value */\n clearValue(event: Event): void {\n event.stopPropagation();\n if (this.mode() === 'range') {\n this.rangeStart.set(null);\n this.rangeEnd.set(null);\n this.rangeSelecting.set(false);\n this.emitRangeValue(null, null);\n } else {\n this.selectedDate.set(null);\n this.emitSingleValue(null);\n }\n this.inputRef()?.nativeElement.focus();\n }\n\n // ── View Navigation ──────────────────────────────────────────\n\n /** Drills up: days -> months -> years */\n drillUp(): void {\n const view = this.currentView();\n if (view === 'days') {\n this.focusedMonth.set(this.currentMonth());\n this.currentView.set('months');\n queueMicrotask(() => this.focusMonthButton(this.focusedMonth()));\n } else if (view === 'months') {\n this.focusedYear.set(this.currentYear());\n this.yearPageStart.set(Math.floor(this.currentYear() / 12) * 12);\n this.currentView.set('years');\n queueMicrotask(() => this.focusYearButton(this.focusedYear()));\n }\n }\n\n /** Navigates to previous period based on current view */\n navigatePrevious(): void {\n switch (this.currentView()) {\n case 'days':\n this.shiftMonth(-1);\n break;\n case 'months':\n this.currentYear.update((y) => y - 1);\n break;\n case 'years':\n this.yearPageStart.update((s) => s - 12);\n break;\n }\n }\n\n /** Navigates to next period based on current view */\n navigateNext(): void {\n switch (this.currentView()) {\n case 'days':\n this.shiftMonth(1);\n break;\n case 'months':\n this.currentYear.update((y) => y + 1);\n break;\n case 'years':\n this.yearPageStart.update((s) => s + 12);\n break;\n }\n }\n\n /** Selects a month from the month view and switches to days */\n selectMonth(monthIndex: number): void {\n this.currentMonth.set(monthIndex);\n this.focusedMonth.set(monthIndex);\n this.currentView.set('days');\n const focusDate = new Date(this.currentYear(), monthIndex, 1);\n this.focusedDate.set(focusDate);\n queueMicrotask(() => this.focusDayButton(focusDate));\n }\n\n /** Selects a year from the year view and switches to months */\n selectYear(year: number): void {\n this.currentYear.set(year);\n this.focusedYear.set(year);\n this.currentView.set('months');\n queueMicrotask(() => this.focusMonthButton(this.focusedMonth()));\n }\n\n // ── Day Helpers for Template ─────────────────────────────────\n\n /** Returns true if the given day matches the keyboard-focused date */\n isDayHighlighted(day: CalendarDay): boolean {\n const focused = this.focusedDate();\n return focused !== null && this.isSameDay(day.date, focused);\n }\n\n /** Returns the tabindex for a day button (roving tabindex pattern) */\n getDayTabIndex(day: CalendarDay): number {\n const focused = this.focusedDate();\n if (focused && this.isSameDay(day.date, focused)) return 0;\n if (!focused && day.isSelected) return 0;\n return -1;\n }\n\n /** Returns true if the given month index matches the keyboard-focused month */\n isMonthHighlighted(monthIndex: number): boolean {\n return this.currentView() === 'months' && this.focusedMonth() === monthIndex;\n }\n\n /** Returns the tabindex for a month button */\n getMonthTabIndex(monthIndex: number): number {\n return this.focusedMonth() === monthIndex ? 0 : -1;\n }\n\n /** Returns true if the given year matches the keyboard-focused year */\n isYearHighlighted(year: number): boolean {\n return this.currentView() === 'years' && this.focusedYear() === year;\n }\n\n /** Returns the tabindex for a year button */\n getYearTabIndex(year: number): number {\n return this.focusedYear() === year ? 0 : -1;\n }\n\n /** Returns a date key string for DOM identification */\n getDateKey(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n }\n\n // ── Keyboard Handlers ────────────────────────────────────────\n\n onInputKeydown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n switch (event.key) {\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.open();\n break;\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close(true);\n }\n break;\n case 'Delete':\n case 'Backspace':\n if (this.hasClearableValue()) {\n event.preventDefault();\n this.clearValue(event);\n }\n break;\n }\n }\n\n /** Keyboard navigation within the day grid */\n onDayGridKeydown(event: KeyboardEvent): void {\n if (!this.isOpen()) return;\n const focused =\n this.focusedDate() ??\n this.selectedDate() ??\n new Date(this.currentYear(), this.currentMonth(), 1);\n\n let nextDate: Date | null = null;\n\n switch (event.key) {\n case 'ArrowRight':\n nextDate = this.findNextEnabledDate(focused, 1);\n break;\n case 'ArrowLeft':\n nextDate = this.findNextEnabledDate(focused, -1);\n break;\n case 'ArrowDown':\n nextDate = this.findNextEnabledDate(focused, 7);\n break;\n case 'ArrowUp':\n nextDate = this.findNextEnabledDate(focused, -7);\n break;\n case 'Home':\n nextDate = this.addDays(focused, -this.getWeekdayIndex(focused));\n break;\n case 'End':\n nextDate = this.addDays(focused, 6 - this.getWeekdayIndex(focused));\n break;\n case 'PageUp':\n nextDate = event.shiftKey ? this.addYears(focused, -1) : this.addMonths(focused, -1);\n break;\n case 'PageDown':\n nextDate = event.shiftKey ? this.addYears(focused, 1) : this.addMonths(focused, 1);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!this.isDateDisabled(focused)) {\n this.onDayClick({ date: focused } as CalendarDay);\n }\n return;\n case 'Escape':\n event.preventDefault();\n this.close(true);\n return;\n default:\n return;\n }\n\n if (nextDate) {\n event.preventDefault();\n this.setFocusedDate(nextDate);\n }\n }\n\n /** Keyboard navigation within the month grid */\n onMonthGridKeydown(event: KeyboardEvent): void {\n let nextMonth = this.focusedMonth();\n\n switch (event.key) {\n case 'ArrowRight':\n nextMonth = Math.min(11, nextMonth + 1);\n break;\n case 'ArrowLeft':\n nextMonth = Math.max(0, nextMonth - 1);\n break;\n case 'ArrowDown':\n nextMonth = Math.min(11, nextMonth + 3);\n break;\n case 'ArrowUp':\n nextMonth = Math.max(0, nextMonth - 3);\n break;\n case 'Home':\n nextMonth = 0;\n break;\n case 'End':\n nextMonth = 11;\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!this.isMonthDisabled(this.currentYear(), nextMonth, this.parsedMin(), this.parsedMax())) {\n this.selectMonth(nextMonth);\n }\n return;\n case 'Escape':\n event.preventDefault();\n this.currentView.set('days');\n queueMicrotask(() => this.focusDayButton(this.focusedDate() ?? new Date()));\n return;\n default:\n return;\n }\n\n event.preventDefault();\n this.focusedMonth.set(nextMonth);\n queueMicrotask(() => this.focusMonthButton(nextMonth));\n }\n\n /** Keyboard navigation within the year grid */\n onYearGridKeydown(event: KeyboardEvent): void {\n let nextYear = this.focusedYear();\n const pageStart = this.yearPageStart();\n\n switch (event.key) {\n case 'ArrowRight':\n nextYear += 1;\n break;\n case 'ArrowLeft':\n nextYear -= 1;\n break;\n case 'ArrowDown':\n nextYear += 3;\n break;\n case 'ArrowUp':\n nextYear -= 3;\n break;\n case 'Home':\n nextYear = pageStart;\n break;\n case 'End':\n nextYear = pageStart + 11;\n break;\n case 'PageUp':\n nextYear -= 12;\n break;\n case 'PageDown':\n nextYear += 12;\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!this.isYearDisabled(nextYear, this.parsedMin(), this.parsedMax())) {\n this.selectYear(nextYear);\n }\n return;\n case 'Escape':\n event.preventDefault();\n this.currentView.set('months');\n queueMicrotask(() => this.focusMonthButton(this.focusedMonth()));\n return;\n default:\n return;\n }\n\n event.preventDefault();\n if (nextYear < pageStart) {\n this.yearPageStart.update((s) => s - 12);\n } else if (nextYear >= pageStart + 12) {\n this.yearPageStart.update((s) => s + 12);\n }\n this.focusedYear.set(nextYear);\n queueMicrotask(() => this.focusYearButton(nextYear));\n }\n\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (this.isOpen() && !target.closest('.ct-datepicker')) {\n this.close(false);\n }\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────\n\n writeValue(value: unknown): void {\n if (this.mode() === 'range') {\n this.writeRangeValue(value);\n } else {\n this.writeSingleValue(value);\n }\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // ── Validator ────────────────────────────────────────────────\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n\n if (this.mode() === 'range') {\n return this.validateRange(value);\n }\n return this.validateSingle(value);\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n // ── Private: Value Handling ──────────────────────────────────\n\n private writeSingleValue(value: unknown): void {\n const date = this.coerceToDate(value);\n this.selectedDate.set(date);\n if (date) {\n this.currentMonth.set(date.getMonth());\n this.currentYear.set(date.getFullYear());\n this.focusedDate.set(date);\n } else {\n this.focusedDate.set(null);\n }\n }\n\n private writeRangeValue(value: unknown): void {\n if (!value || typeof value !== 'object') {\n this.rangeStart.set(null);\n this.rangeEnd.set(null);\n this.rangeSelecting.set(false);\n return;\n }\n const range = value as Record<string, unknown>;\n this.rangeStart.set(this.coerceToDate(range['start']));\n this.rangeEnd.set(this.coerceToDate(range['end']));\n this.rangeSelecting.set(false);\n\n const focus = this.rangeStart() ?? this.rangeEnd();\n if (focus) {\n this.currentMonth.set(focus.getMonth());\n this.currentYear.set(focus.getFullYear());\n }\n }\n\n private emitSingleValue(date: Date | null): void {\n if (this.valueFormat() === 'iso') {\n this.onChange(date ? this.toIsoString(date) : null);\n } else {\n this.onChange(date);\n }\n this.onValidatorChange();\n }\n\n private emitRangeValue(start: Date | null, end: Date | null): void {\n if (this.valueFormat() === 'iso') {\n this.onChange({\n start: start ? this.toIsoString(start) : null,\n end: end ? this.toIsoString(end) : null,\n });\n } else {\n this.onChange({ start, end });\n }\n this.onValidatorChange();\n }\n\n // ── Private: Validation ──────────────────────────────────────\n\n private validateSingle(value: unknown): ValidationErrors | null {\n if (!value) return null;\n const date = this.coerceToDate(value);\n if (!date) return null;\n\n const min = this.parsedMin();\n const max = this.parsedMax();\n\n if (min && this.compareDays(date, min) < 0) {\n return { afDatepickerMin: { min, actual: date } };\n }\n if (max && this.compareDays(date, max) > 0) {\n return { afDatepickerMax: { max, actual: date } };\n }\n if (this.isDateUnavailable(date)) {\n return { afDatepickerFilter: true };\n }\n return null;\n }\n\n private validateRange(value: unknown): ValidationErrors | null {\n if (!value || typeof value !== 'object') return null;\n const range = value as Record<string, unknown>;\n const start = this.coerceToDate(range['start']);\n const end = this.coerceToDate(range['end']);\n\n const errors: ValidationErrors = {};\n const min = this.parsedMin();\n const max = this.parsedMax();\n\n if (start && min && this.compareDays(start, min) < 0) {\n errors['afDatepickerMin'] = { min, actual: start };\n }\n if (end && max && this.compareDays(end, max) > 0) {\n errors['afDatepickerMax'] = { max, actual: end };\n }\n if (start && end && this.compareDays(start, end) > 0) {\n errors['afDatepickerRange'] = { start, end };\n }\n\n return Object.keys(errors).length > 0 ? errors : null;\n }\n\n // ── Private: Calendar Building ───────────────────────────────\n\n private buildDay(\n date: Date,\n isCurrentMonth: boolean,\n today: Date,\n selected: Date | null,\n rangeStart: Date | null,\n rangeEnd: Date | null,\n ): CalendarDay {\n const isToday = this.isSameDay(date, today);\n const isSelected =\n this.mode() === 'single' && selected !== null ? this.isSameDay(date, selected) : false;\n const isDisabled = this.isDateDisabled(date);\n const isUnavailable = this.isDateUnavailable(date);\n\n let isInRange = false;\n let isRangeStart = false;\n let isRangeEnd = false;\n\n if (this.mode() === 'range' && rangeStart) {\n isRangeStart = this.isSameDay(date, rangeStart);\n if (rangeEnd) {\n const [lo, hi] =\n this.compareDays(rangeStart, rangeEnd) <= 0\n ? [rangeStart, rangeEnd]\n : [rangeEnd, rangeStart];\n isRangeStart = this.isSameDay(date, lo);\n isRangeEnd = this.isSameDay(date, hi);\n isInRange =\n !isRangeStart &&\n !isRangeEnd &&\n this.compareDays(date, lo) > 0 &&\n this.compareDays(date, hi) < 0;\n }\n }\n\n return {\n date,\n isCurrentMonth,\n isToday,\n isSelected,\n isDisabled,\n isUnavailable,\n isInRange,\n isRangeStart,\n isRangeEnd,\n };\n }\n\n // ── Private: Disability Checks ───────────────────────────────\n\n /** Checks whether a date falls outside min/max bounds */\n isDateDisabled(date: Date): boolean {\n const min = this.parsedMin();\n const max = this.parsedMax();\n if (min && this.compareDays(date, min) < 0) return true;\n if (max && this.compareDays(date, max) > 0) return true;\n return false;\n }\n\n /** Checks whether a date is explicitly unavailable (disabledDates or dateFilter) */\n private isDateUnavailable(date: Date): boolean {\n const disabled = this.disabledDates();\n if (disabled.some((d) => this.isSameDay(d, date))) return true;\n const filter = this.dateFilter();\n if (filter && !filter(date)) return true;\n return false;\n }\n\n private isMonthDisabled(\n year: number,\n month: number,\n min: Date | null,\n max: Date | null,\n ): boolean {\n if (min) {\n const minMonth = new Date(min.getFullYear(), min.getMonth(), 1);\n if (new Date(year, month + 1, 0) < minMonth) return true;\n }\n if (max) {\n const maxMonth = new Date(max.getFullYear(), max.getMonth() + 1, 0);\n if (new Date(year, month, 1) > maxMonth) return true;\n }\n return false;\n }\n\n private isYearDisabled(year: number, min: Date | null, max: Date | null): boolean {\n if (min && year < min.getFullYear()) return true;\n if (max && year > max.getFullYear()) return true;\n return false;\n }\n\n // ── Private: Focus Management ────────────────────────────────\n\n private setFocusedDate(date: Date): void {\n this.currentMonth.set(date.getMonth());\n this.currentYear.set(date.getFullYear());\n this.focusedDate.set(date);\n queueMicrotask(() => this.focusDayButton(date));\n }\n\n private focusDayButton(date: Date): void {\n const popover = this.popoverRef()?.nativeElement;\n if (!popover) return;\n const key = this.getDateKey(date);\n const button = popover.querySelector<HTMLButtonElement>(\n `.ct-datepicker__day[data-date=\"${key}\"]`,\n );\n button?.focus();\n }\n\n private focusMonthButton(monthIndex: number): void {\n const popover = this.popoverRef()?.nativeElement;\n if (!popover) return;\n const buttons = popover.querySelectorAll<HTMLButtonElement>('.ct-datepicker__month');\n buttons[monthIndex]?.focus();\n }\n\n private focusYearButton(year: number): void {\n const popover = this.popoverRef()?.nativeElement;\n if (!popover) return;\n const buttons = popover.querySelectorAll<HTMLButtonElement>('.ct-datepicker__year');\n const pageStart = this.yearPageStart();\n const index = year - pageStart;\n if (index >= 0 && index < buttons.length) {\n buttons[index]?.focus();\n }\n }\n\n /** Finds the next non-disabled date in the given direction */\n private findNextEnabledDate(from: Date, step: number): Date {\n let next = this.addDays(from, step);\n let attempts = 0;\n const singleStep = step > 0 ? 1 : -1;\n while (this.isDateDisabled(next) && attempts < 365) {\n next = this.addDays(next, singleStep);\n attempts++;\n }\n return next;\n }\n\n // ── Private: Date Arithmetic ─────────────────────────────────\n\n private shiftMonth(delta: number): void {\n const base =\n this.focusedDate() ?? new Date(this.currentYear(), this.currentMonth(), 1);\n const next = this.addMonths(base, delta);\n this.setFocusedDate(next);\n }\n\n private addDays(date: Date, delta: number): Date {\n const next = new Date(date);\n next.setDate(date.getDate() + delta);\n return next;\n }\n\n private addMonths(date: Date, delta: number): Date {\n const next = new Date(date);\n next.setMonth(date.getMonth() + delta);\n return next;\n }\n\n private addYears(date: Date, delta: number): Date {\n const next = new Date(date);\n next.setFullYear(date.getFullYear() + delta);\n return next;\n }\n\n private getWeekdayIndex(date: Date): number {\n const day = date.getDay();\n return day === 0 ? 6 : day - 1;\n }\n\n // ── Private: Date Comparison & Parsing ───────────────────────\n\n private isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n }\n\n private compareDays(a: Date, b: Date): number {\n const da = new Date(a.getFullYear(), a.getMonth(), a.getDate()).getTime();\n const db = new Date(b.getFullYear(), b.getMonth(), b.getDate()).getTime();\n return da - db;\n }\n\n private parseDate(value: Date | string | null | undefined): Date | null {\n if (!value) return null;\n if (value instanceof Date) return value;\n if (typeof value === 'string') {\n const parsed = new Date(value);\n return isNaN(parsed.getTime()) ? null : parsed;\n }\n return null;\n }\n\n private coerceToDate(value: unknown): Date | null {\n if (!value) return null;\n if (value instanceof Date) return value;\n if (typeof value === 'string') {\n const parsed = new Date(value);\n return isNaN(parsed.getTime()) ? null : parsed;\n }\n return null;\n }\n\n private toIsoString(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n }\n\n private formatDate(date: Date): string {\n const tokens: Record<string, string> = {\n yyyy: String(date.getFullYear()),\n MMM: MONTH_SHORT[date.getMonth()],\n MM: String(date.getMonth() + 1).padStart(2, '0'),\n dd: String(date.getDate()).padStart(2, '0'),\n d: String(date.getDate()),\n };\n return this.dateFormat().replace(/yyyy|MMM|MM|dd|d/g, (token) => tokens[token] ?? token);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n input,\n model,\n output,\n} from '@angular/core';\n\nexport type AfChipVariant = 'default' | 'info' | 'success' | 'warning' | 'danger';\nexport type AfChipAppearance = 'subtle' | 'outline' | 'solid';\nexport type AfChipSize = 'sm' | 'md' | 'lg';\n\n/**\n * Chip component for labels, tags, statuses, and interactive filters.\n *\n * @example Static chip\n * <af-chip variant=\"success\" size=\"sm\">Resolved</af-chip>\n *\n * @example Toggle chip with two-way binding\n * <af-chip selectable [(selected)]=\"isActive\">Filter</af-chip>\n *\n * @example Removable chip\n * <af-chip removable (removed)=\"onRemove()\">Status: Active</af-chip>\n */\n@Component({\n selector: 'af-chip',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'chipClasses()',\n '[attr.role]': 'chipRole()',\n '[attr.tabindex]': 'selectable() && !removable() && !disabled() ? \"0\" : null',\n '[attr.aria-pressed]': 'selectable() && !removable() ? selected() : null',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.aria-label]': 'ariaLabel() || null',\n '(click)': 'handleClick()',\n '(keydown.enter)': 'handleKeydown($event)',\n '(keydown.space)': 'handleKeydown($event)',\n '(keydown.delete)': 'handleRemoveKeydown($event)',\n '(keydown.backspace)': 'handleRemoveKeydown($event)',\n },\n template: `\n <span\n class=\"ct-chip__action\"\n [attr.role]=\"selectable() && removable() ? 'button' : null\"\n [attr.tabindex]=\"selectable() && removable() && !disabled() ? '0' : null\"\n [attr.aria-pressed]=\"selectable() && removable() ? selected() : null\">\n @if (dot()) {\n <span class=\"ct-chip__dot\" aria-hidden=\"true\"></span>\n } @else {\n <span class=\"ct-chip__avatar\">\n <ng-content select=\"[chipAvatar]\" />\n </span>\n\n <span [class]=\"iconClasses()\" aria-hidden=\"true\">\n <ng-content select=\"af-icon,[chipIcon]\" />\n </span>\n }\n\n <span class=\"ct-chip__label\">\n <ng-content />\n </span>\n\n @if (selectable()) {\n <span class=\"ct-chip__check\" aria-hidden=\"true\"></span>\n }\n </span>\n\n @if (removable() && !disabled()) {\n <button\n type=\"button\"\n class=\"ct-chip__remove\"\n [attr.aria-label]=\"removeAriaLabel()\"\n (click)=\"handleRemove($event)\">\n <svg\n viewBox=\"0 0 24 24\"\n width=\"16\"\n height=\"16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n `,\n styles: `\n :host {\n display: inline-flex;\n align-items: center;\n }\n .ct-chip__action {\n display: contents;\n }\n .ct-chip__action:focus-visible {\n outline: none;\n }\n :host:has(.ct-chip__action:focus-visible) {\n outline: 2px solid var(--color-focus-ring, Highlight);\n outline-offset: 2px;\n }\n .ct-chip__icon:not(:has(*)),\n .ct-chip__avatar:not(:has(*)) {\n display: none;\n }\n `,\n})\nexport class AfChipComponent {\n /** Semantic color variant. */\n variant = input<AfChipVariant>('default');\n\n /** Visual style: subtle (filled background), outline, or solid. */\n appearance = input<AfChipAppearance>('subtle');\n\n /** Size of the chip. */\n size = input<AfChipSize>('md');\n\n /** Opaque value for identifying this chip in lists or groups. */\n value = input<unknown>();\n\n /** Enables toggle behavior with hover, active, focus styles, and keyboard support. */\n selectable = input(false, { transform: booleanAttribute });\n\n /** Selected state for toggle chips. Supports two-way binding via `[(selected)]`. */\n selected = model(false);\n\n /** Disables the chip, preventing all interaction. */\n disabled = input(false, { transform: booleanAttribute });\n\n /** Shows a remove button inside the chip. */\n removable = input(false, { transform: booleanAttribute });\n\n /** Shows a dot status indicator instead of an icon. */\n dot = input(false, { transform: booleanAttribute });\n\n /** Accessible label for icon-only or truncated chips. */\n ariaLabel = input<string>();\n\n /** Accessible label for the remove button. Should be localized by the consumer. */\n removeAriaLabel = input('Remove');\n\n /** Emits the chip's `value` when the remove button is clicked or Delete/Backspace is pressed. */\n removed = output<unknown>();\n\n chipRole = computed(() => {\n if (!this.selectable()) return null;\n return this.removable() ? 'group' : 'button';\n });\n\n iconClasses = computed(() => {\n const classes = ['ct-chip__icon'];\n if (this.variant() !== 'default') {\n classes.push(`ct-chip__icon--${this.variant()}`);\n }\n return classes.join(' ');\n });\n\n chipClasses = computed(() => {\n const classes = ['ct-chip'];\n\n if (this.size() !== 'md') {\n classes.push(`ct-chip--${this.size()}`);\n }\n\n if (this.appearance() !== 'subtle') {\n classes.push(`ct-chip--${this.appearance()}`);\n }\n\n if (this.variant() !== 'default') {\n classes.push(`ct-chip--${this.variant()}`);\n }\n\n if (this.selectable()) {\n classes.push('ct-chip--interactive');\n }\n\n if (this.selectable() && this.selected()) {\n classes.push('ct-chip--selected');\n }\n\n if (this.disabled()) {\n classes.push('ct-chip--disabled');\n }\n\n return classes.join(' ');\n });\n\n handleClick(): void {\n if (!this.selectable() || this.disabled()) return;\n this.selected.update(v => !v);\n }\n\n handleKeydown(event: Event): void {\n if ((event.target as HTMLElement).closest('.ct-chip__remove')) return;\n if (!this.selectable() || this.disabled()) return;\n event.preventDefault();\n this.selected.update(v => !v);\n }\n\n handleRemoveKeydown(event: Event): void {\n if (!this.removable() || this.disabled()) return;\n event.preventDefault();\n this.removed.emit(this.value());\n }\n\n handleRemove(event: MouseEvent): void {\n event.stopPropagation();\n this.removed.emit(this.value());\n }\n}\n","import {\n Component,\n ElementRef,\n viewChild,\n forwardRef,\n input,\n output,\n model,\n signal,\n computed,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Chip input component for managing a list of string values.\n *\n * Renders existing values as removable chips and provides a text input\n * that creates new chips on configurable separator keys (Enter, Comma, Semicolon).\n * Implements ControlValueAccessor for seamless integration with Angular Reactive Forms\n * and template-driven forms, binding to a `string[]` value.\n *\n * @example\n * <af-chip-input\n * label=\"Roles\"\n * placeholder=\"Add role...\"\n * [(ngModel)]=\"roles\">\n * </af-chip-input>\n *\n * @example\n * <af-chip-input\n * label=\"Tags\"\n * [separators]=\"[',', ';']\"\n * [formControl]=\"tagsControl\">\n * </af-chip-input>\n */\n@Component({\n selector: 'af-chip-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfChipInputComponent),\n multi: true,\n },\n ],\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [attr.for]=\"inputId\">\n {{ label() }}\n @if (required()) {\n <span aria-label=\"required\"> *</span>\n }\n </label>\n }\n\n <div\n class=\"ct-chip-input\"\n [class.ct-chip-input--disabled]=\"disabled()\"\n [class.ct-chip-input--focused]=\"focused()\"\n (click)=\"focusInput()\">\n @for (chip of chips(); track chip) {\n <span\n class=\"ct-chip\"\n [attr.aria-disabled]=\"disabled() || null\">\n <span class=\"ct-chip__label\">{{ chip }}</span>\n @if (!disabled()) {\n <button\n type=\"button\"\n class=\"ct-chip__remove\"\n [attr.aria-label]=\"'Remove ' + chip\"\n (click)=\"remove(chip, $event)\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg>\n </button>\n }\n </span>\n }\n\n <input\n #chipInput\n [id]=\"inputId\"\n type=\"text\"\n class=\"ct-chip-input__input\"\n [placeholder]=\"chips().length === 0 ? placeholder() : ''\"\n [disabled]=\"disabled()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"getAriaDescribedBy()\"\n (keydown)=\"onKeydown($event)\"\n (input)=\"onInputChange($event)\"\n (focus)=\"focused.set(true)\"\n (blur)=\"onBlur()\"\n />\n </div>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId()\">\n {{ hint() }}\n </div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" [id]=\"errorId()\">\n {{ error() }}\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .ct-chip-input {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2, 0.5rem);\n padding: var(--space-2, 0.5rem);\n border: var(--border-thin, 1px solid) var(--color-border-default, #d1d5db);\n border-radius: var(--radius-md, 0.375rem);\n background: var(--color-bg-default, #fff);\n cursor: text;\n transition: border-color var(--duration-fast, 150ms) var(--easing-standard, ease);\n }\n\n .ct-chip-input--focused {\n border-color: var(--color-focus-ring, #2563eb);\n outline: 2px solid var(--color-focus-ring, #2563eb);\n outline-offset: 2px;\n }\n\n .ct-chip-input--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .ct-chip-input__input {\n flex: 1 1 auto;\n min-width: 80px;\n border: none;\n outline: none;\n background: transparent;\n font: inherit;\n color: inherit;\n padding: var(--space-1, 0.25rem) 0;\n }\n\n .ct-chip-input__input:disabled {\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class AfChipInputComponent implements ControlValueAccessor {\n private static nextId = 0;\n\n /** Label shown above the input */\n label = input('');\n\n /** Placeholder text for the text input */\n placeholder = input('');\n\n /** Hint text shown below the input */\n hint = input('');\n\n /** Error message -- shows error state */\n error = input('');\n\n /** Whether the field is required */\n required = input(false);\n\n /** Whether the component is disabled */\n disabled = model(false);\n\n /** Whether to allow duplicate chip values */\n allowDuplicates = input(false);\n\n /** Separator characters that trigger chip creation (in addition to Enter) */\n separators = input<string[]>([',', ';']);\n\n /** Emitted when a chip is added */\n added = output<string>();\n\n /** Emitted when a chip is removed */\n removed = output<string>();\n\n inputRef = viewChild.required<ElementRef<HTMLInputElement>>('chipInput');\n\n inputId = `af-chip-input-${AfChipInputComponent.nextId++}`;\n chips = signal<string[]>([]);\n focused = signal(false);\n\n private onChange: (value: string[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n hintId = computed(() => `${this.inputId}-hint`);\n\n errorId = computed(() => `${this.inputId}-error`);\n\n getAriaDescribedBy(): string | null {\n if (this.error()) return this.errorId();\n if (this.hint()) return this.hintId();\n return null;\n }\n\n focusInput(): void {\n this.inputRef().nativeElement.focus();\n }\n\n onKeydown(event: KeyboardEvent): void {\n const inputEl = event.target as HTMLInputElement;\n const value = inputEl.value.trim();\n\n if (event.key === 'Enter') {\n event.preventDefault();\n this.addChip(value, inputEl);\n return;\n }\n\n if (this.separators().includes(event.key)) {\n event.preventDefault();\n this.addChip(value, inputEl);\n return;\n }\n\n const currentChips = this.chips();\n if (event.key === 'Backspace' && value === '' && currentChips.length > 0) {\n this.remove(currentChips[currentChips.length - 1]);\n }\n }\n\n onInputChange(event: Event): void {\n const inputEl = event.target as HTMLInputElement;\n const value = inputEl.value;\n\n // Handle paste with separators\n for (const sep of this.separators()) {\n if (value.includes(sep)) {\n const parts = value.split(new RegExp(`[${this.escapeSeparators()}]`));\n inputEl.value = '';\n for (const part of parts) {\n const trimmed = part.trim();\n if (trimmed) {\n this.addChipValue(trimmed);\n }\n }\n return;\n }\n }\n }\n\n onBlur(): void {\n this.focused.set(false);\n this.onTouched();\n }\n\n /** Removes a chip by value */\n remove(chip: string, event?: Event): void {\n event?.stopPropagation();\n const current = this.chips();\n const index = current.indexOf(chip);\n if (index >= 0) {\n this.chips.set([...current.slice(0, index), ...current.slice(index + 1)]);\n this.emitChange();\n this.removed.emit(chip);\n }\n }\n\n // ControlValueAccessor\n writeValue(value: string[]): void {\n this.chips.set(Array.isArray(value) ? [...value] : []);\n }\n\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n private addChip(value: string, inputEl: HTMLInputElement): void {\n if (value) {\n this.addChipValue(value);\n inputEl.value = '';\n }\n }\n\n private addChipValue(value: string): void {\n if (!this.allowDuplicates() && this.chips().includes(value)) {\n return;\n }\n this.chips.update(c => [...c, value]);\n this.emitChange();\n this.added.emit(value);\n }\n\n private emitChange(): void {\n this.onChange([...this.chips()]);\n }\n\n private escapeSeparators(): string {\n return this.separators().map(s => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('');\n }\n}\n","import {\n Directive,\n ElementRef,\n Renderer2,\n OnDestroy,\n effect,\n input,\n inject,\n} from '@angular/core';\n\nexport type AfTooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\nlet tooltipIdCounter = 0;\n\n/**\n * Directive that attaches a tooltip to any host element.\n *\n * Uses the design system's `ct-tooltip` CSS classes for styling and animation.\n * Shows on hover and focus, hides on blur, mouse leave, and Escape key.\n * Includes a configurable delay before showing.\n *\n * @example\n * <button afTooltip=\"Save changes\">Save</button>\n *\n * @example\n * <button\n * afTooltip=\"Delete item\"\n * afTooltipPosition=\"bottom\"\n * [afTooltipDelay]=\"500\">\n * Delete\n * </button>\n */\n@Directive({\n selector: '[afTooltip]',\n})\nexport class AfTooltipDirective implements OnDestroy {\n /** Tooltip text content */\n text = input('', { alias: 'afTooltip' });\n\n /** Position relative to the host element */\n afTooltipPosition = input<AfTooltipPosition>('top');\n\n /** Delay in ms before showing the tooltip */\n afTooltipDelay = input(300);\n\n /** Whether the tooltip is disabled */\n afTooltipDisabled = input(false);\n\n private el = inject(ElementRef<HTMLElement>);\n private renderer = inject(Renderer2);\n\n private contentEl: HTMLElement | null = null;\n private tooltipId = `af-tooltip-${tooltipIdCounter++}`;\n private showTimeout: ReturnType<typeof setTimeout> | null = null;\n private readonly listeners: (() => void)[] = [];\n\n constructor() {\n this.initHost();\n this.setupListeners();\n }\n\n private textEffect = effect(() => {\n if (this.contentEl) {\n this.contentEl.textContent = this.text();\n }\n });\n\n private positionEffect = effect(() => {\n this.el.nativeElement.setAttribute('data-side', this.afTooltipPosition());\n });\n\n ngOnDestroy(): void {\n this.hide();\n this.listeners.forEach(unlisten => unlisten());\n }\n\n private initHost(): void {\n const host = this.el.nativeElement;\n this.renderer.addClass(host, 'ct-tooltip');\n host.setAttribute('data-state', 'closed');\n host.setAttribute('data-side', this.afTooltipPosition());\n }\n\n private setupListeners(): void {\n const host = this.el.nativeElement;\n\n this.listeners.push(\n this.renderer.listen(host, 'mouseenter', () => this.scheduleShow()),\n this.renderer.listen(host, 'mouseleave', () => this.hide()),\n this.renderer.listen(host, 'focusin', () => this.scheduleShow()),\n this.renderer.listen(host, 'focusout', () => this.hide()),\n this.renderer.listen(host, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape') this.hide();\n }),\n );\n }\n\n private scheduleShow(): void {\n if (this.afTooltipDisabled() || !this.text()) return;\n this.clearTimeout();\n this.showTimeout = setTimeout(() => this.show(), this.afTooltipDelay());\n }\n\n private show(): void {\n if (this.contentEl) return;\n\n const host = this.el.nativeElement;\n const content = this.renderer.createElement('span') as HTMLElement;\n content.classList.add('ct-tooltip__content');\n content.setAttribute('role', 'tooltip');\n content.setAttribute('id', this.tooltipId);\n content.textContent = this.text();\n\n this.renderer.appendChild(host, content);\n host.setAttribute('aria-describedby', this.tooltipId);\n this.contentEl = content;\n\n // Trigger open state on next frame so CSS transition plays\n requestAnimationFrame(() => {\n host.setAttribute('data-state', 'open');\n });\n }\n\n private hide(): void {\n this.clearTimeout();\n if (this.contentEl) {\n const host = this.el.nativeElement;\n host.setAttribute('data-state', 'closed');\n host.removeAttribute('aria-describedby');\n this.contentEl.remove();\n this.contentEl = null;\n }\n }\n\n private clearTimeout(): void {\n if (this.showTimeout !== null) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, booleanAttribute, input, computed } from '@angular/core';\n\nexport type AfBadgeVariant = 'default' | 'info' | 'success' | 'warning' | 'danger';\n\n/**\n * Badge component for status indicators, labels, and counts.\n *\n * Wraps the Construct Design System `ct-badge` with semantic color\n * variants and optional icon or dot indicators.\n *\n * @example Basic usage\n * <af-badge variant=\"success\">Approved</af-badge>\n *\n * @example With icon\n * <af-badge variant=\"danger\" icon=\"+\">Blocked</af-badge>\n *\n * @example With dot indicator\n * <af-badge variant=\"info\" dot>Online</af-badge>\n *\n * @example Status badge for screen readers\n * <af-badge variant=\"warning\" role=\"status\" ariaLabel=\"Build status: failing\">\n * Failing\n * </af-badge>\n *\n * @accessibility\n * - Non-interactive element — no keyboard navigation required.\n * - Decorative elements (icon, dot) are hidden from screen readers via `aria-hidden`.\n * - Use `ariaLabel` when the badge has no visible text or when the visual content\n * alone does not convey the full meaning.\n * - Set `role=\"status\"` when the badge reflects a live value that screen readers\n * should announce on change.\n */\n@Component({\n selector: 'af-badge',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'badgeClasses()',\n '[attr.role]': 'role() || null',\n '[attr.aria-label]': 'ariaLabel() || null',\n },\n template: `\n @if (icon()) {\n <span class=\"ct-badge__icon\" aria-hidden=\"true\">{{ icon() }}</span>\n }\n @if (dot()) {\n <span class=\"ct-badge__dot\" aria-hidden=\"true\"></span>\n }\n <ng-content />\n `,\n})\nexport class AfBadgeComponent {\n /** ARIA role, e.g. `\"status\"` for live status badges. */\n role = input('');\n\n /** Accessible label, useful when the badge has no visible text. */\n ariaLabel = input('');\n\n /** Semantic color variant. */\n variant = input<AfBadgeVariant>('default');\n\n /** Icon character to display before the label. */\n icon = input('');\n\n /** Show a dot indicator instead of an icon. */\n dot = input(false, { transform: booleanAttribute });\n\n /** Computed CSS classes combining base class and variant/icon modifiers. */\n badgeClasses = computed(() => {\n const classes = ['ct-badge'];\n if (this.variant() !== 'default') {\n classes.push(`ct-badge--${this.variant()}`);\n }\n if (this.icon() || this.dot()) {\n classes.push('ct-badge--icon');\n }\n return classes.join(' ');\n });\n}\n","/**\n * Test harness for AfBadgeComponent.\n *\n * Provides a semantic API for querying badge state in tests,\n * abstracting DOM details behind readable method names.\n *\n * @example\n * const harness = new AfBadgeHarness(fixture.nativeElement);\n * expect(harness.getText()).toBe('Approved');\n * expect(harness.hasClass('ct-badge--success')).toBe(true);\n */\nexport class AfBadgeHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-badge');\n if (!el) {\n throw new Error('AfBadgeHarness: af-badge element not found in container.');\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Returns the trimmed text content of the badge (projected content only). */\n getText(): string {\n return this.hostEl.textContent?.trim() ?? '';\n }\n\n /** Returns the full `class` attribute string of the host element. */\n getClasses(): string {\n return this.hostEl.className;\n }\n\n /** Returns whether the host element has the given CSS class. */\n hasClass(className: string): boolean {\n return this.hostEl.classList.contains(className);\n }\n\n /** Returns the `aria-label` attribute value, or `null` if absent. */\n getAriaLabel(): string | null {\n return this.hostEl.getAttribute('aria-label');\n }\n\n /** Returns the `role` attribute value, or `null` if absent. */\n getRole(): string | null {\n return this.hostEl.getAttribute('role');\n }\n\n /** Returns whether the badge contains an icon element. */\n hasIcon(): boolean {\n return this.hostEl.querySelector('.ct-badge__icon') !== null;\n }\n\n /** Returns whether the badge contains a dot indicator. */\n hasDot(): boolean {\n return this.hostEl.querySelector('.ct-badge__dot') !== null;\n }\n\n /** Returns the text content of the icon element, or empty string if absent. */\n getIconText(): string {\n return this.hostEl.querySelector('.ct-badge__icon')?.textContent?.trim() ?? '';\n }\n}\n","import { Component, ChangeDetectionStrategy, input, computed } from '@angular/core';\n\nexport type AfProgressBarVariant = 'default' | 'info' | 'success' | 'warning' | 'danger';\nexport type AfProgressBarSize = 'sm' | 'md' | 'lg';\n\n/**\n * Progress bar for showing completion state\n *\n * @example\n * <af-progress-bar [value]=\"75\" variant=\"success\" label=\"Upload progress\"></af-progress-bar>\n * <af-progress-bar [indeterminate]=\"true\" label=\"Loading\"></af-progress-bar>\n */\n@Component({\n selector: 'af-progress-bar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n [class]=\"barClasses()\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"indeterminate() ? null : value()\"\n [attr.aria-valuemin]=\"indeterminate() ? null : 0\"\n [attr.aria-valuemax]=\"indeterminate() ? null : 100\"\n [attr.aria-label]=\"label()\">\n <div\n class=\"ct-progress-bar__track\"\n [style.width]=\"indeterminate() ? null : value() + '%'\">\n </div>\n </div>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfProgressBarComponent {\n /** Current progress value (0-100) */\n value = input(0);\n\n /** Color variant */\n variant = input<AfProgressBarVariant>('default');\n\n /** Track height */\n size = input<AfProgressBarSize>('md');\n\n /** Accessible label for screen readers */\n label = input('');\n\n /** Indeterminate mode (animated, no fixed value) */\n indeterminate = input(false);\n\n barClasses = computed(() => {\n const classes = ['ct-progress-bar'];\n if (this.variant() !== 'default') {\n classes.push(`ct-progress-bar--${this.variant()}`);\n }\n if (this.size() !== 'md') {\n classes.push(`ct-progress-bar--${this.size()}`);\n }\n if (this.indeterminate()) {\n classes.push('ct-progress-bar--indeterminate');\n }\n return classes.join(' ');\n });\n}\n","import { Component, ChangeDetectionStrategy, input, computed } from '@angular/core';\n\nexport type AfSpinnerSize = 'sm' | 'md' | 'lg';\n\n/**\n * Spinner component for loading states\n *\n * @example\n * <af-spinner label=\"Loading data\"></af-spinner>\n * <af-spinner size=\"lg\" label=\"Processing\"></af-spinner>\n */\n@Component({\n selector: 'af-spinner',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span\n [class]=\"spinnerClasses()\"\n role=\"status\"\n [attr.aria-label]=\"label()\">\n </span>\n `,\n styles: [`\n :host {\n display: inline-block;\n }\n `]\n})\nexport class AfSpinnerComponent {\n /** Spinner size */\n size = input<AfSpinnerSize>('md');\n\n /** Accessible label for screen readers */\n label = input('Loading');\n\n spinnerClasses = computed(() => {\n const classes = ['ct-spinner'];\n if (this.size() !== 'md') {\n classes.push(`ct-spinner--${this.size()}`);\n }\n return classes.join(' ');\n });\n}\n","import { Component, forwardRef, input, output, model, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface AfToggleItem {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport type AfToggleGroupSize = 'sm' | 'md' | 'lg';\n\n/**\n * Toggle group for single or multi-select button groups\n *\n * @example\n * <af-toggle-group\n * [items]=\"viewModes\"\n * [(value)]=\"selectedMode\"\n * ariaLabel=\"View mode\">\n * </af-toggle-group>\n *\n * <af-toggle-group\n * [items]=\"filters\"\n * [multiple]=\"true\"\n * [(value)]=\"activeFilters\"\n * ariaLabel=\"Status filter\">\n * </af-toggle-group>\n */\n@Component({\n selector: 'af-toggle-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [class]=\"groupClasses()\" role=\"group\" [attr.aria-label]=\"ariaLabel()\">\n @for (item of items(); track item.value) {\n <button\n class=\"ct-toggle-group__item\"\n type=\"button\"\n [attr.aria-pressed]=\"isPressed(item.value)\"\n [disabled]=\"item.disabled || disabled()\"\n (click)=\"toggle(item.value)\">\n {{ item.label }}\n </button>\n }\n </div>\n `,\n styles: [`\n :host {\n display: inline-block;\n }\n `],\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfToggleGroupComponent),\n multi: true\n }]\n})\nexport class AfToggleGroupComponent implements ControlValueAccessor {\n /** Toggle items */\n items = input<AfToggleItem[]>([]);\n\n /** Group size */\n size = input<AfToggleGroupSize>('md');\n\n /** Allow multiple selections */\n multiple = input(false);\n\n /** Accessible group label */\n ariaLabel = input('');\n\n /** Disabled state */\n disabled = model(false);\n\n /** Current value (string for single, string[] for multiple) */\n value = model<string | string[]>('');\n\n private onChange: (value: string | string[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n groupClasses = computed(() => {\n const classes = ['ct-toggle-group'];\n if (this.size() !== 'md') {\n classes.push(`ct-toggle-group--${this.size()}`);\n }\n return classes.join(' ');\n });\n\n isPressed(itemValue: string): boolean {\n if (this.multiple()) {\n return Array.isArray(this.value()) && (this.value() as string[]).includes(itemValue);\n }\n return this.value() === itemValue;\n }\n\n toggle(itemValue: string): void {\n this.onTouched();\n\n if (this.multiple()) {\n const current = Array.isArray(this.value()) ? [...this.value() as string[]] : [];\n const index = current.indexOf(itemValue);\n if (index >= 0) {\n current.splice(index, 1);\n } else {\n current.push(itemValue);\n }\n this.value.set(current);\n } else {\n this.value.set(itemValue);\n }\n\n this.onChange(this.value());\n }\n\n writeValue(value: string | string[]): void {\n this.value.set(value ?? (this.multiple() ? [] : ''));\n }\n\n registerOnChange(fn: (value: string | string[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\n/**\n * Toolbar component for top-level app navigation\n *\n * @example\n * <af-toolbar ariaLabel=\"Main navigation\">\n * <a brand href=\"#\">Construct</a>\n * <ul nav>\n * <li><a href=\"/dashboard\" class=\"ct-toolbar__nav-link ct-toolbar__nav-link--active\" aria-current=\"page\">Dashboard</a></li>\n * <li><a href=\"/documents\" class=\"ct-toolbar__nav-link\">Documents</a></li>\n * </ul>\n * <div actions>\n * <button class=\"ct-button ct-button--ghost\">Profile</button>\n * </div>\n * </af-toolbar>\n */\n@Component({\n selector: 'af-toolbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nav class=\"ct-toolbar\" [attr.aria-label]=\"ariaLabel()\">\n <div class=\"ct-toolbar__brand\">\n <ng-content select=\"[brand]\"></ng-content>\n </div>\n <ng-content select=\"[nav]\"></ng-content>\n <div class=\"ct-toolbar__spacer\"></div>\n <div class=\"ct-toolbar__actions\">\n <ng-content select=\"[actions]\"></ng-content>\n </div>\n </nav>\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfToolbarComponent {\n /** Accessible label for the navigation landmark */\n ariaLabel = input('Main navigation');\n}\n","import { Component, ChangeDetectionStrategy, input, model, computed } from '@angular/core';\n\nexport type AfSidebarMode = 'side' | 'over';\n\n/**\n * Sidebar component for collapsible navigation\n *\n * @example\n * <af-sidebar [open]=\"sidebarOpen\" mode=\"side\" ariaLabel=\"Folder navigation\" (openChange)=\"sidebarOpen = $event\">\n * <div header>\n * <strong>Folders</strong>\n * </div>\n * <ul content class=\"ct-nav-list\">\n * <li><a class=\"ct-nav-item ct-nav-item--active\" href=\"#\" aria-current=\"page\">\n * <span class=\"ct-nav-item__label\">Inbox</span>\n * <span class=\"ct-nav-item__badge\">12</span>\n * </a></li>\n * </ul>\n * </af-sidebar>\n */\n@Component({\n selector: 'af-sidebar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:keydown.escape)': 'onEscape()',\n },\n template: `\n <aside\n [class]=\"sidebarClasses()\"\n [attr.data-state]=\"open() ? 'open' : 'closed'\"\n [attr.aria-label]=\"ariaLabel()\">\n <div class=\"ct-sidebar__header\">\n <ng-content select=\"[header]\"></ng-content>\n @if (showCloseButton() && mode() === 'over') {\n <button\n class=\"ct-button ct-button--ghost ct-button--icon ct-button--sm\"\n type=\"button\"\n aria-label=\"Close menu\"\n (click)=\"close()\">\n <span class=\"ct-icon ct-icon--sm\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg></span>\n </button>\n }\n </div>\n <div class=\"ct-sidebar__content\">\n <ng-content select=\"[content]\"></ng-content>\n <ng-content></ng-content>\n </div>\n </aside>\n @if (mode() === 'over' && open()) {\n <div class=\"ct-sidebar__backdrop\" (click)=\"close()\"></div>\n }\n `,\n styles: [`\n :host {\n display: block;\n }\n `]\n})\nexport class AfSidebarComponent {\n /** Sidebar open state */\n open = model(true);\n\n /** Display mode: side (pushes content) or over (overlays) */\n mode = input<AfSidebarMode>('side');\n\n /** Accessible label for the sidebar landmark */\n ariaLabel = input('Navigation');\n\n /** Show close button in overlay mode */\n showCloseButton = input(true);\n\n sidebarClasses = computed(() => {\n const classes = ['ct-sidebar'];\n classes.push(`ct-sidebar--${this.mode()}`);\n return classes.join(' ');\n });\n\n close(): void {\n this.open.set(false);\n }\n\n onEscape(): void {\n if (this.mode() === 'over' && this.open()) {\n this.close();\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input, computed } from '@angular/core';\n\nexport type AfIconSize = 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Icon wrapper that applies Construct Design System sizing via `ct-icon` classes.\n *\n * Uses content projection so any icon source can be used:\n * Lucide, custom SVGs, or other icon libraries.\n *\n * @example Using with Lucide\n * ```html\n * <af-icon size=\"sm\">\n * <lucide-x />\n * </af-icon>\n * ```\n *\n * @example Using with inline SVG\n * ```html\n * <af-icon size=\"lg\">\n * <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n * <circle cx=\"12\" cy=\"12\" r=\"10\" />\n * </svg>\n * </af-icon>\n * ```\n */\n@Component({\n selector: 'af-icon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span [class]=\"iconClasses()\" aria-hidden=\"true\">\n <ng-content />\n </span>\n `,\n styles: [`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n `]\n})\nexport class AfIconComponent {\n /** Icon size variant */\n size = input<AfIconSize>('md');\n\n iconClasses = computed(() => {\n const classes = ['ct-icon'];\n if (this.size() !== 'md') {\n classes.push(`ct-icon--${this.size()}`);\n }\n return classes.join(' ');\n });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n computed,\n input,\n model,\n forwardRef,\n ElementRef,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport type AfSliderSize = 'sm' | 'md' | 'lg';\n\n/**\n * Slider component with full form control and accessibility support.\n *\n * Wraps the `ct-slider` design system CSS. Supports min/max/step,\n * keyboard navigation, ARIA attributes, and reactive forms.\n *\n * @example Reactive Forms\n * <af-slider formControlName=\"volume\" [min]=\"0\" [max]=\"100\" label=\"Volume\" />\n *\n * @example Standalone two-way binding\n * <af-slider [(value)]=\"brightness\" [min]=\"0\" [max]=\"100\" [step]=\"5\" [showValue]=\"true\" />\n *\n * @example With min/max labels\n * <af-slider [(value)]=\"temperature\" [min]=\"16\" [max]=\"30\" [showMinMax]=\"true\" label=\"Temperature\" />\n */\n@Component({\n selector: 'af-slider',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfSliderComponent),\n multi: true,\n },\n ],\n template: `\n <div [class]=\"hostClasses()\" [style.--_value]=\"valuePercent()\">\n @if (showMinMax()) {\n <span class=\"ct-slider__min\" aria-hidden=\"true\">{{ min() }}</span>\n }\n\n <input\n #sliderInput\n class=\"ct-slider__input\"\n type=\"range\"\n [id]=\"sliderId()\"\n [attr.min]=\"min()\"\n [attr.max]=\"max()\"\n [attr.step]=\"step()\"\n [disabled]=\"disabled()\"\n [value]=\"value()\"\n [attr.aria-label]=\"label()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuetext]=\"ariaValueText()\"\n [attr.aria-invalid]=\"invalid() ? true : null\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n\n @if (showMinMax()) {\n <span class=\"ct-slider__max\" aria-hidden=\"true\">{{ max() }}</span>\n }\n\n @if (showValue()) {\n <output class=\"ct-slider__value\" [attr.for]=\"sliderId()\">\n {{ value() }}\n </output>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfSliderComponent implements ControlValueAccessor {\n private static nextId = 0;\n\n /** Accessible label for the slider */\n label = input('');\n\n /** Minimum value */\n min = input(0);\n\n /** Maximum value */\n max = input(100);\n\n /** Step increment */\n step = input(1);\n\n /** Component size variant */\n size = input<AfSliderSize>('md');\n\n /** Whether the slider is disabled */\n disabled = model(false);\n\n /** Whether the slider is in an invalid state */\n invalid = input(false);\n\n /** Show the current value next to the slider */\n showValue = input(false);\n\n /** Show min/max labels */\n showMinMax = input(false);\n\n /** Custom aria-valuetext for screen readers */\n valueTextFn = input<((value: number) => string) | null>(null);\n\n /** Unique slider ID */\n sliderId = input(`af-slider-${AfSliderComponent.nextId++}`);\n\n /** Current value — supports two-way binding via [(value)] */\n value = model(0);\n\n sliderInput = viewChild.required<ElementRef<HTMLInputElement>>('sliderInput');\n\n private onChangeCallback: (value: number) => void = () => {};\n onTouched: () => void = () => {};\n\n hostClasses = computed(() => {\n const classes = ['ct-slider'];\n const s = this.size();\n if (s !== 'md') {\n classes.push(`ct-slider--${s}`);\n }\n return classes.join(' ');\n });\n\n valuePercent = computed(() => {\n const minVal = this.min();\n const maxVal = this.max();\n const range = maxVal - minVal;\n if (range === 0) return 0;\n return ((this.value() - minVal) / range) * 100;\n });\n\n ariaValueText = computed(() => {\n const fn = this.valueTextFn();\n return fn ? fn(this.value()) : null;\n });\n\n onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n const numValue = Number(target.value);\n this.value.set(numValue);\n this.onChangeCallback(numValue);\n }\n\n /** Writes a new value from the form model. */\n writeValue(value: number): void {\n this.value.set(value ?? 0);\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n OnDestroy,\n input,\n output,\n model,\n computed,\n effect,\n viewChild,\n ElementRef,\n} from '@angular/core';\nimport { FocusTrap } from '../../utils/focus-trap';\n\nexport type AfDrawerPosition = 'right' | 'left' | 'top' | 'bottom';\nexport type AfDrawerSize = 'sm' | 'md' | 'lg' | 'full';\n\n/**\n * Drawer/slide-out panel with full accessibility support.\n *\n * @example\n * ```html\n * <af-drawer [(open)]=\"isOpen\" position=\"right\" ariaLabel=\"Settings\">\n * <div header>\n * <h2>Settings</h2>\n * </div>\n * <div body>\n * <p>Drawer content here.</p>\n * </div>\n * <div footer>\n * <button (click)=\"isOpen = false\">Close</button>\n * </div>\n * </af-drawer>\n * ```\n */\n@Component({\n selector: 'af-drawer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(document:keydown)': 'onKeydown($event)',\n },\n template: `\n <div\n #drawer\n [class]=\"containerClasses()\"\n [attr.data-state]=\"open() ? 'open' : 'closed'\"\n role=\"dialog\"\n [attr.aria-modal]=\"open() ? 'true' : null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"!ariaLabel() ? titleId : null\"\n (click)=\"onBackdropClick($event)\">\n <div\n #panel\n class=\"ct-drawer__panel\"\n tabindex=\"-1\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"ct-drawer__header\">\n <ng-content select=\"[header]\"></ng-content>\n @if (showCloseButton()) {\n <button\n class=\"ct-button ct-button--ghost ct-button--icon ct-button--sm\"\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel()\"\n (click)=\"close()\">\n <span class=\"ct-icon ct-icon--sm\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg></span>\n </button>\n }\n </div>\n <div class=\"ct-drawer__body\">\n <ng-content select=\"[body]\"></ng-content>\n <ng-content></ng-content>\n </div>\n <div class=\"ct-drawer__footer\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfDrawerComponent implements OnDestroy {\n private static nextId = 0;\n private focusTrap = new FocusTrap();\n\n /** Two-way bindable open state */\n open = model(false);\n\n /** Slide-in position */\n position = input<AfDrawerPosition>('right');\n\n /** Panel size */\n size = input<AfDrawerSize>('md');\n\n /** Accessible label for the drawer dialog */\n ariaLabel = input('');\n\n /** Show built-in close button in the header */\n showCloseButton = input(true);\n\n /** Whether clicking the backdrop closes the drawer */\n closeOnBackdropClick = input(true);\n\n /** Aria label for the close button */\n closeButtonAriaLabel = input('Close drawer');\n\n /** Emits when the drawer requests to be closed */\n closed = output<void>();\n\n /** Unique ID for aria-labelledby fallback */\n readonly titleId = `af-drawer-title-${AfDrawerComponent.nextId++}`;\n\n private panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n containerClasses = computed(() => {\n const classes = ['ct-drawer'];\n\n const pos = this.position();\n if (pos !== 'right') {\n classes.push(`ct-drawer--${pos}`);\n }\n\n const sz = this.size();\n if (sz !== 'md') {\n classes.push(`ct-drawer--${sz}`);\n }\n\n return classes.join(' ');\n });\n\n private openEffect = effect(() => {\n const isOpen = this.open();\n if (isOpen) {\n this.onOpen();\n } else {\n this.onClose();\n }\n });\n\n ngOnDestroy(): void {\n this.unlockBodyScroll();\n this.focusTrap.restoreFocus();\n }\n\n /** Closes the drawer and emits the closed event */\n close(): void {\n this.open.set(false);\n this.closed.emit();\n }\n\n onBackdropClick(event: MouseEvent): void {\n if (this.closeOnBackdropClick() && event.target === event.currentTarget) {\n this.close();\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (!this.open()) return;\n\n if (event.key === 'Escape') {\n this.close();\n return;\n }\n\n if (event.key === 'Tab') {\n const panel = this.panelRef()?.nativeElement;\n this.focusTrap.handleTab(event, panel, panel);\n }\n }\n\n private onOpen(): void {\n this.focusTrap.saveFocus();\n this.lockBodyScroll();\n queueMicrotask(() => {\n if (!this.open()) return;\n const panel = this.panelRef()?.nativeElement;\n this.focusTrap.focusFirst(panel, panel);\n });\n }\n\n private onClose(): void {\n this.unlockBodyScroll();\n this.focusTrap.restoreFocus();\n }\n\n private lockBodyScroll(): void {\n document.body.style.overflow = 'hidden';\n }\n\n private unlockBodyScroll(): void {\n document.body.style.overflow = '';\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n computed,\n forwardRef,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface AfComboboxOption {\n value: unknown;\n label: string;\n disabled?: boolean;\n description?: string;\n}\n\n/**\n * Combobox component with autocomplete filtering, keyboard navigation,\n * and full ARIA support following the WAI-ARIA 1.2 combobox pattern.\n *\n * @example\n * <af-combobox\n * label=\"Country\"\n * placeholder=\"Search countries...\"\n * [options]=\"countries\"\n * [(ngModel)]=\"selectedCountry\"\n * hint=\"Start typing to filter\"\n * ></af-combobox>\n *\n * @example\n * <af-combobox\n * label=\"Assignee\"\n * [options]=\"teamMembers\"\n * [formControl]=\"assigneeControl\"\n * [error]=\"assigneeError\"\n * required\n * ></af-combobox>\n */\n@Component({\n selector: 'af-combobox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfComboboxComponent),\n multi: true,\n },\n ],\n host: {\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [attr.for]=\"inputId\">\n {{ label() }}\n @if (required()) {\n <span aria-label=\"required\"> *</span>\n }\n </label>\n }\n\n <div\n [class]=\"comboboxClasses()\"\n [attr.data-state]=\"isOpen() ? 'open' : 'closed'\"\n >\n <div class=\"ct-combobox__input-wrap\">\n <input\n #inputEl\n class=\"ct-combobox__input\"\n [id]=\"inputId\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"listboxId\"\n aria-autocomplete=\"list\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"getAriaDescribedBy()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [attr.aria-required]=\"required() || null\"\n [value]=\"query()\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\"\n />\n <button\n type=\"button\"\n class=\"ct-combobox__trigger\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [disabled]=\"disabled()\"\n (click)=\"toggleListbox()\"\n (mousedown)=\"$event.preventDefault()\"\n >\n <svg\n class=\"ct-combobox__trigger-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 6l4 4 4-4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <ul\n #listboxEl\n [id]=\"listboxId\"\n class=\"ct-combobox__listbox\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || 'Options'\"\n >\n @for (option of filteredOptions(); track option.value; let i = $index) {\n <li\n class=\"ct-combobox__option\"\n role=\"option\"\n [id]=\"getOptionId(i)\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-disabled]=\"option.disabled || null\"\n [attr.data-highlighted]=\"highlightedIndex() === i ? '' : null\"\n (click)=\"selectOption(option)\"\n (mouseenter)=\"highlightedIndex.set(i)\"\n (mousedown)=\"$event.preventDefault()\"\n >\n <span class=\"ct-combobox__option-check\" aria-hidden=\"true\">\n @if (isSelected(option)) {\n <svg viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M3 8.5l3.5 3.5 6.5-8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </span>\n <span class=\"ct-combobox__option-label\">{{ option.label }}</span>\n @if (option.description) {\n <span class=\"ct-combobox__option-description\">{{ option.description }}</span>\n }\n </li>\n }\n @if (filteredOptions().length === 0) {\n <li class=\"ct-combobox__empty\" aria-disabled=\"true\">\n {{ emptyText() }}\n </li>\n }\n </ul>\n\n <div\n class=\"ct-combobox__status\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {{ statusMessage() }}\n </div>\n </div>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId\">{{ hint() }}</div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" [id]=\"errorId\">{{ error() }}</div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfComboboxComponent implements ControlValueAccessor {\n private static nextId = 0;\n\n /** Label for the combobox field */\n label = input('');\n\n /** Placeholder text for the input */\n placeholder = input('');\n\n /** Available options */\n options = input<AfComboboxOption[]>([]);\n\n /** Hint text shown below the combobox */\n hint = input('');\n\n /** Error message — shows error state and message */\n error = input('');\n\n /** Whether the combobox is required */\n required = input(false);\n\n /** Whether the combobox is disabled */\n disabled = model(false);\n\n /** Size variant */\n size = input<'sm' | 'md' | 'lg'>('md');\n\n /** Text shown when no options match the filter */\n emptyText = input('No results found');\n\n /** Value comparison function for object values */\n compareWith = input<(a: unknown, b: unknown) => boolean>((a, b) => a === b);\n\n /** Unique combobox ID */\n comboboxId = input(`af-combobox-${AfComboboxComponent.nextId++}`);\n\n inputRef = viewChild<ElementRef<HTMLInputElement>>('inputEl');\n listboxRef = viewChild<ElementRef<HTMLUListElement>>('listboxEl');\n\n isOpen = signal(false);\n query = signal('');\n highlightedIndex = signal(-1);\n\n private value = signal<unknown>(null);\n private onChange: (value: unknown) => void = () => {};\n private onTouchedCallback: () => void = () => {};\n\n get inputId(): string {\n return `${this.comboboxId()}-input`;\n }\n\n get listboxId(): string {\n return `${this.comboboxId()}-listbox`;\n }\n\n get hintId(): string {\n return `${this.comboboxId()}-hint`;\n }\n\n get errorId(): string {\n return `${this.comboboxId()}-error`;\n }\n\n comboboxClasses = computed(() => {\n const classes = ['ct-combobox'];\n const s = this.size();\n if (s === 'sm') classes.push('ct-combobox--sm');\n if (s === 'lg') classes.push('ct-combobox--lg');\n return classes.join(' ');\n });\n\n selectedOption = computed(() => {\n const v = this.value();\n if (v === null || v === undefined) return null;\n return this.options().find((o) => this.compareWith()(o.value, v)) ?? null;\n });\n\n filteredOptions = computed(() => {\n const q = this.query().toLowerCase().trim();\n const opts = this.options();\n if (!q) return opts;\n const selected = this.selectedOption();\n if (selected && selected.label.toLowerCase() === q) return opts;\n return opts.filter((o) => o.label.toLowerCase().includes(q));\n });\n\n activeDescendantId = computed(() => {\n const idx = this.highlightedIndex();\n if (idx < 0 || idx >= this.filteredOptions().length) return null;\n return this.getOptionId(idx);\n });\n\n statusMessage = computed(() => {\n if (!this.isOpen()) return '';\n const count = this.filteredOptions().length;\n if (count === 0) return this.emptyText();\n return `${count} result${count === 1 ? '' : 's'} available`;\n });\n\n getAriaDescribedBy(): string | null {\n if (this.error()) return this.errorId;\n if (this.hint()) return this.hintId;\n return null;\n }\n\n getOptionId(index: number): string {\n return `${this.comboboxId()}-option-${index}`;\n }\n\n isSelected(option: AfComboboxOption): boolean {\n const v = this.value();\n if (v === null || v === undefined) return false;\n return this.compareWith()(option.value, v);\n }\n\n /** Opens the listbox and highlights the selected option or first enabled option */\n openListbox(): void {\n if (this.disabled() || this.isOpen()) return;\n this.isOpen.set(true);\n this.highlightedIndex.set(this.findSelectedIndex());\n }\n\n /** Closes the listbox and restores the display value */\n closeListbox(restoreDisplay = true): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.highlightedIndex.set(-1);\n if (restoreDisplay) {\n const selected = this.selectedOption();\n this.query.set(selected ? selected.label : '');\n }\n }\n\n /** Toggles the listbox open/closed */\n toggleListbox(): void {\n if (this.isOpen()) {\n this.closeListbox();\n } else {\n this.openListbox();\n this.inputRef()?.nativeElement.focus();\n }\n }\n\n /** Selects an option and closes the listbox */\n selectOption(option: AfComboboxOption): void {\n if (option.disabled) return;\n this.value.set(option.value);\n this.query.set(option.label);\n this.onChange(option.value);\n this.closeListbox(false);\n this.inputRef()?.nativeElement.focus();\n }\n\n onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.query.set(target.value);\n if (!this.isOpen()) {\n this.openListbox();\n }\n this.highlightedIndex.set(this.findFirstEnabledIndex());\n if (!target.value.trim()) {\n this.value.set(null);\n this.onChange(null);\n }\n }\n\n onFocus(): void {\n this.openListbox();\n }\n\n onBlur(): void {\n this.closeListbox();\n this.onTouchedCallback();\n }\n\n onKeydown(event: KeyboardEvent): void {\n const filtered = this.filteredOptions();\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openListbox();\n return;\n }\n this.moveHighlight(1);\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openListbox();\n return;\n }\n this.moveHighlight(-1);\n break;\n\n case 'Enter':\n event.preventDefault();\n if (this.isOpen()) {\n const idx = this.highlightedIndex();\n if (idx >= 0 && idx < filtered.length && !filtered[idx].disabled) {\n this.selectOption(filtered[idx]);\n }\n } else {\n this.openListbox();\n }\n break;\n\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.closeListbox();\n }\n break;\n\n case 'Home':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightedIndex.set(this.findFirstEnabledIndex());\n this.scrollHighlightedIntoView();\n }\n break;\n\n case 'End':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightedIndex.set(this.findLastEnabledIndex());\n this.scrollHighlightedIntoView();\n }\n break;\n\n case 'Tab':\n if (this.isOpen()) {\n const idx = this.highlightedIndex();\n if (idx >= 0 && idx < filtered.length && !filtered[idx].disabled) {\n this.selectOption(filtered[idx]);\n }\n this.closeListbox();\n }\n break;\n }\n }\n\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n const host = this.inputRef()?.nativeElement.closest('.ct-combobox');\n if (host && !host.contains(target)) {\n this.closeListbox();\n this.onTouchedCallback();\n }\n }\n\n /** Writes a value from the form model */\n writeValue(value: unknown): void {\n this.value.set(value ?? null);\n const option = this.options().find((o) => this.compareWith()(o.value, this.value()));\n this.query.set(option ? option.label : '');\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n private moveHighlight(direction: number): void {\n const filtered = this.filteredOptions();\n if (filtered.length === 0) return;\n\n let idx = this.highlightedIndex();\n let attempts = 0;\n\n do {\n idx += direction;\n if (idx < 0) idx = filtered.length - 1;\n if (idx >= filtered.length) idx = 0;\n attempts++;\n } while (filtered[idx]?.disabled && attempts < filtered.length);\n\n if (!filtered[idx]?.disabled) {\n this.highlightedIndex.set(idx);\n this.scrollHighlightedIntoView();\n }\n }\n\n private scrollHighlightedIntoView(): void {\n queueMicrotask(() => {\n const listbox = this.listboxRef()?.nativeElement;\n if (!listbox) return;\n const optionEl = listbox.querySelector('[data-highlighted]') as HTMLElement;\n optionEl?.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n private findSelectedIndex(): number {\n const v = this.value();\n if (v === null || v === undefined) return this.findFirstEnabledIndex();\n const filtered = this.filteredOptions();\n const idx = filtered.findIndex((o) => this.compareWith()(o.value, v));\n return idx >= 0 ? idx : this.findFirstEnabledIndex();\n }\n\n private findFirstEnabledIndex(): number {\n return this.filteredOptions().findIndex((o) => !o.disabled);\n }\n\n private findLastEnabledIndex(): number {\n const filtered = this.filteredOptions();\n for (let i = filtered.length - 1; i >= 0; i--) {\n if (!filtered[i].disabled) return i;\n }\n return -1;\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n forwardRef,\n input,\n output,\n model,\n signal,\n computed,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AfButtonComponent } from '../button';\nimport { AfBadgeComponent } from '../badge';\n\nexport interface AfFileValidationError {\n file: File;\n type: 'type' | 'size';\n message: string;\n}\n\nexport interface AfFileEntry {\n file: File;\n status: 'success' | 'error';\n error?: string;\n}\n\n/**\n * File upload component with drag-and-drop, validation, and form control support.\n *\n * @example\n * <af-file-upload\n * label=\"Attachments\"\n * hint=\"PDF, DOCX up to 10MB\"\n * accept=\".pdf,.docx\"\n * [maxSize]=\"10485760\"\n * multiple\n * [(ngModel)]=\"files\">\n * </af-file-upload>\n *\n * @example\n * <af-file-upload\n * label=\"Avatar\"\n * accept=\"image/*\"\n * [maxSize]=\"2097152\"\n * [formControl]=\"avatarControl\">\n * </af-file-upload>\n */\n@Component({\n selector: 'af-file-upload',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AfButtonComponent, AfBadgeComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfFileUploadComponent),\n multi: true,\n },\n ],\n template: `\n <div class=\"ct-file-upload\">\n @if (label()) {\n <span class=\"ct-field__label\" [id]=\"labelId()\">\n {{ label() }}\n @if (required()) {\n <span aria-label=\"required\"> *</span>\n }\n </span>\n }\n\n <label\n class=\"ct-file-upload__dropzone\"\n [attr.for]=\"inputId()\"\n [attr.data-state]=\"dragOver() ? 'dragover' : null\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-disabled]=\"disabled() || null\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\">\n <input\n class=\"ct-file-upload__input\"\n [id]=\"inputId()\"\n type=\"file\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [attr.aria-label]=\"label() || 'File upload'\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n (change)=\"onFileSelected($event)\"\n (blur)=\"onTouched()\" />\n <span class=\"ct-file-upload__title\">Drop files here or browse</span>\n @if (hint()) {\n <span class=\"ct-file-upload__hint\" [id]=\"hintId()\">{{ hint() }}</span>\n }\n <span class=\"ct-button ct-button--secondary ct-button--sm\" aria-hidden=\"true\">\n Browse files\n </span>\n </label>\n\n @if (fileEntries().length > 0) {\n <ul class=\"ct-file-upload__list\" aria-label=\"Selected files\">\n @for (entry of fileEntries(); track $index) {\n <li class=\"ct-file-upload__item\" [attr.data-status]=\"entry.status\">\n <div class=\"ct-file-upload__file\">\n <span class=\"ct-file-upload__name\">{{ entry.file.name }}</span>\n <span class=\"ct-file-upload__meta\">{{ formatSize(entry.file.size) }}</span>\n @if (entry.error) {\n <span class=\"ct-file-upload__error\">{{ entry.error }}</span>\n }\n </div>\n <div class=\"ct-file-upload__actions\">\n @if (entry.status === 'success') {\n <af-badge variant=\"success\">Ready</af-badge>\n }\n @if (entry.status === 'error') {\n <af-badge variant=\"danger\">Invalid</af-badge>\n }\n @if (!disabled()) {\n <af-button\n variant=\"ghost\"\n size=\"sm\"\n [ariaLabel]=\"'Remove ' + entry.file.name\"\n (clicked)=\"removeFile(entry)\">\n Remove\n </af-button>\n }\n </div>\n </li>\n }\n </ul>\n }\n\n @if (error()) {\n <div class=\"ct-file-upload__error\" [id]=\"errorId()\" role=\"alert\">\n {{ error() }}\n </div>\n }\n\n <span class=\"af-file-upload__sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ liveAnnouncement() }}\n </span>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .af-file-upload__sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n ],\n})\nexport class AfFileUploadComponent implements ControlValueAccessor {\n private static nextId = 0;\n\n /** Label shown above the dropzone */\n label = input('');\n\n /** Hint text shown in the dropzone (e.g. accepted types and size limit) */\n hint = input('');\n\n /** Error message — shows error state */\n error = input('');\n\n /** Accepted file types (e.g. '.pdf,.docx' or 'image/*') */\n accept = input('');\n\n /** Maximum file size in bytes (0 = unlimited) */\n maxSize = input(0);\n\n /** Allow selecting multiple files */\n multiple = input(false);\n\n /** Whether the field is required */\n required = input(false);\n\n /** Whether the component is disabled */\n disabled = model(false);\n\n /** Emits validation errors when invalid files are added */\n validationErrors = output<AfFileValidationError[]>();\n\n /** Unique component ID */\n inputId = input(`af-file-upload-${AfFileUploadComponent.nextId++}`);\n\n fileEntries = signal<AfFileEntry[]>([]);\n dragOver = signal(false);\n liveAnnouncement = signal('');\n\n onChange: (value: File | File[] | null) => void = () => {};\n onTouched: () => void = () => {};\n\n labelId = computed(() => `${this.inputId()}-label`);\n hintId = computed(() => `${this.inputId()}-hint`);\n errorId = computed(() => `${this.inputId()}-error`);\n\n ariaDescribedBy = computed(() => {\n const ids: string[] = [];\n if (this.error()) ids.push(this.errorId());\n if (this.hint()) ids.push(this.hintId());\n return ids.length > 0 ? ids.join(' ') : null;\n });\n\n onDragEnter(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled()) {\n this.dragOver.set(true);\n }\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.dragOver.set(false);\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.dragOver.set(false);\n\n if (this.disabled()) return;\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n this.processFiles(Array.from(files));\n }\n }\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.processFiles(Array.from(input.files));\n }\n input.value = '';\n }\n\n /** Removes a file entry from the list */\n removeFile(entry: AfFileEntry): void {\n this.fileEntries.update((entries) => entries.filter((e) => e !== entry));\n this.emitValue();\n this.announce(`${entry.file.name} removed`);\n }\n\n /** Formats bytes into a human-readable size string */\n formatSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n const units = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n const size = bytes / Math.pow(1024, i);\n return `${size < 10 ? size.toFixed(1) : Math.round(size)} ${units[i]}`;\n }\n\n writeValue(value: File | File[] | null): void {\n if (!value) {\n this.fileEntries.set([]);\n return;\n }\n const files = Array.isArray(value) ? value : [value];\n this.fileEntries.set(files.map((file) => ({ file, status: 'success' as const })));\n }\n\n registerOnChange(fn: (value: File | File[] | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n private processFiles(files: File[]): void {\n const newEntries: AfFileEntry[] = [];\n const errors: AfFileValidationError[] = [];\n\n for (const file of files) {\n const fileErrors = this.validateFile(file);\n if (fileErrors.length > 0) {\n newEntries.push({ file, status: 'error', error: fileErrors[0].message });\n errors.push(...fileErrors);\n } else {\n newEntries.push({ file, status: 'success' });\n }\n }\n\n if (this.multiple()) {\n this.fileEntries.update((existing) => [...existing, ...newEntries]);\n } else {\n this.fileEntries.set(newEntries.slice(0, 1));\n }\n\n if (errors.length > 0) {\n this.validationErrors.emit(errors);\n }\n\n this.emitValue();\n\n const validCount = newEntries.filter((e) => e.status === 'success').length;\n const errorCount = newEntries.filter((e) => e.status === 'error').length;\n const parts: string[] = [];\n if (validCount > 0) parts.push(`${validCount} file${validCount > 1 ? 's' : ''} added`);\n if (errorCount > 0) parts.push(`${errorCount} file${errorCount > 1 ? 's' : ''} rejected`);\n this.announce(parts.join(', '));\n }\n\n private validateFile(file: File): AfFileValidationError[] {\n const errors: AfFileValidationError[] = [];\n\n if (this.accept() && !this.isFileTypeAccepted(file)) {\n errors.push({\n file,\n type: 'type',\n message: `File type not accepted: ${file.name}`,\n });\n }\n\n if (this.maxSize() > 0 && file.size > this.maxSize()) {\n errors.push({\n file,\n type: 'size',\n message: `File too large: ${file.name} (${this.formatSize(file.size)})`,\n });\n }\n\n return errors;\n }\n\n private isFileTypeAccepted(file: File): boolean {\n const acceptStr = this.accept();\n if (!acceptStr) return true;\n\n const acceptedTypes = acceptStr.split(',').map((t) => t.trim().toLowerCase());\n const fileName = file.name.toLowerCase();\n const fileType = file.type.toLowerCase();\n\n return acceptedTypes.some((accepted) => {\n if (accepted.startsWith('.')) {\n return fileName.endsWith(accepted);\n }\n if (accepted.endsWith('/*')) {\n return fileType.startsWith(accepted.slice(0, -1));\n }\n return fileType === accepted;\n });\n }\n\n private emitValue(): void {\n const validFiles = this.fileEntries()\n .filter((e) => e.status === 'success')\n .map((e) => e.file);\n\n if (this.multiple()) {\n this.onChange(validFiles);\n } else {\n this.onChange(validFiles[0] ?? null);\n }\n }\n\n private announce(message: string): void {\n this.liveAnnouncement.set('');\n setTimeout(() => this.liveAnnouncement.set(message));\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Translatable strings used by the select-menu component. */\nexport interface AfSelectMenuI18n {\n /** Fallback `aria-label` when no `label` input is provided. */\n selectOption: string;\n /** Announcement when the listbox opens. Use `{count}` as placeholder. */\n opened: string;\n /** Announcement when the listbox closes. */\n closed: string;\n /** Announcement when an option is selected. Use `{label}` as placeholder. */\n selected: string;\n /** Announcement when an option is deselected (multi-select). Use `{label}` as placeholder. */\n deselected: string;\n /** Announcement for the number of selected options (multi-select). Use `{count}` as placeholder. */\n countSelected: string;\n}\n\n/**\n * Injection token to override select-menu screen-reader announcements\n * and the fallback `aria-label`.\n *\n * @example\n * providers: [{\n * provide: AF_SELECT_MENU_I18N,\n * useValue: {\n * selectOption: 'Option auswählen',\n * opened: '{count} Optionen verfügbar',\n * closed: 'Auswahl geschlossen',\n * selected: '{label} ausgewählt',\n * deselected: '{label} abgewählt',\n * countSelected: '{count} Optionen ausgewählt',\n * },\n * }]\n */\nexport const AF_SELECT_MENU_I18N = new InjectionToken<AfSelectMenuI18n>('AfSelectMenuI18n', {\n factory: () => ({\n selectOption: 'Select option',\n opened: '{count} options available',\n closed: 'Selection closed',\n selected: '{label} selected',\n deselected: '{label} deselected',\n countSelected: '{count} options selected',\n }),\n});\n","import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n computed,\n forwardRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AriaLiveAnnouncer } from '../../utils/aria-live-announcer';\nimport { AF_SELECT_MENU_I18N } from './select-menu.i18n';\n\nexport interface AfSelectMenuOption {\n value: unknown;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Custom dropdown select component with keyboard navigation\n * and full ARIA listbox pattern for single and multi-select.\n *\n * @example Single select\n * <af-select-menu\n * label=\"Country\"\n * placeholder=\"Select a country\"\n * [options]=\"countries\"\n * [(ngModel)]=\"selectedCountry\">\n * </af-select-menu>\n *\n * @example Multi-select with reactive forms\n * <af-select-menu\n * label=\"Roles\"\n * placeholder=\"Select roles\"\n * [options]=\"roles\"\n * [multiple]=\"true\"\n * [formControl]=\"rolesControl\">\n * </af-select-menu>\n *\n * @accessibility\n * - Implements the WAI-ARIA Listbox pattern with a combobox trigger.\n * - Keyboard: ArrowDown/Up to move highlight, Enter/Space to select,\n * Escape to close, Home/End to jump, Tab to select-and-close (single) or close (multi).\n * - Focus stays on the combobox trigger; `aria-activedescendant` tracks the highlighted option.\n * - Screen-reader announcements via {@link AriaLiveAnnouncer} for open/close/selection changes.\n * - All user-facing strings are configurable via {@link AF_SELECT_MENU_I18N} for i18n.\n * - Uses CSS logical properties for RTL layout support.\n * - `aria-describedby` links to hint or error text; `aria-invalid` is set on error state.\n * - Disabled options are marked with `aria-disabled` and skipped during keyboard navigation.\n */\n@Component({\n selector: 'af-select-menu',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AfSelectMenuComponent),\n multi: true,\n },\n ],\n host: {\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n <div class=\"ct-field\" [class.ct-field--error]=\"error()\">\n @if (label()) {\n <label class=\"ct-field__label\" [id]=\"labelId\">\n {{ label() }}\n @if (required()) {\n <span aria-label=\"required\"> *</span>\n }\n </label>\n }\n\n <div\n #menuEl\n [class]=\"menuClasses()\"\n [attr.data-state]=\"isOpen() ? 'open' : 'closed'\">\n <button\n #triggerEl\n class=\"ct-select-menu__trigger\"\n type=\"button\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"listboxId\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [attr.aria-label]=\"label() ? null : i18n.selectOption\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-invalid]=\"error() ? true : null\"\n [attr.aria-describedby]=\"getAriaDescribedBy()\"\n [attr.aria-required]=\"required() || null\"\n [disabled]=\"disabled()\"\n (click)=\"toggleListbox()\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\">\n <span\n class=\"ct-select-menu__value\"\n [attr.data-placeholder]=\"isPlaceholder() ? '' : null\">\n {{ displayValue() }}\n </span>\n <span class=\"ct-select-menu__icon\" aria-hidden=\"true\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </span>\n </button>\n\n <div\n #listboxEl\n [id]=\"listboxId\"\n class=\"ct-select-menu__content\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [attr.aria-multiselectable]=\"multiple() || null\"\n tabindex=\"-1\">\n @for (option of options(); track option.value; let i = $index) {\n <div\n class=\"ct-select-menu__option\"\n role=\"option\"\n [id]=\"getOptionId(i)\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-disabled]=\"option.disabled || null\"\n [attr.data-highlighted]=\"highlightedIndex() === i ? '' : null\"\n (click)=\"selectOption(option)\"\n (mouseenter)=\"highlightedIndex.set(i)\"\n (mousedown)=\"$event.preventDefault()\">\n <span class=\"ct-select-menu__option-check\" aria-hidden=\"true\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </span>\n <span class=\"ct-select-menu__option-label\">{{ option.label }}</span>\n </div>\n }\n </div>\n </div>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId\">{{ hint() }}</div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" [id]=\"errorId\">{{ error() }}</div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfSelectMenuComponent implements ControlValueAccessor {\n private static nextId = 0;\n protected readonly i18n = inject(AF_SELECT_MENU_I18N);\n private readonly announcer = inject(AriaLiveAnnouncer);\n\n /** Label shown above the select */\n label = input('');\n\n /** Placeholder text when nothing is selected */\n placeholder = input('');\n\n /** Available options */\n options = input<AfSelectMenuOption[]>([]);\n\n /** Hint text shown below the select */\n hint = input('');\n\n /** Error message — shows error state */\n error = input('');\n\n /** Whether the field is required */\n required = input(false);\n\n /** Whether the component is disabled */\n disabled = model(false);\n\n /** Allow selecting multiple options */\n multiple = input(false);\n\n /** Size variant */\n size = input<'sm' | 'md' | 'lg'>('md');\n\n /** Value comparison function for object values */\n compareWith = input<(a: unknown, b: unknown) => boolean>((a, b) => a === b);\n\n /** Unique component ID */\n componentId = input(`af-select-menu-${AfSelectMenuComponent.nextId++}`);\n\n triggerRef = viewChild<ElementRef<HTMLButtonElement>>('triggerEl');\n listboxRef = viewChild<ElementRef<HTMLDivElement>>('listboxEl');\n menuRef = viewChild<ElementRef<HTMLDivElement>>('menuEl');\n\n isOpen = signal(false);\n highlightedIndex = signal(-1);\n private value = signal<unknown>(null);\n\n private onChange: (value: unknown) => void = () => {};\n private onTouchedCallback: () => void = () => {};\n\n get labelId(): string {\n return `${this.componentId()}-label`;\n }\n\n get listboxId(): string {\n return `${this.componentId()}-listbox`;\n }\n\n get hintId(): string {\n return `${this.componentId()}-hint`;\n }\n\n get errorId(): string {\n return `${this.componentId()}-error`;\n }\n\n menuClasses = computed(() => {\n const classes = ['ct-select-menu'];\n const s = this.size();\n if (s === 'sm') classes.push('ct-select-menu--sm');\n if (s === 'lg') classes.push('ct-select-menu--lg');\n return classes.join(' ');\n });\n\n isPlaceholder = computed(() => {\n const v = this.value();\n if (this.multiple()) {\n return ((v as unknown[]) ?? []).length === 0;\n }\n return v === null || v === undefined;\n });\n\n displayValue = computed(() => {\n const v = this.value();\n const opts = this.options();\n const cmp = this.compareWith();\n\n if (this.multiple()) {\n const vals = (v as unknown[]) ?? [];\n if (vals.length === 0) return this.placeholder();\n return vals\n .map((val) => opts.find((o) => cmp(o.value, val))?.label)\n .filter(Boolean)\n .join(', ');\n }\n\n if (v === null || v === undefined) return this.placeholder();\n return opts.find((o) => cmp(o.value, v))?.label ?? this.placeholder();\n });\n\n activeDescendantId = computed(() => {\n const idx = this.highlightedIndex();\n if (idx < 0 || idx >= this.options().length) return null;\n return this.getOptionId(idx);\n });\n\n getAriaDescribedBy(): string | null {\n if (this.error()) return this.errorId;\n if (this.hint()) return this.hintId;\n return null;\n }\n\n getOptionId(index: number): string {\n return `${this.componentId()}-option-${index}`;\n }\n\n isSelected(option: AfSelectMenuOption): boolean {\n const v = this.value();\n const cmp = this.compareWith();\n if (this.multiple()) {\n return ((v as unknown[]) ?? []).some((val) => cmp(val, option.value));\n }\n if (v === null || v === undefined) return false;\n return cmp(v, option.value);\n }\n\n /** Toggles the listbox open/closed */\n toggleListbox(): void {\n if (this.isOpen()) {\n this.closeListbox();\n } else {\n this.openListbox();\n }\n }\n\n /** Opens the listbox and highlights the selected or first enabled option */\n openListbox(): void {\n if (this.disabled() || this.isOpen()) return;\n this.isOpen.set(true);\n this.highlightedIndex.set(this.findSelectedOrFirstIndex());\n this.scrollHighlightedIntoView();\n\n const enabledCount = this.options().filter((o) => !o.disabled).length;\n this.announcer.announce(\n this.i18n.opened.replace('{count}', String(enabledCount)),\n );\n }\n\n /** Closes the listbox */\n closeListbox(): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.highlightedIndex.set(-1);\n this.announcer.announce(this.i18n.closed);\n }\n\n /** Selects or toggles an option */\n selectOption(option: AfSelectMenuOption): void {\n if (option.disabled) return;\n\n const cmp = this.compareWith();\n\n if (this.multiple()) {\n const current = (this.value() as unknown[]) ?? [];\n const idx = current.findIndex((v) => cmp(v, option.value));\n const wasSelected = idx >= 0;\n const next = wasSelected\n ? [...current.slice(0, idx), ...current.slice(idx + 1)]\n : [...current, option.value];\n this.value.set(next);\n this.onChange(next);\n\n const msg = wasSelected\n ? this.i18n.deselected.replace('{label}', option.label)\n : this.i18n.selected.replace('{label}', option.label);\n this.announcer.announce(\n `${msg}, ${this.i18n.countSelected.replace('{count}', String(next.length))}`,\n );\n } else {\n this.value.set(option.value);\n this.onChange(option.value);\n this.announcer.announce(this.i18n.selected.replace('{label}', option.label));\n this.closeListbox();\n this.triggerRef()?.nativeElement.focus();\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n const opts = this.options();\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openListbox();\n return;\n }\n this.moveHighlight(1);\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openListbox();\n return;\n }\n this.moveHighlight(-1);\n break;\n\n case 'Enter':\n case ' ':\n if (this.isOpen()) {\n event.preventDefault();\n const idx = this.highlightedIndex();\n if (idx >= 0 && idx < opts.length && !opts[idx].disabled) {\n this.selectOption(opts[idx]);\n }\n } else {\n event.preventDefault();\n this.openListbox();\n }\n break;\n\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.closeListbox();\n this.triggerRef()?.nativeElement.focus();\n }\n break;\n\n case 'Home':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightedIndex.set(this.findFirstEnabledIndex());\n this.scrollHighlightedIntoView();\n }\n break;\n\n case 'End':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightedIndex.set(this.findLastEnabledIndex());\n this.scrollHighlightedIntoView();\n }\n break;\n\n case 'Tab':\n if (this.isOpen()) {\n if (!this.multiple()) {\n const idx = this.highlightedIndex();\n if (idx >= 0 && idx < opts.length && !opts[idx].disabled) {\n this.selectOption(opts[idx]);\n }\n }\n this.closeListbox();\n }\n break;\n }\n }\n\n onBlur(): void {\n this.closeListbox();\n this.onTouchedCallback();\n }\n\n onDocumentClick(event: MouseEvent): void {\n if (!this.isOpen()) return;\n const target = event.target as HTMLElement;\n const menu = this.menuRef()?.nativeElement;\n if (menu && !menu.contains(target)) {\n this.closeListbox();\n this.onTouchedCallback();\n }\n }\n\n writeValue(value: unknown): void {\n if (this.multiple()) {\n this.value.set(Array.isArray(value) ? value : []);\n } else {\n this.value.set(value ?? null);\n }\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n private moveHighlight(direction: number): void {\n const opts = this.options();\n if (opts.length === 0) return;\n\n let idx = this.highlightedIndex();\n let attempts = 0;\n\n do {\n idx += direction;\n if (idx < 0) idx = opts.length - 1;\n if (idx >= opts.length) idx = 0;\n attempts++;\n } while (opts[idx]?.disabled && attempts < opts.length);\n\n if (!opts[idx]?.disabled) {\n this.highlightedIndex.set(idx);\n this.scrollHighlightedIntoView();\n }\n }\n\n private scrollHighlightedIntoView(): void {\n queueMicrotask(() => {\n const listbox = this.listboxRef()?.nativeElement;\n if (!listbox) return;\n const el = listbox.querySelector('[data-highlighted]') as HTMLElement;\n el?.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n private findSelectedOrFirstIndex(): number {\n const v = this.value();\n const opts = this.options();\n const cmp = this.compareWith();\n\n if (this.multiple()) {\n const vals = (v as unknown[]) ?? [];\n if (vals.length > 0) {\n const idx = opts.findIndex((o) => cmp(o.value, vals[0]));\n if (idx >= 0 && !opts[idx].disabled) return idx;\n }\n } else if (v !== null && v !== undefined) {\n const idx = opts.findIndex((o) => cmp(o.value, v));\n if (idx >= 0) return idx;\n }\n\n return this.findFirstEnabledIndex();\n }\n\n private findFirstEnabledIndex(): number {\n return this.options().findIndex((o) => !o.disabled);\n }\n\n private findLastEnabledIndex(): number {\n const opts = this.options();\n for (let i = opts.length - 1; i >= 0; i--) {\n if (!opts[i].disabled) return i;\n }\n return -1;\n }\n}\n","/**\n * Test harness for AfSelectMenuComponent.\n *\n * Provides a semantic API for interacting with the select-menu in tests,\n * abstracting DOM details behind readable method names.\n *\n * @example\n * const harness = new AfSelectMenuHarness(fixture.nativeElement);\n * harness.click();\n * expect(harness.isOpen()).toBe(true);\n * expect(harness.getOptionCount()).toBe(4);\n * harness.clickOption(1);\n * expect(harness.getTriggerText()).toBe('Banana');\n */\nexport class AfSelectMenuHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-select-menu');\n if (!el) {\n throw new Error('AfSelectMenuHarness: af-select-menu element not found in container.');\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Returns the trigger `<button>` element. */\n getTriggerElement(): HTMLButtonElement {\n const btn = this.hostEl.querySelector('.ct-select-menu__trigger');\n if (!btn) {\n throw new Error('AfSelectMenuHarness: trigger button not found.');\n }\n return btn as HTMLButtonElement;\n }\n\n /** Returns the trimmed display text of the trigger. */\n getTriggerText(): string {\n const value = this.hostEl.querySelector('.ct-select-menu__value');\n return value?.textContent?.trim() ?? '';\n }\n\n /** Clicks the trigger button. */\n click(): void {\n this.getTriggerElement().click();\n }\n\n /** Returns whether the trigger is disabled. */\n isDisabled(): boolean {\n return this.getTriggerElement().disabled;\n }\n\n /** Returns whether the listbox is currently open. */\n isOpen(): boolean {\n const menu = this.hostEl.querySelector('.ct-select-menu');\n return menu?.getAttribute('data-state') === 'open';\n }\n\n /** Returns the `aria-expanded` attribute value. */\n getAriaExpanded(): string | null {\n return this.getTriggerElement().getAttribute('aria-expanded');\n }\n\n /** Returns the `aria-label` attribute value. */\n getAriaLabel(): string | null {\n return this.getTriggerElement().getAttribute('aria-label');\n }\n\n /** Returns the `aria-labelledby` attribute value. */\n getAriaLabelledBy(): string | null {\n return this.getTriggerElement().getAttribute('aria-labelledby');\n }\n\n /** Returns the `aria-activedescendant` attribute value. */\n getAriaActiveDescendant(): string | null {\n return this.getTriggerElement().getAttribute('aria-activedescendant');\n }\n\n /** Returns the `aria-invalid` attribute value. */\n getAriaInvalid(): string | null {\n return this.getTriggerElement().getAttribute('aria-invalid');\n }\n\n /** Returns the `aria-required` attribute value. */\n getAriaRequired(): string | null {\n return this.getTriggerElement().getAttribute('aria-required');\n }\n\n /** Returns the `aria-describedby` attribute value. */\n getAriaDescribedBy(): string | null {\n return this.getTriggerElement().getAttribute('aria-describedby');\n }\n\n /** Returns all option elements inside the listbox. */\n getOptions(): HTMLElement[] {\n return Array.from(this.hostEl.querySelectorAll('[role=\"option\"]'));\n }\n\n /** Returns the trimmed text of the option at the given index. */\n getOptionText(index: number): string {\n const options = this.getOptions();\n if (index < 0 || index >= options.length) {\n throw new Error(`AfSelectMenuHarness: option index ${index} out of bounds (${options.length} options).`);\n }\n return options[index].textContent?.trim() ?? '';\n }\n\n /** Returns the number of options. */\n getOptionCount(): number {\n return this.getOptions().length;\n }\n\n /** Returns whether the option at the given index is selected. */\n isOptionSelected(index: number): boolean {\n return this.getOptions()[index]?.getAttribute('aria-selected') === 'true';\n }\n\n /** Returns whether the option at the given index is disabled. */\n isOptionDisabled(index: number): boolean {\n return this.getOptions()[index]?.getAttribute('aria-disabled') === 'true';\n }\n\n /** Returns whether the option at the given index is highlighted. */\n isOptionHighlighted(index: number): boolean {\n return this.getOptions()[index]?.hasAttribute('data-highlighted') ?? false;\n }\n\n /** Clicks the option at the given index. */\n clickOption(index: number): void {\n const options = this.getOptions();\n if (index < 0 || index >= options.length) {\n throw new Error(`AfSelectMenuHarness: option index ${index} out of bounds (${options.length} options).`);\n }\n options[index].click();\n }\n\n /** Returns the trimmed label text, or empty string if no label. */\n getLabelText(): string {\n const label = this.hostEl.querySelector('.ct-field__label');\n return label?.textContent?.trim() ?? '';\n }\n\n /** Returns the trimmed hint text, or empty string if no hint. */\n getHintText(): string {\n const hint = this.hostEl.querySelector('.ct-field__hint');\n return hint?.textContent?.trim() ?? '';\n }\n\n /** Returns the trimmed error text, or empty string if no error. */\n getErrorText(): string {\n const error = this.hostEl.querySelector('.ct-field__error');\n return error?.textContent?.trim() ?? '';\n }\n\n /** Returns whether the select-menu wrapper has the given CSS class. */\n hasClass(className: string): boolean {\n const menu = this.hostEl.querySelector('.ct-select-menu');\n return menu?.classList.contains(className) ?? false;\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n booleanAttribute,\n input,\n output,\n signal,\n computed,\n contentChildren,\n effect,\n viewChild,\n viewChildren,\n ElementRef,\n inject,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\n\nlet nextId = 0;\n\nexport type AfNavbarSize = 'sm' | 'md' | 'lg';\nexport type AfNavbarVariant =\n | 'default'\n | 'sticky'\n | 'fixed'\n | 'elevated'\n | 'transparent'\n | 'dark'\n | 'bordered';\n\n/**\n * Individual navigation item used within af-navbar or af-toolbar.\n *\n * Supports Angular Router via `routerLink`, standard links via `href`,\n * and button mode when neither is provided. Content projection allows\n * icons and custom markup inside the link.\n *\n * @example\n * <af-nav-item label=\"Dashboard\" routerLink=\"/dashboard\">\n * <af-icon name=\"dashboard\" /> Dashboard\n * </af-nav-item>\n */\n@Component({\n selector: 'af-nav-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive, NgTemplateOutlet],\n template: `\n <li class=\"ct-navbar__item\" role=\"none\">\n <ng-template #contentTpl>\n <ng-content>{{ label() }}</ng-content>\n </ng-template>\n\n @if (routerLink()) {\n <a\n #linkEl\n class=\"ct-navbar__link\"\n [routerLink]=\"routerLink()!\"\n routerLinkActive=\"ct-navbar__link--active\"\n role=\"menuitem\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.tabindex]=\"rovingTabindex()\"\n (click)=\"onClick($event)\">\n <ng-container [ngTemplateOutlet]=\"contentTpl\" />\n </a>\n } @else if (href()) {\n <a\n #linkEl\n class=\"ct-navbar__link\"\n [class.ct-navbar__link--active]=\"active()\"\n [href]=\"href()\"\n role=\"menuitem\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.tabindex]=\"rovingTabindex()\"\n (click)=\"onClick($event)\">\n <ng-container [ngTemplateOutlet]=\"contentTpl\" />\n </a>\n } @else {\n <button\n #linkEl\n class=\"ct-navbar__link\"\n [class.ct-navbar__link--active]=\"active()\"\n type=\"button\"\n role=\"menuitem\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.tabindex]=\"rovingTabindex()\"\n (click)=\"onClick($event)\">\n <ng-container [ngTemplateOutlet]=\"contentTpl\" />\n </button>\n }\n </li>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfNavItemComponent {\n /** Text label shown as fallback when no content is projected. Also used by the mobile menu. */\n label = input.required<string>();\n\n /** URL for the navigation link. Renders as `<a>` when provided, `<button>` otherwise. */\n href = input('');\n\n /** Angular Router link. Renders as `<a>` with routerLink and auto-active detection. */\n routerLink = input<string | string[] | null>(null);\n\n /** Marks this item as the currently active page (used for href/button mode, routerLink auto-detects). */\n active = input(false, { transform: booleanAttribute });\n\n /** Disables interaction with this item. */\n disabled = input(false, { transform: booleanAttribute });\n\n /** Emits when the item is clicked (only fires when not disabled). */\n clicked = output<MouseEvent>();\n\n /** Roving tabindex managed by the parent AfNavbarComponent. */\n rovingTabindex = signal(0);\n\n linkRef = viewChild<ElementRef<HTMLElement>>('linkEl');\n\n /** Focus the link or button element. */\n focusLink(): void {\n this.linkRef()?.nativeElement.focus();\n }\n\n onClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n return;\n }\n this.clicked.emit(event);\n }\n}\n\n/**\n * Responsive navbar with mobile menu, keyboard navigation, and ARIA landmarks.\n *\n * @example\n * <af-navbar ariaLabel=\"Main navigation\">\n * <a brand class=\"ct-navbar__brand\" href=\"/\">My App</a>\n * <af-nav-item label=\"Dashboard\" routerLink=\"/dashboard\">\n * <af-icon name=\"dashboard\" /> Dashboard\n * </af-nav-item>\n * <af-nav-item label=\"Settings\" routerLink=\"/settings\" />\n * <button actions class=\"ct-button\">Profile</button>\n * </af-navbar>\n */\n@Component({\n selector: 'af-navbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive],\n host: {\n '(keydown)': 'handleKeydown($event)',\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n <header [class]=\"navbarClasses()\">\n <div class=\"ct-navbar__brand-wrapper\">\n <ng-content select=\"[brand]\" />\n </div>\n\n <button\n #toggleBtn\n class=\"ct-navbar__toggle\"\n type=\"button\"\n [attr.aria-expanded]=\"mobileMenuOpen()\"\n [attr.aria-label]=\"mobileMenuOpen() ? 'Close menu' : 'Open menu'\"\n [attr.aria-controls]=\"mobileMenuId\"\n (click)=\"toggleMobileMenu()\">\n <span class=\"ct-navbar__toggle-icon\">\n <span></span>\n <span></span>\n <span></span>\n </span>\n </button>\n\n <nav [attr.aria-label]=\"ariaLabel()\">\n <ul class=\"ct-navbar__nav\" role=\"menubar\">\n <ng-content />\n </ul>\n </nav>\n\n <div class=\"ct-navbar__spacer\"></div>\n\n <div class=\"ct-navbar__actions\">\n <ng-content select=\"[actions]\" />\n </div>\n\n <div\n class=\"ct-navbar__mobile-menu\"\n [attr.id]=\"mobileMenuId\"\n [attr.data-state]=\"mobileMenuOpen() ? 'open' : 'closed'\"\n role=\"menu\"\n aria-label=\"Mobile navigation\">\n @for (item of items(); track item) {\n @if (item.routerLink(); as rl) {\n <a\n #mobileLink\n class=\"ct-navbar__link\"\n [routerLink]=\"rl\"\n routerLinkActive=\"ct-navbar__link--active\"\n role=\"menuitem\"\n [attr.aria-disabled]=\"item.disabled() || null\"\n [attr.tabindex]=\"mobileMenuOpen() ? 0 : -1\"\n (click)=\"onMobileItemClick($event, item)\">\n {{ item.label() }}\n </a>\n } @else if (item.href()) {\n <a\n #mobileLink\n class=\"ct-navbar__link\"\n [href]=\"item.href()\"\n role=\"menuitem\"\n [attr.aria-current]=\"item.active() ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled() || null\"\n [attr.tabindex]=\"mobileMenuOpen() ? 0 : -1\"\n (click)=\"onMobileItemClick($event, item)\">\n {{ item.label() }}\n </a>\n } @else {\n <button\n #mobileLink\n class=\"ct-navbar__link\"\n type=\"button\"\n role=\"menuitem\"\n [attr.aria-current]=\"item.active() ? 'page' : null\"\n [attr.aria-disabled]=\"item.disabled() || null\"\n [attr.tabindex]=\"mobileMenuOpen() ? 0 : -1\"\n (click)=\"onMobileItemClick($event, item)\">\n {{ item.label() }}\n </button>\n }\n }\n </div>\n </header>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfNavbarComponent {\n private componentId = nextId++;\n private hostEl = inject(ElementRef);\n\n /** Size variant of the navbar. */\n size = input<AfNavbarSize>('md');\n\n /** Visual variant of the navbar. */\n variant = input<AfNavbarVariant>('default');\n\n /** Center the navigation items. */\n center = input(false, { transform: booleanAttribute });\n\n /** Accessible label for the navigation landmark. */\n ariaLabel = input('Main navigation');\n\n /** Projected nav item children. */\n items = contentChildren(AfNavItemComponent);\n\n /** Whether the mobile menu is currently open. */\n mobileMenuOpen = signal(false);\n\n readonly mobileMenuId = `af-navbar-mobile-${this.componentId}`;\n\n private focusedIndex = signal(0);\n private toggleRef = viewChild<ElementRef<HTMLButtonElement>>('toggleBtn');\n private mobileLinks = viewChildren<ElementRef<HTMLElement>>('mobileLink');\n\n navbarClasses = computed(() => {\n const classes = ['ct-navbar'];\n\n const sz = this.size();\n if (sz !== 'md') {\n classes.push(`ct-navbar--${sz}`);\n }\n\n const variant = this.variant();\n if (variant !== 'default') {\n classes.push(`ct-navbar--${variant}`);\n }\n\n if (this.center()) {\n classes.push('ct-navbar--center');\n }\n\n return classes.join(' ');\n });\n\n /** Manage roving tabindex across child nav items. */\n private rovingTabindexEffect = effect(() => {\n const items = this.items();\n const enabledItems = items.filter((i) => !i.disabled());\n let idx = this.focusedIndex();\n\n if (enabledItems.length === 0) {\n items.forEach((item) => item.rovingTabindex.set(-1));\n return;\n }\n\n if (idx >= enabledItems.length) {\n idx = 0;\n }\n\n let enabledCount = 0;\n items.forEach((item) => {\n if (item.disabled()) {\n item.rovingTabindex.set(-1);\n } else {\n item.rovingTabindex.set(enabledCount === idx ? 0 : -1);\n enabledCount++;\n }\n });\n });\n\n /** Toggle mobile menu open/closed and auto-focus the first enabled item. */\n toggleMobileMenu(): void {\n const willOpen = !this.mobileMenuOpen();\n this.mobileMenuOpen.set(willOpen);\n\n if (willOpen) {\n queueMicrotask(() => {\n const links = this.mobileLinks();\n const firstEnabledIdx = this.items().findIndex((i) => !i.disabled());\n if (firstEnabledIdx >= 0 && links[firstEnabledIdx]) {\n links[firstEnabledIdx].nativeElement.focus();\n }\n });\n }\n }\n\n onMobileItemClick(event: MouseEvent, item: AfNavItemComponent): void {\n if (item.disabled()) {\n event.preventDefault();\n return;\n }\n item.clicked.emit(event);\n this.mobileMenuOpen.set(false);\n }\n\n onDocumentClick(event: Event): void {\n if (!this.mobileMenuOpen()) return;\n const target = event.target as HTMLElement;\n if (!this.hostEl.nativeElement.contains(target)) {\n this.mobileMenuOpen.set(false);\n }\n }\n\n handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.mobileMenuOpen()) {\n event.preventDefault();\n this.mobileMenuOpen.set(false);\n this.toggleRef()?.nativeElement.focus();\n return;\n }\n\n const target = event.target as HTMLElement;\n\n if (this.isMobileMenuTarget(target)) {\n this.handleMobileKeydown(event, target);\n return;\n }\n\n if (\n target.getAttribute('role') === 'menuitem' &&\n target.closest('[role=\"menubar\"]')\n ) {\n this.handleDesktopKeydown(event);\n }\n }\n\n private handleDesktopKeydown(event: KeyboardEvent): void {\n const enabledItems = this.items().filter((i) => !i.disabled());\n if (enabledItems.length === 0) return;\n\n const currentIndex = this.focusedIndex();\n const last = enabledItems.length - 1;\n\n switch (event.key) {\n case 'ArrowRight': {\n event.preventDefault();\n const next = (currentIndex + 1) % enabledItems.length;\n this.focusedIndex.set(next);\n enabledItems[next].focusLink();\n break;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n const prev =\n (currentIndex - 1 + enabledItems.length) % enabledItems.length;\n this.focusedIndex.set(prev);\n enabledItems[prev].focusLink();\n break;\n }\n case 'Home': {\n event.preventDefault();\n this.focusedIndex.set(0);\n enabledItems[0].focusLink();\n break;\n }\n case 'End': {\n event.preventDefault();\n this.focusedIndex.set(last);\n enabledItems[last].focusLink();\n break;\n }\n }\n }\n\n private handleMobileKeydown(\n event: KeyboardEvent,\n target: HTMLElement,\n ): void {\n const links = this.mobileLinks();\n const enabledIndices = this.items()\n .map((item, i) => ({ item, i }))\n .filter(({ item }) => !item.disabled())\n .map(({ i }) => i);\n\n if (enabledIndices.length === 0) return;\n\n const currentIdx = links.findIndex(\n (ref) => ref.nativeElement === target,\n );\n const enabledPosition = enabledIndices.indexOf(currentIdx);\n if (enabledPosition === -1) return;\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n const next =\n enabledIndices[(enabledPosition + 1) % enabledIndices.length];\n links[next].nativeElement.focus();\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n const prev =\n enabledIndices[\n (enabledPosition - 1 + enabledIndices.length) %\n enabledIndices.length\n ];\n links[prev].nativeElement.focus();\n break;\n }\n case 'Home': {\n event.preventDefault();\n links[enabledIndices[0]].nativeElement.focus();\n break;\n }\n case 'End': {\n event.preventDefault();\n links[\n enabledIndices[enabledIndices.length - 1]\n ].nativeElement.focus();\n break;\n }\n }\n }\n\n private isMobileMenuTarget(target: HTMLElement): boolean {\n return target.closest('.ct-navbar__mobile-menu') !== null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n InjectionToken,\n OnDestroy,\n Signal,\n computed,\n contentChild,\n effect,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FocusTrap } from '../../utils/focus-trap';\n\nexport type AfPopoverPosition = 'top' | 'bottom' | 'left' | 'right';\nexport type AfPopoverAlign = 'start' | 'center' | 'end';\nexport type AfPopoverSize = 'sm' | 'md' | 'lg';\n\n/** @internal API surface exposed to the trigger directive. */\ninterface AfPopoverApi {\n toggle(): void;\n open: Signal<boolean>;\n contentId: string;\n}\n\n/** @internal */\nconst AF_POPOVER = new InjectionToken<AfPopoverApi>('AfPopover');\n\n/**\n * Marks the trigger element for an `af-popover`.\n * Automatically sets ARIA attributes and toggles on click.\n *\n * @example\n * ```html\n * <af-popover>\n * <button afPopoverTrigger>Open</button>\n * ...\n * </af-popover>\n * ```\n */\n@Directive({\n selector: '[afPopoverTrigger]',\n host: {\n '(click)': 'popover.toggle()',\n '[attr.aria-haspopup]': '\"dialog\"',\n '[attr.aria-expanded]': 'popover.open()',\n '[attr.aria-controls]': 'popover.contentId',\n },\n})\nexport class AfPopoverTriggerDirective {\n /** @internal */\n readonly popover = inject(AF_POPOVER);\n /** @internal */\n readonly elementRef = inject(ElementRef<HTMLElement>);\n}\n\n/**\n * Popover with configurable positioning, auto-flip, focus management,\n * and full ARIA support.\n *\n * @example\n * ```html\n * <af-popover position=\"bottom\" align=\"center\" title=\"Info\">\n * <button afPopoverTrigger>More info</button>\n * <p>Some helpful content.</p>\n * </af-popover>\n * ```\n */\n@Component({\n selector: 'af-popover',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: AF_POPOVER, useExisting: forwardRef(() => AfPopoverComponent) },\n ],\n host: {\n '(document:click)': 'onDocumentClick($event)',\n '(document:keydown.escape)': 'onEscapeKey()',\n '(document:keydown)': 'onKeydown($event)',\n },\n template: `\n <div\n #wrapper\n [class]=\"containerClasses()\"\n [attr.data-state]=\"open() ? 'open' : 'closed'\"\n [attr.data-side]=\"activeSide()\"\n [attr.data-align]=\"align()\">\n <ng-content select=\"[afPopoverTrigger]\"></ng-content>\n <div\n #popoverContent\n class=\"ct-popover__content\"\n role=\"dialog\"\n [id]=\"contentId\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"!ariaLabel() && title() ? headerId : null\"\n tabindex=\"-1\">\n @if (showArrow()) {\n <div class=\"ct-popover__arrow\"></div>\n }\n @if (title()) {\n <div class=\"ct-popover__header\">\n <h3 [id]=\"headerId\">{{ title() }}</h3>\n </div>\n }\n <div class=\"ct-popover__body\">\n <ng-content select=\"[body]\"></ng-content>\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfPopoverComponent implements AfPopoverApi, OnDestroy {\n private static nextId = 0;\n private focusTrap = new FocusTrap();\n\n /** Two-way bindable open state. */\n open = model(false);\n\n /** Preferred position relative to the trigger. Flips automatically when space is insufficient. */\n position = input<AfPopoverPosition>('bottom');\n\n /** Alignment along the position axis. */\n align = input<AfPopoverAlign>('center');\n\n /** Size variant (`sm` = 240px, `md` = default, `lg` = 480px). */\n size = input<AfPopoverSize>('md');\n\n /** Title displayed in the header section. */\n title = input('');\n\n /** Accessible label (overrides `aria-labelledby` from title). */\n ariaLabel = input('');\n\n /** Whether to show the decorative arrow. */\n showArrow = input(true);\n\n /** Whether clicking outside closes the popover. */\n closeOnClickOutside = input(true);\n\n /** Emits when the popover closes. */\n closed = output<void>();\n\n readonly contentId = `af-popover-${AfPopoverComponent.nextId}`;\n readonly headerId = `af-popover-header-${AfPopoverComponent.nextId++}`;\n\n private wrapperRef = viewChild<ElementRef<HTMLElement>>('wrapper');\n private contentRef = viewChild<ElementRef<HTMLElement>>('popoverContent');\n private triggerDirective = contentChild(AfPopoverTriggerDirective);\n private flippedSide = signal<AfPopoverPosition | null>(null);\n\n /** Effective side after auto-flip evaluation. */\n activeSide = computed(() => this.flippedSide() ?? this.position());\n\n containerClasses = computed(() => {\n const classes = ['ct-popover'];\n const sz = this.size();\n if (sz !== 'md') {\n classes.push(`ct-popover--${sz}`);\n }\n return classes.join(' ');\n });\n\n private openEffect = effect(() => {\n if (this.open()) {\n this.onOpen();\n } else {\n this.onClose();\n }\n });\n\n ngOnDestroy(): void {\n this.focusTrap.restoreFocus();\n }\n\n /** Toggle the popover open state. */\n toggle(): void {\n if (this.open()) {\n this.close();\n } else {\n this.open.set(true);\n }\n }\n\n /** Close the popover and emit the `closed` event. */\n close(): void {\n this.open.set(false);\n this.closed.emit();\n }\n\n onDocumentClick(event: MouseEvent): void {\n if (!this.open() || !this.closeOnClickOutside()) return;\n const wrapper = this.wrapperRef()?.nativeElement;\n if (wrapper && !wrapper.contains(event.target as Node)) {\n this.close();\n }\n }\n\n onEscapeKey(): void {\n if (!this.open()) return;\n const trigger = this.triggerDirective()?.elementRef.nativeElement;\n if (trigger) {\n this.focusTrap.setReturnFocus(trigger);\n }\n this.close();\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (!this.open() || event.key !== 'Tab') return;\n const content = this.contentRef()?.nativeElement;\n this.focusTrap.handleTab(event, content, content);\n }\n\n private onOpen(): void {\n this.focusTrap.saveFocus();\n this.flippedSide.set(this.computeFlippedSide());\n queueMicrotask(() => {\n if (!this.open()) return;\n const content = this.contentRef()?.nativeElement;\n this.focusTrap.focusFirst(content, content);\n });\n }\n\n private onClose(): void {\n this.flippedSide.set(null);\n this.focusTrap.restoreFocus();\n }\n\n private computeFlippedSide(): AfPopoverPosition {\n const trigger = this.triggerDirective()?.elementRef.nativeElement;\n const content = this.contentRef()?.nativeElement;\n if (!trigger || !content) return this.position();\n\n const triggerRect = trigger.getBoundingClientRect();\n const contentRect = content.getBoundingClientRect();\n const preferred = this.position();\n\n const opposites: Record<AfPopoverPosition, AfPopoverPosition> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n };\n\n const space: Record<AfPopoverPosition, number> = {\n top: triggerRect.top,\n bottom: window.innerHeight - triggerRect.bottom,\n left: triggerRect.left,\n right: window.innerWidth - triggerRect.right,\n };\n\n const needed: Record<AfPopoverPosition, number> = {\n top: contentRect.height,\n bottom: contentRect.height,\n left: contentRect.width,\n right: contentRect.width,\n };\n\n if (space[preferred] >= needed[preferred]) return preferred;\n\n const opposite = opposites[preferred];\n if (space[opposite] >= needed[opposite]) return opposite;\n\n return preferred;\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n OnDestroy,\n input,\n output,\n signal,\n computed,\n effect,\n} from '@angular/core';\n\n/** Semantic variants controlling colors and ARIA behavior */\nexport type AfBannerVariant = 'info' | 'warning' | 'danger' | 'success' | 'neutral';\n\n/** Visual appearance styles */\nexport type AfBannerAppearance = 'subtle' | 'solid' | 'left-accent' | 'top-accent';\n\n/** Positioning strategies */\nexport type AfBannerPosition = 'inline' | 'fixed-top' | 'fixed-bottom' | 'sticky';\n\n/**\n * Persistent page- or section-level notice component.\n * Wraps the `ct-banner` design system component with dismiss logic,\n * optional auto-close timer, and ARIA live region support.\n *\n * Uses attribute-based content projection for icon, heading, message,\n * and actions slots. The component automatically applies the correct\n * `ct-banner__*` CSS wrapper classes.\n *\n * @example\n * ```html\n * <af-banner variant=\"warning\" [dismissible]=\"true\" (dismissed)=\"onDismissed()\">\n * <span icon>⚠️</span>\n * <span heading>Attention</span>\n * <span message>Something needs your attention.</span>\n * <div actions>\n * <button class=\"ct-button ct-button--sm\">Fix now</button>\n * </div>\n * </af-banner>\n * ```\n */\n@Component({\n selector: 'af-banner',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n [class]=\"hostClasses()\"\n [attr.data-variant]=\"variant()\"\n [attr.data-state]=\"state()\"\n [attr.role]=\"ariaRole()\">\n <div class=\"ct-banner__icon\">\n <ng-content select=\"[icon]\" />\n </div>\n <div class=\"ct-banner__content\">\n <div class=\"ct-banner__title\">\n <ng-content select=\"[heading]\" />\n </div>\n <div class=\"ct-banner__message\">\n <ng-content select=\"[message]\" />\n </div>\n <ng-content />\n </div>\n <div class=\"ct-banner__actions\">\n <ng-content select=\"[actions]\" />\n </div>\n @if (dismissible()) {\n <button\n class=\"ct-banner__close\"\n type=\"button\"\n [attr.aria-label]=\"closeAriaLabel()\"\n (click)=\"dismiss()\">\n <span class=\"ct-icon ct-icon--sm\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg></span>\n </button>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfBannerComponent implements OnDestroy {\n /** Semantic variant controlling colors and ARIA role */\n variant = input<AfBannerVariant>('info');\n\n /** Visual appearance style */\n appearance = input<AfBannerAppearance>('subtle');\n\n /** Positioning strategy */\n position = input<AfBannerPosition>('inline');\n\n /** Whether the banner displays a close/dismiss button */\n dismissible = input(false);\n\n /** Compact size mode */\n compact = input(false);\n\n /** Full-width layout (no radius, no inline border) */\n full = input(false);\n\n /** Auto-close delay in milliseconds. 0 means no auto-close */\n autoClose = input(0);\n\n /** Aria label for the close button */\n closeAriaLabel = input('Close banner');\n\n /** Emits when the banner is dismissed (by user or auto-close) */\n dismissed = output<void>();\n\n private readonly isDismissed = signal(false);\n private autoCloseTimerId: ReturnType<typeof setTimeout> | null = null;\n\n /** Current open/closed state for the data-state attribute */\n state = computed(() => (this.isDismissed() ? 'closed' : 'open'));\n\n /** ARIA role based on variant: alert for danger/warning, status for others */\n ariaRole = computed(() => {\n const v = this.variant();\n return v === 'danger' || v === 'warning' ? 'alert' : 'status';\n });\n\n /** Computed CSS class string for the banner element */\n hostClasses = computed(() => {\n const classes = ['ct-banner'];\n\n const app = this.appearance();\n if (app !== 'subtle') {\n classes.push(`ct-banner--${app}`);\n }\n\n const pos = this.position();\n if (pos !== 'inline') {\n classes.push(`ct-banner--${pos}`);\n }\n\n if (this.compact()) {\n classes.push('ct-banner--compact');\n }\n\n if (this.full()) {\n classes.push('ct-banner--full');\n }\n\n return classes.join(' ');\n });\n\n private autoCloseEffect = effect(() => {\n const delay = this.autoClose();\n this.clearAutoCloseTimer();\n if (delay > 0 && !this.isDismissed()) {\n this.autoCloseTimerId = setTimeout(() => this.dismiss(), delay);\n }\n });\n\n ngOnDestroy(): void {\n this.clearAutoCloseTimer();\n }\n\n /** Dismisses the banner and emits the dismissed event */\n dismiss(): void {\n if (this.isDismissed()) return;\n this.isDismissed.set(true);\n this.clearAutoCloseTimer();\n this.dismissed.emit();\n }\n\n private clearAutoCloseTimer(): void {\n if (this.autoCloseTimerId !== null) {\n clearTimeout(this.autoCloseTimerId);\n this.autoCloseTimerId = null;\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n} from '@angular/core';\n\nexport type AfEmptyStateSize = 'sm' | 'md' | 'lg';\nexport type AfEmptyStateVariant = 'default' | 'error';\n\n/**\n * Empty state component for displaying placeholder content when no data is available.\n *\n * Supports content projection for icon, title, description, and actions.\n * Alternatively, use the `icon` input for simple text/emoji icons.\n *\n * @example\n * <af-empty-state variant=\"default\" size=\"md\" [bordered]=\"true\">\n * <span icon>📦</span>\n * <span title>No items found</span>\n * <span description>Try adjusting your search or filter criteria.</span>\n * <div actions>\n * <button class=\"ct-button ct-button--primary\">Add Item</button>\n * </div>\n * </af-empty-state>\n *\n * @example\n * <af-empty-state icon=\"🔍\" variant=\"error\">\n * <span title>Search failed</span>\n * <span description>An error occurred while searching.</span>\n * </af-empty-state>\n */\n@Component({\n selector: 'af-empty-state',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [class]=\"containerClasses()\" role=\"status\">\n <div class=\"ct-empty-state__icon\" aria-hidden=\"true\">\n @if (icon()) {\n {{ icon() }}\n } @else {\n <ng-content select=\"[icon]\" />\n }\n </div>\n <p class=\"ct-empty-state__title\">\n <ng-content select=\"[title]\" />\n </p>\n <p class=\"ct-empty-state__description\">\n <ng-content select=\"[description]\" />\n </p>\n <div class=\"ct-empty-state__actions\">\n <ng-content select=\"[actions]\" />\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfEmptyStateComponent {\n /** Size variant controlling icon size, padding, and font sizes */\n size = input<AfEmptyStateSize>('md');\n\n /** Visual variant — `error` highlights icon and title in danger color */\n variant = input<AfEmptyStateVariant>('default');\n\n /** Whether to display a dashed border around the empty state */\n bordered = input(false);\n\n /** Icon character or emoji to display (alternative to icon content projection) */\n icon = input('');\n\n containerClasses = computed(() => {\n const classes = ['ct-empty-state'];\n\n const s = this.size();\n if (s !== 'md') {\n classes.push(`ct-empty-state--${s}`);\n }\n\n if (this.variant() === 'error') {\n classes.push('ct-empty-state--error');\n }\n\n if (this.bordered()) {\n classes.push('ct-empty-state--bordered');\n }\n\n return classes.join(' ');\n });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n numberAttribute,\n} from '@angular/core';\n\nexport type AfSkeletonVariant = 'text' | 'title' | 'avatar' | 'rect';\n\n/**\n * Skeleton placeholder component for loading states.\n * Renders animated placeholders while content is loading.\n *\n * @example\n * <af-skeleton variant=\"text\" count=\"3\"></af-skeleton>\n * <af-skeleton variant=\"avatar\"></af-skeleton>\n * <af-skeleton variant=\"rect\" width=\"200px\" height=\"120px\"></af-skeleton>\n */\n@Component({\n selector: 'af-skeleton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'status',\n '[attr.aria-busy]': '\"true\"',\n '[attr.aria-label]': 'label()',\n },\n template: `\n @for (_ of items(); track $index) {\n <span\n [class]=\"skeletonClasses()\"\n [attr.style]=\"skeletonStyle()\"\n aria-hidden=\"true\"\n ></span>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n }\n span + span {\n margin-top: 0.5rem;\n }\n `,\n ],\n})\nexport class AfSkeletonComponent {\n /** Visual variant of the skeleton placeholder */\n variant = input<AfSkeletonVariant>('text');\n\n /** Custom width (CSS value, e.g. '200px', '50%') */\n width = input<string>();\n\n /** Custom height (CSS value, e.g. '100px', '2em') */\n height = input<string>();\n\n /** Number of skeleton lines to render */\n count = input(1, { transform: numberAttribute });\n\n /** Accessible label for screen readers */\n label = input('Loading\\u2026');\n\n items = computed(() => Array.from({ length: this.count() }));\n\n skeletonClasses = computed(() => {\n return `ct-skeleton ct-skeleton--${this.variant()}`;\n });\n\n skeletonStyle = computed(() => {\n const w = this.width();\n const h = this.height();\n if (!w && !h) return null;\n const parts: string[] = [];\n if (w) parts.push(`--ct-skeleton-width: ${w}`);\n if (h) parts.push(`--ct-skeleton-height: ${h}`);\n return parts.join('; ');\n });\n}\n","import { Component, ChangeDetectionStrategy, input, computed } from '@angular/core';\n\nexport type AfDividerOrientation = 'horizontal' | 'vertical';\nexport type AfDividerColor = 'default' | 'strong' | 'muted';\nexport type AfDividerSpacing = 'sm' | 'md' | 'lg' | 'none';\n\n/**\n * Divider component for visually separating content sections.\n *\n * @example\n * <af-divider />\n * <af-divider orientation=\"vertical\" />\n * <af-divider color=\"strong\" spacing=\"lg\" />\n * <af-divider label=\"Section\" />\n */\n@Component({\n selector: 'af-divider',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'separator',\n '[attr.aria-orientation]': 'orientation()',\n '[class]': 'dividerClasses()',\n },\n template: `\n @if (label()) {\n <span class=\"ct-divider__label\">{{ label() }}</span>\n }\n `,\n})\nexport class AfDividerComponent {\n /** Orientation of the divider. */\n orientation = input<AfDividerOrientation>('horizontal');\n\n /** Color variant of the divider line. */\n color = input<AfDividerColor>('default');\n\n /** Spacing around the divider. */\n spacing = input<AfDividerSpacing>('md');\n\n /** Optional label text displayed in the center of the divider. */\n label = input('');\n\n dividerClasses = computed(() => {\n const classes = ['ct-divider'];\n\n if (this.orientation() === 'vertical') {\n classes.push('ct-divider--vertical');\n }\n\n if (this.color() !== 'default') {\n classes.push(`ct-divider--${this.color()}`);\n }\n\n if (this.spacing() !== 'md') {\n classes.push(`ct-divider--${this.spacing()}`);\n }\n\n if (this.label()) {\n classes.push('ct-divider--labeled');\n }\n\n return classes.join(' ');\n });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n AfterContentInit,\n AfterContentChecked,\n ElementRef,\n computed,\n inject,\n input,\n} from '@angular/core';\n\nconst CONTROL_SELECTORS = [\n 'input',\n 'select',\n 'textarea',\n '[role=\"combobox\"]',\n '[role=\"listbox\"]',\n '[role=\"spinbutton\"]',\n '[role=\"slider\"]',\n].join(',');\n\n/**\n * Form field wrapper that binds label, hint, and error message to a projected form control.\n *\n * Automatically links the label via `for`/`id` and sets `aria-describedby`\n * and `aria-invalid` on the first interactive element found inside the projection.\n *\n * @example\n * <af-field label=\"Email\" hint=\"We will not share this.\">\n * <input class=\"ct-input\" type=\"email\" />\n * </af-field>\n *\n * @example\n * <af-field label=\"Name\" [error]=\"nameError\" required>\n * <input class=\"ct-input\" />\n * </af-field>\n */\n@Component({\n selector: 'af-field',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"ct-field\">\n @if (label()) {\n <label\n class=\"ct-field__label\"\n [class.ct-field__label--required]=\"required()\"\n [attr.for]=\"fieldId()\"\n >\n {{ label() }}\n </label>\n }\n\n <ng-content></ng-content>\n\n @if (hint() && !error()) {\n <div class=\"ct-field__hint\" [id]=\"hintId()\">{{ hint() }}</div>\n }\n\n @if (error()) {\n <div class=\"ct-field__error\" role=\"alert\" [id]=\"errorId()\">\n {{ error() }}\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfFieldComponent implements AfterContentInit, AfterContentChecked {\n private static nextId = 0;\n\n /** Field label text */\n label = input('');\n\n /** Hint text shown below the control */\n hint = input('');\n\n /** Error message — replaces hint and marks the control as invalid */\n error = input('');\n\n /** Whether the field is required (appends visual indicator to label) */\n required = input(false);\n\n /** Unique ID applied to the projected control, auto-generated if omitted */\n fieldId = input(`af-field-${AfFieldComponent.nextId++}`);\n\n hintId = computed(() => `${this.fieldId()}-hint`);\n errorId = computed(() => `${this.fieldId()}-error`);\n\n private elementRef = inject(ElementRef);\n private controlEl: HTMLElement | null = null;\n\n ngAfterContentInit(): void {\n this.controlEl =\n this.elementRef.nativeElement.querySelector(CONTROL_SELECTORS);\n\n if (this.controlEl && !this.controlEl.id) {\n this.controlEl.id = this.fieldId();\n }\n }\n\n ngAfterContentChecked(): void {\n if (!this.controlEl) return;\n\n const error = this.error();\n const hint = this.hint();\n\n // aria-describedby\n if (error) {\n this.controlEl.setAttribute('aria-describedby', this.errorId());\n } else if (hint) {\n this.controlEl.setAttribute('aria-describedby', this.hintId());\n } else {\n this.controlEl.removeAttribute('aria-describedby');\n }\n\n // aria-invalid\n if (error) {\n this.controlEl.setAttribute('aria-invalid', 'true');\n } else {\n this.controlEl.removeAttribute('aria-invalid');\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n booleanAttribute,\n} from '@angular/core';\n\nexport type AfTableVariant = 'default' | 'striped' | 'bordered';\nexport type AfTableCellType = 'text' | 'numeric' | 'checkbox' | 'actions';\n\n/**\n * Lightweight table container wrapping the Construct Design System table styles.\n *\n * @example\n * <af-table variant=\"striped\" caption=\"Team members\">\n * <af-table-header>\n * <af-table-row>\n * <af-table-header-cell>Name</af-table-header-cell>\n * <af-table-header-cell type=\"numeric\">Age</af-table-header-cell>\n * </af-table-row>\n * </af-table-header>\n * <af-table-body>\n * <af-table-row>\n * <af-table-cell>Alice</af-table-cell>\n * <af-table-cell type=\"numeric\">30</af-table-cell>\n * </af-table-row>\n * </af-table-body>\n * </af-table>\n */\n@Component({\n selector: 'af-table',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"ct-table-wrap\">\n <table [class]=\"tableClasses()\">\n @if (caption()) {\n <caption>{{ caption() }}</caption>\n }\n <ng-content />\n </table>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class AfTableComponent {\n /** Visual variant of the table. */\n variant = input<AfTableVariant>('default');\n\n /** Use compact cell padding. */\n compact = input(false, { transform: booleanAttribute });\n\n /** Accessible caption rendered as a `<caption>` element. */\n caption = input('');\n\n tableClasses = computed(() => {\n const classes = ['ct-table'];\n if (this.variant() !== 'default') {\n classes.push(`ct-table--${this.variant()}`);\n }\n if (this.compact()) {\n classes.push('ct-table--compact');\n }\n return classes.join(' ');\n });\n}\n\n/**\n * Table header section rendering a semantic `<thead>` element.\n *\n * @example\n * <af-table-header>\n * <af-table-row>\n * <af-table-header-cell>Column</af-table-header-cell>\n * </af-table-row>\n * </af-table-header>\n */\n@Component({\n selector: 'af-table-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<thead><ng-content /></thead>`,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfTableHeaderComponent {}\n\n/**\n * Table body section rendering a semantic `<tbody>` element.\n *\n * @example\n * <af-table-body>\n * <af-table-row>\n * <af-table-cell>Data</af-table-cell>\n * </af-table-row>\n * </af-table-body>\n */\n@Component({\n selector: 'af-table-body',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<tbody><ng-content /></tbody>`,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfTableBodyComponent {}\n\n/**\n * Table row rendering a semantic `<tr>` element.\n */\n@Component({\n selector: 'af-table-row',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<tr><ng-content /></tr>`,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfTableRowComponent {}\n\n/**\n * Header cell rendering a semantic `<th>` element.\n *\n * @example\n * <af-table-header>\n * <af-table-row>\n * <af-table-header-cell>Name</af-table-header-cell>\n * <af-table-header-cell type=\"numeric\">Age</af-table-header-cell>\n * </af-table-row>\n * </af-table-header>\n */\n@Component({\n selector: 'af-table-header-cell',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <th [class]=\"cellClasses()\" [attr.scope]=\"scope()\">\n <ng-content />\n </th>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfTableHeaderCellComponent {\n /** Cell type for specialized styling (numeric, checkbox, actions). */\n type = input<AfTableCellType>('text');\n\n /** Scope attribute for the header cell. */\n scope = input<'col' | 'row'>('col');\n\n cellClasses = computed(() => {\n const classes: string[] = [];\n if (this.type() !== 'text') {\n classes.push(`ct-table__cell--${this.type()}`);\n }\n return classes.join(' ');\n });\n}\n\n/**\n * Data cell rendering a semantic `<td>` element.\n *\n * @example\n * <af-table-body>\n * <af-table-row>\n * <af-table-cell>Alice</af-table-cell>\n * <af-table-cell type=\"numeric\">42</af-table-cell>\n * </af-table-row>\n * </af-table-body>\n */\n@Component({\n selector: 'af-table-cell',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <td [class]=\"cellClasses()\">\n <ng-content />\n </td>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class AfTableCellComponent {\n /** Cell type for specialized styling (numeric, checkbox, actions). */\n type = input<AfTableCellType>('text');\n\n cellClasses = computed(() => {\n const classes: string[] = [];\n if (this.type() !== 'text') {\n classes.push(`ct-table__cell--${this.type()}`);\n }\n return classes.join(' ');\n });\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Translatable strings used by the tree component. */\nexport interface AfTreeI18n {\n /** Screen-reader announcement when a node is expanded. Use `{label}` placeholder. */\n expanded: string;\n /** Screen-reader announcement when a node is collapsed. Use `{label}` placeholder. */\n collapsed: string;\n /** Screen-reader announcement when a node is selected. Use `{label}` placeholder. */\n selected: string;\n /** `aria-label` for the chevron toggle button (button is `aria-hidden`, used as fallback). */\n toggleLabel: string;\n /** Visually-hidden text inside the `aria-busy` row announcing async loading. */\n loadingLabel: string;\n /** Default `<af-empty-state>` message when the tree has zero nodes (and no `empty` slot). */\n emptyMessage: string;\n /** Tooltip / aria-label on the orphan warning marker. */\n orphanLabel: string;\n}\n\n/**\n * Injection token to override tree screen-reader announcements\n * and visible labels for i18n.\n *\n * @example\n * providers: [{\n * provide: AF_TREE_I18N,\n * useValue: {\n * expanded: '{label} ausgeklappt',\n * collapsed: '{label} eingeklappt',\n * selected: '{label} ausgewählt',\n * toggleLabel: 'Aufklappen / Zuklappen',\n * loadingLabel: 'Lädt …',\n * emptyMessage: 'Keine Einträge',\n * orphanLabel: 'Übergeordneter Eintrag fehlt',\n * },\n * }]\n */\nexport const AF_TREE_I18N = new InjectionToken<AfTreeI18n>('AfTreeI18n', {\n factory: () => ({\n expanded: '{label} expanded',\n collapsed: '{label} collapsed',\n selected: '{label} selected',\n toggleLabel: 'Toggle',\n loadingLabel: 'Loading…',\n emptyMessage: 'No entries',\n orphanLabel: 'Parent missing',\n }),\n});\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n TemplateRef,\n booleanAttribute,\n computed,\n contentChild,\n effect,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { AriaLiveAnnouncer } from '../../utils/aria-live-announcer';\nimport { AF_TREE_I18N } from './tree.i18n';\nimport {\n TreeNode,\n TreeNodeTemplateContext,\n TreeSelectionMode,\n TreeToggleEvent,\n} from './tree.types';\n\n/** Reset window for incremental type-ahead matching. */\nconst TYPEAHEAD_RESET_MS = 500;\n\n/** Auto-incremented suffix used for the live-region id when no `aria-label` is set. */\nlet nextTreeUid = 0;\n\n/**\n * Recursive internal component that renders a single `<li role=\"treeitem\">`\n * and any visible children. Not part of the public API — consumers always\n * use {@link AfTreeComponent}.\n *\n * @docs-private\n */\n@Component({\n selector: 'af-tree-node',\n standalone: true,\n imports: [NgTemplateOutlet, forwardRef(() => AfTreeNodeComponent)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <li\n #li\n class=\"ct-tree__node\"\n [class.ct-tree__node--selected]=\"selected()\"\n [class.ct-tree__node--orphan]=\"orphan()\"\n role=\"treeitem\"\n [attr.aria-level]=\"level()\"\n [attr.aria-setsize]=\"setSize()\"\n [attr.aria-posinset]=\"posInSet()\"\n [attr.aria-expanded]=\"expandable() ? expanded() : null\"\n [attr.aria-selected]=\"ariaSelected()\"\n [attr.aria-disabled]=\"node().disabled ? 'true' : null\"\n [attr.aria-busy]=\"node().loading ? 'true' : null\"\n [attr.tabindex]=\"focused() ? 0 : -1\"\n [attr.data-tree-id]=\"node().id\"\n (focus)=\"onFocus()\">\n <div class=\"ct-tree__row\" [style.--ct-level]=\"level()\">\n @if (expandable()) {\n <button\n type=\"button\"\n class=\"ct-tree__toggle\"\n tabindex=\"-1\"\n [attr.aria-hidden]=\"true\"\n [attr.aria-label]=\"tree.i18n.toggleLabel\"\n (click)=\"onToggleClick($event)\">\n <svg\n class=\"ct-tree__chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <polyline points=\"9 6 15 12 9 18\" />\n </svg>\n </button>\n } @else {\n <span class=\"ct-tree__spacer\" aria-hidden=\"true\"></span>\n }\n\n <div class=\"ct-tree__content\">\n @if (tree.nodeContent(); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"templateContext()\"></ng-container>\n } @else {\n <span class=\"ct-tree__label\" [innerHTML]=\"defaultLabelHtml()\"></span>\n }\n @if (tree.nodeWarning(); as warnTpl) {\n <ng-container\n [ngTemplateOutlet]=\"warnTpl\"\n [ngTemplateOutletContext]=\"templateContext()\"></ng-container>\n }\n @if (node().loading) {\n <span class=\"ct-tree__sr-only\">{{ tree.i18n.loadingLabel }}</span>\n }\n </div>\n\n @if (tree.nodeActions(); as actTpl) {\n <div class=\"ct-tree__actions\">\n <ng-container\n [ngTemplateOutlet]=\"actTpl\"\n [ngTemplateOutletContext]=\"templateContext()\"></ng-container>\n </div>\n }\n </div>\n\n @if (expandable() && expanded() && !node().loading) {\n <ul\n class=\"ct-tree__group\"\n role=\"group\"\n [style.--ct-parent-level]=\"level() - 1\">\n @for (\n child of visibleChildren();\n track tree.trackBy()(child);\n let i = $index, count = $count\n ) {\n <af-tree-node\n [node]=\"child\"\n [level]=\"level() + 1\"\n [setSize]=\"count\"\n [posInSet]=\"i + 1\"></af-tree-node>\n }\n </ul>\n }\n </li>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n .ct-tree__sr-only {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n ],\n})\nexport class AfTreeNodeComponent<T = unknown> {\n /** Backreference to the host tree — provides shared state, templates, and event hooks. */\n protected readonly tree = inject<AfTreeComponent<T>>(forwardRef(() => AfTreeComponent));\n protected readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Node descriptor for this row. */\n node = input.required<TreeNode<T>>();\n /** 1-based depth — sets `aria-level` and the `--ct-level` CSS custom property. */\n level = input.required<number>();\n /** Total siblings on this level — sets `aria-setsize`. */\n setSize = input.required<number>();\n /** 1-based position among siblings — sets `aria-posinset`. */\n posInSet = input.required<number>();\n\n protected readonly expandable = computed(() => this.tree.isExpandable(this.node()));\n protected readonly expanded = computed(() => this.tree.isExpanded(this.node()));\n protected readonly selected = computed(() => this.tree.isSelected(this.node()));\n protected readonly focused = computed(() => this.tree.focusedId() === this.node().id);\n protected readonly orphan = computed(() => this.node().meta?.['orphan'] === true);\n\n protected readonly ariaSelected = computed(() => {\n if (this.tree.selection() === 'none') return null;\n return this.selected() ? 'true' : 'false';\n });\n\n protected readonly visibleChildren = computed(() => {\n const children = this.node().children ?? [];\n return this.tree.filterChildren(children);\n });\n\n protected readonly defaultLabelHtml = computed(() =>\n this.tree.highlight(this.node().label),\n );\n\n protected readonly templateContext = computed<TreeNodeTemplateContext<T>>(() => ({\n $implicit: this.node(),\n node: this.node(),\n level: this.level(),\n filter: this.tree.filter(),\n expanded: this.expanded(),\n selected: this.selected(),\n focused: this.focused(),\n }));\n\n /** Returns the underlying `<li>` element so the host can move DOM focus here. */\n getLiElement(): HTMLElement {\n return this.host.nativeElement.querySelector(':scope > li') as HTMLElement;\n }\n\n protected onFocus(): void {\n this.tree.focusedId.set(this.node().id);\n this.tree.nodeFocus.emit(this.node());\n }\n\n protected onToggleClick(event: MouseEvent): void {\n event.stopPropagation();\n if (this.node().disabled) return;\n this.tree.toggle(this.node());\n }\n}\n\n/**\n * Accessible Tree component implementing the WAI-ARIA Tree View pattern.\n *\n * Wraps the Construct `ct-tree` CSS component into a signal-based, OnPush\n * Angular component with full keyboard navigation, type-ahead, single /\n * multi-selection, async-load support, and client-side filtering.\n *\n * @example Static org tree\n * <af-tree\n * [nodes]=\"organizations()\"\n * ariaLabel=\"Organizations\"\n * [showIndentGuides]=\"true\"\n * selection=\"single\"\n * [(selectedIds)]=\"selected\"\n * (nodeActivate)=\"open($event)\">\n * <ng-template #nodeContent let-node>\n * <af-icon name=\"folder\" />\n * <span>{{ node.label }}</span>\n * <af-badge>{{ node.data.customerType }}</af-badge>\n * </ng-template>\n * </af-tree>\n *\n * @example Async lazy-load\n * <af-tree\n * [nodes]=\"nodes()\"\n * ariaLabel=\"File system\"\n * (loadChildren)=\"onLoad($event)\" />\n *\n * @accessibility\n * - Container exposes `role=\"tree\"` and the required `aria-label`.\n * - Each node is a `<li role=\"treeitem\">` carrying `aria-level`,\n * `aria-setsize`, `aria-posinset`, and (when expandable) `aria-expanded`.\n * - Roving tabindex on the `<li>` so screen readers announce treeitem role,\n * level and selection state when focus lands.\n * - Keyboard: `↑`/`↓` move focus, `→` expands or steps into children,\n * `←` collapses or steps to the parent, `Home`/`End` jump, `Enter`\n * activates, `Space` toggles selection (multi) or activates (single),\n * `*` expands all sibling branches, A–Z performs incremental type-ahead.\n * - Selection state is mirrored via `aria-selected` only when\n * `selection !== 'none'` — leaves implicit selection off in static trees.\n * - `aria-busy=\"true\"` is rendered on rows whose `node.loading` is `true`.\n * - Custom slot templates receive the active filter so they can highlight\n * matches consistently with the default renderer.\n */\n@Component({\n selector: 'af-tree',\n standalone: true,\n imports: [AfTreeNodeComponent, NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.af-tree]': 'true',\n '(keydown)': 'handleKeydown($event)',\n '(click)': 'handleClick($event)',\n },\n template: `\n @if (visibleNodes().length > 0) {\n <ul\n [class]=\"treeClasses()\"\n role=\"tree\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-multiselectable]=\"selection() === 'multiple' ? 'true' : null\">\n @for (\n node of visibleNodes();\n track trackBy()(node);\n let i = $index, count = $count\n ) {\n <af-tree-node\n [node]=\"node\"\n [level]=\"1\"\n [setSize]=\"count\"\n [posInSet]=\"i + 1\"></af-tree-node>\n }\n </ul>\n } @else {\n <div class=\"af-tree__empty\" role=\"status\">\n @if (emptySlot(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\"></ng-container>\n } @else {\n <span>{{ i18n.emptyMessage }}</span>\n }\n </div>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .af-tree__empty {\n padding: var(--space-4, 1rem);\n color: var(--color-text-muted, currentColor);\n font-size: var(--font-size-sm, 0.875rem);\n }\n `,\n ],\n})\nexport class AfTreeComponent<T = unknown> {\n /** Internal id used to scope live-region announcements (debug aid). */\n protected readonly uid = ++nextTreeUid;\n /** I18n bundle resolved via {@link AF_TREE_I18N}. Public so the recursive child component can render labels. */\n readonly i18n = inject(AF_TREE_I18N);\n private readonly announcer = inject(AriaLiveAnnouncer);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n\n // ─── Inputs ─────────────────────────────────────────────────────────────\n\n /** Hierarchical node list. */\n nodes = input.required<TreeNode<T>[]>();\n /** Container `aria-label` — required by the WAI-ARIA Tree pattern. */\n ariaLabel = input.required<string>();\n /** Selection mode. Defaults to `'none'`. */\n selection = input<TreeSelectionMode>('none');\n /** Two-way bound set of expanded node ids. */\n expandedIds = model<Set<string>>(new Set());\n /** Two-way bound set of selected node ids. */\n selectedIds = model<Set<string>>(new Set());\n /** Case-insensitive substring filter; auto-expands ancestors of matches. */\n filter = input<string>('');\n /** Render `.ct-tree--guides` (vertical indent lines). */\n showIndentGuides = input(false, { transform: booleanAttribute });\n /** Render `.ct-tree--dense` modifier. */\n dense = input(false, { transform: booleanAttribute });\n /** Render `.ct-tree--bordered` (surface variant). */\n bordered = input(false, { transform: booleanAttribute });\n /** TrackBy override — defaults to `node.id`. */\n trackBy = input<(node: TreeNode<T>) => unknown>((n) => n.id);\n\n // ─── Outputs ────────────────────────────────────────────────────────────\n\n /** Emits when a node is activated (Enter or row click). */\n nodeActivate = output<TreeNode<T>>();\n /** Emits when a node is expanded or collapsed. */\n nodeToggle = output<TreeToggleEvent<T>>();\n /** Emits when focus moves to a node. */\n nodeFocus = output<TreeNode<T>>();\n /** Emits the first time a node with `children === undefined` is expanded (lazy-load hook). */\n loadChildren = output<TreeNode<T>>();\n\n // ─── Slots (ContentChild templates) ─────────────────────────────────────\n\n /** Template for custom node content; falls back to `node.label` with highlight. */\n nodeContent = contentChild<TemplateRef<TreeNodeTemplateContext<T>>>('nodeContent');\n /** Template for action buttons rendered visible-on-hover/focus. */\n nodeActions = contentChild<TemplateRef<TreeNodeTemplateContext<T>>>('nodeActions');\n /** Template for warning slot (e.g. orphan indicators). */\n nodeWarning = contentChild<TemplateRef<TreeNodeTemplateContext<T>>>('nodeWarning');\n /** Template shown when the (filtered) tree is empty. */\n emptySlot = contentChild<TemplateRef<unknown>>('empty');\n\n // ─── Internal state ─────────────────────────────────────────────────────\n\n /** Currently focused node id (drives the roving tabindex). */\n readonly focusedId = signal<string | null>(null);\n /** Tracks nodes whose `loadChildren` has already fired so we don't refire on re-expand. */\n private readonly loadedIds = new Set<string>();\n /** Type-ahead buffer + reset timer. */\n private typeBuffer = '';\n private typeTimer: ReturnType<typeof setTimeout> | null = null;\n\n // ─── Derived state ──────────────────────────────────────────────────────\n\n /** Flat list of visible (expanded-path) nodes. Used for keyboard nav. */\n protected readonly visibleNodeOrder = computed(() => {\n const out: TreeNode<T>[] = [];\n const walk = (list: TreeNode<T>[]): void => {\n for (const n of this.filterChildren(list)) {\n out.push(n);\n if (this.isExpanded(n) && !n.loading) {\n walk(n.children ?? []);\n }\n }\n };\n walk(this.nodes());\n return out;\n });\n\n /** Top-level filtered nodes — used by the template. */\n protected readonly visibleNodes = computed(() => this.filterChildren(this.nodes()));\n\n protected readonly treeClasses = computed(() => {\n const classes = ['ct-tree'];\n if (this.showIndentGuides()) classes.push('ct-tree--guides');\n if (this.dense()) classes.push('ct-tree--dense');\n if (this.bordered()) classes.push('ct-tree--bordered');\n return classes.join(' ');\n });\n\n /**\n * Set of node ids matching the current filter. Empty set means no filter active.\n * Filtering is case-insensitive substring on `node.label`.\n */\n private readonly filterMatches = computed(() => {\n const q = this.filter().trim().toLowerCase();\n if (!q) return null;\n const matches = new Set<string>();\n const walk = (list: TreeNode<T>[]): boolean => {\n let any = false;\n for (const n of list) {\n const self = n.label.toLowerCase().includes(q);\n const childHit = walk(n.children ?? []);\n if (self || childHit) {\n matches.add(n.id);\n any = true;\n }\n }\n return any;\n };\n walk(this.nodes());\n return matches;\n });\n\n /** Auto-expanded ids derived from active filter (ancestors of matches). */\n private readonly autoExpandedIds = computed(() => {\n const matches = this.filterMatches();\n if (!matches) return null;\n const expanded = new Set<string>();\n const walk = (list: TreeNode<T>[]): void => {\n for (const n of list) {\n if (matches.has(n.id) && (n.children?.length ?? 0) > 0) {\n expanded.add(n.id);\n }\n walk(n.children ?? []);\n }\n };\n walk(this.nodes());\n return expanded;\n });\n\n constructor() {\n /** Seed the focused id when nodes first become available so Tab lands on a row. */\n effect(() => {\n const first = this.visibleNodeOrder()[0];\n const current = this.focusedId();\n if (!first) {\n if (current) this.focusedId.set(null);\n return;\n }\n if (!current || !this.findNode(current)) {\n this.focusedId.set(first.id);\n }\n });\n }\n\n // ─── State queries (called from the recursive child) ────────────────────\n\n /** A node is expandable when it has unloaded children, real children, or is loading. */\n isExpandable(node: TreeNode<T>): boolean {\n if (node.isLeaf) return false;\n if (node.loading) return true;\n if (node.children === undefined) return true;\n return node.children.length > 0;\n }\n\n isExpanded(node: TreeNode<T>): boolean {\n if (this.autoExpandedIds()?.has(node.id)) return true;\n return this.expandedIds().has(node.id);\n }\n\n isSelected(node: TreeNode<T>): boolean {\n return this.selectedIds().has(node.id);\n }\n\n /** Returns the children list filtered by the active filter (or all if none). */\n filterChildren(children: TreeNode<T>[]): TreeNode<T>[] {\n const matches = this.filterMatches();\n if (!matches) return children;\n return children.filter((c) => matches.has(c.id));\n }\n\n /** Wraps the first case-insensitive match of the active filter in `<mark>` tags. */\n highlight(label: string): string {\n const q = this.filter().trim();\n const safe = escapeHtml(label);\n if (!q) return safe;\n const idx = safe.toLowerCase().indexOf(q.toLowerCase());\n if (idx < 0) return safe;\n const end = idx + q.length;\n return `${safe.slice(0, idx)}<mark>${safe.slice(idx, end)}</mark>${safe.slice(end)}`;\n }\n\n // ─── Mutation API ───────────────────────────────────────────────────────\n\n /** Toggle the expanded state of `node`; fires `loadChildren` on first lazy-expand. */\n toggle(node: TreeNode<T>): void {\n if (node.disabled || !this.isExpandable(node)) return;\n const wasExpanded = this.expandedIds().has(node.id);\n const next = new Set(this.expandedIds());\n if (wasExpanded) next.delete(node.id);\n else next.add(node.id);\n this.expandedIds.set(next);\n const expanded = !wasExpanded;\n this.nodeToggle.emit({ node, expanded });\n this.announcer.announce(\n (expanded ? this.i18n.expanded : this.i18n.collapsed).replace('{label}', node.label),\n );\n if (expanded && node.children === undefined && !this.loadedIds.has(node.id)) {\n this.loadedIds.add(node.id);\n this.loadChildren.emit(node);\n }\n }\n\n /**\n * Activate `node` — always emits `nodeActivate` and updates selection per\n * mode. In `multiple` mode `Enter` activates without toggling selection so\n * keyboard users can drive a primary action without disturbing checkboxes.\n */\n activate(node: TreeNode<T>, source: 'click' | 'enter' | 'space'): void {\n if (node.disabled) return;\n const mode = this.selection();\n if (mode === 'single') {\n this.applySingleSelection(node);\n } else if (mode === 'multiple' && source !== 'enter') {\n this.toggleMultiSelection(node);\n }\n this.nodeActivate.emit(node);\n }\n\n private applySingleSelection(node: TreeNode<T>): void {\n const current = this.selectedIds();\n if (current.size === 1 && current.has(node.id)) return;\n this.selectedIds.set(new Set([node.id]));\n this.announcer.announce(this.i18n.selected.replace('{label}', node.label));\n }\n\n private toggleMultiSelection(node: TreeNode<T>): void {\n const next = new Set(this.selectedIds());\n if (next.has(node.id)) next.delete(node.id);\n else {\n next.add(node.id);\n this.announcer.announce(this.i18n.selected.replace('{label}', node.label));\n }\n this.selectedIds.set(next);\n }\n\n // ─── Keyboard handling ──────────────────────────────────────────────────\n\n protected handleKeydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement | null;\n const li = target?.closest('li.ct-tree__node') as HTMLElement | null;\n if (!li || !this.host.nativeElement.contains(li)) return;\n const id = li.getAttribute('data-tree-id');\n if (!id) return;\n const node = this.findNode(id);\n if (!node) return;\n\n const order = this.visibleNodeOrder();\n const idx = order.findIndex((n) => n.id === id);\n if (idx < 0) return;\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n const next = order[Math.min(order.length - 1, idx + 1)];\n if (next) this.moveFocus(next);\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n const prev = order[Math.max(0, idx - 1)];\n if (prev) this.moveFocus(prev);\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n if (!this.isExpandable(node)) break;\n if (!this.expandedIds().has(node.id)) {\n this.toggle(node);\n } else {\n const firstChild = (node.children ?? [])[0];\n if (firstChild) this.moveFocus(firstChild);\n }\n break;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n if (this.isExpandable(node) && this.expandedIds().has(node.id)) {\n this.toggle(node);\n } else {\n const parent = this.findParent(node.id);\n if (parent) this.moveFocus(parent);\n }\n break;\n }\n case 'Home': {\n event.preventDefault();\n if (order[0]) this.moveFocus(order[0]);\n break;\n }\n case 'End': {\n event.preventDefault();\n const last = order[order.length - 1];\n if (last) this.moveFocus(last);\n break;\n }\n case 'Enter': {\n event.preventDefault();\n if (node.disabled) break;\n this.activate(node, 'enter');\n break;\n }\n case ' ': {\n event.preventDefault();\n if (node.disabled) break;\n if (this.selection() === 'none') this.activate(node, 'enter');\n else this.activate(node, 'space');\n break;\n }\n case '*': {\n event.preventDefault();\n this.expandClosedSiblings(node);\n break;\n }\n default: {\n if (\n event.key.length === 1 &&\n /\\S/.test(event.key) &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n ) {\n this.typeahead(event.key);\n }\n }\n }\n }\n\n protected handleClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n /** Toggle button has its own handler — it stops propagation, but guard anyway. */\n if (target.closest('.ct-tree__toggle')) return;\n /** Clicks inside the actions slot belong to the consumer's buttons. */\n if (target.closest('.ct-tree__actions')) return;\n const li = target.closest('li.ct-tree__node') as HTMLElement | null;\n if (!li || !this.host.nativeElement.contains(li)) return;\n const id = li.getAttribute('data-tree-id');\n if (!id) return;\n const node = this.findNode(id);\n if (!node || node.disabled) return;\n this.moveFocus(node);\n this.activate(node, 'click');\n }\n\n private expandClosedSiblings(node: TreeNode<T>): void {\n const parent = this.findParent(node.id);\n const siblings = parent ? (parent.children ?? []) : this.nodes();\n for (const sib of siblings) {\n if (this.isExpandable(sib) && !sib.disabled && !this.expandedIds().has(sib.id)) {\n this.toggle(sib);\n }\n }\n }\n\n private typeahead(char: string): void {\n this.typeBuffer += char.toLowerCase();\n if (this.typeTimer) clearTimeout(this.typeTimer);\n this.typeTimer = setTimeout(() => {\n this.typeBuffer = '';\n this.typeTimer = null;\n }, TYPEAHEAD_RESET_MS);\n\n const order = this.visibleNodeOrder();\n if (order.length === 0) return;\n const currentId = this.focusedId();\n const startIdx = Math.max(0, order.findIndex((n) => n.id === currentId));\n const ordered = order.slice(startIdx + 1).concat(order.slice(0, startIdx + 1));\n const buf = this.typeBuffer;\n const match = ordered.find((n) => n.label.toLowerCase().startsWith(buf));\n if (match) this.moveFocus(match);\n }\n\n // ─── Focus / lookup helpers ─────────────────────────────────────────────\n\n /** Move focus to `node` — updates the roving tabindex and pulls DOM focus into the tree. */\n private moveFocus(node: TreeNode<T>): void {\n if (node.disabled) return;\n this.focusedId.set(node.id);\n queueMicrotask(() => {\n const el = this.host.nativeElement.querySelector<HTMLElement>(\n `li.ct-tree__node[data-tree-id=\"${cssEscape(node.id)}\"]`,\n );\n el?.focus();\n });\n }\n\n /** Programmatically focus the tree row matching `id`. */\n focusNode(id: string): void {\n const node = this.findNode(id);\n if (node) this.moveFocus(node);\n }\n\n /** Walk the tree until a node with the given id is found. */\n findNode(id: string, list: TreeNode<T>[] = this.nodes()): TreeNode<T> | null {\n for (const n of list) {\n if (n.id === id) return n;\n const hit = n.children ? this.findNode(id, n.children) : null;\n if (hit) return hit;\n }\n return null;\n }\n\n /** Locate the parent of `id` — returns null when the node is at root level. */\n findParent(id: string, list: TreeNode<T>[] = this.nodes()): TreeNode<T> | null {\n for (const n of list) {\n if (n.children?.some((c) => c.id === id)) return n;\n if (n.children) {\n const hit = this.findParent(id, n.children);\n if (hit) return hit;\n }\n }\n return null;\n }\n}\n\n/** Minimal HTML escaper for the default label renderer. */\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/** Escape an arbitrary id for safe use inside a `[data-tree-id=\"…\"]` attribute selector. */\nfunction cssEscape(value: string): string {\n if (typeof CSS !== 'undefined' && typeof CSS.escape === 'function') {\n return CSS.escape(value);\n }\n return value.replace(/([\"\\\\])/g, '\\\\$1');\n}\n","/**\n * Test harness for {@link AfTreeComponent}.\n *\n * Wraps the rendered DOM behind a semantic API so specs and host apps can\n * navigate the tree without coupling to internal CSS class names.\n *\n * @example\n * const harness = new AfTreeHarness(fixture.nativeElement);\n * harness.getNode('root').focus();\n * harness.pressKey('ArrowDown');\n * expect(harness.focusedId()).toBe('child-1');\n */\nexport class AfTreeHarness {\n private readonly hostEl: HTMLElement;\n\n constructor(container: HTMLElement) {\n const el = container.querySelector('af-tree');\n if (!el) {\n throw new Error('AfTreeHarness: af-tree element not found in container.');\n }\n this.hostEl = el as HTMLElement;\n }\n\n /** Container `<ul role=\"tree\">` element. */\n getRootElement(): HTMLElement | null {\n return this.hostEl.querySelector(':scope > ul.ct-tree');\n }\n\n /** Returns harnesses for every visible (rendered) treeitem in document order. */\n getVisibleNodes(): AfTreeNodeHarness[] {\n const lis = Array.from(this.hostEl.querySelectorAll('li.ct-tree__node'));\n return lis.map((li) => new AfTreeNodeHarness(li as HTMLElement));\n }\n\n /** Returns the harness for the node with the given id, or null when not rendered. */\n getNode(id: string): AfTreeNodeHarness | null {\n const li = this.hostEl.querySelector<HTMLElement>(\n `li.ct-tree__node[data-tree-id=\"${cssAttrEscape(id)}\"]`,\n );\n return li ? new AfTreeNodeHarness(li) : null;\n }\n\n /** Id of the currently focused node (the one whose `<li>` carries `tabindex=0`). */\n focusedId(): string | null {\n const li = this.hostEl.querySelector<HTMLElement>('li.ct-tree__node[tabindex=\"0\"]');\n return li?.getAttribute('data-tree-id') ?? null;\n }\n\n /** Dispatches a keydown on the focused row (or first row if none focused). */\n pressKey(key: string): void {\n const target =\n this.hostEl.querySelector<HTMLElement>('li.ct-tree__node[tabindex=\"0\"]') ??\n this.hostEl.querySelector<HTMLElement>('li.ct-tree__node');\n target?.dispatchEvent(new KeyboardEvent('keydown', { key, bubbles: true }));\n }\n\n /** Returns whether `aria-multiselectable` is set on the root list. */\n isMultiselectable(): boolean {\n return this.getRootElement()?.getAttribute('aria-multiselectable') === 'true';\n }\n\n /** Returns the `aria-label` of the root list. */\n getAriaLabel(): string | null {\n return this.getRootElement()?.getAttribute('aria-label') ?? null;\n }\n\n /** True when the empty-state is rendered (no rows visible). */\n isEmpty(): boolean {\n return !this.getRootElement();\n }\n}\n\n/** Test harness for a single `<li role=\"treeitem\">` rendered by `af-tree`. */\nexport class AfTreeNodeHarness {\n constructor(private readonly liEl: HTMLElement) {}\n\n /** Stable id of the node (mirrors `TreeNode.id`). */\n getId(): string {\n return this.liEl.getAttribute('data-tree-id') ?? '';\n }\n\n /** Trimmed label text of the node. */\n getLabel(): string {\n const content = this.liEl.querySelector(':scope > .ct-tree__row .ct-tree__content');\n return (content?.textContent ?? '').trim();\n }\n\n /** 1-based depth of the node. */\n getLevel(): number {\n return Number(this.liEl.getAttribute('aria-level') ?? '0');\n }\n\n isExpanded(): boolean {\n return this.liEl.getAttribute('aria-expanded') === 'true';\n }\n\n isExpandable(): boolean {\n return this.liEl.hasAttribute('aria-expanded');\n }\n\n isSelected(): boolean {\n return this.liEl.getAttribute('aria-selected') === 'true';\n }\n\n isDisabled(): boolean {\n return this.liEl.getAttribute('aria-disabled') === 'true';\n }\n\n isBusy(): boolean {\n return this.liEl.getAttribute('aria-busy') === 'true';\n }\n\n isFocused(): boolean {\n return this.liEl.getAttribute('tabindex') === '0';\n }\n\n /** Programmatically focus the row's `<li>` element. */\n focus(): void {\n this.liEl.focus();\n }\n\n /** Click the row (centre area, not the toggle / actions). */\n clickRow(): void {\n const row = this.liEl.querySelector<HTMLElement>(':scope > .ct-tree__row .ct-tree__content');\n row?.click();\n }\n\n /** Click the chevron toggle button. */\n clickToggle(): void {\n const toggle = this.liEl.querySelector<HTMLElement>(':scope > .ct-tree__row .ct-tree__toggle');\n toggle?.click();\n }\n\n /** Return the underlying `<li>` element for advanced assertions. */\n getElement(): HTMLElement {\n return this.liEl;\n }\n}\n\n/** Escape characters that would break a `[attr=\"…\"]` selector. */\nfunction cssAttrEscape(value: string): string {\n if (typeof CSS !== 'undefined' && typeof CSS.escape === 'function') {\n return CSS.escape(value);\n }\n return value.replace(/([\"\\\\])/g, '\\\\$1');\n}\n","// Components\nexport * from './alert';\nexport * from './accordion';\nexport * from './app-shell';\nexport * from './app-shell-v2';\nexport * from './avatar';\nexport * from './button';\nexport * from './input';\nexport * from './select';\nexport * from './textarea';\nexport * from './checkbox';\nexport * from './radio';\nexport * from './switch';\nexport * from './card';\nexport * from './data-table';\nexport * from './modal';\nexport * from './toast';\nexport * from './tabs';\nexport * from './nav-tabs';\nexport * from './dropdown';\nexport * from './pagination';\nexport * from './breadcrumbs';\nexport * from './datepicker';\nexport * from './chip';\nexport * from './chip-input';\nexport * from './tooltip';\nexport * from './badge';\nexport * from './progress-bar';\nexport * from './spinner';\nexport * from './toggle-group';\nexport * from './toolbar';\nexport * from './sidebar';\nexport * from './icon';\nexport * from './slider';\nexport * from './drawer';\nexport * from './combobox';\nexport * from './file-upload';\nexport * from './select-menu';\nexport * from './navbar';\nexport * from './popover';\nexport * from './banner';\nexport * from './skip-link';\nexport * from './empty-state';\nexport * from './skeleton';\nexport * from './divider';\nexport * from './field';\nexport * from './table';\nexport * from './tree';\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Transforms snake_case or SCREAMING_SNAKE_CASE strings to Title Case labels.\n *\n * @example\n * {{ 'IN_PROGRESS' | afFormatLabel }} => 'In Progress'\n * {{ 'pending_review' | afFormatLabel }} => 'Pending Review'\n * {{ null | afFormatLabel }} => '—'\n */\n@Pipe({\n name: 'afFormatLabel'\n})\nexport class AfFormatLabelPipe implements PipeTransform {\n transform(value: string | null | undefined): string {\n if (!value) return '\\u2014';\n return value\n .toLowerCase()\n .split('_')\n .map(chunk => chunk.charAt(0).toUpperCase() + chunk.slice(1))\n .join(' ');\n }\n}\n","/*\n * Public API Surface of angular\n */\n\nexport * from './lib/components';\nexport * from './lib/pipes';\nexport * from './lib/services/toast.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextId","DOCUMENT"],"mappings":";;;;;;AAqBA;;;;;AAKG;MACU,aAAa,GAAG,IAAI,cAAc,CAAc,eAAe,EAAE;AAC5E,IAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;AAC5E,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MAwGU,gBAAgB,CAAA;AACR,IAAA,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC;;AAG/C,IAAA,OAAO,GAAG,KAAK,CAAiB,MAAM,mDAAC;;AAGvC,IAAA,WAAW,GAAG,KAAK,CAAC,KAAK,uDAAC;;IAG1B,SAAS,GAAG,MAAM,EAAQ;;AAG1B,IAAA,OAAO,GAAG,MAAM,CAAC,IAAI,mDAAC;;AAGtB,IAAA,gBAAgB,GAAG,MAAM,CAAC,EAAE,4DAAC;AAE7B,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,YAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC;QACvC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,wDAAC;AAEF;;;;AAIG;AACH,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACxB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;AACxB,QAAA,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS,GAAG,OAAO,GAAG,QAAQ;AAC/D,IAAA,CAAC,qDAAC;;IAGF,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7B,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClE;uGA1CW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApGjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,m5BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkEU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAvG5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,eAAA,EACH,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,m5BAAA,CAAA,EAAA;;;AC7FH;;;;;;;;;;;AAWG;MACU,cAAc,CAAA;AACR,IAAA,MAAM;AAEvB,IAAA,WAAA,CAAY,SAAsB,EAAA;QAChC,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D;QACH;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,EAAiB;IACjC;;IAGA,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC;IAC/C;;IAGA,UAAU,GAAA;AACR,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;QAChC,OAAO,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE;IAC9C;;IAGA,OAAO,GAAA;AACL,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;QAChC,OAAO,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE;IACtC;;IAGA,OAAO,GAAA;AACL,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;QAChC,OAAO,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;IACrC;;IAGA,QAAQ,GAAA;AACN,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;QAChC,MAAM,KAAK,GAAG,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC;QAClD,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;IACzC;;IAGA,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI;IACxC;;IAGA,aAAa,GAAA;AACX,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;QAChC,OAAO,EAAE,CAAC,aAAa,CAAC,oBAAoB,CAAC,KAAK,IAAI;IACxD;;IAGA,OAAO,GAAA;AACL,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACnC,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE;QACH;QACA,GAAG,CAAC,KAAK,EAAE;IACb;;IAGA,gBAAgB,GAAA;AACd,QAAA,QACE,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa,CACnC,oBAAoB,CACrB,IAAI,IAAI;IAEb;;IAGA,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,sBAAsB,CAAC;IAC1D;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;QACjC,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;QAC1D;AACA,QAAA,OAAO,EAAE;IACX;AACD;;AC/FD;;;;;;;AAOG;MAEU,iBAAiB,CAAA;AACX,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACpC,MAAM,GAAuB,IAAI;IACjC,UAAU,GAAyC,IAAI;;AAG/D,IAAA,QAAQ,CAAC,OAAe,EAAE,UAAA,GAAqC,QAAQ,EAAA;AACrE,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE;AACxC,QAAA,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC;;AAGxC,QAAA,EAAE,CAAC,WAAW,GAAG,EAAE;AAEnB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/B;;QAGA,UAAU,CAAC,MAAK;AACd,YAAA,EAAE,CAAC,WAAW,GAAG,OAAO;QAC1B,CAAC,EAAE,EAAE,CAAC;;AAGN,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAK;AAChC,YAAA,EAAE,CAAC,WAAW,GAAG,EAAE;QACrB,CAAC,EAAE,IAAI,CAAC;IACV;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/B;AACA,QAAA,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACpB;IAEQ,sBAAsB,GAAA;QAC5B,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM;QAEnC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,QAAA,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC;AACtC,QAAA,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AACtC,QAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC;;AAGvC,QAAA,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;AACtB,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE,GAAG;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,MAAM,EAAE,GAAG;AACZ,SAAA,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,OAAO,EAAE;IACX;uGA5DW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA;;2FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACDlC;;;;;;;;AAQG;MACU,iBAAiB,GAAG,IAAI,cAAc,CAAkB,iBAAiB,EAAE;AACtF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,QAAQ,EAAE,oBAAoB;AAC9B,QAAA,SAAS,EAAE,qBAAqB;KACjC,CAAC;AACH,CAAA;;ACPD,IAAIA,QAAM,GAAG,CAAC;AAEd;;;;;;;AAOG;MAgDU,wBAAwB,CAAA;IAC3B,MAAM,GAAGA,QAAM,EAAE;AACjB,IAAA,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC9E,IAAA,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACrC,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAGxC,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAU;;AAGlC,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;IAGvB,QAAQ,GAAG,KAAK,CAAC,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD,IAAA,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAiC,SAAS,CAAC;AAE1E,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA,qBAAA,EAAwB,IAAI,CAAC,MAAM,CAAA,CAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACjE,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA,mBAAA,EAAsB,IAAI,CAAC,MAAM,CAAA,CAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAG7D,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAA4B;QAClD,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;AAC/B,YAAA,IAAI,OAAO,CAAC,IAAI,EAAE;AAChB,gBAAA,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,IAAI,CAAC;YACtC;QACF;IACF;AAEA;;;AAGG;AACH,IAAA,OAAO,CAAC,KAAiB,EAAA;QACvB,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AACrB,QAAA,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;QAC7B,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,IAAI,CAAC;QACtC;AACA,QAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS;AACtE,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE;;IAGA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;;IAGA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE;IACnE;uGAvDW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5CzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA/CpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,eAAA,EACZ,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;oZAwB+D,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AA2C3E;;;;;;;;;;;;;AAaG;MAoBU,oBAAoB,CAAA;;IAE/B,KAAK,GAAG,KAAK,CAAC,IAAI,kDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGpD,QAAQ,GAAG,KAAK,CAAC,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD,IAAA,KAAK,GAAG,eAAe,CAAC,wBAAwB,iDAAC;AAEjD,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,OAAO,GAAG,CAAC,cAAc,CAAC;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC;QACxC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,4DAAC;AAEF;;;AAGG;AACK,IAAA,iBAAiB,GAAG,MAAM,CAAC,MAAK;QACtC,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE;AAClB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;AACzD,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YACxB;QACF;AACF,IAAA,CAAC,6DAAC;;AAGF,IAAA,cAAc,CAAC,YAAsC,EAAA;QACnD,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE;QAClB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YAC/B,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;gBAC5C,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;IACF;AAEA,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;YAAE;QAElC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC9D,QAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE;QAE/B,MAAM,YAAY,GAAG,YAAY,CAAC,SAAS,CACzC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,MAAM,CAC9E;QACD,IAAI,YAAY,KAAK,CAAC,CAAC;YAAE;AAEzB,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC;AAEpC,QAAA,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,WAAW,EAAE;gBAChB,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,YAAY,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE;gBACrE;YACF;YACA,KAAK,SAAS,EAAE;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,YAAY,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE;gBAC3F;YACF;YACA,KAAK,MAAM,EAAE;gBACX,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE;gBAC9B;YACF;YACA,KAAK,KAAK,EAAE;gBACV,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE;gBACjC;YACF;;IAEJ;uGA7EW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAOP,wBAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApBtC;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAnBhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,eAAA,EACP,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,WAAW,EAAE,uBAAuB;qBACrC,EAAA,QAAA,EACS;;;;AAIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;uRAgBuB,wBAAwB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC5KlD;;;;;AAKG;MACU,sBAAsB,CAAA;AACJ,IAAA,MAAA;AAA7B,IAAA,WAAA,CAA6B,MAAmB,EAAA;QAAnB,IAAA,CAAA,MAAM,GAAN,MAAM;IAAgB;;IAGnD,UAAU,GAAA;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,wBAAwB,CAAC;QACnE,OAAO,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;IAC3C;;IAGA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM;IAC1E;;IAGA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM;IAC1E;;IAGA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE;IAClC;;IAGA,iBAAiB,GAAA;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC;QACpD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;QACzE;AACA,QAAA,OAAO,OAAO;IAChB;;IAGA,iBAAiB,GAAA;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;QACtE;AACA,QAAA,OAAO,KAAoB;IAC7B;;IAGA,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC;IAC/D;;IAGA,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC;IAC/D;AACD;AAED;;;;;;;AAOG;MACU,kBAAkB,CAAA;AACZ,IAAA,MAAM;AAEvB,IAAA,WAAA,CAAY,SAAsB,EAAA;QAChC,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC;QAClD,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC;QACrF;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,EAAiB;IACjC;;IAGA,QAAQ,GAAA;AACN,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;AAC3E,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,sBAAsB,CAAC,EAAiB,CAAC,CAAC;IACzE;;AAGA,IAAA,OAAO,CAAC,KAAa,EAAA;AACnB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC7B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YACtC,MAAM,IAAI,KAAK,CACb,CAAA,0BAAA,EAA6B,KAAK,CAAA,eAAA,EAAkB,KAAK,CAAC,MAAM,CAAA,QAAA,CAAU,CAC3E;QACH;AACA,QAAA,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB;;IAGA,UAAU,GAAA;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC;QAC1D,OAAO,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,KAAK;IACvE;AACD;;AC3FD;;;;;;;;;;;;;AAaG;MAqBU,mBAAmB,CAAA;;AAE9B,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAAU;;AAGjC,IAAA,KAAK,GAAG,KAAK,CAAC,sBAAsB,iDAAC;AAEpB,IAAA,QAAQ,GAAG,MAAM,CAACC,UAAQ,CAAC;AAE5C;;;AAGG;AACH,IAAA,WAAW,CAAC,KAAY,EAAA;QACtB,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACtD,IAAI,CAAC,EAAE,EAAE;YACP;QACF;QAEA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;AAChC,YAAA,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;QACnC;QACA,EAAE,CAAC,KAAK,EAAE;IACZ;uGAzBW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBpB;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBApB/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,eAAA,EACP,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;AAQT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;;;ACrBH;;;;;;;;;;;;;;;;AAgBG;MAiBU,6BAA6B,CAAA;;IAExC,MAAM,GAAG,KAAK,CAAC,KAAK,mDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEtD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACtB,QAAA,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC;QAC7C;AACA,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACpB,IAAA,CAAC,mDAAC;uGAVS,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAb9B;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAhBzC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,eAAA,EACnB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;AAIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;;AAsBH;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;MAkDU,mBAAmB,CAAA;;AAE9B,IAAA,YAAY,GAAG,KAAK,CAAsB,UAAU,wDAAC;;AAGrD,IAAA,UAAU,GAAG,KAAK,CAAoB,QAAQ,sDAAC;;IAG/C,SAAS,GAAG,KAAK,CAAC,KAAK,sDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGzD,YAAY,GAAG,KAAK,CAAC,KAAK,yDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG5D,iBAAiB,GAAG,KAAK,CAAC,KAAK,8DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGjE,YAAY,GAAG,KAAK,CAAC,KAAK,yDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG5D,SAAS,GAAG,KAAK,CAAC,KAAK,sDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGzD,IAAA,YAAY,GAAG,KAAK,CAAC,iBAAiB,wDAAC;;AAGvC,IAAA,UAAU,GAAG,KAAK,CAAC,SAAS,sDAAC;;AAG7B,IAAA,MAAM,GAAG,KAAK,CAAC,cAAc,kDAAC;;AAG9B,IAAA,aAAa,GAAG,KAAK,CAAC,iBAAiB,yDAAC;AAExC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,OAAO,GAAG,CAAC,cAAc,CAAC;AAEhC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC;QAC1C;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC;QAC7C;AACA,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAC5B,YAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC;QACnD;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC;QAC7C;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC;QAC1C;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,wDAAC;;IAGF,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjC;uGA3DW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,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,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,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,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,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,OAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7CpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArCS,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA8ClB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAjD/B,SAAS;+BACE,cAAc,EAAA,eAAA,EACP,uBAAuB,CAAC,MAAM,WACtC,CAAC,mBAAmB,CAAC,EAAA,QAAA,EACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;;;ACnHH;;;;;;;;;;;;;;;;;;AAkBG;MAiBU,4BAA4B,CAAA;;IAEvC,MAAM,GAAG,KAAK,CAAC,KAAK,mDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEtD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACtB,QAAA,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC;AACtC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC;QAC5C;AACA,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACpB,IAAA,CAAC,mDAAC;uGAVS,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAb7B;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAhBxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,eAAA,EAClB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;AAIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;;AAsBH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;MAiDU,qBAAqB,CAAA;;AAEhC,IAAA,YAAY,GAAG,KAAK,CAAsB,UAAU,wDAAC;;AAGrD,IAAA,UAAU,GAAG,KAAK,CAAoB,QAAQ,sDAAC;;IAG/C,SAAS,GAAG,KAAK,CAAC,KAAK,sDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGzD,YAAY,GAAG,KAAK,CAAC,KAAK,yDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG5D,iBAAiB,GAAG,KAAK,CAAC,KAAK,8DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGjE,UAAU,GAAG,KAAK,CAAC,KAAK,uDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1D,cAAc,GAAG,KAAK,CAAC,KAAK,2DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG9D,KAAK,GAAG,KAAK,CAAC,KAAK,kDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGrD,IAAA,YAAY,GAAG,KAAK,CAAC,iBAAiB,wDAAC;;AAGvC,IAAA,UAAU,GAAG,KAAK,CAAC,SAAS,sDAAC;;AAG7B,IAAA,MAAM,GAAG,KAAK,CAAC,cAAc,kDAAC;;AAG9B,IAAA,aAAa,GAAG,KAAK,CAAC,iBAAiB,yDAAC;AAExC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,OAAO,GAAG,CAAC,iBAAiB,CAAC;AAEnC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC;QAC7C;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC;QAChD;AACA,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAC5B,YAAA,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC;QACtD;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,YAAA,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC;QAC9C;AACA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACzB,YAAA,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC;QAClD;AACA,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AAChB,YAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC;QACxC;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,wDAAC;;IAGF,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjC;uGAjEW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,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,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,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,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,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,OAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5CtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApCS,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA6ClB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAhDjC,SAAS;+BACE,iBAAiB,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,WACtC,CAAC,mBAAmB,CAAC,EAAA,QAAA,EACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;;;ACtHH;;;;AAIG;AACI,MAAM,wBAAwB,GAAG;AAExC;;;;;;;;;;;;;;;;;AAiBG;MAqCU,iBAAiB,CAAA;;AAE5B,IAAA,GAAG,GAAG,KAAK,CAAC,EAAE,+CAAC;;AAGf,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;AAGhB,IAAA,IAAI,GAAG,KAAK,CAAe,IAAI,gDAAC;;AAGhC,IAAA,GAAG,GAAG,KAAK,CAAC,EAAE,+CAAC;;AAGf,IAAA,MAAM,GAAG,KAAK,CAA6B,SAAS,kDAAC;AAErD;;;;AAIG;AACH,IAAA,SAAS,GAAG,KAAK,CAAC,EAAE,qDAAC;;AAGrB,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;;AAG1B,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qDAAC;;AAG9D,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,EAAE;AACpD,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AAC/D,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE;AAC/E,IAAA,CAAC,oDAAC;;AAGF,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,QAAQ,qDAAC;AAEjE;;;;AAIG;AACH,IAAA,cAAc,GAAG,QAAQ,CAAgB,MAAK;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;;AAEtB,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,wBAAwB,IAAI,CAAC;AAC7D,IAAA,CAAC,0DAAC;AAEF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,CAAA,WAAA,EAAc,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;QAC3C;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,yDAAC;;IAGF,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;AAEA;;;;AAIG;AACK,IAAA,QAAQ,CAAC,IAAY,EAAA;QAC3B,IAAI,IAAI,GAAG,CAAC;AACZ,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9C,YAAA,IAAI,IAAI,CAAC,CAAC;QACZ;AACA,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;uGA7EW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,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,QAAA,EAAA,EAAA,EAAA,QAAA,EAjClB;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBApC7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,eAAA,EACJ,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA;;;ACzDH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCG;MAqBU,iBAAiB,CAAA;;AAE5B,IAAA,OAAO,GAAG,KAAK,CAAkB,SAAS,mDAAC;;AAG3C,IAAA,IAAI,GAAG,KAAK,CAAe,IAAI,gDAAC;;AAGhC,IAAA,IAAI,GAAG,KAAK,CAAe,QAAQ,gDAAC;;IAGpC,QAAQ,GAAG,KAAK,CAAC,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGxD,QAAQ,GAAG,KAAK,CAAC,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGxD,IAAA,SAAS,GAAG,KAAK,CAAC,EAAE,qDAAC;;AAGrB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;IAGjB,OAAO,GAAG,MAAM,EAAc;AAE9B,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC;AAE7B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS,EAAE;YAChC,OAAO,CAAC,IAAI,CAAC,CAAA,WAAA,EAAc,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;QAC9C;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,CAAA,WAAA,EAAc,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;QAC3C;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACjC;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,yDAAC;AAEe,IAAA,eAAe,GAAG,MAAM,CAAC,MAAK;AAC7C,QAAA,IAAI,SAAS,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACvD,YAAA,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC;QACtF;AACF,IAAA,CAAC,2DAAC;AAEF,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B;IACF;uGArDW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBlB;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBApB7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,eAAA,EACJ,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA;;;ACpDH;;;;;;;;;;;AAWG;MACU,eAAe,CAAA;AACT,IAAA,MAAM;AAEvB,IAAA,WAAA,CAAY,SAAsB,EAAA;QAChC,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC;QAC/C,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC;QAC/E;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,EAAiB;IACjC;;IAGA,gBAAgB,GAAA;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC/C,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC;QACvE;AACA,QAAA,OAAO,GAAG;IACZ;;IAGA,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;IAC1D;;IAGA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ;IACzC;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE;IACjC;;IAGA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;IAC3D;;IAGA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;IACtD;;IAGA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI;IACrC;;IAGA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS;IAC1C;;AAGA,IAAA,QAAQ,CAAC,SAAiB,EAAA;QACxB,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC9D;AACD;;AC/DD;;;;;;;;AAQG;MACU,aAAa,GAAG,IAAI,cAAc,CAAc,aAAa,EAAE;AAC1E,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,QAAQ,EAAE,UAAU;KACrB,CAAC;AACH,CAAA;;ACLD;;;;;;;;;;;;;;;;;;;;;AAqBG;MAiFU,gBAAgB,CAAA;AACnB,IAAA,OAAO,MAAM,GAAG,CAAC;AAEhB,IAAA,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC;;AAGrC,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,IAAI,GAAG,KAAK,CAAc,MAAM,gDAAC;;AAGjC,IAAA,WAAW,GAAG,KAAK,CAAC,EAAE,uDAAC;;AAGvB,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;AAGhB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;IAGjB,QAAQ,GAAG,KAAK,CAAC,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGxD,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,YAAY,GAAG,KAAK,CAA0B,IAAI,wDAAC;;IAGnD,OAAO,GAAG,KAAK,CAAC,CAAA,SAAA,EAAY,gBAAgB,CAAC,MAAM,EAAE,CAAA,CAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAG/C,IAAA,KAAK,GAAG,MAAM,CAAC,EAAE,iDAAC;AAC3B,IAAA,QAAQ,GAA4B,MAAK,EAAE,CAAC;AAC5C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;;AAGhC,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,KAAA,CAAO,kDAAC;;AAGjD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,MAAA,CAAQ,mDAAC;;AAGnD,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC;QACrC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,wDAAC;;AAGF,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QAC9B,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;QACvC,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE;AACrC,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,2DAAC;AAEF,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7B;;AAGA,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC7B;;AAGA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;;AAGA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;;AAGA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;uGAnFW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EA7EhB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,gBAAgB,CAAC;AAC/C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAhF5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;oBACpB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,sBAAsB,CAAC;AAC/C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACxB,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiET,EAAA,CAAA;AACF,iBAAA;;;ACrHD;;;;;;;;;;;AAWG;MACU,cAAc,CAAA;AACR,IAAA,MAAM;AAEvB,IAAA,WAAA,CAAY,SAAsB,EAAA;QAChC,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC;QAC7E;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,EAAiB;IACjC;;IAGA,eAAe,GAAA;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC;QACrE;AACA,QAAA,OAAO,KAAK;IACd;;IAGA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK;IACrC;;AAGA,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE;AACpC,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;AACnB,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D;;IAGA,QAAQ,GAAA;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC;QAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI;IAC3C;;IAGA,OAAO,GAAA;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC;QACzD,OAAO,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI;IAC1C;;IAGA,QAAQ,GAAA;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC;QAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI;IAC3C;;IAGA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ;IACxC;;IAGA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ;IACxC;;IAGA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,MAAM;IACvE;;IAGA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI;IACpC;;IAGA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,WAAW;IAC3C;;IAGA,kBAAkB,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC;IAChE;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE;IAChC;;IAGA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E;;IAGA,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE;IAClC;;IAGA,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,IAAI;IAC/D;;IAGA,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,IAAI;IAC9D;;IAGA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,SAAS;IACzC;;AAGA,IAAA,QAAQ,CAAC,SAAiB,EAAA;QACxB,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC7D;AACD;;AClHD;;;;;;;;;;;;;AAaG;MACU,cAAc,GAAG,IAAI,cAAc,CAAe,cAAc,EAAE;AAC7E,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,QAAQ,EAAE,kBAAkB;KAC7B,CAAC;AACH,CAAA;;ACXD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;MAoEU,iBAAiB,CAAA;AACpB,IAAA,OAAO,MAAM,GAAG,CAAC;AACN,IAAA,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,IAAA,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAGtD,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,WAAW,GAAG,KAAK,CAAC,EAAE,uDAAC;;AAGvB,IAAA,OAAO,GAAG,KAAK,CAAmB,EAAE,mDAAC;;AAGrC,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;AAGhB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,IAAI,GAAG,KAAK,CAAqB,IAAI,gDAAC;;AAGtC,IAAA,WAAW,GAAG,KAAK,CAAsC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,uDAAC;;IAG3E,QAAQ,GAAG,KAAK,CAAC,CAAA,UAAA,EAAa,iBAAiB,CAAC,MAAM,EAAE,CAAA,CAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAG3D,WAAW,GAAG,MAAM,EAAW;AAEd,IAAA,KAAK,GAAG,MAAM,CAAU,IAAI,iDAAC;AACtC,IAAA,QAAQ,GAA6B,MAAK,EAAE,CAAC;AACrD,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAEhC,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,QAAQ,EAAE,CAAA,MAAA,CAAQ,mDAAC;AACpD,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,QAAQ,EAAE,CAAA,KAAA,CAAO,kDAAC;AAClD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,QAAQ,EAAE,CAAA,MAAA,CAAQ,mDAAC;AAEpD,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC;AAC7B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;QAC7C,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;AAC7C,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,yDAAC;AAEF,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QAC9B,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;QACvC,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE;AACrC,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,2DAAC;AAEF,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAAE,YAAA,OAAO,KAAK;AACrC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;QACtB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI;AAC1D,QAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAClC,IAAA,CAAC,iEAAC;AAEF,IAAA,gBAAgB,CAAC,MAAsB,EAAA;QACrC,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAAE,YAAA,OAAO,KAAK;AAC9C,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACvD;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;AACvB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA2B;AAChD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC;QAEzC,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B;QACF;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC;AAC7C,QAAA,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI;AAC9C,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QAEhC,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9E;IACF;;AAGA,IAAA,UAAU,CAAC,KAAc,EAAA;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;IAC/B;;AAGA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;;AAGA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;;AAGA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;IAEQ,iBAAiB,GAAA;QACvB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACxF;uGArHW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAhEjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAnE7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;oBACrB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACxB,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDT,EAAA,CAAA;AACF,iBAAA;;;ACtHD;;;;;;;;;;;AAWG;MACU,eAAe,CAAA;AACT,IAAA,MAAM;AAEvB,IAAA,WAAA,CAAY,SAAsB,EAAA;QAChC,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC;QAC/C,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC;QAC/E;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,EAAiB;IACjC;;IAGA,gBAAgB,GAAA;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;QACjE;AACA,QAAA,OAAO,MAAM;IACf;;IAGA,QAAQ,GAAA;AACN,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACtC,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;IACjE;;IAGA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa;IAC9C;;AAGA,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACtC,QAAA,MAAM,CAAC,aAAa,GAAG,KAAK;AAC5B,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D;;IAGA,QAAQ,GAAA;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC;QAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI;IAC3C;;IAGA,OAAO,GAAA;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC;QACzD,OAAO,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI;IAC1C;;IAGA,QAAQ,GAAA;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC;QAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI;IAC3C;;IAGA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ;IACzC;;IAGA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ;IACzC;;IAGA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,MAAM;IACxE;;IAGA,kBAAkB,GAAA;QAChB,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC;IACjE;;IAGA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;IAC3D;;IAGA,UAAU,GAAA;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC;IACpD;;IAGA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,MAAM;IAC/C;;AAGA,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;QACjC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,CAAA,8BAAA,EAAiC,KAAK,CAAA,gBAAA,EAAmB,OAAO,CAAC,MAAM,CAAA,UAAA,CAAY,CAAC;QACtG;QACA,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;IACnC;;AAGA,IAAA,gBAAgB,CAAC,KAAa,EAAA;QAC5B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ,IAAI,KAAK;IACpD;;AAGA,IAAA,gBAAgB,CAAC,KAAa,EAAA;QAC5B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ,IAAI,KAAK;IACpD;;IAGA,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE;IACnC;;IAGA,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,IAAI;IAC/D;;AAGA,IAAA,QAAQ,CAAC,SAAiB,EAAA;QACxB,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC9D;;IAGA,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,IAAI;IAC9D;;IAGA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E;AACD;;AC/ID;;;;;;;;;;AAUG;MAuDU,mBAAmB,CAAA;AACtB,IAAA,OAAO,MAAM,GAAG,CAAC;;AAGzB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,WAAW,GAAG,KAAK,CAAC,EAAE,uDAAC;;AAGvB,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;AAGhB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,IAAI,GAAG,KAAK,CAAC,CAAC,gDAAC;;IAGf,UAAU,GAAG,KAAK,CAAC,CAAA,YAAA,EAAe,mBAAmB,CAAC,MAAM,EAAE,CAAA,CAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAEjE,KAAK,GAAG,EAAE;AACV,IAAA,QAAQ,GAA4B,MAAK,EAAE,CAAC;AAC5C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAEhC,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,UAAU,EAAE,CAAA,KAAA,CAAO,kDAAC;AAEpD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,UAAU,EAAE,CAAA,MAAA,CAAQ,mDAAC;IAEtD,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;QACvC,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE;AACrC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA6B;AAClD,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;;AAGA,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;uGA9DW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAnDnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE;AACR;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAtD/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE;AACR;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;AC1DH;;;;;;;;;;;;;;;AAeG;MAiCU,mBAAmB,CAAA;;AAE9B,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,aAAa,GAAG,KAAK,CAAC,KAAK,yDAAC;;AAG5B,IAAA,OAAO,GAAG,KAAK,CAAC,KAAK,mDAAC;AAEd,IAAA,gBAAgB,GAA6B,MAAK,EAAE,CAAC;AAC7D,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAEhC,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;IACvC;AAEA,IAAA,UAAU,CAAC,KAAc,EAAA;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3B;AAEA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;uGAlCW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EA7BnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE;AACR;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAhC/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE;AACR;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;AC3BH;AAEA;;;;;;;;;AASG;MAuCU,gBAAgB,CAAA;AACnB,IAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,qBAAqB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAGnF,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;AAGhB,IAAA,KAAK,GAAG,KAAK,CAAU,SAAS,iDAAC;;AAGjC,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;AAEvB,IAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAA+B,SAAS,CAAC;AAEtE,IAAA,UAAU,GAAG,MAAM,CAAU,SAAS,sDAAC;AACvC,IAAA,gBAAgB,GAA6B,MAAK,EAAE,CAAC;AACrD,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAEhC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,wDAAC;AAEhE,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;AAC5E,QAAA,OAAO,QAAQ,KAAK,IAAI,CAAC,KAAK,EAAE;AAClC,IAAA,CAAC,qDAAC;AAEF,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACzB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;AAAE,YAAA,OAAO,IAAI;AACvC,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;AACxB,IAAA,CAAC,sDAAC;AAEF,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;QAC/B,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;AACrC,IAAA,CAAC,4DAAC;;IAGF,KAAK,GAAA;QACH,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;IACvC;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;QAC9B;aAAO;YACL,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACrC;IACF;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;IAChC;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC;QACxC;IACF;AAEA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;uGAzEW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAnChB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,gBAAgB,CAAC;AAC/C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAtC5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,eAAA,EACH,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,sBAAsB,CAAC;AAC/C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;uYAqB2D,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAgEvE;AAEA;;;;;;;;;;;;AAYG;MA4BU,qBAAqB,CAAA;;AAEhC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAU;;AAG/B,IAAA,SAAS,GAAG,KAAK,CAAC,EAAE,qDAAC;;AAGrB,IAAA,cAAc,GAAG,KAAK,CAAC,EAAE,0DAAC;;AAG1B,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;AAEvB,IAAA,MAAM,GAAG,eAAe,CAAC,gBAAgB,kDAAC;AAE1C,IAAA,aAAa,GAAG,MAAM,CAAU,SAAS,yDAAC;AAClC,IAAA,YAAY,GAAG,MAAM,CAAC,CAAC,wDAAC;AAExB,IAAA,gBAAgB,GAA6B,MAAK,EAAE,CAAC;AACrD,IAAA,iBAAiB,GAAe,MAAK,EAAE,CAAC;AAExC,IAAA,UAAU,GAAG,MAAM,CAAC,MAAK;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAClC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC;AAC/D,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;AACzD,IAAA,CAAC,sDAAC;;AAGF,IAAA,WAAW,CAAC,KAAuB,EAAA;AACjC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;QACnC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QACjC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;AACzB,QAAA,OAAO,GAAG,KAAK,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7C;;AAGA,IAAA,WAAW,CAAC,KAAuB,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,iBAAiB,EAAE;IAC1B;;AAGA,IAAA,YAAY,CAAC,KAAuB,EAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;AAC/C,QAAA,IAAI,GAAG,IAAI,CAAC,EAAE;AACZ,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;QAC5B;IACF;;IAGA,cAAc,CAAC,KAAoB,EAAE,QAA0B,EAAA;AAC7D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;AACpC,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE;QAE1B,IAAI,SAAS,GAAkB,IAAI;AAEnC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;gBACf,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,SAAS,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM;gBACtD;AACF,YAAA,KAAK,SAAS;AACd,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,SAAS,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;gBACvE;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;gBACtB,SAAS,GAAG,CAAC;gBACb;AACF,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;gBAC9B;AACF,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;gBAC9C;;AAGJ,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;AAChC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;YACjC,MAAM,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAC1B;IACF;AAEA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;AAEA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;IAEQ,aAAa,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACrD;uGA9GW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAxBrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EA+BwB,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9B/B;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA3BjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EACT,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;AAQT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;khBAsBwB,gBAAgB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACnM3C;;;;;;;AAOG;MAiCU,iBAAiB,CAAA;;AAE5B,IAAA,SAAS,GAAG,KAAK,CAAC,EAAE,qDAAC;;AAGrB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,OAAO,GAAG,KAAK,CAAC,KAAK,mDAAC;AAEd,IAAA,gBAAgB,GAA6B,MAAK,EAAE,CAAC;AAC7D,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAEhC,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;IACvC;;AAGA,IAAA,UAAU,CAAC,KAAc,EAAA;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3B;AAEA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;uGAlCW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EA7BjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE;AACR;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAhC7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,eAAA,EACJ,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE;AACR;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;ACvBH;;;;;;;;;;;;;;;AAeG;MAiCU,eAAe,CAAA;;AAE1B,IAAA,WAAW,GAAG,KAAK,CAAC,KAAK,uDAAC;;AAG1B,IAAA,SAAS,GAAG,KAAK,CAAyB,IAAI,qDAAC;;AAG/C,IAAA,OAAO,GAAG,KAAK,CAAuB,IAAI,mDAAC;;AAG3C,IAAA,SAAS,GAAG,KAAK,CAAC,EAAE,qDAAC;;IAGrB,SAAS,GAAG,MAAM,EAAQ;IAElB,SAAS,GAAG,YAAY,CAAC,UAAU,sDAAI,IAAI,EAAE,UAAU,EAAA,CAAG;IAC1D,SAAS,GAAG,YAAY,CAAC,UAAU,sDAAI,IAAI,EAAE,UAAU,EAAA,CAAG;AAClE,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,qDAAC;AAC9C,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,qDAAC;IAEtC,OAAgB,aAAa,GAAoC;AACvE,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,EAAE,EAAE,+BAA+B;AACnC,QAAA,EAAE,EAAE,gCAAgC;AACpC,QAAA,EAAE,EAAE,gCAAgC;KACrC;IAEO,OAAgB,WAAW,GAAkC;AACnE,QAAA,IAAI,EAAE,GAAG;AACT,QAAA,EAAE,EAAE,yBAAyB;AAC7B,QAAA,EAAE,EAAE,yBAAyB;AAC7B,QAAA,EAAE,EAAE,sBAAsB;KAC3B;AAED,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,YAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACtC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,uDAAC;AAEF,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QACzB,MAAM,MAAM,GAAa,EAAE;AAC3B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;AAC7B,YAAA,MAAM,CAAC,IAAI,CAAC,CAAA,YAAA,EAAe,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAG,CAAC,CAAA,CAAE,CAAC;QAChF;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;AAC3B,YAAA,MAAM,CAAC,IAAI,CAAC,CAAA,mBAAA,EAAsB,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAG,CAAC,CAAA,CAAE,CAAC;QACnF;AACA,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,IAAA,CAAC,sDAAC;IAEF,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACvB;IACF;AAEA,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE;AACzB,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAC9C,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACvB;IACF;uGAlEW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,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,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAgB2B,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACV,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9CrD;;;;;;;;;;;;;;;;;;;;AAoBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAhC3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,eAAA,EACF,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;;;;;;AAoBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;AAyBgC,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,UAAU,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAChC,UAAU,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC5EnE;;;;;;;;;;;;;;AAcG;MAIU,kBAAkB,CAAA;;IAE7B,SAAS,GAAG,KAAK,CAAC,EAAE,sDAAI,KAAK,EAAE,WAAW,EAAA,CAAG;AAEpC,IAAA,WAAW,GAAG,MAAM,EAAC,WAAoB,EAAC;uGAJxC,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,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,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;;;ACoBD;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MAQU,oBAAoB,CAAA;AAC/B,IAAA,IAAI,GAAG,KAAK,CAAc,EAAE,gDAAC;AAC7B,IAAA,OAAO,GAAG,KAAK,CAAa,EAAE,mDAAC;AAC/B,IAAA,MAAM,GAAG,KAAK,CAAoB,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,kDAAC;;AAGnE,IAAA,IAAI,GAAG,KAAK,CAAqB,IAAI,gDAAC;;AAGtC,IAAA,KAAK,GAAG,KAAK,CAAwD,IAAI,iDAAC;IAE1E,QAAQ,GAAG,MAAM,EAAa;IAC9B,eAAe,GAAG,MAAM,EAAe;IACvC,UAAU,GAAG,MAAM,EAAsB;AAEzC,IAAA,QAAQ,GAAG,eAAe,CAAC,kBAAkB,oDAAC;AAEtC,IAAA,cAAc,GAAG,IAAI,GAAG,EAAW;IACnC,YAAY,GAAuB,IAAI;AACvC,IAAA,eAAe,GAAG,IAAI,GAAG,EAAgC;IAEjE,WAAW,GAAG,KAAK;IACnB,YAAY,GAAG,KAAK;AAEZ,IAAA,cAAc,GAAG,MAAM,CAAC,MAAK;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,IAAG;AACjB,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,WAAW,CAAC;AAC5D,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,0DAAC;AAEM,IAAA,UAAU,GAAG,MAAM,CAAC,MAAK;QAC/B,IAAI,CAAC,IAAI,EAAE;QACX,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,oBAAoB,EAAE;AAC7B,IAAA,CAAC,sDAAC;AAEF,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;QAC3B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,KAAK,KAAK;AAC3C,IAAA,CAAC,wDAAC;AAEF,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAC5D,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAC5D,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,wDAAC;AAEF,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACpF,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC/B,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACvF,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,sDAAC;AAEF,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QACzB,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY;AACzC,IAAA,CAAC,sDAAC;;AAGF,IAAA,eAAe,CAAC,SAAiB,EAAA;QAC/B,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI;IACpD;AAEA,IAAA,WAAW,CAAC,MAAgB,EAAA;QAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AACjC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;QAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG;AAAE,YAAA,OAAO,MAAM;AACnD,QAAA,OAAO,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,WAAW,GAAG,YAAY;IAC9D;AAEA,IAAA,UAAU,CAAC,MAAgB,EAAA;QACzB,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE;AACtB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,QAAA,IAAI,IAAwB;QAE5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE;AAC1C,YAAA,IAAI,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE;QAC9C;AAAO,aAAA,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE;AACtC,YAAA,IAAI,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE;QAC/C;aAAO;YACL,IAAI,GAAG,IAAI;QACb;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AACf,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B;IACF;AAEA,IAAA,UAAU,CAAC,GAAc,EAAA;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IACzB;IAEA,eAAe,CAAC,GAAc,EAAE,KAAY,EAAA;QAC1C,KAAK,CAAC,eAAe,EAAE;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAChC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;QACnC;aAAO;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC;QACA,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IACnD;AAEA,IAAA,SAAS,CAAC,OAAgB,EAAA;QACxB,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACzE;aAAO;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;QAC7B;QACA,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IACnD;AAEA,IAAA,UAAU,CAAC,GAAc,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpD;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;QAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;QAC5F,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,aAAa,KAAK,IAAI,CAAC,MAAM;AAC3D,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM;IACjF;AAEQ,IAAA,QAAQ,CAAC,GAAc,EAAA;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC;QACnB;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;AAChE,YAAA,OAAO,GAAG,CAAC,KAAK,CAAC;QACnB;AACA,QAAA,OAAO,GAAG;IACZ;IAEQ,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/E;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;AACjB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;YAC3B;QACF;QACA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,IAAG;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC;AACF,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,aAAa,CAAC,CAAU,EAAE,CAAU,EAAE,SAA0B,EAAA;AACtE,QAAA,MAAM,UAAU,GAAG,SAAS,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;AAAE,YAAA,OAAO,CAAC;QACpC,IAAI,CAAC,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,UAAU;QACpC,IAAI,CAAC,IAAI,IAAI;AAAE,YAAA,OAAO,CAAC,CAAC,GAAG,UAAU;QAErC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AAClD,YAAA,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU;QAC7B;QACA,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE;AAC1C,YAAA,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,UAAU;QACjD;QAEA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,GAAG,UAAU;IAC3G;uGAhLW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAeJ,kBAAkB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtF/C,svEA8DA,gMDKY,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIf,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,mBACR,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,gBAAgB,CAAC,EAAA,QAAA,EAAA,svEAAA,EAAA,MAAA,EAAA,CAAA,wIAAA,CAAA,EAAA;qtBAmBA,kBAAkB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEtF/C,MAAM,mBAAmB,GAAG;IAC1B,SAAS;IACT,YAAY;IACZ,wBAAwB;IACxB,uBAAuB;IACvB,wBAAwB;IACxB,0BAA0B;IAC1B,iCAAiC;AAClC,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC;AAEX;;;;;;AAMG;MACU,SAAS,CAAA;IACZ,qBAAqB,GAAuB,IAAI;;IAGxD,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,aAA4B;IACpE;;IAGA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE;AAClC,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;QACnC;IACF;;AAGA,IAAA,cAAc,CAAC,OAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,qBAAqB,GAAG,OAAO;IACtC;AAEA;;;AAGG;IACH,UAAU,CAAC,SAAyC,EAAE,QAA6B,EAAA;AACjF,QAAA,MAAM,QAAQ,GAAG,sBAAsB,CAAC,SAAS,CAAC;AAClD,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;QACzB,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,KAAK,EAAE;QACf;aAAO;YACL,QAAQ,EAAE,KAAK,EAAE;QACnB;IACF;AAEA;;;AAGG;AACH,IAAA,SAAS,CACP,KAAoB,EACpB,SAAyC,EACzC,QAA6B,EAAA;AAE7B,QAAA,MAAM,QAAQ,GAAG,sBAAsB,CAAC,SAAS,CAAC;AAElD,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE;YACtB,QAAQ,EAAE,KAAK,EAAE;YACjB;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1C,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAmC;QAE3D,IAAI,KAAK,CAAC,QAAQ,IAAI,MAAM,KAAK,KAAK,EAAE;YACtC,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;QACd;aAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE;YAC7C,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,KAAK,EAAE;QACf;IACF;AACD;AAED;AACA,SAAS,sBAAsB,CAAC,SAAyC,EAAA;AACvE,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,EAAE;IACzB,OAAO,KAAK,CAAC,IAAI,CACf,SAAS,CAAC,gBAAgB,CAAc,mBAAmB,CAAC,CAC7D,CAAC,MAAM,CACN,CAAC,EAAE,KACD,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC;QAC5B,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,MAAM,CAC5C;AACH;;AC1FA;;;;;;;;;;;;;;;;AAgBG;MAmDU,gBAAgB,CAAA;AACnB,IAAA,OAAO,MAAM,GAAG,CAAC;AACjB,IAAA,SAAS,GAAG,IAAI,SAAS,EAAE;;AAGnC,IAAA,IAAI,GAAG,KAAK,CAAC,KAAK,gDAAC;;AAGnB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,eAAe,GAAG,KAAK,CAAC,IAAI,2DAAC;;AAG7B,IAAA,oBAAoB,GAAG,KAAK,CAAC,IAAI,gEAAC;;IAGlC,MAAM,GAAG,MAAM,EAAQ;;AAGvB,IAAA,OAAO,GAAG,CAAA,eAAA,EAAkB,gBAAgB,CAAC,MAAM,EAAE,EAAE;IAE/C,SAAS,GAAG,YAAY,CAAC,UAAU,sDAAI,IAAI,EAAE,UAAU,EAAA,CAAG;AAClE,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,qDAAC;AAEtC,IAAA,eAAe,GAAG,MAAM,CAAC,KAAK,2DAAC;AAEvC,IAAA,SAAS,GAAG,SAAS,CAA0B,QAAQ,qDAAC;AAEhD,IAAA,UAAU,GAAG,MAAM,CAAC,MAAK;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;AAC1B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE;AAC1C,QAAA,IAAI,MAAM,IAAI,WAAW,EAAE;YACzB,IAAI,CAAC,MAAM,EAAE;QACf;aAAO,IAAI,CAAC,MAAM,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;QAC/B;AACF,IAAA,CAAC,sDAAC;IAEF,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;IAChC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IAC/B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,CAAC,KAAK,EAAE;QACd;IACF;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;YAAE;QACzC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC;IACnG;AAEA,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa,EAAE;YACvE,IAAI,CAAC,KAAK,EAAE;QACd;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;IAEQ,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;QAC1B,cAAc,CAAC,MAAK;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC;AAC7F,QAAA,CAAC,CAAC;IACJ;uGA1EW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAsB0B,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAlD5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,eAAA,EACH,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,2BAA2B,EAAE,eAAe;AAC5C,wBAAA,oBAAoB,EAAE,mBAAmB;qBAC1C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;AA6BgC,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,UAAU,OAAE,EAAE,IAAI,EAAE,UAAU,EAAE,iEAKlB,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACjFzD;;;;;;;;;AASG;MAIU,cAAc,CAAA;AACjB,IAAA,YAAY,GAAG,MAAM,CAAY,EAAE,wDAAC;IACpC,MAAM,GAAG,CAAC;;AAGlB,IAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAEvC;;AAEG;AACH,IAAA,IAAI,CAAC,KAA0B,EAAA;QAC7B,MAAM,EAAE,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,MAAM,EAAE,EAAE;AACnC,QAAA,MAAM,QAAQ,GAAY;YACxB,EAAE;AACF,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,GAAG;SACJ;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEzD,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE;AAC9C,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;QACvD;AAEA,QAAA,OAAO,EAAE;IACX;AAEA;;AAEG;IACH,OAAO,CAAC,KAAa,EAAE,WAAoB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC9D;AAEA;;AAEG;IACH,KAAK,CAAC,KAAa,EAAE,WAAoB,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC5D;AAEA;;AAEG;IACH,OAAO,CAAC,KAAa,EAAE,WAAoB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC9D;AAEA;;AAEG;IACH,IAAI,CAAC,KAAa,EAAE,WAAoB,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3D;AAEA;;AAEG;AACH,IAAA,OAAO,CAAC,EAAU,EAAA;QAChB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE;AAEA;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IAC3B;uGApEW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACzBD;;;;;;;AAOG;MA0CU,yBAAyB,CAAA;AACpC,IAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AAErC,IAAA,YAAY,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,YAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC;IACF;uGARW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOU,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAzCrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,eAAA,EACb,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;;;ACrCH;;AAEG;MAgBU,mBAAmB,CAAA;AACtB,IAAA,OAAO,MAAM,GAAG,CAAC;AAEzB,IAAA,EAAE,GAAG,KAAK,CAAC,EAAE,8CAAC;AACd,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;AACjB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;AACvB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;IAEvB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE;AACd,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,mBAAmB,CAAC,MAAM,EAAE,CAAA,CAAE,CAAC;QACvD;AACA,QAAA,OAAO,IAAI,CAAC,EAAE,EAAE;IAClB;uGAbW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,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,EAAA,OAAA,EAAA,EAAA,EAAA,EAAA,UAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZpB;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAf/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;oBACxB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA;AACF,iBAAA;;AAiBD;;;;;;;;;;;;AAYG;MAkCU,eAAe,CAAA;;IAE1B,IAAI,GAAY,EAAE;;AAGlB,IAAA,SAAS,GAAG,KAAK,CAAC,EAAE,qDAAC;AAErB,IAAA,MAAM,GAAG,eAAe,CAAC,mBAAmB,kDAAC;AAC7C,IAAA,UAAU,GAAG,YAAY,CAAgC,WAAW,sDAAC;AAE7D,IAAA,YAAY,GAAG,MAAM,CAAC,MAAK;QACjC,IAAI,CAAC,kBAAkB,EAAE;AAC3B,IAAA,CAAC,wDAAC;AAEF,IAAA,SAAS,CAAC,EAAU,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;IAEA,SAAS,CAAC,KAAoB,EAAE,SAAiB,EAAA;AAC/C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1D,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE;AAE9B,QAAA,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC;AACvE,QAAA,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;AAExC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,YAAY;YACjB,KAAK,WAAW,EAAE;gBAChB,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC;AACjE,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB;YACF;AACA,YAAA,KAAK,WAAW;YAChB,KAAK,SAAS,EAAE;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC;AACtF,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB;YACF;YACA,KAAK,MAAM,EAAE;gBACX,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC;YACF;YACA,KAAK,KAAK,EAAE;gBACV,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBACxC;YACF;AACA,YAAA,KAAK,OAAO;YACZ,KAAK,GAAG,EAAE;gBACR,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;gBACzB;YACF;AACA,YAAA;gBACE;;IAEN;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK;AAC/B,YAAA,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,CAAC,EAAE,EAAE;AAClC,YAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACzB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC7F,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACzD,IAAI,YAAY,EAAE;gBAChB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACrC;QACF;QAEA,IAAI,CAAC,eAAe,EAAE;IACxB;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE;AACpB,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;AACrB,YAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;AACrD,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,QAAQ,CAAC,EAAU,EAAA;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACvF,QAAA,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE;IAC/B;uGA7FW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,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,SAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAOD,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArClC;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAjC3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,eAAA,EACF,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;AAcwB,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,mBAAmB,wEACa,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC1EtE;;;;;;;;;;;;;;;;AAgBG;MAyEU,kBAAkB,CAAA;;AAE7B,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAc;;AAGnC,IAAA,OAAO,GAAG,KAAK,CAAmB,SAAS,mDAAC;;AAG5C,IAAA,IAAI,GAAG,KAAK,CAAgB,IAAI,gDAAC;;AAGjC,IAAA,SAAS,GAAG,KAAK,CAAC,gBAAgB,qDAAC;AAEnC,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC;AAC3B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;QACxB,IAAI,CAAC,KAAK,MAAM;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;AAC/C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA,CAAE,CAAC;AAC7C,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,4DAAC;uGApBS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,QAAA,EAAA,EAAA,EAAA,QAAA,EApEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,siBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA5BS,UAAU,oOAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAqE3B,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAxE9B,SAAS;+BACE,aAAa,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,siBAAA,CAAA,EAAA;;;AChDH;;;;;;;;;;;;AAYG;MA0DU,mBAAmB,CAAA;AACtB,IAAA,OAAO,MAAM,GAAG,CAAC;AACR,IAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;;AAG7C,IAAA,KAAK,GAAG,KAAK,CAAC,SAAS,iDAAC;;AAGxB,IAAA,IAAI,GAAG,KAAK,CAAe,IAAI,gDAAC;;AAGhC,IAAA,KAAK,GAAG,KAAK,CAAkB,OAAO,iDAAC;;AAGvC,IAAA,IAAI,GAAG,KAAK,CAAmB,QAAQ,gDAAC;;AAGxC,IAAA,KAAK,GAAG,KAAK,CAAmB,EAAE,iDAAC;;IAGnC,YAAY,GAAG,MAAM,EAAW;;AAGhC,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;QAC7B,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,sBAAsB,EAAE,sBAAsB,CAAC;AAC7E,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,CAAA,WAAA,EAAc,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;QAC3C;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,0DAAC;AAEF,IAAA,UAAU,GAAG,SAAS,CAAgC,SAAS,sDAAC;AAChE,IAAA,OAAO,GAAG,SAAS,CAA0B,MAAM,mDAAC;AACpD,IAAA,WAAW,GAAG,YAAY,CAAgC,YAAY,uDAAC;;IAG/D,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAExF,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;AACtB,IAAA,gBAAgB,GAAG,MAAM,CAAC,CAAC,4DAAC;AAEpB,IAAA,UAAU,GAAG,mBAAmB,CAAC,MAAM,EAAE;AACjD,IAAA,MAAM,GAAG,CAAA,iBAAA,EAAoB,IAAI,CAAC,UAAU,EAAE;AAC9C,IAAA,SAAS,GAAG,CAAA,oBAAA,EAAuB,IAAI,CAAC,UAAU,EAAE;IAE5C,eAAe,GAAG,EAAE;IACpB,cAAc,GAAyC,IAAI;IAEnE,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAClB;aAAO;YACL,IAAI,CAAC,IAAI,EAAE;QACb;IACF;AAEA,IAAA,UAAU,CAAC,IAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAClB;IACF;;AAGA,IAAA,gBAAgB,CAAC,KAAoB,EAAA;AACnC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,IAAI,EAAE;gBACb;gBACA;AACF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AAClB,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjB;gBACA;;IAEN;;AAGA,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,QAAA,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE;AAElC,QAAA,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,WAAW,EAAE;gBAChB,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;AAC9D,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBACpB;YACF;YACA,KAAK,SAAS,EAAE;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/D,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBACpB;YACF;YACA,KAAK,MAAM,EAAE;gBACX,KAAK,CAAC,cAAc,EAAE;gBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1C,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBACrB;YACF;YACA,KAAK,KAAK,EAAE;gBACV,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC9D,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBACpB;YACF;AACA,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChB;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBACjB;AACF,YAAA,KAAK,OAAO;YACZ,KAAK,GAAG,EAAE;gBACR,KAAK,CAAC,cAAc,EAAE;gBACtB,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACrD,gBAAA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC1B,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACvB;gBACA;YACF;AACA,YAAA;AACE,gBAAA,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AAC9D,oBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC;gBACjC;;IAEN;AAEA,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACtD,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACnB;IACF;AAEA;;;AAGG;AACH,IAAA,kBAAkB,CAAC,IAAoB,EAAA;QACrC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7C;IAEQ,IAAI,CAAC,SAAS,GAAG,KAAK,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;QAC9C,MAAM,UAAU,GAAG;cACf,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;cAChD,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;QACrC,cAAc,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC3C;AAEQ,IAAA,KAAK,CAAC,WAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;QACzB,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;QAC1C;IACF;AAEQ,IAAA,SAAS,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,YAAY,EAAE;IACrB;IAEQ,YAAY,GAAA;AAClB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACnC,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,KAAK,EAAE;IACrC;IAEQ,gBAAgB,CAAC,IAAY,EAAE,SAAiB,EAAA;AACtD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,QAAA,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM;QAClC,IAAI,GAAG,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC;AAEvB,QAAA,IAAI,GAAG,GAAG,IAAI,GAAG,SAAS;AAC1B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,IAAI,GAAG,GAAG,CAAC;AAAE,gBAAA,GAAG,GAAG,GAAG,GAAG,CAAC;YAC1B,IAAI,GAAG,IAAI,GAAG;gBAAE,GAAG,GAAG,CAAC;AACvB,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ;AAAE,gBAAA,OAAO,GAAG;YAC9C,GAAG,IAAI,SAAS;QAClB;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,eAAe,CAAC,IAAY,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;QACnC;AACA,QAAA,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1C,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAK;AACpC,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B,CAAC,EAAE,GAAG,CAAC;AAEP,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC;AAE9C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/C,MAAM,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM;AACrD,YAAA,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC;AACjC,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AAC/E,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;gBACnB;YACF;QACF;IACF;uGAxNW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,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,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnDpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAzD/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,kBAAkB,EAAE,yBAAyB;qBAC9C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA;mkBAwCqD,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAClB,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CACO,YAAY,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC3HxE;;;;;;;;;AASG;MAmDU,qBAAqB,CAAA;;AAEhC,IAAA,WAAW,GAAG,KAAK,CAAC,CAAC,uDAAC;;AAGtB,IAAA,UAAU,GAAG,KAAK,CAAC,CAAC,sDAAC;;AAGrB,IAAA,aAAa,GAAG,KAAK,CAAC,MAAM,yDAAC;;AAG7B,IAAA,SAAS,GAAG,KAAK,CAAC,MAAM,qDAAC;;AAGzB,IAAA,eAAe,GAAG,KAAK,CAAC,CAAC,2DAAC;;IAG1B,UAAU,GAAG,MAAM,EAAU;AAE7B,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;QAC3B,MAAM,KAAK,GAAwB,EAAE;AACrC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;AAEtD,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC;QACrD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAEzE,IAAI,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE;AAC5C,YAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QACvD;AAEA,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACb,IAAI,KAAK,GAAG,CAAC;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;AACjC,YAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACf;AAEA,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE;AAC3B,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,wDAAC;AAEF,IAAA,QAAQ,CAAC,IAAqB,EAAA;QAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;AACrG,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B;IACF;uGAnDW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/CtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAlDjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,eAAA,EACR,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;AC5CH;;;;;;;;;;;;;AAaG;MAqCU,sBAAsB,CAAA;;AAEjC,IAAA,KAAK,GAAG,KAAK,CAAiB,EAAE,iDAAC;uGAFtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhCvB;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1BS,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAiCT,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBApClC,SAAS;+BACE,gBAAgB,EAAA,eAAA,EACT,uBAAuB,CAAC,MAAM,WACtC,CAAC,UAAU,CAAC,EAAA,QAAA,EACX;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;ACQH,MAAM,WAAW,GAAG;IAClB,SAAS;IACT,UAAU;IACV,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,QAAQ;IACR,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;CACX;AAED,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAExG,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MAwQU,qBAAqB,CAAA;AACxB,IAAA,OAAO,MAAM,GAAG,CAAC;;;AAKzB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,WAAW,GAAG,KAAK,CAAC,aAAa,uDAAC;;AAGlC,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,UAAU,GAAG,KAAK,CAAC,cAAc,sDAAC;;IAGlC,OAAO,GAAG,KAAK,CAAC,CAAA,cAAA,EAAiB,qBAAqB,CAAC,MAAM,EAAE,CAAA,CAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGlE,IAAA,GAAG,GAAG,KAAK,CAAuB,IAAI,+CAAC;;AAGvC,IAAA,GAAG,GAAG,KAAK,CAAuB,IAAI,+CAAC;;AAGvC,IAAA,aAAa,GAAG,KAAK,CAAS,EAAE,yDAAC;AAEjC;;;AAGG;AACH,IAAA,UAAU,GAAG,KAAK,CAAmC,IAAI,sDAAC;;AAG1D,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;AAGhB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,IAAI,GAAG,KAAK,CAAmB,QAAQ,gDAAC;AAExC;;;AAGG;AACH,IAAA,WAAW,GAAG,KAAK,CAA0B,MAAM,uDAAC;;IAGpD,UAAU,GAAG,MAAM,EAAQ;;IAG3B,WAAW,GAAG,MAAM,EAAe;;AAInC,IAAA,QAAQ,GAAG,SAAS,CAA+B,SAAS,oDAAC;AAC7D,IAAA,UAAU,GAAG,SAAS,CAA6B,WAAW,sDAAC;;IAI/D,aAAa,GAAG,cAAc;AAC9B,IAAA,iBAAiB,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;;AAIlG,IAAA,YAAY,GAAG,MAAM,CAAc,IAAI,wDAAC;AACxC,IAAA,UAAU,GAAG,MAAM,CAAc,IAAI,sDAAC;AACtC,IAAA,QAAQ,GAAG,MAAM,CAAc,IAAI,oDAAC;AACpC,IAAA,cAAc,GAAG,MAAM,CAAC,KAAK,0DAAC;IAE9B,YAAY,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAC5C,WAAW,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAC9C,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;AACtB,IAAA,WAAW,GAAG,MAAM,CAAc,IAAI,uDAAC;AACvC,IAAA,WAAW,GAAG,MAAM,CAAmB,MAAM,uDAAC;IAC9C,YAAY,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAC5C,WAAW,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAC9C,IAAA,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,yDAAC;AAEtE,IAAA,QAAQ,GAA6B,MAAK,EAAE,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AACxB,IAAA,iBAAiB,GAAe,MAAK,EAAE,CAAC;;AAIhD,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,qDAAC;AACtD,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,qDAAC;AAEtD,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,QAAA,CAAU,qDAAC;AACvD,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,KAAA,CAAO,kDAAC;AACjD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,MAAA,CAAQ,mDAAC;AAEnD,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QAC9B,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;QACvC,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE;AACrC,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,2DAAC;AAEF,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO;AAAE,YAAA,OAAO,mBAAmB;AACvD,QAAA,OAAO,aAAa;AACtB,IAAA,CAAC,2DAAC;AAEF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,QAAQ,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,CAAA,EAAG,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACpE,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;AAChC,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,CAAA,EAAG,IAAI,CAAC,aAAa,EAAE,CAAA,GAAA,EAAM,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE;;AAErE,IAAA,CAAC,uDAAC;AAEF,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,QAAQ,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,sBAAsB;AAC/B,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,qBAAqB;AAC9B,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI;;AAEjB,IAAA,CAAC,0DAAC;AAEF,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,QAAQ,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,gBAAgB;AACzB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,eAAe;AACxB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,mBAAmB;;AAEhC,IAAA,CAAC,+DAAC;AAEF,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,QAAQ,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,YAAY;AACrB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,WAAW;AACpB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,eAAe;;AAE5B,IAAA,CAAC,+DAAC;IAEF,aAAa,GAAG,QAAQ,CACtB,MAAM,CAAA,EAAG,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,WAAW,EAAE,CAAA,CAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAClE;AAED,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAChC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI;QAC/D;AACA,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI;AACrC,IAAA,CAAC,6DAAC;AAEF,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;AAC3B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,EAAE;AAC7B,YAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK;AACvD,YAAA,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK;AACjD,YAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,GAAA,EAAM,MAAM,EAAE;QAClC;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,OAAO,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE;AAC1C,IAAA,CAAC,0DAAC;AAEF,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,2DAAC;AAEjE,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAoB;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;AACxB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;AACpC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC5B,MAAM,UAAU,GACd,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI;AAC9E,QAAA,MAAM,YAAY,GAAG,IAAI,IAAI,UAAU;QAEvC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAkB,EAAE;QAE9B,IAAI,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;QACpC,IAAI,QAAQ,GAAG,CAAC;YAAE,QAAQ,GAAG,CAAC;AAE9B,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;AACnD,QAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACjH;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACjG;AAEA,QAAA,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM;AAClC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACtG;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,wDAAC;AAEF,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAkB;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;AACpC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAE5B,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACzC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;YAC1D,OAAO;AACL,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AACrB,gBAAA,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;gBAC1B,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,GAAG,KAAK;gBAC3F,UAAU;aACX;AACH,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,sDAAC;AAEF,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAiB;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;AACpC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAE5B,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACzC,YAAA,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC;YACvB,OAAO;gBACL,KAAK;AACL,gBAAA,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,GAAG,KAAK;gBAC/D,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;aACjD;AACH,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,qDAAC;;IAIF,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAClB;aAAO;YACL,IAAI,CAAC,IAAI,EAAE;QACb;IACF;;IAGA,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;YAAE;AACtC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;AACpC,QAAA,MAAM,SAAS,GAAG,QAAQ,IAAI,IAAI,IAAI,EAAE;QACxC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACrB,cAAc,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACtD;;IAGA,KAAK,CAAC,WAAW,GAAG,KAAK,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;QACxC;IACF;;;AAKA,IAAA,UAAU,CAAC,GAAgB,EAAA;AACzB,QAAA,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,aAAa;YAAE;AACzC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAChC;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;QACjC;IACF;;AAGA,IAAA,gBAAgB,CAAC,IAAU,EAAA;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAClB;;AAGA,IAAA,eAAe,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B;aAAO;AACL,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAG;YAC9B,IAAI,GAAG,GAAG,IAAI;YACd,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;gBACpC,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;YAC7B;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACrC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAClB;IACF;;IAGA,SAAS,GAAA;AACP,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YAAE;QAEhC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAE3B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAC9B;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAC7B;IACF;;AAGA,IAAA,UAAU,CAAC,KAAY,EAAA;QACrB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;QACjC;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAC5B;QACA,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;;;IAKA,OAAO,GAAA;AACL,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC9B,YAAA,cAAc,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAClE;AAAO,aAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;YAC5B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AAChE,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AAC7B,YAAA,cAAc,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAChE;IACF;;IAGA,gBAAgB,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACnB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrC;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACxC;;IAEN;;IAGA,YAAY,GAAA;AACV,QAAA,QAAQ,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBAClB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrC;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACxC;;IAEN;;AAGA,IAAA,WAAW,CAAC,UAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;AAC5B,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B,cAAc,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACtD;;AAGA,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC9B,QAAA,cAAc,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAClE;;;AAKA,IAAA,gBAAgB,CAAC,GAAgB,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,QAAA,OAAO,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;IAC9D;;AAGA,IAAA,cAAc,CAAC,GAAgB,EAAA;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;AAAE,YAAA,OAAO,CAAC;AAC1D,QAAA,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,UAAU;AAAE,YAAA,OAAO,CAAC;QACxC,OAAO,CAAC,CAAC;IACX;;AAGA,IAAA,kBAAkB,CAAC,UAAkB,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,UAAU;IAC9E;;AAGA,IAAA,gBAAgB,CAAC,UAAkB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;IACpD;;AAGA,IAAA,iBAAiB,CAAC,IAAY,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI;IACtE;;AAGA,IAAA,eAAe,CAAC,IAAY,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7C;;AAGA,IAAA,UAAU,CAAC,IAAU,EAAA;AACnB,QAAA,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;IAC3H;;AAIA,IAAA,cAAc,CAAC,KAAoB,EAAA;QACjC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AACrB,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,IAAI,EAAE;gBACX;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClB;gBACA;AACF,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;oBAC5B,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBACxB;gBACA;;IAEN;;AAGA,IAAA,gBAAgB,CAAC,KAAoB,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE;AACpB,QAAA,MAAM,OAAO,GACX,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAEtD,IAAI,QAAQ,GAAgB,IAAI;AAEhC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,YAAY;gBACf,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/C;AACF,YAAA,KAAK,WAAW;gBACd,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAChD;AACF,YAAA,KAAK,WAAW;gBACd,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/C;AACF,YAAA,KAAK,SAAS;gBACZ,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAChD;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBAChE;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBACnE;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACpF;AACF,YAAA,KAAK,UAAU;gBACb,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClF;AACF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;oBACjC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAiB,CAAC;gBACnD;gBACA;AACF,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChB;AACF,YAAA;gBACE;;QAGJ,IAAI,QAAQ,EAAE;YACZ,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;QAC/B;IACF;;AAGA,IAAA,kBAAkB,CAAC,KAAoB,EAAA;AACrC,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;AAEnC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,YAAY;gBACf,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC;gBACvC;AACF,YAAA,KAAK,WAAW;gBACd,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;gBACtC;AACF,YAAA,KAAK,WAAW;gBACd,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC;gBACvC;AACF,YAAA,KAAK,SAAS;gBACZ,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;gBACtC;AACF,YAAA,KAAK,MAAM;gBACT,SAAS,GAAG,CAAC;gBACb;AACF,YAAA,KAAK,KAAK;gBACR,SAAS,GAAG,EAAE;gBACd;AACF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;AAC5F,oBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;gBAC7B;gBACA;AACF,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;AAC5B,gBAAA,cAAc,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC3E;AACF,YAAA;gBACE;;QAGJ,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;QAChC,cAAc,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACxD;;AAGA,IAAA,iBAAiB,CAAC,KAAoB,EAAA;AACpC,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AACjC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AAEtC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,YAAY;gBACf,QAAQ,IAAI,CAAC;gBACb;AACF,YAAA,KAAK,WAAW;gBACd,QAAQ,IAAI,CAAC;gBACb;AACF,YAAA,KAAK,WAAW;gBACd,QAAQ,IAAI,CAAC;gBACb;AACF,YAAA,KAAK,SAAS;gBACZ,QAAQ,IAAI,CAAC;gBACb;AACF,YAAA,KAAK,MAAM;gBACT,QAAQ,GAAG,SAAS;gBACpB;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,QAAQ,GAAG,SAAS,GAAG,EAAE;gBACzB;AACF,YAAA,KAAK,QAAQ;gBACX,QAAQ,IAAI,EAAE;gBACd;AACF,YAAA,KAAK,UAAU;gBACb,QAAQ,IAAI,EAAE;gBACd;AACF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;AACtE,oBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAC3B;gBACA;AACF,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC9B,gBAAA,cAAc,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;gBAChE;AACF,YAAA;gBACE;;QAGJ,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,QAAQ,GAAG,SAAS,EAAE;AACxB,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC1C;AAAO,aAAA,IAAI,QAAQ,IAAI,SAAS,GAAG,EAAE,EAAE;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC1C;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC9B,cAAc,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtD;AAEA,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;AACtD,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACnB;IACF;;AAIA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAC7B;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAC9B;IACF;AAEA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;;AAIA,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;AAE3B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAClC;AACA,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IACnC;AAEA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;;AAIQ,IAAA,gBAAgB,CAAC,KAAc,EAAA;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC3B,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B;IACF;AAEQ,IAAA,eAAe,CAAC,KAAc,EAAA;QACpC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;YAC9B;QACF;QACA,MAAM,KAAK,GAAG,KAAgC;AAC9C,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;QAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;QAClD,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC3C;IACF;AAEQ,IAAA,eAAe,CAAC,IAAiB,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACrD;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrB;QACA,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEQ,cAAc,CAAC,KAAkB,EAAE,GAAgB,EAAA;AACzD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC;AACZ,gBAAA,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,IAAI;AAC7C,gBAAA,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI;AACxC,aAAA,CAAC;QACJ;aAAO;YACL,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAC/B;QACA,IAAI,CAAC,iBAAiB,EAAE;IAC1B;;AAIQ,IAAA,cAAc,CAAC,KAAc,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AAEtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAE5B,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;YAC1C,OAAO,EAAE,eAAe,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACnD;AACA,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;YAC1C,OAAO,EAAE,eAAe,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACnD;AACA,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE;QACrC;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,aAAa,CAAC,KAAc,EAAA;AAClC,QAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;QACpD,MAAM,KAAK,GAAG,KAAgC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE3C,MAAM,MAAM,GAAqB,EAAE;AACnC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAE5B,QAAA,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;YACpD,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;QACpD;AACA,QAAA,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;YAChD,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QAClD;AACA,QAAA,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;YACpD,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;QAC9C;AAEA,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI;IACvD;;IAIQ,QAAQ,CACd,IAAU,EACV,cAAuB,EACvB,KAAW,EACX,QAAqB,EACrB,UAAuB,EACvB,QAAqB,EAAA;QAErB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;QAC3C,MAAM,UAAU,GACd,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,KAAK;QACxF,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAElD,IAAI,SAAS,GAAG,KAAK;QACrB,IAAI,YAAY,GAAG,KAAK;QACxB,IAAI,UAAU,GAAG,KAAK;QAEtB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,IAAI,UAAU,EAAE;YACzC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC;YAC/C,IAAI,QAAQ,EAAE;AACZ,gBAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GACZ,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI;AACxC,sBAAE,CAAC,UAAU,EAAE,QAAQ;AACvB,sBAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;gBAC5B,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrC,SAAS;AACP,oBAAA,CAAC,YAAY;AACb,wBAAA,CAAC,UAAU;wBACX,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC;wBAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC;YAClC;QACF;QAEA,OAAO;YACL,IAAI;YACJ,cAAc;YACd,OAAO;YACP,UAAU;YACV,UAAU;YACV,aAAa;YACb,SAAS;YACT,YAAY;YACZ,UAAU;SACX;IACH;;;AAKA,IAAA,cAAc,CAAC,IAAU,EAAA;AACvB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;QAC5B,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI;QACvD,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI;AACvD,QAAA,OAAO,KAAK;IACd;;AAGQ,IAAA,iBAAiB,CAAC,IAAU,EAAA;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AAC9D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,QAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;AACxC,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,eAAe,CACrB,IAAY,EACZ,KAAa,EACb,GAAgB,EAChB,GAAgB,EAAA;QAEhB,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC/D,YAAA,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ;AAAE,gBAAA,OAAO,IAAI;QAC1D;QACA,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACnE,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,QAAQ;AAAE,gBAAA,OAAO,IAAI;QACtD;AACA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,cAAc,CAAC,IAAY,EAAE,GAAgB,EAAE,GAAgB,EAAA;AACrE,QAAA,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE;AAAE,YAAA,OAAO,IAAI;AAChD,QAAA,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE;AAAE,YAAA,OAAO,IAAI;AAChD,QAAA,OAAO,KAAK;IACd;;AAIQ,IAAA,cAAc,CAAC,IAAU,EAAA;QAC/B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,cAAc,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACjD;AAEQ,IAAA,cAAc,CAAC,IAAU,EAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAChD,QAAA,IAAI,CAAC,OAAO;YAAE;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAClC,CAAA,+BAAA,EAAkC,GAAG,CAAA,EAAA,CAAI,CAC1C;QACD,MAAM,EAAE,KAAK,EAAE;IACjB;AAEQ,IAAA,gBAAgB,CAAC,UAAkB,EAAA;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAChD,QAAA,IAAI,CAAC,OAAO;YAAE;QACd,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAoB,uBAAuB,CAAC;AACpF,QAAA,OAAO,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE;IAC9B;AAEQ,IAAA,eAAe,CAAC,IAAY,EAAA;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAChD,QAAA,IAAI,CAAC,OAAO;YAAE;QACd,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAoB,sBAAsB,CAAC;AACnF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,SAAS;QAC9B,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE;AACxC,YAAA,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE;QACzB;IACF;;IAGQ,mBAAmB,CAAC,IAAU,EAAE,IAAY,EAAA;QAClD,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QACnC,IAAI,QAAQ,GAAG,CAAC;AAChB,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG,GAAG,EAAE;YAClD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC;AACrC,YAAA,QAAQ,EAAE;QACZ;AACA,QAAA,OAAO,IAAI;IACb;;AAIQ,IAAA,UAAU,CAAC,KAAa,EAAA;QAC9B,MAAM,IAAI,GACR,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IAC3B;IAEQ,OAAO,CAAC,IAAU,EAAE,KAAa,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC;AACpC,QAAA,OAAO,IAAI;IACb;IAEQ,SAAS,CAAC,IAAU,EAAE,KAAa,EAAA;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC;AACtC,QAAA,OAAO,IAAI;IACb;IAEQ,QAAQ,CAAC,IAAU,EAAE,KAAa,EAAA;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC;AAC5C,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,eAAe,CAAC,IAAU,EAAA;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,QAAA,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;IAChC;;IAIQ,SAAS,CAAC,CAAO,EAAE,CAAO,EAAA;QAChC,QACE,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE;AACnC,YAAA,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE;YAC7B,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE;IAE/B;IAEQ,WAAW,CAAC,CAAO,EAAE,CAAO,EAAA;QAClC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACzE,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACzE,OAAO,EAAE,GAAG,EAAE;IAChB;AAEQ,IAAA,SAAS,CAAC,KAAuC,EAAA;AACvD,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;QACvB,IAAI,KAAK,YAAY,IAAI;AAAE,YAAA,OAAO,KAAK;AACvC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAC9B,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,MAAM;QAChD;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,YAAY,CAAC,KAAc,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;QACvB,IAAI,KAAK,YAAY,IAAI;AAAE,YAAA,OAAO,KAAK;AACvC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAC9B,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,MAAM;QAChD;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,WAAW,CAAC,IAAU,EAAA;AAC5B,QAAA,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;IAC3H;AAEQ,IAAA,UAAU,CAAC,IAAU,EAAA;AAC3B,QAAA,MAAM,MAAM,GAA2B;AACrC,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAChC,YAAA,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjC,YAAA,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAChD,YAAA,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC3C,YAAA,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;SAC1B;QACD,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IAC1F;uGAp/BW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,SAAA,EApQrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqLT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+qCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAgEU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAvQjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,eAAA,EACR,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,kBAAkB,EAAE,yBAAyB;qBAC9C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqLT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+qCAAA,CAAA,EAAA;AA6HkD,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,oEACT,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AChahE;;;;;;;;;;;AAWG;MAsFU,eAAe,CAAA;;AAE1B,IAAA,OAAO,GAAG,KAAK,CAAgB,SAAS,mDAAC;;AAGzC,IAAA,UAAU,GAAG,KAAK,CAAmB,QAAQ,sDAAC;;AAG9C,IAAA,IAAI,GAAG,KAAK,CAAa,IAAI,gDAAC;;IAG9B,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAW;;IAGxB,UAAU,GAAG,KAAK,CAAC,KAAK,uDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG1D,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;IAGvB,QAAQ,GAAG,KAAK,CAAC,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGxD,SAAS,GAAG,KAAK,CAAC,KAAK,sDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGzD,GAAG,GAAG,KAAK,CAAC,KAAK,gDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGnD,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;;AAG3B,IAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,2DAAC;;IAGjC,OAAO,GAAG,MAAM,EAAW;AAE3B,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,IAAI;AACnC,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,GAAG,QAAQ;AAC9C,IAAA,CAAC,oDAAC;AAEF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,MAAM,OAAO,GAAG,CAAC,eAAe,CAAC;AACjC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS,EAAE;YAChC,OAAO,CAAC,IAAI,CAAC,CAAA,eAAA,EAAkB,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;QAClD;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,uDAAC;AAEF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC;AAE3B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;QACzC;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;YAClC,OAAO,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,IAAI,CAAC,UAAU,EAAE,CAAA,CAAE,CAAC;QAC/C;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS,EAAE;YAChC,OAAO,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;QAC5C;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,YAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACtC;QAEA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACxC,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACnC;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACnC;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,uDAAC;IAEF,WAAW,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAC3C,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B;AAEA,IAAA,aAAa,CAAC,KAAY,EAAA;AACxB,QAAA,IAAK,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,kBAAkB,CAAC;YAAE;QAC/D,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QAC3C,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B;AAEA,IAAA,mBAAmB,CAAC,KAAY,EAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QAC1C,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACjC;AAEA,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC5B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACjC;uGArGW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,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,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,mBAAA,EAAA,6BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,WAAA,EAAA,YAAA,EAAA,eAAA,EAAA,4DAAA,EAAA,mBAAA,EAAA,kDAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wTAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAsBU,eAAe,EAAA,UAAA,EAAA,CAAA;kBArF3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,eAAA,EACF,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,aAAa,EAAE,YAAY;AAC3B,wBAAA,iBAAiB,EAAE,0DAA0D;AAC7E,wBAAA,qBAAqB,EAAE,kDAAkD;AACzE,wBAAA,sBAAsB,EAAE,oBAAoB;AAC5C,wBAAA,mBAAmB,EAAE,qBAAqB;AAC1C,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,iBAAiB,EAAE,uBAAuB;AAC1C,wBAAA,iBAAiB,EAAE,uBAAuB;AAC1C,wBAAA,kBAAkB,EAAE,6BAA6B;AACjD,wBAAA,qBAAqB,EAAE,6BAA6B;qBACrD,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wTAAA,CAAA,EAAA;;;AC3EH;;;;;;;;;;;;;;;;;;;;;AAqBG;MAwHU,oBAAoB,CAAA;AACvB,IAAA,OAAO,MAAM,GAAG,CAAC;;AAGzB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,WAAW,GAAG,KAAK,CAAC,EAAE,uDAAC;;AAGvB,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;AAGhB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,eAAe,GAAG,KAAK,CAAC,KAAK,2DAAC;;IAG9B,UAAU,GAAG,KAAK,CAAW,CAAC,GAAG,EAAE,GAAG,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAGxC,KAAK,GAAG,MAAM,EAAU;;IAGxB,OAAO,GAAG,MAAM,EAAU;AAE1B,IAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAA+B,WAAW,CAAC;AAExE,IAAA,OAAO,GAAG,CAAA,cAAA,EAAiB,oBAAoB,CAAC,MAAM,EAAE,EAAE;AAC1D,IAAA,KAAK,GAAG,MAAM,CAAW,EAAE,iDAAC;AAC5B,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AAEf,IAAA,QAAQ,GAA8B,MAAK,EAAE,CAAC;AAC9C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAExC,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,KAAA,CAAO,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAE/C,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,MAAA,CAAQ,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAEjD,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;QACvC,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE;AACrC,QAAA,OAAO,IAAI;IACb;IAEA,UAAU,GAAA;QACR,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;IACvC;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAA0B;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;AAElC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;YAC5B;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACzC,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;YAC5B;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,KAAK,EAAE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AACxE,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD;IACF;AAEA,IAAA,aAAa,CAAC,KAAY,EAAA;AACxB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAA0B;AAChD,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;;QAG3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACnC,YAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACvB,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,EAAE,CAAA,CAAA,CAAG,CAAC,CAAC;AACrE,gBAAA,OAAO,CAAC,KAAK,GAAG,EAAE;AAClB,gBAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;oBAC3B,IAAI,OAAO,EAAE;AACX,wBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;oBAC5B;gBACF;gBACA;YACF;QACF;IACF;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,SAAS,EAAE;IAClB;;IAGA,MAAM,CAAC,IAAY,EAAE,KAAa,EAAA;QAChC,KAAK,EAAE,eAAe,EAAE;AACxB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB;IACF;;AAGA,IAAA,UAAU,CAAC,KAAe,EAAA;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IACxD;AAEA,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;IAEQ,OAAO,CAAC,KAAa,EAAE,OAAyB,EAAA;QACtD,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACxB,YAAA,OAAO,CAAC,KAAK,GAAG,EAAE;QACpB;IACF;AAEQ,IAAA,YAAY,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC3D;QACF;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACxB;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAClC;IAEQ,gBAAgB,GAAA;QACtB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACtF;uGA1JW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EApHpB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;AACnD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yxBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAgDU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAvHhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,eAAA,EACR,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,0BAA0B,CAAC;AACnD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,yxBAAA,CAAA,EAAA;29BAiF2D,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AChLzE,IAAI,gBAAgB,GAAG,CAAC;AAExB;;;;;;;;;;;;;;;;;AAiBG;MAIU,kBAAkB,CAAA;;IAE7B,IAAI,GAAG,KAAK,CAAC,EAAE,iDAAI,KAAK,EAAE,WAAW,EAAA,CAAG;;AAGxC,IAAA,iBAAiB,GAAG,KAAK,CAAoB,KAAK,6DAAC;;AAGnD,IAAA,cAAc,GAAG,KAAK,CAAC,GAAG,0DAAC;;AAG3B,IAAA,iBAAiB,GAAG,KAAK,CAAC,KAAK,6DAAC;AAExB,IAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AACpC,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;IAE5B,SAAS,GAAuB,IAAI;AACpC,IAAA,SAAS,GAAG,CAAA,WAAA,EAAc,gBAAgB,EAAE,EAAE;IAC9C,WAAW,GAAyC,IAAI;IAC/C,SAAS,GAAmB,EAAE;AAE/C,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,cAAc,EAAE;IACvB;AAEQ,IAAA,UAAU,GAAG,MAAM,CAAC,MAAK;AAC/B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;QAC1C;AACF,IAAA,CAAC,sDAAC;AAEM,IAAA,cAAc,GAAG,MAAM,CAAC,MAAK;AACnC,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC3E,IAAA,CAAC,0DAAC;IAEF,WAAW,GAAA;QACT,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC;IAChD;IAEQ,QAAQ,GAAA;AACd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;QAClC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;AAC1C,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC;QACzC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1D;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;QAElC,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,EACnE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,EAC3D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,EAChE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,EACzD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAgB,KAAI;AACzD,YAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;gBAAE,IAAI,CAAC,IAAI,EAAE;QACrC,CAAC,CAAC,CACH;IACH;IAEQ,YAAY,GAAA;QAClB,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE;QAC9C,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACzE;IAEQ,IAAI,GAAA;QACV,IAAI,IAAI,CAAC,SAAS;YAAE;AAEpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAgB;AAClE,QAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAC5C,QAAA,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC;QACvC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;AAC1C,QAAA,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;QAEjC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC;AACrD,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO;;QAGxB,qBAAqB,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC;AACzC,QAAA,CAAC,CAAC;IACJ;IAEQ,IAAI,GAAA;QACV,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;AAClC,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC;AACzC,YAAA,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC;AACxC,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;IACF;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;AAC7B,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;IACF;uGAxGW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACxB,iBAAA;;;AC9BD;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;MAmBU,gBAAgB,CAAA;;AAE3B,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;AAGhB,IAAA,SAAS,GAAG,KAAK,CAAC,EAAE,qDAAC;;AAGrB,IAAA,OAAO,GAAG,KAAK,CAAiB,SAAS,mDAAC;;AAG1C,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;IAGhB,GAAG,GAAG,KAAK,CAAC,KAAK,gDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGnD,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS,EAAE;YAChC,OAAO,CAAC,IAAI,CAAC,CAAA,UAAA,EAAa,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;QAC7C;QACA,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;AAC7B,YAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAChC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,wDAAC;uGA1BS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAVjB;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAlB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;oBACpB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,gBAAgB;AAC3B,wBAAA,aAAa,EAAE,gBAAgB;AAC/B,wBAAA,mBAAmB,EAAE,qBAAqB;AAC3C,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;AAQT,EAAA,CAAA;AACF,iBAAA;;;ACjDD;;;;;;;;;;AAUG;MACU,cAAc,CAAA;AACR,IAAA,MAAM;AAEvB,IAAA,WAAA,CAAY,SAAsB,EAAA;QAChC,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC;QAC7E;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,EAAiB;IACjC;;IAGA,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;IAC9C;;IAGA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS;IAC9B;;AAGA,IAAA,QAAQ,CAAC,SAAiB,EAAA;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;IAClD;;IAGA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC;IAC/C;;IAGA,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;IACzC;;IAGA,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,IAAI;IAC9D;;IAGA,MAAM,GAAA;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,KAAK,IAAI;IAC7D;;IAGA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;IAChF;AACD;;ACxDD;;;;;;AAMG;MAwBU,sBAAsB,CAAA;;AAEjC,IAAA,KAAK,GAAG,KAAK,CAAC,CAAC,iDAAC;;AAGhB,IAAA,OAAO,GAAG,KAAK,CAAuB,SAAS,mDAAC;;AAGhD,IAAA,IAAI,GAAG,KAAK,CAAoB,IAAI,gDAAC;;AAGrC,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,aAAa,GAAG,KAAK,CAAC,KAAK,yDAAC;AAE5B,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACzB,QAAA,MAAM,OAAO,GAAG,CAAC,iBAAiB,CAAC;AACnC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS,EAAE;YAChC,OAAO,CAAC,IAAI,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;QACpD;AACA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;QACjD;AACA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,YAAA,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC;QAChD;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,sDAAC;uGA5BS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,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,QAAA,EAAA,EAAA,EAAA,QAAA,EApBvB;;;;;;;;;;;;;AAaT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAvBlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;AAaT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;ACxBH;;;;;;AAMG;MAiBU,kBAAkB,CAAA;;AAE7B,IAAA,IAAI,GAAG,KAAK,CAAgB,IAAI,gDAAC;;AAGjC,IAAA,KAAK,GAAG,KAAK,CAAC,SAAS,iDAAC;AAExB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC;AAC9B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,CAAA,YAAA,EAAe,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;QAC5C;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,0DAAC;uGAbS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAbnB;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAhB9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,eAAA,EACL,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;AAMT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA;;;ACTH;;;;;;;;;;;;;;;;AAgBG;MA6BU,sBAAsB,CAAA;;AAEjC,IAAA,KAAK,GAAG,KAAK,CAAiB,EAAE,iDAAC;;AAGjC,IAAA,IAAI,GAAG,KAAK,CAAoB,IAAI,gDAAC;;AAGrC,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,SAAS,GAAG,KAAK,CAAC,EAAE,qDAAC;;AAGrB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,KAAK,GAAG,KAAK,CAAoB,EAAE,iDAAC;AAE5B,IAAA,QAAQ,GAAuC,MAAK,EAAE,CAAC;AACvD,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAExC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,OAAO,GAAG,CAAC,iBAAiB,CAAC;AACnC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;QACjD;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,wDAAC;AAEF,IAAA,SAAS,CAAC,SAAiB,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAK,IAAI,CAAC,KAAK,EAAe,CAAC,QAAQ,CAAC,SAAS,CAAC;QACtF;AACA,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,SAAS;IACnC;AAEA,IAAA,MAAM,CAAC,SAAiB,EAAA;QACtB,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAc,CAAC,GAAG,EAAE;YAChF,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;AACxC,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,gBAAA,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1B;iBAAO;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YACzB;AACA,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;QACzB;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QAC3B;QAEA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7B;AAEA,IAAA,UAAU,CAAC,KAAwB,EAAA;QACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD;AAEA,IAAA,gBAAgB,CAAC,EAAsC,EAAA;AACrD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;uGAtEW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,o3BANtB,CAAC;AACV,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC;AACrD,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvBQ;;;;;;;;;;;;;AAaT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAYU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA5BlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;AAaT,EAAA,CAAA,EAAA,SAAA,EAMU,CAAC;AACV,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,4BAA4B,CAAC;AACrD,4BAAA,KAAK,EAAE;yBACR,CAAC,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA;;;ACpDJ;;;;;;;;;;;;;;AAcG;MAsBU,kBAAkB,CAAA;;AAE7B,IAAA,SAAS,GAAG,KAAK,CAAC,iBAAiB,qDAAC;uGAFzB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,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,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBnB;;;;;;;;;;;AAWT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBArB9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,eAAA,EACL,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;AAWT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;AC3BH;;;;;;;;;;;;;;;AAeG;MAuCU,kBAAkB,CAAA;;AAE7B,IAAA,IAAI,GAAG,KAAK,CAAC,IAAI,gDAAC;;AAGlB,IAAA,IAAI,GAAG,KAAK,CAAgB,MAAM,gDAAC;;AAGnC,IAAA,SAAS,GAAG,KAAK,CAAC,YAAY,qDAAC;;AAG/B,IAAA,eAAe,GAAG,KAAK,CAAC,IAAI,2DAAC;AAE7B,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,CAAA,YAAA,EAAe,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;AAC1C,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,0DAAC;IAEF,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IACtB;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YACzC,IAAI,CAAC,KAAK,EAAE;QACd;IACF;uGA3BW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhCnB;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAtC9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,eAAA,EACL,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,2BAA2B,EAAE,YAAY;qBAC1C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;AC/CH;;;;;;;;;;;;;;;;;;;;;AAqBG;MAiBU,eAAe,CAAA;;AAE1B,IAAA,IAAI,GAAG,KAAK,CAAa,IAAI,gDAAC;AAE9B,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;QACzC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,uDAAC;uGAVS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAbhB;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAhB3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,eAAA,EACF,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;AAIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wEAAA,CAAA,EAAA;;;ACnBH;;;;;;;;;;;;;;AAcG;MAwDU,iBAAiB,CAAA;AACpB,IAAA,OAAO,MAAM,GAAG,CAAC;;AAGzB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,GAAG,GAAG,KAAK,CAAC,CAAC,+CAAC;;AAGd,IAAA,GAAG,GAAG,KAAK,CAAC,GAAG,+CAAC;;AAGhB,IAAA,IAAI,GAAG,KAAK,CAAC,CAAC,gDAAC;;AAGf,IAAA,IAAI,GAAG,KAAK,CAAe,IAAI,gDAAC;;AAGhC,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,OAAO,GAAG,KAAK,CAAC,KAAK,mDAAC;;AAGtB,IAAA,SAAS,GAAG,KAAK,CAAC,KAAK,qDAAC;;AAGxB,IAAA,UAAU,GAAG,KAAK,CAAC,KAAK,sDAAC;;AAGzB,IAAA,WAAW,GAAG,KAAK,CAAqC,IAAI,uDAAC;;IAG7D,QAAQ,GAAG,KAAK,CAAC,CAAA,UAAA,EAAa,iBAAiB,CAAC,MAAM,EAAE,CAAA,CAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAG3D,IAAA,KAAK,GAAG,KAAK,CAAC,CAAC,iDAAC;AAEhB,IAAA,WAAW,GAAG,SAAS,CAAC,QAAQ,CAA+B,aAAa,CAAC;AAErE,IAAA,gBAAgB,GAA4B,MAAK,EAAE,CAAC;AAC5D,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAEhC,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC;AAC7B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,KAAK,IAAI,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA,CAAE,CAAC;QACjC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,uDAAC;AAEF,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AACzB,QAAA,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM;QAC7B,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC;AACzB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,MAAM,IAAI,KAAK,IAAI,GAAG;AAChD,IAAA,CAAC,wDAAC;AAEF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;AAC7B,QAAA,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;AACrC,IAAA,CAAC,yDAAC;AAEF,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxB,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IACjC;;AAGA,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;IAC5B;AAEA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;uGAxFW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,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,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EApDjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAvD7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,eAAA,EACJ,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;8vCAgD8D,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC1G9E;;;;;;;;;;;;;;;;;AAiBG;MAoDU,iBAAiB,CAAA;AACpB,IAAA,OAAO,MAAM,GAAG,CAAC;AACjB,IAAA,SAAS,GAAG,IAAI,SAAS,EAAE;;AAGnC,IAAA,IAAI,GAAG,KAAK,CAAC,KAAK,gDAAC;;AAGnB,IAAA,QAAQ,GAAG,KAAK,CAAmB,OAAO,oDAAC;;AAG3C,IAAA,IAAI,GAAG,KAAK,CAAe,IAAI,gDAAC;;AAGhC,IAAA,SAAS,GAAG,KAAK,CAAC,EAAE,qDAAC;;AAGrB,IAAA,eAAe,GAAG,KAAK,CAAC,IAAI,2DAAC;;AAG7B,IAAA,oBAAoB,GAAG,KAAK,CAAC,IAAI,gEAAC;;AAGlC,IAAA,oBAAoB,GAAG,KAAK,CAAC,cAAc,gEAAC;;IAG5C,MAAM,GAAG,MAAM,EAAQ;;AAGd,IAAA,OAAO,GAAG,CAAA,gBAAA,EAAmB,iBAAiB,CAAC,MAAM,EAAE,EAAE;AAE1D,IAAA,QAAQ,GAAG,SAAS,CAA0B,OAAO,oDAAC;AAE9D,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC;AAE7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,GAAG,KAAK,OAAO,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,CAAA,CAAE,CAAC;QACnC;AAEA,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,EAAE,KAAK,IAAI,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,CAAA,CAAE,CAAC;QAClC;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,4DAAC;AAEM,IAAA,UAAU,GAAG,MAAM,CAAC,MAAK;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;QAC1B,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,MAAM,EAAE;QACf;aAAO;YACL,IAAI,CAAC,OAAO,EAAE;QAChB;AACF,IAAA,CAAC,sDAAC;IAEF,WAAW,GAAA;QACT,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IAC/B;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;AAEA,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa,EAAE;YACvE,IAAI,CAAC,KAAK,EAAE;QACd;IACF;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE;AAElB,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,IAAI,CAAC,KAAK,EAAE;YACZ;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;YAC5C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;QAC/C;IACF;IAEQ,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;QAC1B,IAAI,CAAC,cAAc,EAAE;QACrB,cAAc,CAAC,MAAK;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;YAC5C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;AACzC,QAAA,CAAC,CAAC;IACJ;IAEQ,OAAO,GAAA;QACb,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IAC/B;IAEQ,cAAc,GAAA;QACpB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;IACzC;IAEQ,gBAAgB,GAAA;QACtB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;IACnC;uGA9GW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7ClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAnD7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,eAAA,EACJ,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,oBAAoB,EAAE,mBAAmB;qBAC1C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;k3BAwCqD,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACjG/D;;;;;;;;;;;;;;;;;;;;;AAqBG;MAsJU,mBAAmB,CAAA;AACtB,IAAA,OAAO,MAAM,GAAG,CAAC;;AAGzB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,WAAW,GAAG,KAAK,CAAC,EAAE,uDAAC;;AAGvB,IAAA,OAAO,GAAG,KAAK,CAAqB,EAAE,mDAAC;;AAGvC,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;AAGhB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,IAAI,GAAG,KAAK,CAAqB,IAAI,gDAAC;;AAGtC,IAAA,SAAS,GAAG,KAAK,CAAC,kBAAkB,qDAAC;;AAGrC,IAAA,WAAW,GAAG,KAAK,CAAsC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,uDAAC;;IAG3E,UAAU,GAAG,KAAK,CAAC,CAAA,YAAA,EAAe,mBAAmB,CAAC,MAAM,EAAE,CAAA,CAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEjE,IAAA,QAAQ,GAAG,SAAS,CAA+B,SAAS,oDAAC;AAC7D,IAAA,UAAU,GAAG,SAAS,CAA+B,WAAW,sDAAC;AAEjE,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;AACtB,IAAA,KAAK,GAAG,MAAM,CAAC,EAAE,iDAAC;AAClB,IAAA,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,4DAAC;AAErB,IAAA,KAAK,GAAG,MAAM,CAAU,IAAI,iDAAC;AAC7B,IAAA,QAAQ,GAA6B,MAAK,EAAE,CAAC;AAC7C,IAAA,iBAAiB,GAAe,MAAK,EAAE,CAAC;AAEhD,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ;IACrC;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU;IACvC;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO;IACpC;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ;IACrC;AAEA,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,MAAM,OAAO,GAAG,CAAC,aAAa,CAAC;AAC/B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAC/C,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC/C,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,2DAAC;AAEF,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;QAC9C,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;AAC3E,IAAA,CAAC,0DAAC;AAEF,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AAC3C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AACnB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;QACtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;QAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9D,IAAA,CAAC,2DAAC;AAEF,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACnC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AAChE,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAC9B,IAAA,CAAC,8DAAC;AAEF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,EAAE;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM;QAC3C,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE;AACxC,QAAA,OAAO,CAAA,EAAG,KAAK,CAAA,OAAA,EAAU,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,YAAY;AAC7D,IAAA,CAAC,yDAAC;IAEF,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC,OAAO;QACrC,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC,MAAM;AACnC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;QACvB,OAAO,CAAA,EAAG,IAAI,CAAC,UAAU,EAAE,CAAA,QAAA,EAAW,KAAK,EAAE;IAC/C;AAEA,IAAA,UAAU,CAAC,MAAwB,EAAA;AACjC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK;QAC/C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C;;IAGA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;YAAE;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACrD;;IAGA,YAAY,CAAC,cAAc,GAAG,IAAI,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,cAAc,EAAE;AAClB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;AACtC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;QAChD;IACF;;IAGA,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACjB,IAAI,CAAC,YAAY,EAAE;QACrB;aAAO;YACL,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;QACxC;IACF;;AAGA,IAAA,YAAY,CAAC,MAAwB,EAAA;QACnC,IAAI,MAAM,CAAC,QAAQ;YAAE;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;AAEA,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;YAClB,IAAI,CAAC,WAAW,EAAE;QACpB;QACA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrB;IACF;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,WAAW,EAAE;IACpB;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,iBAAiB,EAAE;IAC1B;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AAEvC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,WAAW,EAAE;oBAClB;gBACF;AACA,gBAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;gBACrB;AAEF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,WAAW,EAAE;oBAClB;gBACF;AACA,gBAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACtB;AAEF,YAAA,KAAK,OAAO;gBACV,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,oBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACnC,oBAAA,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;wBAChE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAClC;gBACF;qBAAO;oBACL,IAAI,CAAC,WAAW,EAAE;gBACpB;gBACA;AAEF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,YAAY,EAAE;gBACrB;gBACA;AAEF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBACvD,IAAI,CAAC,yBAAyB,EAAE;gBAClC;gBACA;AAEF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBACtD,IAAI,CAAC,yBAAyB,EAAE;gBAClC;gBACA;AAEF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,oBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACnC,oBAAA,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;wBAChE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAClC;oBACA,IAAI,CAAC,YAAY,EAAE;gBACrB;gBACA;;IAEN;AAEA,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC;QACnE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAClC,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;;AAGA,IAAA,UAAU,CAAC,KAAc,EAAA;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACpF,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;IAC5C;AAEA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;AAEQ,IAAA,aAAa,CAAC,SAAiB,EAAA;AACrC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE;AAE3B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACjC,IAAI,QAAQ,GAAG,CAAC;AAEhB,QAAA,GAAG;YACD,GAAG,IAAI,SAAS;YAChB,IAAI,GAAG,GAAG,CAAC;AAAE,gBAAA,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;AACtC,YAAA,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM;gBAAE,GAAG,GAAG,CAAC;AACnC,YAAA,QAAQ,EAAE;AACZ,QAAA,CAAC,QAAQ,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,IAAI,QAAQ,GAAG,QAAQ,CAAC,MAAM;QAE9D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;YAC9B,IAAI,CAAC,yBAAyB,EAAE;QAClC;IACF;IAEQ,yBAAyB,GAAA;QAC/B,cAAc,CAAC,MAAK;YAClB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAChD,YAAA,IAAI,CAAC,OAAO;gBAAE;YACd,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAgB;YAC3E,QAAQ,EAAE,cAAc,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAClD,QAAA,CAAC,CAAC;IACJ;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE;AACtE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;QACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACrE,QAAA,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,qBAAqB,EAAE;IACtD;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7D;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;AAAE,gBAAA,OAAO,CAAC;QACrC;QACA,OAAO,CAAC,CAAC;IACX;uGA/TW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,SAAA,EAlJnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+HT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBArJ/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,kBAAkB,EAAE,yBAAyB;qBAC9C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+HT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;AA6CkD,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,oEACP,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC1MlE;;;;;;;;;;;;;;;;;;;;AAoBG;MAuHU,qBAAqB,CAAA;AACxB,IAAA,OAAO,MAAM,GAAG,CAAC;;AAGzB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;AAGhB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,MAAM,GAAG,KAAK,CAAC,EAAE,kDAAC;;AAGlB,IAAA,OAAO,GAAG,KAAK,CAAC,CAAC,mDAAC;;AAGlB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;IAGvB,gBAAgB,GAAG,MAAM,EAA2B;;IAGpD,OAAO,GAAG,KAAK,CAAC,CAAA,eAAA,EAAkB,qBAAqB,CAAC,MAAM,EAAE,CAAA,CAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEnE,IAAA,WAAW,GAAG,MAAM,CAAgB,EAAE,uDAAC;AACvC,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC;AACxB,IAAA,gBAAgB,GAAG,MAAM,CAAC,EAAE,4DAAC;AAE7B,IAAA,QAAQ,GAA0C,MAAK,EAAE,CAAC;AAC1D,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAEhC,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,MAAA,CAAQ,mDAAC;AACnD,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,KAAA,CAAO,kDAAC;AACjD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,MAAA,CAAQ,mDAAC;AAEnD,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QAC9B,MAAM,GAAG,GAAa,EAAE;QACxB,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACxC,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;AAC9C,IAAA,CAAC,2DAAC;AAEF,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB;IACF;AAEA,IAAA,UAAU,CAAC,KAAgB,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;IACzB;AAEA,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;AAEA,IAAA,MAAM,CAAC,KAAgB,EAAA;QACrB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QAExB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAErB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,KAAK;QACvC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC;IACF;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C;AACA,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;IAClB;;AAGA,IAAA,UAAU,CAAC,KAAkB,EAAA;QAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,QAAQ,CAAC,CAAA,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAA,QAAA,CAAU,CAAC;IAC7C;;AAGA,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QAC7B,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtD,QAAA,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AACtC,QAAA,OAAO,CAAA,EAAG,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;IACxE;AAEA,IAAA,UAAU,CAAC,KAA2B,EAAA;QACpC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB;QACF;AACA,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAC,CAAC,CAAC;IACnF;AAEA,IAAA,gBAAgB,CAAC,EAAyC,EAAA;AACxD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;AAEQ,IAAA,YAAY,CAAC,KAAa,EAAA;QAChC,MAAM,UAAU,GAAkB,EAAE;QACpC,MAAM,MAAM,GAA4B,EAAE;AAE1C,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AAC1C,YAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AACxE,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YAC5B;iBAAO;gBACL,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YAC9C;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,GAAG,QAAQ,EAAE,GAAG,UAAU,CAAC,CAAC;QACrE;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C;AAEA,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;QACpC;QAEA,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;AAC1E,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM;QACxE,MAAM,KAAK,GAAa,EAAE;QAC1B,IAAI,UAAU,GAAG,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAA,KAAA,EAAQ,UAAU,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA,MAAA,CAAQ,CAAC;QACtF,IAAI,UAAU,GAAG,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAA,KAAA,EAAQ,UAAU,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA,SAAA,CAAW,CAAC;QACzF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC;AAEQ,IAAA,YAAY,CAAC,IAAU,EAAA;QAC7B,MAAM,MAAM,GAA4B,EAAE;AAE1C,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;YACnD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;AACJ,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,OAAO,EAAE,CAAA,wBAAA,EAA2B,IAAI,CAAC,IAAI,CAAA,CAAE;AAChD,aAAA,CAAC;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE;YACpD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;AACJ,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,OAAO,EAAE,CAAA,gBAAA,EAAmB,IAAI,CAAC,IAAI,CAAA,EAAA,EAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG;AACxE,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,kBAAkB,CAAC,IAAU,EAAA;AACnC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE;AAC/B,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI;QAE3B,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAExC,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAI;AACrC,YAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAC5B,gBAAA,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACpC;AACA,YAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC3B,gBAAA,OAAO,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnD;YACA,OAAO,QAAQ,KAAK,QAAQ;AAC9B,QAAA,CAAC,CAAC;IACJ;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW;aAChC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,SAAS;aACpC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AAErB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3B;aAAO;YACL,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACtC;IACF;AAEQ,IAAA,QAAQ,CAAC,OAAe,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7B,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtD;uGA1NW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,SAAA,EAlHrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9FS,iBAAiB,+JAAE,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAmHlC,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAtHjC,SAAS;+BACE,gBAAgB,EAAA,eAAA,EACT,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,EAAA,SAAA,EACnC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsFT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,6KAAA,CAAA,EAAA;;;AC9HH;;;;;;;;;;;;;;;;AAgBG;MACU,mBAAmB,GAAG,IAAI,cAAc,CAAmB,kBAAkB,EAAE;AAC1F,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,MAAM,EAAE,2BAA2B;AACnC,QAAA,MAAM,EAAE,kBAAkB;AAC1B,QAAA,QAAQ,EAAE,kBAAkB;AAC5B,QAAA,UAAU,EAAE,oBAAoB;AAChC,QAAA,aAAa,EAAE,0BAA0B;KAC1C,CAAC;AACH,CAAA;;ACtBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BG;MAsHU,qBAAqB,CAAA;AACxB,IAAA,OAAO,MAAM,GAAG,CAAC;AACN,IAAA,IAAI,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACpC,IAAA,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAGtD,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,WAAW,GAAG,KAAK,CAAC,EAAE,uDAAC;;AAGvB,IAAA,OAAO,GAAG,KAAK,CAAuB,EAAE,mDAAC;;AAGzC,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;AAGhB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,IAAI,GAAG,KAAK,CAAqB,IAAI,gDAAC;;AAGtC,IAAA,WAAW,GAAG,KAAK,CAAsC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,uDAAC;;IAG3E,WAAW,GAAG,KAAK,CAAC,CAAA,eAAA,EAAkB,qBAAqB,CAAC,MAAM,EAAE,CAAA,CAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEvE,IAAA,UAAU,GAAG,SAAS,CAAgC,WAAW,sDAAC;AAClE,IAAA,UAAU,GAAG,SAAS,CAA6B,WAAW,sDAAC;AAC/D,IAAA,OAAO,GAAG,SAAS,CAA6B,QAAQ,mDAAC;AAEzD,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;AACtB,IAAA,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,4DAAC;AACrB,IAAA,KAAK,GAAG,MAAM,CAAU,IAAI,iDAAC;AAE7B,IAAA,QAAQ,GAA6B,MAAK,EAAE,CAAC;AAC7C,IAAA,iBAAiB,GAAe,MAAK,EAAE,CAAC;AAEhD,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ;IACtC;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU;IACxC;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO;IACrC;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ;IACtC;AAEA,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,MAAM,OAAO,GAAG,CAAC,gBAAgB,CAAC;AAClC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;QAClD,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAClD,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,uDAAC;AAEF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,OAAO,CAAE,CAAe,IAAI,EAAE,EAAE,MAAM,KAAK,CAAC;QAC9C;AACA,QAAA,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AACtC,IAAA,CAAC,yDAAC;AAEF,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAE9B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,MAAM,IAAI,GAAI,CAAe,IAAI,EAAE;AACnC,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC,WAAW,EAAE;AAChD,YAAA,OAAO;iBACJ,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK;iBACvD,MAAM,CAAC,OAAO;iBACd,IAAI,CAAC,IAAI,CAAC;QACf;AAEA,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE;QAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;AACvE,IAAA,CAAC,wDAAC;AAEF,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACnC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AACxD,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAC9B,IAAA,CAAC,8DAAC;IAEF,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC,OAAO;QACrC,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC,MAAM;AACnC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;QACvB,OAAO,CAAA,EAAG,IAAI,CAAC,WAAW,EAAE,CAAA,QAAA,EAAW,KAAK,EAAE;IAChD;AAEA,IAAA,UAAU,CAAC,MAA0B,EAAA;AACnC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,OAAO,CAAE,CAAe,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE;AACA,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK;QAC/C,OAAO,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;IAC7B;;IAGA,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACjB,IAAI,CAAC,YAAY,EAAE;QACrB;aAAO;YACL,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;;IAGA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;YAAE;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC1D,IAAI,CAAC,yBAAyB,EAAE;QAEhC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;QACrE,IAAI,CAAC,SAAS,CAAC,QAAQ,CACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAC1D;IACH;;IAGA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC3C;;AAGA,IAAA,YAAY,CAAC,MAA0B,EAAA;QACrC,IAAI,MAAM,CAAC,QAAQ;YAAE;AAErB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAE9B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,MAAM,OAAO,GAAI,IAAI,CAAC,KAAK,EAAgB,IAAI,EAAE;YACjD,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,YAAA,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC;YAC5B,MAAM,IAAI,GAAG;kBACT,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;kBACpD,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAEnB,MAAM,GAAG,GAAG;AACV,kBAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK;AACtD,kBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CACrB,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA,CAAE,CAC7E;QACH;aAAO;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;QAC1C;IACF;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAE3B,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,WAAW,EAAE;oBAClB;gBACF;AACA,gBAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;gBACrB;AAEF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,WAAW,EAAE;oBAClB;gBACF;AACA,gBAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACtB;AAEF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;AACN,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACnC,oBAAA,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;wBACxD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9B;gBACF;qBAAO;oBACL,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,WAAW,EAAE;gBACpB;gBACA;AAEF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,YAAY,EAAE;oBACnB,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;gBAC1C;gBACA;AAEF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBACvD,IAAI,CAAC,yBAAyB,EAAE;gBAClC;gBACA;AAEF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBACtD,IAAI,CAAC,yBAAyB,EAAE;gBAClC;gBACA;AAEF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,wBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACnC,wBAAA,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;4BACxD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAC9B;oBACF;oBACA,IAAI,CAAC,YAAY,EAAE;gBACrB;gBACA;;IAEN;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,iBAAiB,EAAE;IAC1B;AAEA,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE;AACpB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa;QAC1C,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAClC,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;AAEA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;QACnD;aAAO;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;QAC/B;IACF;AAEA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;AAEQ,IAAA,aAAa,CAAC,SAAiB,EAAA;AACrC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE;AAEvB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACjC,IAAI,QAAQ,GAAG,CAAC;AAEhB,QAAA,GAAG;YACD,GAAG,IAAI,SAAS;YAChB,IAAI,GAAG,GAAG,CAAC;AAAE,gBAAA,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAClC,YAAA,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM;gBAAE,GAAG,GAAG,CAAC;AAC/B,YAAA,QAAQ,EAAE;AACZ,QAAA,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM;QAEtD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;YAC9B,IAAI,CAAC,yBAAyB,EAAE;QAClC;IACF;IAEQ,yBAAyB,GAAA;QAC/B,cAAc,CAAC,MAAK;YAClB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAChD,YAAA,IAAI,CAAC,OAAO;gBAAE;YACd,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAgB;YACrE,EAAE,EAAE,cAAc,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5C,QAAA,CAAC,CAAC;IACJ;IAEQ,wBAAwB,GAAA;AAC9B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAE9B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,MAAM,IAAI,GAAI,CAAe,IAAI,EAAE;AACnC,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ;AAAE,oBAAA,OAAO,GAAG;YACjD;QACF;aAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,EAAE;YACxC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAClD,IAAI,GAAG,IAAI,CAAC;AAAE,gBAAA,OAAO,GAAG;QAC1B;AAEA,QAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE;IACrC;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrD;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AAAE,gBAAA,OAAO,CAAC;QACjC;QACA,OAAO,CAAC,CAAC;IACX;uGAjWW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,SAAA,EAlHrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+FT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBArHjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EACT,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,kBAAkB,EAAE,yBAAyB;qBAC9C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+FT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;2oCA+CqD,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACd,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACd,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACnN1D;;;;;;;;;;;;;AAaG;MACU,mBAAmB,CAAA;AACb,IAAA,MAAM;AAEvB,IAAA,WAAA,CAAY,SAAsB,EAAA;QAChC,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC;QACpD,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC;QACxF;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,EAAiB;IACjC;;IAGA,iBAAiB,GAAA;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,0BAA0B,CAAC;QACjE,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC;QACnE;AACA,QAAA,OAAO,GAAwB;IACjC;;IAGA,cAAc,GAAA;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,wBAAwB,CAAC;QACjE,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;IACzC;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE;IAClC;;IAGA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ;IAC1C;;IAGA,MAAM,GAAA;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC;QACzD,OAAO,IAAI,EAAE,YAAY,CAAC,YAAY,CAAC,KAAK,MAAM;IACpD;;IAGA,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC;IAC/D;;IAGA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;IAC5D;;IAGA,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC;IACjE;;IAGA,uBAAuB,GAAA;QACrB,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,uBAAuB,CAAC;IACvE;;IAGA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC;IAC9D;;IAGA,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC;IAC/D;;IAGA,kBAAkB,GAAA;QAChB,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC;IAClE;;IAGA,UAAU,GAAA;AACR,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IACpE;;AAGA,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;QACjC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,CAAA,kCAAA,EAAqC,KAAK,CAAA,gBAAA,EAAmB,OAAO,CAAC,MAAM,CAAA,UAAA,CAAY,CAAC;QAC1G;QACA,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;IACjD;;IAGA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM;IACjC;;AAGA,IAAA,gBAAgB,CAAC,KAAa,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM;IAC3E;;AAGA,IAAA,gBAAgB,CAAC,KAAa,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM;IAC3E;;AAGA,IAAA,mBAAmB,CAAC,KAAa,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,kBAAkB,CAAC,IAAI,KAAK;IAC5E;;AAGA,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;QACjC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,CAAA,kCAAA,EAAqC,KAAK,CAAA,gBAAA,EAAmB,OAAO,CAAC,MAAM,CAAA,UAAA,CAAY,CAAC;QAC1G;AACA,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;IACxB;;IAGA,YAAY,GAAA;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC;QAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;IACzC;;IAGA,WAAW,GAAA;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC;QACzD,OAAO,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;IACxC;;IAGA,YAAY,GAAA;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC;QAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;IACzC;;AAGA,IAAA,QAAQ,CAAC,SAAiB,EAAA;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC;QACzD,OAAO,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK;IACrD;AACD;;AC3ID,IAAI,MAAM,GAAG,CAAC;AAYd;;;;;;;;;;;AAWG;MA4DU,kBAAkB,CAAA;;AAE7B,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAU;;AAGhC,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;AAGhB,IAAA,UAAU,GAAG,KAAK,CAA2B,IAAI,sDAAC;;IAGlD,MAAM,GAAG,KAAK,CAAC,KAAK,mDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGtD,QAAQ,GAAG,KAAK,CAAC,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGxD,OAAO,GAAG,MAAM,EAAc;;AAG9B,IAAA,cAAc,GAAG,MAAM,CAAC,CAAC,0DAAC;AAE1B,IAAA,OAAO,GAAG,SAAS,CAA0B,QAAQ,mDAAC;;IAGtD,SAAS,GAAA;QACP,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACvC;AAEA,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,KAAK,CAAC,cAAc,EAAE;YACtB;QACF;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;uGAnCW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvDnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA/CS,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAwD7C,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA3D9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAC/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;ykBA+B4C,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAgBvD;;;;;;;;;;;;AAYG;MAkGU,iBAAiB,CAAA;IACpB,WAAW,GAAG,MAAM,EAAE;AACtB,IAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGnC,IAAA,IAAI,GAAG,KAAK,CAAe,IAAI,gDAAC;;AAGhC,IAAA,OAAO,GAAG,KAAK,CAAkB,SAAS,mDAAC;;IAG3C,MAAM,GAAG,KAAK,CAAC,KAAK,mDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGtD,IAAA,SAAS,GAAG,KAAK,CAAC,iBAAiB,qDAAC;;AAGpC,IAAA,KAAK,GAAG,eAAe,CAAC,kBAAkB,iDAAC;;AAG3C,IAAA,cAAc,GAAG,MAAM,CAAC,KAAK,0DAAC;AAErB,IAAA,YAAY,GAAG,CAAA,iBAAA,EAAoB,IAAI,CAAC,WAAW,EAAE;AAEtD,IAAA,YAAY,GAAG,MAAM,CAAC,CAAC,wDAAC;AACxB,IAAA,SAAS,GAAG,SAAS,CAAgC,WAAW,qDAAC;AACjE,IAAA,WAAW,GAAG,YAAY,CAA0B,YAAY,uDAAC;AAEzE,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC;AAE7B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,EAAE,KAAK,IAAI,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,CAAA,CAAE,CAAC;QAClC;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,YAAA,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,CAAA,CAAE,CAAC;QACvC;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACnC;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,yDAAC;;AAGM,IAAA,oBAAoB,GAAG,MAAM,CAAC,MAAK;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACvD,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE;AAE7B,QAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD;QACF;AAEA,QAAA,IAAI,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE;YAC9B,GAAG,GAAG,CAAC;QACT;QAEA,IAAI,YAAY,GAAG,CAAC;AACpB,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACnB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7B;iBAAO;AACL,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACtD,gBAAA,YAAY,EAAE;YAChB;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,gEAAC;;IAGF,gBAAgB,GAAA;AACd,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;QAEjC,IAAI,QAAQ,EAAE;YACZ,cAAc,CAAC,MAAK;AAClB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;gBAChC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACpE,IAAI,eAAe,IAAI,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE;oBAClD,KAAK,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE;gBAC9C;AACF,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,iBAAiB,CAAC,KAAiB,EAAE,IAAwB,EAAA;AAC3D,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,KAAK,CAAC,cAAc,EAAE;YACtB;QACF;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IAChC;AAEA,IAAA,eAAe,CAAC,KAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAAE;AAC5B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC;IACF;AAEA,IAAA,aAAa,CAAC,KAAoB,EAAA;QAChC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACnD,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;YAC9B,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;YACvC;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAE1C,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC;YACvC;QACF;AAEA,QAAA,IACE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,UAAU;AAC1C,YAAA,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAClC;AACA,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAClC;IACF;AAEQ,IAAA,oBAAoB,CAAC,KAAoB,EAAA;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC9D,QAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE;AAE/B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC;AAEpC,QAAA,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,YAAY,EAAE;gBACjB,KAAK,CAAC,cAAc,EAAE;gBACtB,MAAM,IAAI,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM;AACrD,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,gBAAA,YAAY,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;gBAC9B;YACF;YACA,KAAK,WAAW,EAAE;gBAChB,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,IAAI,GACR,CAAC,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM;AAChE,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,gBAAA,YAAY,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;gBAC9B;YACF;YACA,KAAK,MAAM,EAAE;gBACX,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB,gBAAA,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;gBAC3B;YACF;YACA,KAAK,KAAK,EAAE;gBACV,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,gBAAA,YAAY,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;gBAC9B;YACF;;IAEJ;IAEQ,mBAAmB,CACzB,KAAoB,EACpB,MAAmB,EAAA;AAEnB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK;AAC9B,aAAA,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC9B,aAAA,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;aACrC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAEpB,QAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE;AAEjC,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAChC,CAAC,GAAG,KAAK,GAAG,CAAC,aAAa,KAAK,MAAM,CACtC;QACD,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC;QAC1D,IAAI,eAAe,KAAK,CAAC,CAAC;YAAE;AAE5B,QAAA,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,WAAW,EAAE;gBAChB,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,IAAI,GACR,cAAc,CAAC,CAAC,eAAe,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC;gBAC/D,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE;gBACjC;YACF;YACA,KAAK,SAAS,EAAE;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,IAAI,GACR,cAAc,CACZ,CAAC,eAAe,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM;oBAC1C,cAAc,CAAC,MAAM,CACxB;gBACH,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE;gBACjC;YACF;YACA,KAAK,MAAM,EAAE;gBACX,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE;gBAC9C;YACF;YACA,KAAK,KAAK,EAAE;gBACV,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,KAAK,CACH,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAC1C,CAAC,aAAa,CAAC,KAAK,EAAE;gBACvB;YACF;;IAEJ;AAEQ,IAAA,kBAAkB,CAAC,MAAmB,EAAA;QAC5C,OAAO,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,KAAK,IAAI;IAC3D;uGA7NW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,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,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAiBJ,kBAAkB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1GhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArFS,UAAU,oOAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA8F3B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAjG7B,SAAS;+BACE,WAAW,EAAA,eAAA,EACJ,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAA,IAAA,EACjC;AACJ,wBAAA,WAAW,EAAE,uBAAuB;AACpC,wBAAA,kBAAkB,EAAE,yBAAyB;qBAC9C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;idA0BuB,kBAAkB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAQmB,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CACZ,YAAY,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACnP1E;AACA,MAAM,UAAU,GAAG,IAAI,cAAc,CAAe,WAAW,CAAC;AAEhE;;;;;;;;;;;AAWG;MAUU,yBAAyB,CAAA;;AAE3B,IAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;;AAE5B,IAAA,UAAU,GAAG,MAAM,EAAC,UAAuB,EAAC;uGAJ1C,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBATrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,kBAAkB;AAC7B,wBAAA,sBAAsB,EAAE,UAAU;AAClC,wBAAA,sBAAsB,EAAE,gBAAgB;AACxC,wBAAA,sBAAsB,EAAE,mBAAmB;AAC5C,qBAAA;AACF,iBAAA;;AAQD;;;;;;;;;;;AAWG;MAmDU,kBAAkB,CAAA;AACrB,IAAA,OAAO,MAAM,GAAG,CAAC;AACjB,IAAA,SAAS,GAAG,IAAI,SAAS,EAAE;;AAGnC,IAAA,IAAI,GAAG,KAAK,CAAC,KAAK,gDAAC;;AAGnB,IAAA,QAAQ,GAAG,KAAK,CAAoB,QAAQ,oDAAC;;AAG7C,IAAA,KAAK,GAAG,KAAK,CAAiB,QAAQ,iDAAC;;AAGvC,IAAA,IAAI,GAAG,KAAK,CAAgB,IAAI,gDAAC;;AAGjC,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,SAAS,GAAG,KAAK,CAAC,EAAE,qDAAC;;AAGrB,IAAA,SAAS,GAAG,KAAK,CAAC,IAAI,qDAAC;;AAGvB,IAAA,mBAAmB,GAAG,KAAK,CAAC,IAAI,+DAAC;;IAGjC,MAAM,GAAG,MAAM,EAAQ;AAEd,IAAA,SAAS,GAAG,CAAA,WAAA,EAAc,kBAAkB,CAAC,MAAM,EAAE;AACrD,IAAA,QAAQ,GAAG,CAAA,kBAAA,EAAqB,kBAAkB,CAAC,MAAM,EAAE,EAAE;AAE9D,IAAA,UAAU,GAAG,SAAS,CAA0B,SAAS,sDAAC;AAC1D,IAAA,UAAU,GAAG,SAAS,CAA0B,gBAAgB,sDAAC;AACjE,IAAA,gBAAgB,GAAG,YAAY,CAAC,yBAAyB,4DAAC;AAC1D,IAAA,WAAW,GAAG,MAAM,CAA2B,IAAI,uDAAC;;AAG5D,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,sDAAC;AAElE,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC;AAC9B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,EAAE,KAAK,IAAI,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAA,CAAE,CAAC;QACnC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,4DAAC;AAEM,IAAA,UAAU,GAAG,MAAM,CAAC,MAAK;AAC/B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,CAAC,MAAM,EAAE;QACf;aAAO;YACL,IAAI,CAAC,OAAO,EAAE;QAChB;AACF,IAAA,CAAC,sDAAC;IAEF,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IAC/B;;IAGA,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,CAAC,KAAK,EAAE;QACd;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACrB;IACF;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;AAEA,IAAA,eAAe,CAAC,KAAiB,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAAE;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAChD,QAAA,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;YACtD,IAAI,CAAC,KAAK,EAAE;QACd;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,CAAC,aAAa;QACjE,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC;QACxC;QACA,IAAI,CAAC,KAAK,EAAE;IACd;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;YAAE;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;QAChD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;IACnD;IAEQ,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;QAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC/C,cAAc,CAAC,MAAK;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE;YAClB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;YAChD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;AAC7C,QAAA,CAAC,CAAC;IACJ;IAEQ,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IAC/B;IAEQ,kBAAkB,GAAA;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,CAAC,aAAa;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAChD,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;AAEhD,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE;AACnD,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE;AACnD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE;AAEjC,QAAA,MAAM,SAAS,GAAiD;AAC9D,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,MAAM;SACd;AAED,QAAA,MAAM,KAAK,GAAsC;YAC/C,GAAG,EAAE,WAAW,CAAC,GAAG;AACpB,YAAA,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC,MAAM;YAC/C,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,KAAK,EAAE,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,KAAK;SAC7C;AAED,QAAA,MAAM,MAAM,GAAsC;YAChD,GAAG,EAAE,WAAW,CAAC,MAAM;YACvB,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,IAAI,EAAE,WAAW,CAAC,KAAK;YACvB,KAAK,EAAE,WAAW,CAAC,KAAK;SACzB;QAED,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC;AAAE,YAAA,OAAO,SAAS;AAE3D,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC;QACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,QAAQ;AAExD,QAAA,OAAO,SAAS;IAClB;uGAxJW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,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,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,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,SAAA,EA/ClB;AACT,YAAA,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC,EAAE;AAC3E,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAiFuC,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3EvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlD9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,eAAA,EACL,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,kBAAmB,CAAC,EAAE;qBAC3E,EAAA,IAAA,EACK;AACJ,wBAAA,kBAAkB,EAAE,yBAAyB;AAC7C,wBAAA,2BAA2B,EAAE,eAAe;AAC5C,wBAAA,oBAAoB,EAAE,mBAAmB;qBAC1C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;k6BA2CuD,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACT,gBAAgB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAChC,yBAAyB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC7InE;;;;;;;;;;;;;;;;;;;;AAoBG;MA4CU,iBAAiB,CAAA;;AAE5B,IAAA,OAAO,GAAG,KAAK,CAAkB,MAAM,mDAAC;;AAGxC,IAAA,UAAU,GAAG,KAAK,CAAqB,QAAQ,sDAAC;;AAGhD,IAAA,QAAQ,GAAG,KAAK,CAAmB,QAAQ,oDAAC;;AAG5C,IAAA,WAAW,GAAG,KAAK,CAAC,KAAK,uDAAC;;AAG1B,IAAA,OAAO,GAAG,KAAK,CAAC,KAAK,mDAAC;;AAGtB,IAAA,IAAI,GAAG,KAAK,CAAC,KAAK,gDAAC;;AAGnB,IAAA,SAAS,GAAG,KAAK,CAAC,CAAC,qDAAC;;AAGpB,IAAA,cAAc,GAAG,KAAK,CAAC,cAAc,0DAAC;;IAGtC,SAAS,GAAG,MAAM,EAAQ;AAET,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;IACpC,gBAAgB,GAAyC,IAAI;;IAGrE,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,GAAG,MAAM,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGhE,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACvB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;AACxB,QAAA,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS,GAAG,OAAO,GAAG,QAAQ;AAC/D,IAAA,CAAC,oDAAC;;AAGF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC;AAE7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAA,IAAI,GAAG,KAAK,QAAQ,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,CAAA,CAAE,CAAC;QACnC;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,GAAG,KAAK,QAAQ,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,CAAA,CAAE,CAAC;QACnC;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,YAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACpC;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACjC;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,uDAAC;AAEM,IAAA,eAAe,GAAG,MAAM,CAAC,MAAK;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;QAC9B,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACpC,YAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;QACjE;AACF,IAAA,CAAC,2DAAC;IAEF,WAAW,GAAA;QACT,IAAI,CAAC,mBAAmB,EAAE;IAC5B;;IAGA,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE;AAClC,YAAA,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACnC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC9B;IACF;uGA1FW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA3C7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,eAAA,EACJ,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;;;ACjEH;;;;;;;;;;;;;;;;;;;;;AAqBG;MAgCU,qBAAqB,CAAA;;AAEhC,IAAA,IAAI,GAAG,KAAK,CAAmB,IAAI,gDAAC;;AAGpC,IAAA,OAAO,GAAG,KAAK,CAAsB,SAAS,mDAAC;;AAG/C,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;AAGvB,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;AAEhB,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,OAAO,GAAG,CAAC,gBAAgB,CAAC;AAElC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,KAAK,IAAI,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA,CAAE,CAAC;QACtC;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,OAAO,EAAE;AAC9B,YAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC;QACvC;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC;QAC1C;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,4DAAC;uGA9BS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5BtB;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA/BjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EACT,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;AC5CH;;;;;;;;AAQG;MA6BU,mBAAmB,CAAA;;AAE9B,IAAA,OAAO,GAAG,KAAK,CAAoB,MAAM,mDAAC;;IAG1C,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;;IAGvB,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;;IAGxB,KAAK,GAAG,KAAK,CAAC,CAAC,kDAAI,SAAS,EAAE,eAAe,EAAA,CAAG;;AAGhD,IAAA,KAAK,GAAG,KAAK,CAAC,eAAe,iDAAC;IAE9B,KAAK,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,iDAAC;AAE5D,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,OAAO,4BAA4B,IAAI,CAAC,OAAO,EAAE,EAAE;AACrD,IAAA,CAAC,2DAAC;AAEF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AACvB,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;QACzB,MAAM,KAAK,GAAa,EAAE;AAC1B,QAAA,IAAI,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA,CAAE,CAAC;AAC9C,QAAA,IAAI,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA,CAAE,CAAC;AAC/C,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,IAAA,CAAC,yDAAC;uGA9BS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,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,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,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,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApBpB;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAYU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA5B/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,kBAAkB,EAAE,QAAQ;AAC5B,wBAAA,mBAAmB,EAAE,SAAS;qBAC/B,EAAA,QAAA,EACS;;;;;;;;AAQT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,mDAAA,CAAA,EAAA;;;AC7BH;;;;;;;;AAQG;MAeU,kBAAkB,CAAA;;AAE7B,IAAA,WAAW,GAAG,KAAK,CAAuB,YAAY,uDAAC;;AAGvD,IAAA,KAAK,GAAG,KAAK,CAAiB,SAAS,iDAAC;;AAGxC,IAAA,OAAO,GAAG,KAAK,CAAmB,IAAI,mDAAC;;AAGvC,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;AAEjB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE;AACrC,YAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACtC;AAEA,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,SAAS,EAAE;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAA,YAAA,EAAe,IAAI,CAAC,KAAK,EAAE,CAAA,CAAE,CAAC;QAC7C;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YAC3B,OAAO,CAAC,IAAI,CAAC,CAAA,YAAA,EAAe,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;QAC/C;AAEA,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AAChB,YAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC;QACrC;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,0DAAC;uGAjCS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,WAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EANnB;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAd9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;oBACtB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,SAAS,EAAE,kBAAkB;AAC9B,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;AACF,iBAAA;;;ACjBD,MAAM,iBAAiB,GAAG;IACxB,OAAO;IACP,QAAQ;IACR,UAAU;IACV,mBAAmB;IACnB,kBAAkB;IAClB,qBAAqB;IACrB,iBAAiB;AAClB,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC;AAEX;;;;;;;;;;;;;;;AAeG;MAqCU,gBAAgB,CAAA;AACnB,IAAA,OAAO,MAAM,GAAG,CAAC;;AAGzB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;;AAGhB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,iDAAC;;AAGjB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;;IAGvB,OAAO,GAAG,KAAK,CAAC,CAAA,SAAA,EAAY,gBAAgB,CAAC,MAAM,EAAE,CAAA,CAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAExD,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,KAAA,CAAO,kDAAC;AACjD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,MAAA,CAAQ,mDAAC;AAE3C,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,SAAS,GAAuB,IAAI;IAE5C,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS;YACZ,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC;QAEhE,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QACpC;IACF;IAEA,qBAAqB,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AAErB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;;QAGxB,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACjE;aAAO,IAAI,IAAI,EAAE;AACf,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAChE;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,kBAAkB,CAAC;QACpD;;QAGA,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;QACrD;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,cAAc,CAAC;QAChD;IACF;uGAtDW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjCjB;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBApC5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,eAAA,EACH,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;ACrDH;;;;;;;;;;;;;;;;;;AAkBG;MAsBU,gBAAgB,CAAA;;AAE3B,IAAA,OAAO,GAAG,KAAK,CAAiB,SAAS,mDAAC;;IAG1C,OAAO,GAAG,KAAK,CAAC,KAAK,oDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGvD,IAAA,OAAO,GAAG,KAAK,CAAC,EAAE,mDAAC;AAEnB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS,EAAE;YAChC,OAAO,CAAC,IAAI,CAAC,CAAA,UAAA,EAAa,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;QAC7C;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACnC;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,wDAAC;uGAnBS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBjB;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBArB5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,eAAA,EACH,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;AAST,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;AA+BH;;;;;;;;;AASG;MAaU,sBAAsB,CAAA;uGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,2EATvB,CAAA,6BAAA,CAA+B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAS9B,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAZlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,YACrC,CAAA,6BAAA,CAA+B,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;;AAW3C;;;;;;;;;AASG;MAaU,oBAAoB,CAAA;uGAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,yEATrB,CAAA,6BAAA,CAA+B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAS9B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAZhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,eAAA,EACR,uBAAuB,CAAC,MAAM,YACrC,CAAA,6BAAA,CAA+B,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;;AAW3C;;AAEG;MAaU,mBAAmB,CAAA;uGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,wEATpB,CAAA,uBAAA,CAAyB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASxB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAZ/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,eAAA,EACP,uBAAuB,CAAC,MAAM,YACrC,CAAA,uBAAA,CAAyB,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;;AAWrC;;;;;;;;;;AAUG;MAiBU,0BAA0B,CAAA;;AAErC,IAAA,IAAI,GAAG,KAAK,CAAkB,MAAM,gDAAC;;AAGrC,IAAA,KAAK,GAAG,KAAK,CAAgB,KAAK,iDAAC;AAEnC,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QAC1B,MAAM,OAAO,GAAa,EAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;YAC1B,OAAO,CAAC,IAAI,CAAC,CAAA,gBAAA,EAAmB,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;QAChD;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,uDAAC;uGAbS,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAb3B;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAhBtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,eAAA,EACf,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;AAIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;;AAyBH;;;;;;;;;;AAUG;MAiBU,oBAAoB,CAAA;;AAE/B,IAAA,IAAI,GAAG,KAAK,CAAkB,MAAM,gDAAC;AAErC,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QAC1B,MAAM,OAAO,GAAa,EAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;YAC1B,OAAO,CAAC,IAAI,CAAC,CAAA,gBAAA,EAAmB,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;QAChD;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,uDAAC;uGAVS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAbrB;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAhBhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,eAAA,EACR,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;AAIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA;;;ACnLH;;;;;;;;;;;;;;;;;AAiBG;MACU,YAAY,GAAG,IAAI,cAAc,CAAa,YAAY,EAAE;AACvE,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,QAAQ,EAAE,kBAAkB;AAC5B,QAAA,SAAS,EAAE,mBAAmB;AAC9B,QAAA,QAAQ,EAAE,kBAAkB;AAC5B,QAAA,WAAW,EAAE,QAAQ;AACrB,QAAA,YAAY,EAAE,UAAU;AACxB,QAAA,YAAY,EAAE,YAAY;AAC1B,QAAA,WAAW,EAAE,gBAAgB;KAC9B,CAAC;AACH,CAAA;;ACrBD;AACA,MAAM,kBAAkB,GAAG,GAAG;AAE9B;AACA,IAAI,WAAW,GAAG,CAAC;AAEnB;;;;;;AAMG;MAmHU,mBAAmB,CAAA;;IAEX,IAAI,GAAG,MAAM,CAAqB,UAAU,CAAC,MAAM,eAAe,CAAC,CAAC;AACpE,IAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;;AAGrE,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAe;;AAEpC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAU;;AAEhC,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAU;;AAElC,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAU;AAEhB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,sDAAC;AAChE,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,oDAAC;AAC5D,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,oDAAC;IAC5D,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,mDAAC;AAClE,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,IAAI,kDAAC;AAE9D,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;AACjD,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,GAAG,OAAO;AAC3C,IAAA,CAAC,wDAAC;AAEiB,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC3C,IAAA,CAAC,2DAAC;IAEiB,gBAAgB,GAAG,QAAQ,CAAC,MAC7C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,4DACvC;AAEkB,IAAA,eAAe,GAAG,QAAQ,CAA6B,OAAO;AAC/E,QAAA,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,QAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,QAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,QAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,QAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACxB,KAAA,CAAC,2DAAC;;IAGH,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAgB;IAC5E;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACvC;AAEU,IAAA,aAAa,CAAC,KAAiB,EAAA;QACvC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ;YAAE;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B;uGA1DW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7GpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyFT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAoBU,mBAAmB,gIA/GpB,gBAAgB,CAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA+Gf,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAlH/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cACZ,IAAI,EAAA,OAAA,EACP,CAAC,gBAAgB,EAAE,UAAU,CAAC,yBAAyB,CAAC,CAAC,mBACjD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyFT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,mLAAA,CAAA,EAAA;;AAiFH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CG;MAqDU,eAAe,CAAA;;IAEP,GAAG,GAAG,EAAE,WAAW;;AAE7B,IAAA,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC;AACnB,IAAA,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACrC,IAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;AAClD,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;;;AAK5C,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAiB;;AAEvC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAU;;AAEpC,IAAA,SAAS,GAAG,KAAK,CAAoB,MAAM,qDAAC;;AAE5C,IAAA,WAAW,GAAG,KAAK,CAAc,IAAI,GAAG,EAAE,uDAAC;;AAE3C,IAAA,WAAW,GAAG,KAAK,CAAc,IAAI,GAAG,EAAE,uDAAC;;AAE3C,IAAA,MAAM,GAAG,KAAK,CAAS,EAAE,kDAAC;;IAE1B,gBAAgB,GAAG,KAAK,CAAC,KAAK,6DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEhE,KAAK,GAAG,KAAK,CAAC,KAAK,kDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAErD,QAAQ,GAAG,KAAK,CAAC,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAExD,IAAA,OAAO,GAAG,KAAK,CAAiC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;;IAK5D,YAAY,GAAG,MAAM,EAAe;;IAEpC,UAAU,GAAG,MAAM,EAAsB;;IAEzC,SAAS,GAAG,MAAM,EAAe;;IAEjC,YAAY,GAAG,MAAM,EAAe;;;AAKpC,IAAA,WAAW,GAAG,YAAY,CAA0C,aAAa,uDAAC;;AAElF,IAAA,WAAW,GAAG,YAAY,CAA0C,aAAa,uDAAC;;AAElF,IAAA,WAAW,GAAG,YAAY,CAA0C,aAAa,uDAAC;;AAElF,IAAA,SAAS,GAAG,YAAY,CAAuB,OAAO,qDAAC;;;AAK9C,IAAA,SAAS,GAAG,MAAM,CAAgB,IAAI,qDAAC;;AAE/B,IAAA,SAAS,GAAG,IAAI,GAAG,EAAU;;IAEtC,UAAU,GAAG,EAAE;IACf,SAAS,GAAyC,IAAI;;;AAK3C,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;QAClD,MAAM,GAAG,GAAkB,EAAE;AAC7B,QAAA,MAAM,IAAI,GAAG,CAAC,IAAmB,KAAU;YACzC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AACzC,gBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACX,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AACpC,oBAAA,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACxB;YACF;AACF,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,4DAAC;;AAGiB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,wDAAC;AAEhE,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC;QAC3B,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAC5D,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAChD,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACtD,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAA,CAAC,uDAAC;AAEF;;;AAGG;AACc,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AAC5C,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AACjC,QAAA,MAAM,IAAI,GAAG,CAAC,IAAmB,KAAa;YAC5C,IAAI,GAAG,GAAG,KAAK;AACf,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,gBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;AACvC,gBAAA,IAAI,IAAI,IAAI,QAAQ,EAAE;AACpB,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjB,GAAG,GAAG,IAAI;gBACZ;YACF;AACA,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC,yDAAC;;AAGe,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;AACpC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;AACzB,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU;AAClC,QAAA,MAAM,IAAI,GAAG,CAAC,IAAmB,KAAU;AACzC,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;gBACpB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;AACtD,oBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB;AACA,gBAAA,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;YACxB;AACF,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC,2DAAC;AAEF,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;AACxC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE;YAChC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,IAAI,OAAO;AAAE,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;gBACrC;YACF;YACA,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;gBACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B;AACF,QAAA,CAAC,CAAC;IACJ;;;AAKA,IAAA,YAAY,CAAC,IAAiB,EAAA;QAC5B,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;QAC7B,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;AAC7B,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;AAC5C,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;IACjC;AAEA,IAAA,UAAU,CAAC,IAAiB,EAAA;QAC1B,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,IAAI;QACrD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;IACxC;AAEA,IAAA,UAAU,CAAC,IAAiB,EAAA;QAC1B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;IACxC;;AAGA,IAAA,cAAc,CAAC,QAAuB,EAAA;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;AACpC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,QAAQ;AAC7B,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClD;;AAGA,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;AAC9B,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AACnB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,GAAG,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI;AACxB,QAAA,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM;QAC1B,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,MAAA,EAAS,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA,OAAA,EAAU,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,CAAE;IACtF;;;AAKA,IAAA,MAAM,CAAC,IAAiB,EAAA;QACtB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YAAE;AAC/C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,QAAA,IAAI,WAAW;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,MAAM,QAAQ,GAAG,CAAC,WAAW;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACrB,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CACrF;QACD,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAC3E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B;IACF;AAEA;;;;AAIG;IACH,QAAQ,CAAC,IAAiB,EAAE,MAAmC,EAAA;QAC7D,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QACjC;aAAO,IAAI,IAAI,KAAK,UAAU,IAAI,MAAM,KAAK,OAAO,EAAE;AACpD,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QACjC;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;AAEQ,IAAA,oBAAoB,CAAC,IAAiB,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE;AAChD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5E;AAEQ,IAAA,oBAAoB,CAAC,IAAiB,EAAA;QAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;aACtC;AACH,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5E;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;;AAIU,IAAA,aAAa,CAAC,KAAoB,EAAA;AAC1C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B;QACjD,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAuB;AACpE,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE;QAClD,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC;AAC1C,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACrC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QAC/C,IAAI,GAAG,GAAG,CAAC;YAAE;AAEb,QAAA,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,WAAW,EAAE;gBAChB,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AACvD,gBAAA,IAAI,IAAI;AAAE,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC9B;YACF;YACA,KAAK,SAAS,EAAE;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AACxC,gBAAA,IAAI,IAAI;AAAE,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC9B;YACF;YACA,KAAK,YAAY,EAAE;gBACjB,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBAAE;AAC9B,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACpC,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACnB;qBAAO;AACL,oBAAA,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3C,oBAAA,IAAI,UAAU;AAAE,wBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;gBAC5C;gBACA;YACF;YACA,KAAK,WAAW,EAAE;gBAChB,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAC9D,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACnB;qBAAO;oBACL,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AACvC,oBAAA,IAAI,MAAM;AAAE,wBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBACpC;gBACA;YACF;YACA,KAAK,MAAM,EAAE;gBACX,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,KAAK,CAAC,CAAC,CAAC;oBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtC;YACF;YACA,KAAK,KAAK,EAAE;gBACV,KAAK,CAAC,cAAc,EAAE;gBACtB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,gBAAA,IAAI,IAAI;AAAE,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC9B;YACF;YACA,KAAK,OAAO,EAAE;gBACZ,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,IAAI,CAAC,QAAQ;oBAAE;AACnB,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;gBAC5B;YACF;YACA,KAAK,GAAG,EAAE;gBACR,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,IAAI,CAAC,QAAQ;oBAAE;AACnB,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,MAAM;AAAE,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;;AACxD,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;gBACjC;YACF;YACA,KAAK,GAAG,EAAE;gBACR,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBAC/B;YACF;YACA,SAAS;AACP,gBAAA,IACE,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;AACtB,oBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;oBACpB,CAAC,KAAK,CAAC,OAAO;oBACd,CAAC,KAAK,CAAC,OAAO;AACd,oBAAA,CAAC,KAAK,CAAC,MAAM,EACb;AACA,oBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC3B;YACF;;IAEJ;AAEU,IAAA,WAAW,CAAC,KAAiB,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;;AAE1C,QAAA,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;YAAE;;AAExC,QAAA,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC;YAAE;QACzC,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAuB;AACnE,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE;QAClD,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC;AAC1C,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;YAAE;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAC9B;AAEQ,IAAA,oBAAoB,CAAC,IAAiB,EAAA;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;AAChE,QAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;YAC1B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAC9E,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAClB;QACF;IACF;AAEQ,IAAA,SAAS,CAAC,IAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;QACrC,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAK;AAC/B,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB,CAAC,EAAE,kBAAkB,CAAC;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACrC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;AACxB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAC9E,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACxE,QAAA,IAAI,KAAK;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAClC;;;AAKQ,IAAA,SAAS,CAAC,IAAiB,EAAA;QACjC,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,cAAc,CAAC,MAAK;AAClB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAC9C,CAAA,+BAAA,EAAkC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,EAAA,CAAI,CACzD;YACD,EAAE,EAAE,KAAK,EAAE;AACb,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,SAAS,CAAC,EAAU,EAAA;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAChC;;AAGA,IAAA,QAAQ,CAAC,EAAU,EAAE,OAAsB,IAAI,CAAC,KAAK,EAAE,EAAA;AACrD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,YAAA,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE;AAAE,gBAAA,OAAO,CAAC;YACzB,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI;AAC7D,YAAA,IAAI,GAAG;AAAE,gBAAA,OAAO,GAAG;QACrB;AACA,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,UAAU,CAAC,EAAU,EAAE,OAAsB,IAAI,CAAC,KAAK,EAAE,EAAA;AACvD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AAAE,gBAAA,OAAO,CAAC;AAClD,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC;AAC3C,gBAAA,IAAI,GAAG;AAAE,oBAAA,OAAO,GAAG;YACrB;QACF;AACA,QAAA,OAAO,IAAI;IACb;uGA/ZW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1ChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA/IU,mBAAmB,2GA4GC,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAiDpC,eAAe,EAAA,UAAA,EAAA,CAAA;kBApD3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,UAAA,EACP,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAC/B,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,iBAAiB,EAAE,MAAM;AACzB,wBAAA,WAAW,EAAE,uBAAuB;AACpC,wBAAA,SAAS,EAAE,qBAAqB;qBACjC,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wJAAA,CAAA,EAAA;AA4DmE,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAEb,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAEb,aAAa,sEAElC,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AA8WxD;AACA,SAAS,UAAU,CAAC,KAAa,EAAA;AAC/B,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,IAAI,EAAE,OAAO;AACrB,SAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,SAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,SAAA,OAAO,CAAC,IAAI,EAAE,QAAQ;AACtB,SAAA,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;AAC3B;AAEA;AACA,SAAS,SAAS,CAAC,KAAa,EAAA;AAC9B,IAAA,IAAI,OAAO,GAAG,KAAK,WAAW,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE;AAClE,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;IAC1B;IACA,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;AAC1C;;ACzuBA;;;;;;;;;;;AAWG;MACU,aAAa,CAAA;AACP,IAAA,MAAM;AAEvB,IAAA,WAAA,CAAY,SAAsB,EAAA;QAChC,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;QAC3E;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,EAAiB;IACjC;;IAGA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC;IACzD;;IAGA,eAAe,GAAA;AACb,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;AACxE,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,iBAAiB,CAAC,EAAiB,CAAC,CAAC;IAClE;;AAGA,IAAA,OAAO,CAAC,EAAU,EAAA;AAChB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAClC,CAAA,+BAAA,EAAkC,aAAa,CAAC,EAAE,CAAC,CAAA,EAAA,CAAI,CACxD;AACD,QAAA,OAAO,EAAE,GAAG,IAAI,iBAAiB,CAAC,EAAE,CAAC,GAAG,IAAI;IAC9C;;IAGA,SAAS,GAAA;QACP,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAc,gCAAgC,CAAC;QACnF,OAAO,EAAE,EAAE,YAAY,CAAC,cAAc,CAAC,IAAI,IAAI;IACjD;;AAGA,IAAA,QAAQ,CAAC,GAAW,EAAA;QAClB,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,CAAC,aAAa,CAAc,gCAAgC,CAAC;AACxE,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAc,kBAAkB,CAAC;AAC5D,QAAA,MAAM,EAAE,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E;;IAGA,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,CAAC,sBAAsB,CAAC,KAAK,MAAM;IAC/E;;IAGA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,CAAC,YAAY,CAAC,IAAI,IAAI;IAClE;;IAGA,OAAO,GAAA;AACL,QAAA,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE;IAC/B;AACD;AAED;MACa,iBAAiB,CAAA;AACC,IAAA,IAAA;AAA7B,IAAA,WAAA,CAA6B,IAAiB,EAAA;QAAjB,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAgB;;IAGjD,KAAK,GAAA;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE;IACrD;;IAGA,QAAQ,GAAA;QACN,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,0CAA0C,CAAC;QACnF,OAAO,CAAC,OAAO,EAAE,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE;IAC5C;;IAGA,QAAQ,GAAA;AACN,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC;IAC5D;IAEA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM;IAC3D;IAEA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;IAChD;IAEA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM;IAC3D;IAEA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM;IAC3D;IAEA,MAAM,GAAA;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,MAAM;IACvD;IAEA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG;IACnD;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;IACnB;;IAGA,QAAQ,GAAA;QACN,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAc,0CAA0C,CAAC;QAC5F,GAAG,EAAE,KAAK,EAAE;IACd;;IAGA,WAAW,GAAA;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAc,yCAAyC,CAAC;QAC9F,MAAM,EAAE,KAAK,EAAE;IACjB;;IAGA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,IAAI;IAClB;AACD;AAED;AACA,SAAS,aAAa,CAAC,KAAa,EAAA;AAClC,IAAA,IAAI,OAAO,GAAG,KAAK,WAAW,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE;AAClE,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;IAC1B;IACA,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;AAC1C;;ACjJA;;ACEA;;;;;;;AAOG;MAIU,iBAAiB,CAAA;AAC5B,IAAA,SAAS,CAAC,KAAgC,EAAA;AACxC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,QAAQ;AAC3B,QAAA,OAAO;AACJ,aAAA,WAAW;aACX,KAAK,CAAC,GAAG;aACT,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;aAC3D,IAAI,CAAC,GAAG,CAAC;IACd;uGARW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE;AACP,iBAAA;;;ACZD;;AAEG;;ACFH;;AAEG;;;;"}
|