@magicx-eng/ai-autocomplete-angular 0.5.7 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -1
- package/esm2020/lib/ai-autocomplete/ai-autocomplete.component.mjs +5 -9
- package/esm2020/lib/controller/ai-autocomplete.controller.mjs +18 -11
- package/esm2020/lib/shared/types.mjs +1 -1
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs +23 -19
- package/fesm2015/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs +23 -19
- package/fesm2020/magicx-eng-ai-autocomplete-angular.mjs.map +1 -1
- package/lib/ai-autocomplete/ai-autocomplete.component.d.ts.map +1 -1
- package/lib/controller/ai-autocomplete.controller.d.ts +8 -1
- package/lib/controller/ai-autocomplete.controller.d.ts.map +1 -1
- package/lib/shared/types.d.ts +7 -1
- package/lib/shared/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +2 -1
- package/public-api.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"magicx-eng-ai-autocomplete-angular.mjs","sources":["../../src/lib/internal/layout/cluster.component.ts","../../src/lib/internal/layout/stack.component.ts","../../src/lib/internal/pill-list/pill-list.component.ts","../../src/lib/internal/pill-list/pill-list.component.html","../../src/lib/internal/layout/grid.component.ts","../../src/lib/internal/layout/grid.component.html","../../src/lib/internal/suggestion-item/suggestion-item.component.ts","../../src/lib/internal/suggestion-item/suggestion-item.component.html","../../src/lib/internal/suggestion-grid/suggestion-grid.component.ts","../../src/lib/internal/suggestion-grid/suggestion-grid.component.html","../../src/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.ts","../../src/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.html","../../src/lib/controller/observables.ts","../../src/lib/controller/ai-autocomplete.controller.ts","../../src/lib/internal/editor-host/editor-host.directive.ts","../../src/lib/internal/submit-button/submit-button.component.ts","../../src/lib/internal/submit-button/submit-button.component.html","../../src/lib/ai-autocomplete/ai-autocomplete.component.ts","../../src/lib/ai-autocomplete/ai-autocomplete.component.html","../../src/lib/input/ai-autocomplete-input.directive.ts","../../src/lib/ai-autocomplete.module.ts","../../src/public-api.ts","../../src/magicx-eng-ai-autocomplete-angular.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from \"@angular/core\";\n\n/**\n * Horizontal layout primitive — children sit in a row and wrap when out of\n * room. Mirrors the React `<Cluster>` component / vanilla `.aia-cluster` CSS\n * primitive. `noWrap` keeps a single row; `inline` makes it inline-level.\n *\n * @internal\n */\n@Component({\n selector: \"aia-cluster\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: \"<ng-content></ng-content>\",\n styleUrls: [\"./cluster.component.css\"],\n host: {\n class: \"aia-cluster\",\n \"[attr.data-align]\": \"align\",\n \"[attr.data-justify]\": \"justify\",\n \"[attr.data-nowrap]\": \"noWrap ? '' : null\",\n \"[attr.data-inline]\": \"inline ? '' : null\",\n \"[style.--aia-cluster-gap]\": \"gap\",\n },\n})\nexport class ClusterComponent {\n /** Gap between children. Any CSS length. Defaults to the CSS fallback (0.5rem). */\n @Input() gap?: string;\n /** Cross-axis alignment. Defaults to `center`. */\n @Input() align: \"start\" | \"center\" | \"end\" | \"baseline\" = \"center\";\n /** Main-axis distribution. Defaults to `start`. */\n @Input() justify: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" = \"start\";\n /** When true, the cluster does NOT flex-wrap (single-row clusters). */\n @Input() noWrap = false;\n /** Render inline-level (inline-flex) instead of block. */\n @Input() inline = false;\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from \"@angular/core\";\n\n/**\n * Vertical layout primitive — children stack top-to-bottom with `space` gap.\n * Mirrors the React `<Stack>` component / vanilla `.aia-stack` CSS primitive.\n *\n * @internal\n */\n@Component({\n selector: \"aia-stack\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: \"<ng-content></ng-content>\",\n styleUrls: [\"./stack.component.css\"],\n host: {\n class: \"aia-stack\",\n \"[attr.data-align]\": \"align\",\n \"[style.--aia-stack-space]\": \"space\",\n },\n})\nexport class StackComponent {\n /** Gap between children. Any CSS length. Defaults to the CSS fallback (0.5rem). */\n @Input() space?: string;\n /** Cross-axis alignment of children. Defaults to `stretch` (full width). */\n @Input() align: \"start\" | \"center\" | \"end\" | \"stretch\" = \"stretch\";\n}\n","import { CommonModule } from \"@angular/common\";\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport type { Suggestion } from \"@magicx-eng/ai-autocomplete-vanilla\";\n\n/**\n * Internal pill list used by both the dropdown and Tier 1's inline pillbar.\n * Mirrors `packages/react/src/components/PillList.tsx` one-for-one — including\n * the per-index opacity ramp (1 / 0.7 / 0.4 / 0.2) and the skeleton-loading\n * fallback that preserves layout while the next fetch is in flight.\n *\n * @internal\n */\n@Component({\n selector: \"aia-pill-list\",\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./pill-list.component.html\",\n styleUrls: [\"./pill-list.component.css\"],\n})\nexport class PillListComponent {\n @Input() pills: Suggestion[] = [];\n @Input() activePillIndex = 0;\n @Input() rounded = false;\n /**\n * When true, pills become non-interactive shimmering skeletons. Real pills\n * (with their text) are rendered when provided so widths/positions match\n * the previous state; with no pills, fixed-width fallback placeholders are\n * rendered instead.\n */\n @Input() loading = false;\n /**\n * Whether the active (leading) pill should render selected (full opacity)\n * rather than its positional `first` tier. Auto trigger ⇒ true while a\n * dropdown option is highlighted; manual trigger ⇒ true after the user taps\n * the pill. See `AIAutocompleteController.isActivePillSelected$`.\n */\n @Input() activeSelected = false;\n\n @Output() readonly selectPill = new EventEmitter<number>();\n\n /** Fallback widths when loading with zero cached pills (matches React). */\n readonly fallbackSkeletonWidths = [125, 69];\n\n /** The active pill is \"selected\" only when `activeSelected` is set. */\n isSelected(index: number): boolean {\n return this.activeSelected && index === this.activePillIndex;\n }\n\n /**\n * Opacity per pill state — mirrors PillList.tsx `PILL_OPACITY`. The selected\n * pill is full opacity; otherwise pills take a positional tier (first / next\n * / last).\n */\n pillOpacity(index: number): number {\n if (this.isSelected(index)) return 1; // Selected\n if (index === 0) return 0.7; // First\n if (index === 1) return 0.4; // Next\n return 0.2; // Last\n }\n\n trackByType = (_: number, pill: Suggestion): string => pill.type;\n trackByWidth = (_: number, w: number): number => w;\n\n onPillClick(index: number): void {\n if (this.loading) return;\n this.selectPill.emit(index);\n }\n\n onPillMouseDown(event: Event): void {\n // Prevent the editor from losing focus when a pill is tapped.\n event.preventDefault();\n }\n}\n","<ng-container *ngIf=\"loading && pills.length === 0; else realPills\">\n <span class=\"aia-pill-list\" data-aia-pill-list-loading=\"\">\n <span\n *ngFor=\"let w of fallbackSkeletonWidths; trackBy: trackByWidth; let i = index\"\n data-aia-pill-skeleton=\"\"\n class=\"aia-pill aia-pill-skeleton\"\n [class.aia-pill-rounded]=\"rounded\"\n [style.width.px]=\"w\"\n [style.opacity]=\"pillOpacity(i)\"\n ></span>\n </span>\n</ng-container>\n\n<ng-template #realPills>\n <span\n class=\"aia-pill-list\"\n [attr.data-aia-pill-list-loading]=\"loading ? '' : null\"\n >\n <button\n *ngFor=\"let pill of pills; trackBy: trackByType; let i = index\"\n type=\"button\"\n data-aia-pill=\"\"\n [attr.data-aia-loading]=\"loading ? '' : null\"\n tabindex=\"-1\"\n class=\"aia-pill\"\n [class.aia-pill-rounded]=\"rounded\"\n [class.aia-pill-skeleton]=\"loading\"\n [style.opacity]=\"pillOpacity(i)\"\n [disabled]=\"loading\"\n (mousedown)=\"onPillMouseDown($event)\"\n (click)=\"onPillClick(i)\"\n >\n {{ pill.text }}\n </button>\n </span>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n type ElementRef,\n Input,\n type OnChanges,\n type SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from \"@angular/core\";\n\n/**\n * Intrinsic grid layout primitive — auto-fits as many columns as fit between\n * `min` and `max` wide, wrapping to new rows when there's no more horizontal\n * room. Mirrors the React `<Grid>` component / vanilla `.aia-grid` primitive.\n *\n * Optionally scrolls (`scroll`, capped height).\n *\n * @internal\n */\n@Component({\n selector: \"aia-grid\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./grid.component.html\",\n styleUrls: [\"./grid.component.css\"],\n})\nexport class GridComponent implements OnChanges {\n /** Minimum cell width. CSS length, e.g. \"16rem\". Columns auto-fit at runtime. */\n @Input() min = \"16rem\";\n /** Maximum cell width. CSS length. Defaults (via CSS) to `1fr` (stretch). */\n @Input() max?: string;\n /** Gap between cells. */\n @Input() gap?: string;\n /** Cap the height and scroll vertically when content overflows. */\n @Input() scroll = false;\n /** Max height when `scroll`. CSS length. Defaults (via CSS) to 120px. */\n @Input() maxHeight?: string;\n /** Scroll back to the top whenever this key changes (`scroll` only). */\n @Input() scrollResetKey?: string;\n\n @ViewChild(\"grid\", { static: false }) gridRef?: ElementRef<HTMLDivElement>;\n\n /**\n * A new `scrollResetKey` means a different content group is being shown (e.g.\n * the next suggestion's options after a selection) — start it from the top\n * instead of inheriting the previous group's scroll offset.\n */\n ngOnChanges(changes: SimpleChanges): void {\n const change = changes[\"scrollResetKey\"];\n if (!change || change.isFirstChange()) return;\n const grid = this.gridRef?.nativeElement;\n if (grid) grid.scrollTop = 0;\n }\n}\n","<div\n #grid\n class=\"aia-grid\"\n [attr.data-scroll]=\"scroll ? '' : null\"\n [style.--aia-grid-min]=\"min\"\n [style.--aia-grid-max]=\"max\"\n [style.--aia-grid-gap]=\"gap\"\n [style.--aia-grid-max-height]=\"maxHeight\"\n>\n <ng-content></ng-content>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n inject,\n type OnDestroy,\n Output,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport type { SuggestionOption } from \"@magicx-eng/ai-autocomplete-vanilla\";\n\n/**\n * Internal single-option cell used inside the suggestion grid. Mirrors\n * `packages/react/src/components/SuggestionItem.tsx`. Handles:\n *\n * - Tappable vs non-tappable cursor + hover styling\n * - Pressed-state streak animation (500ms, single-flight)\n * - Keyboard activation (Enter/Space)\n * - ARIA `role=\"option\"` + `aria-selected` for the listbox pattern\n * - Loading skeleton when `loading=true`\n *\n * @internal\n */\n@Component({\n selector: \"aia-suggestion-item\",\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./suggestion-item.component.html\",\n styleUrls: [\"./suggestion-item.component.css\"],\n})\nexport class SuggestionItemComponent implements OnDestroy {\n @Input() option!: SuggestionOption;\n @Input() isHighlighted = false;\n @Input() id = \"\";\n @Input() loading = false;\n\n @Output() readonly select = new EventEmitter<SuggestionOption>();\n @Output() readonly highlight = new EventEmitter<void>();\n\n pressed = false;\n\n private readonly cdr = inject(ChangeDetectorRef);\n private pressedTimer: ReturnType<typeof setTimeout> | undefined;\n\n ngOnDestroy(): void {\n if (this.pressedTimer !== undefined) clearTimeout(this.pressedTimer);\n }\n\n onSelect(): void {\n if (this.loading || !this.option.is_tappable || this.pressed) return;\n this.pressed = true;\n this.cdr.markForCheck();\n this.select.emit(this.option);\n if (this.pressedTimer !== undefined) clearTimeout(this.pressedTimer);\n this.pressedTimer = setTimeout(() => {\n this.pressed = false;\n this.cdr.markForCheck();\n }, 500);\n }\n\n onMouseEnter(): void {\n if (this.loading || !this.option.is_tappable) return;\n this.highlight.emit();\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if (this.loading || !this.option.is_tappable) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this.onSelect();\n }\n }\n}\n","<div\n [id]=\"id\"\n role=\"option\"\n data-aia-option=\"\"\n [attr.data-aia-loading]=\"loading ? '' : null\"\n [attr.aria-selected]=\"isHighlighted\"\n class=\"aia-suggestion-item\"\n [class.aia-suggestion-item-highlighted]=\"isHighlighted && !loading\"\n [class.aia-suggestion-item-tappable]=\"option.is_tappable\"\n [class.aia-suggestion-item-non-tappable]=\"!option.is_tappable\"\n [class.aia-suggestion-item-pressed]=\"pressed\"\n [attr.tabindex]=\"loading || !option.is_tappable ? -1 : 0\"\n (click)=\"onSelect()\"\n (keydown)=\"onKeyDown($event)\"\n (mouseenter)=\"onMouseEnter()\"\n>\n <div class=\"aia-suggestion-streaks\"></div>\n <div class=\"aia-suggestion-streaks-vert\"></div>\n <span class=\"aia-suggestion-content\">\n <span class=\"aia-suggestion-text\">\n <ng-container *ngIf=\"option.icon; else noIcon\"\n >{{ option.icon }} {{ option.text }}</ng-container\n >\n <ng-template #noIcon>{{ option.text }}</ng-template>\n </span>\n <span *ngIf=\"option.tag\" class=\"aia-suggestion-tag\">{{ option.tag }}</span>\n </span>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport type { SuggestionOption } from \"@magicx-eng/ai-autocomplete-vanilla\";\nimport { GridComponent } from \"../layout/grid.component\";\nimport { SuggestionItemComponent } from \"../suggestion-item/suggestion-item.component\";\n\n/**\n * Internal grid of suggestion options. Mirrors\n * `packages/react/src/components/SuggestionGrid.tsx` — a thin wrapper over the\n * `Grid` layout primitive (which owns the auto-fit columns and the\n * capped-height scroll). It only wires each option to its\n * select/highlight handlers and listbox-scoped id.\n *\n * @internal\n */\n@Component({\n selector: \"aia-suggestion-grid\",\n standalone: true,\n imports: [CommonModule, GridComponent, SuggestionItemComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./suggestion-grid.component.html\",\n})\nexport class SuggestionGridComponent {\n @Input() options: SuggestionOption[] = [];\n @Input() activeIndex = -1;\n @Input() listboxId = \"\";\n @Input() loading = false;\n /**\n * Identity of the suggestion these options belong to. When it changes the\n * grid scrolls back to the top, so the next parameter's options are read\n * from the first one instead of from the previous list's scroll offset.\n */\n @Input() groupKey = \"\";\n\n @Output() readonly select = new EventEmitter<SuggestionOption>();\n @Output() readonly highlight = new EventEmitter<number>();\n\n trackByOptionText = (_: number, opt: SuggestionOption): string => opt.text;\n}\n","<!-- max=\"1fr\": columns share out the full width, so a lone column spans the\n whole options box instead of stopping at 250px. -->\n<aia-grid min=\"250px\" max=\"1fr\" gap=\"0\" [scroll]=\"true\" [scrollResetKey]=\"groupKey\">\n <aia-suggestion-item\n *ngFor=\"let option of options; trackBy: trackByOptionText; let i = index\"\n [option]=\"option\"\n [isHighlighted]=\"i === activeIndex\"\n [id]=\"listboxId + '-option-' + i\"\n [loading]=\"loading\"\n (select)=\"select.emit($event)\"\n (highlight)=\"highlight.emit(i)\"\n ></aia-suggestion-item>\n</aia-grid>\n","import { CommonModule } from \"@angular/common\";\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n inject,\n type OnChanges,\n type OnDestroy,\n type OnInit,\n type SimpleChanges,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport {\n type AppearanceMode,\n buildAttributionUrl,\n getFooterHint,\n type Suggestion,\n type SuggestionOption,\n} from \"@magicx-eng/ai-autocomplete-vanilla\";\nimport { BehaviorSubject, combineLatest, type Observable } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\nimport type { AIAutocompleteController } from \"../controller/ai-autocomplete.controller\";\nimport { ClusterComponent } from \"../internal/layout/cluster.component\";\nimport { StackComponent } from \"../internal/layout/stack.component\";\nimport { PillListComponent } from \"../internal/pill-list/pill-list.component\";\nimport { SuggestionGridComponent } from \"../internal/suggestion-grid/suggestion-grid.component\";\n\ninterface DropdownVm {\n pills: Suggestion[];\n options: SuggestionOption[];\n activeIndex: number;\n isActivePillSelected: boolean;\n isLoading: boolean;\n showsPills: boolean;\n showsOptions: boolean;\n showsFallbackSkeleton: boolean;\n isVisible: boolean;\n /** Identity of the suggestion the options belong to — drives the grid's scroll reset. */\n groupKey: string;\n footerKey: string;\n footerHint: string;\n optionsPosition: \"above\" | \"below\";\n}\n\n/** The content-bearing fields of the view-model (everything but `isVisible`). */\ntype DropdownContent = Omit<DropdownVm, \"isVisible\">;\n\n/**\n * Tier 2 dropdown component — the Angular equivalent of React's\n * `<AIAutocompleteDropdown />`. Renders the pillbar, options grid, and\n * loading skeleton based on the supplied controller's `dropdown$` snapshot.\n *\n * ```html\n * <ai-autocomplete-dropdown [controller]=\"ac\"></ai-autocomplete-dropdown>\n * ```\n *\n * All actions (pill click, option select, option highlight) are forwarded to\n * the controller. Consumers who need to observe these events can subscribe\n * to the controller's per-field observables.\n *\n * @public\n */\n@Component({\n selector: \"ai-autocomplete-dropdown\",\n standalone: true,\n imports: [\n CommonModule,\n PillListComponent,\n SuggestionGridComponent,\n StackComponent,\n ClusterComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./ai-autocomplete-dropdown.component.html\",\n // The shared appearance layer carries the design tokens + box-sizing reset +\n // optionsPosition reversal, so a standalone dropdown (no Tier 1 component on\n // the page) is fully styled once `mode` is set.\n styleUrls: [\"../shared/appearance.css\", \"./ai-autocomplete-dropdown.component.css\"],\n})\nexport class AIAutocompleteDropdownComponent implements OnInit, OnChanges, OnDestroy {\n /** The controller that owns the autocomplete state. Required. */\n @Input() controller!: AIAutocompleteController;\n /** Whether to render the pillbar above the options grid. Default: true. */\n @Input() showPills = true;\n /** Optional CSS class applied to the dropdown root. */\n @Input() className?: string;\n /**\n * Color mode for a standalone dropdown. When set, the dropdown self-scopes the\n * design tokens to its own root (adds `magicx-aia` + `data-mode`), so it needs\n * no `.magicx-aia` wrapper. `\"auto\"` follows `prefers-color-scheme`. Leave it\n * unset when the dropdown sits inside a `.magicx-aia` ancestor (e.g. Tier 1).\n */\n @Input() mode?: AppearanceMode;\n\n /** Concrete resolved mode, or null when `mode` is unset (inherit from ancestor). */\n resolvedMode: \"light\" | \"dark\" | null = null;\n private modeMql?: MediaQueryList;\n private modeListener?: () => void;\n private readonly cdr = inject(ChangeDetectorRef);\n\n /** Root class list — adds `magicx-aia` only when self-scoping via `mode`. */\n get rootClass(): string {\n let cls = \"magicx-aia-dropdown\";\n if (this.resolvedMode) cls += \" magicx-aia\";\n if (this.className) cls += ` ${this.className}`;\n return cls;\n }\n\n /** Fallback skeleton-bar widths used when loading with zero cached options. */\n readonly fallbackSkeletonBarWidths = [159, 119, 164];\n\n /**\n * Attribution/branding link URL for the footer, with a `utm_source` derived\n * from the embedding page's hostname (see {@link buildAttributionUrl}).\n */\n readonly brandHref = buildAttributionUrl();\n\n /**\n * View-model derived from the controller's `dropdown$`. Adds three booleans\n * (`showsPills`, `showsOptions`, `showsFallbackSkeleton`, `isVisible`) that\n * keep template-level logic to a property read per §19.6.\n *\n * Initialized once in `ngOnInit` — must NOT be a getter. A getter returns a\n * fresh `Observable` instance on every property read; with OnPush + `async`\n * pipe that means each change-detection cycle unsubscribes/resubscribes,\n * causing the `*ngIf=\"vm$ | async as vm\"` root to briefly resolve `null`\n * and flicker the entire dropdown DOM.\n */\n vm$!: Observable<DropdownVm>;\n\n // Bridge for the @Input `showPills` into the reactive pipeline. Without this,\n // changing the input after init wouldn't trigger a new vm emission until the\n // next controller.dropdown$ tick — and we'd lose the showPills update entirely\n // if the controller is idle. Updated from ngOnChanges below.\n private readonly showPills$ = new BehaviorSubject<boolean>(true);\n\n // Last content emitted while the dropdown was visible. Reused during the\n // close fade so the populated dropdown fades out as one — see initVm.\n private lastVisibleContent: DropdownContent | null = null;\n\n ngOnInit(): void {\n // Seed showPills$ from the input's resolved value at init time.\n this.showPills$.next(this.showPills);\n this.applyMode();\n this.initVm();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"showPills\"]) {\n this.showPills$.next(this.showPills);\n }\n if (changes[\"mode\"] && !changes[\"mode\"].firstChange) {\n this.applyMode();\n }\n // Re-bind vm$ when the controller @Input is swapped (e.g. a multi-step form\n // toggling between controllers). Without this, vm$ stays subscribed to the\n // previous controller's dropdown$ — rendering stale options, or, if that\n // controller was destroy()-ed, receiving a completion that collapses the\n // dropdown permanently. Skip the first change: ngOnChanges fires before\n // ngOnInit, which owns the initial creation.\n if (changes[\"controller\"] && !changes[\"controller\"].firstChange && this.controller) {\n this.initVm();\n }\n }\n\n ngOnDestroy(): void {\n this.teardownModeListener();\n }\n\n /**\n * Resolve the `mode` input into `resolvedMode`. Unset → null (the dropdown\n * stays class-less and inherits from a `.magicx-aia` ancestor). `\"auto\"` reads\n * `prefers-color-scheme` and tracks it live via a media-query listener.\n */\n private applyMode(): void {\n this.teardownModeListener();\n if (this.mode === undefined) {\n this.resolvedMode = null;\n return;\n }\n if (this.mode === \"light\" || this.mode === \"dark\") {\n this.resolvedMode = this.mode;\n return;\n }\n // \"auto\"\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n this.resolvedMode = \"light\";\n return;\n }\n this.modeMql = window.matchMedia(\"(prefers-color-scheme: dark)\");\n this.resolvedMode = this.modeMql.matches ? \"dark\" : \"light\";\n this.modeListener = () => {\n this.resolvedMode = this.modeMql?.matches ? \"dark\" : \"light\";\n this.cdr.markForCheck();\n };\n this.modeMql.addEventListener(\"change\", this.modeListener);\n }\n\n private teardownModeListener(): void {\n if (this.modeMql && this.modeListener) {\n this.modeMql.removeEventListener(\"change\", this.modeListener);\n }\n this.modeMql = undefined;\n this.modeListener = undefined;\n }\n\n /** Build the view-model stream from the current controller + showPills$. */\n private initVm(): void {\n this.vm$ = combineLatest([this.controller.dropdown$, this.showPills$]).pipe(\n map(([dd, showPills]) => {\n const activeSuggestion = dd.suggestions[0];\n const options = activeSuggestion?.options ?? [];\n const showsPills = showPills && (dd.pills.length > 0 || dd.isLoading);\n const showsOptions = options.length > 0;\n const showsFallbackSkeleton = dd.isLoading && !showsOptions;\n const isVisible = dd.isOpen && (showsOptions || showsPills || dd.isLoading);\n\n // While closing, reuse the last visible content so the populated\n // dropdown fades out as one. Otherwise the pills/options vanish the\n // instant the state empties (e.g. skipping the last pill with →),\n // leaving the always-present footer alone for a flash of a footer-only\n // \"no options\" box mid-fade. Only `isVisible` tracks live state to\n // drive the opacity transition.\n if (!isVisible && this.lastVisibleContent) {\n return { ...this.lastVisibleContent, isVisible: false };\n }\n\n const optionHighlighted =\n dd.activeIndex >= 0 && Boolean(options[dd.activeIndex]?.is_tappable);\n const { key: footerKey, hint: footerHint } = getFooterHint(\n optionHighlighted,\n dd.isInputEmpty,\n );\n const content: DropdownContent = {\n pills: dd.pills,\n options,\n activeIndex: dd.activeIndex,\n isActivePillSelected: dd.isActivePillSelected,\n isLoading: dd.isLoading,\n showsPills,\n showsOptions,\n showsFallbackSkeleton,\n groupKey: activeSuggestion ? `${activeSuggestion.type} ${activeSuggestion.text}` : \"\",\n footerKey,\n footerHint,\n optionsPosition: dd.optionsPosition,\n };\n if (isVisible) this.lastVisibleContent = content;\n return { ...content, isVisible };\n }),\n );\n }\n\n trackByWidth = (_: number, w: number): number => w;\n\n onPillClick(index: number): void {\n this.controller.setActivePill(index);\n }\n\n onSelect(option: SuggestionOption): void {\n this.controller.selectOption(option);\n }\n\n onHighlight(index: number): void {\n this.controller.setActiveDropdownIndex(index);\n }\n\n preventBlur(event: Event): void {\n // Prevent the editor from losing focus when interacting with the dropdown.\n event.preventDefault();\n }\n}\n","<div\n *ngIf=\"vm$ | async as vm\"\n [id]=\"controller.listboxId\"\n role=\"listbox\"\n data-aia-dropdown=\"\"\n [attr.data-aia-loading]=\"vm.isLoading ? '' : null\"\n [attr.data-mode]=\"resolvedMode\"\n [attr.data-options-position]=\"vm.optionsPosition\"\n [class]=\"rootClass\"\n [class.magicx-aia-dropdown-visible]=\"vm.isVisible\"\n (mousedown)=\"preventBlur($event)\"\n>\n <aia-stack space=\"8px\">\n <aia-cluster\n *ngIf=\"vm.showsPills\"\n class=\"magicx-aia-dropdown-pillbar\"\n data-aia-pillbar=\"\"\n [noWrap]=\"true\"\n >\n <aia-pill-list\n [pills]=\"vm.pills\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"vm.isActivePillSelected\"\n [rounded]=\"true\"\n [loading]=\"vm.isLoading\"\n (selectPill)=\"onPillClick($event)\"\n ></aia-pill-list>\n </aia-cluster>\n\n <aia-suggestion-grid\n *ngIf=\"vm.showsOptions\"\n [options]=\"vm.options\"\n [activeIndex]=\"vm.activeIndex\"\n [listboxId]=\"controller.listboxId\"\n [loading]=\"vm.isLoading\"\n [groupKey]=\"vm.groupKey\"\n (select)=\"onSelect($event)\"\n (highlight)=\"onHighlight($event)\"\n ></aia-suggestion-grid>\n\n <div\n *ngIf=\"vm.showsFallbackSkeleton\"\n class=\"magicx-aia-dropdown-skeleton-bars\"\n data-aia-skeleton-bars=\"\"\n >\n <span\n *ngFor=\"let w of fallbackSkeletonBarWidths; trackBy: trackByWidth\"\n class=\"magicx-aia-dropdown-skeleton-bar\"\n [style.width.px]=\"w\"\n ></span>\n </div>\n\n <footer class=\"magicx-aia-footer\" data-aia-footer=\"\">\n <div class=\"magicx-aia-footer-row\">\n <span class=\"magicx-aia-footer-hint-group\">\n <kbd class=\"magicx-aia-footer-key\">{{ vm.footerKey }}</kbd>\n <span class=\"magicx-aia-footer-hint\">{{ vm.footerHint }}</span>\n </span>\n <a\n class=\"magicx-aia-footer-brand-link\"\n [href]=\"brandHref\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span class=\"magicx-aia-footer-brand\">AI</span>\n <span class=\"magicx-aia-footer-badge\">Autocomplete</span>\n </a>\n </div>\n </footer>\n </aia-stack>\n</div>\n","import { distinctUntilChanged, map, type Observable, shareReplay } from \"rxjs\";\n\n/**\n * Per-field observable derivation factory. Enforces the §19.4 invariant:\n *\n * - `distinctUntilChanged` — prevents re-emission storms when the upstream\n * state object ticks but the field a consumer cares about hasn't changed.\n * Without this, every keystroke would re-render every async-pipe binding\n * in the consumer's template even when nothing changed for that binding.\n * - `shareReplay({ bufferSize: 1, refCount: true })` — guarantees that\n * multiple subscribers (multiple `async` pipes in a template, e.g.\n * `*ngIf=\"isLoading$ | async\"` and `[disabled]=\"isLoading$ | async\"`)\n * share a single upstream subscription. `refCount: true` is non-obvious\n * but essential: without it, the inner subscription survives after the\n * last subscriber unmounts, leaking the chain back to `state$`.\n *\n * Every public observable on {@link AIAutocompleteController} must go through\n * this factory — no exceptions.\n *\n * @internal\n */\nexport function deriveField<T, R>(\n source$: Observable<T>,\n selector: (value: T) => R,\n equalityFn?: (a: R, b: R) => boolean,\n): Observable<R> {\n return source$.pipe(\n map(selector),\n distinctUntilChanged(equalityFn),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n}\n","import {\n type CompletedParamState,\n AIAutocomplete as CoreAIAutocomplete,\n type CoreState,\n type Segment,\n type Suggestion,\n type SuggestionOption,\n} from \"@magicx-eng/ai-autocomplete-vanilla\";\nimport { BehaviorSubject, combineLatest, map, type Observable, shareReplay } from \"rxjs\";\nimport type {\n AIAutocompleteControllerOptions,\n AIAutocompleteControllerState,\n AIAutocompleteControllerUpdate,\n AIAutocompleteDropdownState,\n} from \"../shared/types\";\nimport { deriveField } from \"./observables\";\n\n/**\n * Tier 2 logic surface for `@magicx-eng/ai-autocomplete-angular` — the Angular\n * equivalent of React's `useAIAutocomplete()` hook. Wraps a headless\n * `@magicx-eng/ai-autocomplete-vanilla` core and exposes its state as RxJS\n * observables plus thin action methods.\n *\n * Per TDB §3.3, the controller is consumer-managed — the consumer creates it\n * with `new`, holds the reference, and **must call `destroy()`** in their\n * own `ngOnDestroy`. The Tier 1 `<ai-autocomplete>` component does this\n * automatically; Tier 2 consumers do not get auto-cleanup.\n *\n * @public\n */\nexport class AIAutocompleteController {\n private readonly core: CoreAIAutocomplete;\n private readonly rawState$: BehaviorSubject<CoreState>;\n // optionsPosition isn't part of CoreState (it's a core option), so track it\n // here and fold it into `dropdown$` so the dropdown can read placement from\n // the controller — configured once, kept in sync through update().\n private readonly optionsPosition$ = new BehaviorSubject<\"above\" | \"below\">(\"below\");\n private readonly unsubscribeCore: () => void;\n private isDestroyed = false;\n\n // === Per-field observables ===\n // Each one runs through deriveField, which bakes in distinctUntilChanged\n // and shareReplay({ bufferSize: 1, refCount: true }) per §19.4.\n\n /** Plain-text content of the editor. */\n readonly text$: Observable<string>;\n /** Completed (bold) params currently in the editor. */\n readonly completedParams$: Observable<CompletedParamState[]>;\n /** Actionable suggestion pills (first one is the active pill). */\n readonly suggestionPills$: Observable<Suggestion[]>;\n /** Text + completed-param segments for rendering the editor body. */\n readonly segments$: Observable<Segment[]>;\n /** ID of the most-recently-promoted param (drives shimmer animation). */\n readonly newParamId$: Observable<string | null>;\n /** All suggestions from the server (including non-actionable ones). */\n readonly suggestions$: Observable<Suggestion[]>;\n /** Currently highlighted dropdown option index. -1 = none. */\n readonly activeIndex$: Observable<number>;\n /**\n * UI-visible loading flag — suppressed during the post-select streak\n * animation and during re-edit (cached options stay visible there). Use\n * this instead of the raw core state for any loading-skeleton binding.\n */\n readonly isLoading$: Observable<boolean>;\n /** Server-reported \"query is complete\" flag. */\n readonly isReady$: Observable<boolean>;\n /** Whether the editor currently has focus. */\n readonly isFocused$: Observable<boolean>;\n /** Whether the dropdown should currently be visible. */\n readonly isDropdownOpen$: Observable<boolean>;\n /**\n * Whether the active (leading) pill should render selected (full opacity)\n * rather than the de-emphasized `first` tier. Auto trigger ⇒ true only while\n * a dropdown option is highlighted; manual ⇒ true once the pill is tapped.\n */\n readonly isActivePillSelected$: Observable<boolean>;\n /** Server-suggested placeholder text for the editor. */\n readonly placeholderText$: Observable<string>;\n /** Last fetch error, or null. */\n readonly error$: Observable<Error | null>;\n /** Param currently being re-edited, or null. */\n readonly editingParam$: Observable<CompletedParamState | null>;\n /** Plain-text offset where the edit region starts, or null. */\n readonly editingAnchor$: Observable<number | null>;\n /** Live caret offset within the editor. */\n readonly caretOffset$: Observable<number | null>;\n\n // === Composite observables ===\n\n /**\n * Snapshot of every public field in one object. Convenient for\n * `*ngIf=\"ctrl.state$ | async as state\"` templating — aliases all fields\n * under a single subscription instead of multiple `| async` pipes.\n */\n readonly state$: Observable<AIAutocompleteControllerState>;\n\n /**\n * Composite state for the dropdown view. Tier 2 consumers spread this into\n * `<ai-autocomplete-dropdown>`; Tier 1 uses the same shape internally.\n */\n readonly dropdown$: Observable<AIAutocompleteDropdownState>;\n\n /**\n * Throws if invoked outside a browser environment. For SSR / Angular\n * Universal, gate construction with `isPlatformBrowser` — see TDB §16.3.\n */\n constructor(opts: AIAutocompleteControllerOptions = {}) {\n if (typeof document === \"undefined\") {\n throw new Error(\n \"AIAutocompleteController requires a browser environment. \" +\n \"For SSR / Angular Universal, gate construction with isPlatformBrowser.\",\n );\n }\n\n // Headless mode never renders to the host, so a throwaway div is fine —\n // it's required by the core's signature for symmetry with full mode.\n const host = document.createElement(\"div\");\n\n this.core = new CoreAIAutocomplete(host, {\n ...opts,\n renderMode: \"headless\",\n source: opts.source ?? \"headless-sdk\",\n // Headless mode never renders the dropdown DOM, but the keyboard\n // controller still reads `optionsPosition` to decide which vertical\n // arrow opens the dropdown from the input.\n optionsPosition: opts.optionsPosition ?? \"below\",\n });\n\n this.rawState$ = new BehaviorSubject<CoreState>(this.core.getState());\n // Push the store's *current* state, not the snapshot the listener was\n // handed. The core notifies listeners synchronously, and some actions\n // trigger reentrant `store.set` calls (e.g. typing a non-matching char\n // during re-edit makes the core synchronously exit re-edit and kick off a\n // fetch). Reentrancy makes the outer set's listener loop continue with a\n // now-stale snapshot, so the listener can fire *out of order* — delivering\n // an older state (still in re-edit) after a newer one (re-edit exited).\n // Reading `getState()` at emission time collapses every notification onto\n // the true latest state, so a stale `editingParam` can't resurrect and\n // retrigger the editor's re-edit caret-park (which would yank the caret\n // back to where re-editing started). distinctUntilChanged downstream drops\n // the resulting duplicate emissions. React avoids this because it batches\n // renders and its caret effects are dependency-gated; our subscription is\n // synchronous, so we coalesce here instead.\n this.unsubscribeCore = this.core.subscribe(() => {\n if (!this.isDestroyed) this.rawState$.next(this.core.getState());\n });\n\n // === Per-field observables ===\n // Array-valued fields use shallow equality. The vanilla store spreads on\n // every write (`store.set({ completedParams: [...] })`), so reference\n // equality would re-fire downstream subscribers on every state tick even\n // when the array's contents are unchanged. The other fields are\n // primitives or stable object references, so default identity equality\n // works fine.\n this.text$ = deriveField(this.rawState$, (s) => s.text);\n this.completedParams$ = deriveField(this.rawState$, (s) => s.completedParams, arrEq);\n this.suggestionPills$ = deriveField(this.rawState$, (s) => s.actionableSuggestions, arrEq);\n this.segments$ = deriveField(this.rawState$, (s) => s.segments, arrEq);\n this.newParamId$ = deriveField(this.rawState$, (s) => s.newParamId);\n this.suggestions$ = deriveField(this.rawState$, (s) => s.suggestions, arrEq);\n this.activeIndex$ = deriveField(this.rawState$, (s) => s.activeDropdownIndex);\n this.isLoading$ = deriveField(this.rawState$, computeUiLoading);\n this.isReady$ = deriveField(this.rawState$, (s) => s.isReady);\n this.isFocused$ = deriveField(this.rawState$, (s) => s.isFocused);\n this.isDropdownOpen$ = deriveField(this.rawState$, (s) => s.isDropdownOpen);\n this.isActivePillSelected$ = deriveField(this.rawState$, (s) => s.isActivePillSelected);\n this.placeholderText$ = deriveField(this.rawState$, (s) => s.placeholderText);\n this.error$ = deriveField(this.rawState$, (s) => s.error);\n this.editingParam$ = deriveField(this.rawState$, (s) => s.editingParam);\n this.editingAnchor$ = deriveField(this.rawState$, (s) => s.editingAnchor);\n this.caretOffset$ = deriveField(this.rawState$, (s) => s.caretOffset);\n\n // === Composite observables ===\n // Project directly off `rawState$` with a single map() so each store\n // tick produces exactly ONE coherent state$ emission. Using\n // `combineLatest` over the per-field observables here would fire one\n // emission per inner-source tick (up to N per store update), and the\n // editor-host directive's post-promote refocus would run against an\n // intermediate state where `newParamId` was set but `segments` /\n // `caretOffset` still held their old values — leaving the caret stuck\n // at the pre-click position.\n this.state$ = this.rawState$.pipe(\n map(computeState),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n this.optionsPosition$.next(opts.optionsPosition ?? \"below\");\n this.dropdown$ = combineLatest([this.rawState$, this.optionsPosition$]).pipe(\n map(([s, optionsPosition]) => computeDropdown(s, optionsPosition)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n // === Read-only accessors ===\n\n /** Stable ARIA listbox ID for the dropdown. Pass to `<textarea aria-controls=\"...\">`. */\n get listboxId(): string {\n return this.core.listboxId;\n }\n\n /** Whether `destroy()` has been called. After destruction all action methods no-op. */\n get destroyed(): boolean {\n return this.isDestroyed;\n }\n\n /**\n * Synchronous snapshot of the controller's current public state. Mirrors\n * the latest emission of `state$`. Useful in callbacks where you can't\n * `subscribe` (e.g. inside an event handler).\n */\n getState(): AIAutocompleteControllerState {\n return computeState(this.rawState$.value);\n }\n\n // === Action methods (pass-through to the core) ===\n //\n // Every action method begins with an `isDestroyed` guard so that callers\n // who hold a stale reference after `destroy()` don't accidentally trigger\n // work on a torn-down core. The vanilla core does not gate its own methods\n // post-dispose — `reset()`, `handleTextChange()`, and friends would still\n // schedule fetches or fire HTTP requests against an aborted controller,\n // and the responses would have nowhere to surface (rawState$ is already\n // complete). The guard makes the JSDoc-promised \"no-op silently\"\n // semantics actually true.\n\n /** Clear all state, rotate `session_id`, and re-fetch. Call after submit. */\n reset(): void {\n if (this.isDestroyed) return;\n this.core.reset();\n }\n\n /** Pick a dropdown option (or replace the re-edited param if in re-edit mode). */\n selectOption(option: SuggestionOption): void {\n if (this.isDestroyed) return;\n this.core.selectOption(option);\n }\n\n /** Promote the pill at `index` to active (front of the list). */\n setActivePill(index: number): void {\n if (this.isDestroyed) return;\n this.core.setActivePill(index);\n }\n\n /** Drop the last completed param's \"completed\" status. Text stays as plain text. */\n removeLastParam(): void {\n if (this.isDestroyed) return;\n this.core.removeLastParam();\n }\n\n /** Clear the shimmer animation state for the most-recently-added param. */\n clearNewParamId(): void {\n if (this.isDestroyed) return;\n this.core.clearNewParamId();\n }\n\n /** Controlled-mode setter for editor text. */\n setValue(text: string): void {\n if (this.isDestroyed) return;\n this.core.setValue(text);\n }\n\n /** Controlled-mode setter for completed params. */\n setCompletedParams(params: CompletedParamState[]): void {\n if (this.isDestroyed) return;\n this.core.setCompletedParams(params);\n }\n\n /** Forward plain-text input from the consumer's `<textarea>` to the core. */\n handleTextChange(value: string): void {\n if (this.isDestroyed) return;\n this.core.handleTextChange(value);\n }\n\n /** Forward keyboard events from the consumer's `<textarea>` to the core. */\n handleKeyDown(event: KeyboardEvent): void {\n if (this.isDestroyed) return;\n this.core.handleKeyDown(event);\n }\n\n /** Notify the core of focus state. */\n setFocused(focused: boolean): void {\n if (this.isDestroyed) return;\n this.core.setFocused(focused);\n }\n\n /** Enter re-edit mode for the bold param with the given id. */\n startEditingParam(paramId: string): void {\n if (this.isDestroyed) return;\n this.core.startEditingParam(paramId);\n }\n\n /** Exit re-edit mode without changing the bold param. */\n exitEditMode(): void {\n if (this.isDestroyed) return;\n this.core.exitEditMode();\n }\n\n /** Forward post-input caret position (extends the edit tail). */\n handleCaretAfterInput(offset: number | null): void {\n if (this.isDestroyed) return;\n this.core.handleCaretAfterInput(offset);\n }\n\n /** Forward selection-only caret moves (may exit re-edit). */\n handleCaretMove(offset: number | null): void {\n if (this.isDestroyed) return;\n this.core.handleCaretMove(offset);\n }\n\n /** Replace the bold param being re-edited. Returns true when applied. */\n replaceEditingRange(replacement: string): boolean {\n if (this.isDestroyed) return false;\n return this.core.replaceEditingRange(replacement);\n }\n\n /** Set the highlighted option index (typically driven by hover). */\n setActiveDropdownIndex(index: number): void {\n if (this.isDestroyed) return;\n this.core.setActiveDropdownIndex(index);\n }\n\n // === Lifecycle ===\n\n /**\n * Apply runtime changes to a subset of options. Event callbacks\n * (`onSubmit`, `onError`, etc.) cannot be swapped this way — they are\n * registered once at construction (matches the React hook's design). For\n * dynamic event reactivity, subscribe to the corresponding observable\n * (e.g. `text$` instead of `onChange`).\n */\n update(opts: AIAutocompleteControllerUpdate): void {\n if (this.isDestroyed) return;\n this.core.update(opts);\n if (opts.optionsPosition !== undefined) {\n this.optionsPosition$.next(opts.optionsPosition);\n }\n }\n\n /**\n * Release all resources — unsubscribes from the core, destroys the core,\n * and completes the internal state subject. Safe to call multiple times.\n * After destruction, action methods no-op silently.\n */\n destroy(): void {\n if (this.isDestroyed) return;\n this.isDestroyed = true;\n this.unsubscribeCore();\n this.core.destroy();\n this.rawState$.complete();\n }\n}\n\n// ===== Pure helpers — not part of the public surface =====\n\n/**\n * Shallow array equality. The vanilla store reassigns array fields on every\n * write (`store.set({ completedParams: [...prev, x] })`), so reference\n * equality alone would re-emit downstream even when the contents are\n * identical. Used for `completedParams$`, `suggestions$`, `suggestionPills$`,\n * and `segments$`.\n */\nfunction arrEq<T>(a: readonly T[], b: readonly T[]): boolean {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction computeUiLoading(s: CoreState): boolean {\n return s.isLoading && !s.editingParam && !s.inSelectionAnimation;\n}\n\nfunction computeState(s: CoreState): AIAutocompleteControllerState {\n return {\n text: s.text,\n completedParams: s.completedParams,\n suggestionPills: s.actionableSuggestions,\n segments: s.segments,\n newParamId: s.newParamId,\n suggestions: s.suggestions,\n activeIndex: s.activeDropdownIndex,\n isLoading: computeUiLoading(s),\n isReady: s.isReady,\n isFocused: s.isFocused,\n isDropdownOpen: s.isDropdownOpen,\n placeholderText: s.placeholderText,\n error: s.error,\n editingParam: s.editingParam,\n editingAnchor: s.editingAnchor,\n caretOffset: s.caretOffset,\n };\n}\n\nfunction computeDropdown(\n s: CoreState,\n optionsPosition: \"above\" | \"below\",\n): AIAutocompleteDropdownState {\n const editingParam = s.editingParam;\n const activeSuggestion = s.actionableSuggestions[0];\n const dropdownPill: Suggestion | null = editingParam\n ? {\n type: editingParam.suggestionType,\n text: editingParam.suggestionPlaceholder,\n required: true,\n options: editingParam.options,\n }\n : null;\n const dropdownActivePill = dropdownPill ?? activeSuggestion;\n const dropdownPills = dropdownPill ? [dropdownPill] : s.actionableSuggestions;\n return {\n suggestions: dropdownActivePill ? [{ ...dropdownActivePill, options: s.filteredOptions }] : [],\n activeIndex: s.activeDropdownIndex,\n isOpen: s.isDropdownOpen,\n pills: dropdownPills,\n isActivePillSelected: s.isActivePillSelected,\n isLoading: computeUiLoading(s),\n isInputEmpty: s.text.trim().length === 0,\n optionsPosition,\n };\n}\n","import {\n Directive,\n ElementRef,\n Input,\n inject,\n NgZone,\n type OnDestroy,\n type OnInit,\n Renderer2,\n} from \"@angular/core\";\nimport {\n extractPlainText,\n getCursorOffset,\n plainTextLength,\n renderEditableContent,\n setCursorOffset,\n} from \"@magicx-eng/ai-autocomplete-vanilla\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport type { AIAutocompleteController } from \"../../controller/ai-autocomplete.controller\";\n\n/**\n * Module-level cache for the one-time plaintext-only feature detection.\n * Mirrors `supportsPlaintextOnly` in useContentEditableEditor.ts.\n */\nlet plaintextOnlyCache: boolean | undefined;\nfunction supportsPlaintextOnly(): boolean {\n if (plaintextOnlyCache !== undefined) return plaintextOnlyCache;\n if (typeof document === \"undefined\") return false;\n const probe = document.createElement(\"div\");\n probe.setAttribute(\"contenteditable\", \"plaintext-only\");\n plaintextOnlyCache = probe.contentEditable === \"plaintext-only\";\n return plaintextOnlyCache;\n}\n\n/**\n * Internal directive that owns every concern specific to running the\n * autocomplete on top of a contentEditable host: composition state, caret\n * tracking, selectionchange handling, `beforeinput` interception, paste\n * sanitization, plaintext-only feature detection, segment rendering,\n * post-promote refocus, and re-edit caret park.\n *\n * Mirrors `packages/react/src/hooks/useContentEditableEditor.ts` one-for-one.\n * Used only by the Tier 1 `<ai-autocomplete>` component — never exported.\n *\n * @internal\n */\n@Directive({\n selector: \"[aiaEditorHost]\",\n standalone: true,\n host: {\n role: \"combobox\",\n \"aria-autocomplete\": \"list\",\n \"aria-haspopup\": \"listbox\",\n spellcheck: \"true\",\n enterkeyhint: \"send\",\n tabindex: \"0\",\n \"(input)\": \"onInput()\",\n \"(keydown)\": \"onKeyDown($event)\",\n \"(compositionstart)\": \"onCompositionStart()\",\n \"(compositionend)\": \"onCompositionEnd()\",\n \"(paste)\": \"onPaste($event)\",\n \"(focus)\": \"onFocus()\",\n \"(blur)\": \"onBlur()\",\n },\n})\nexport class AIAutocompleteEditorHostDirective implements OnInit, OnDestroy {\n @Input(\"aiaEditorHost\") controller!: AIAutocompleteController;\n @Input() autoFocus = true;\n\n private readonly el = inject<ElementRef<HTMLDivElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly zone = inject(NgZone);\n private readonly destroy$ = new Subject<void>();\n\n private composing = false;\n private lastInputAt = 0;\n private lastSeenParamId = \"\";\n private lastEditingId = \"\";\n private editingParamId: string | null = null;\n\n private documentSelectionListener?: () => void;\n private beforeInputListener?: (event: Event) => void;\n\n ngOnInit(): void {\n if (!this.controller) {\n throw new Error(\"[aiaEditorHost] requires a controller\");\n }\n\n const el = this.el.nativeElement;\n const ceMode = supportsPlaintextOnly() ? \"plaintext-only\" : \"true\";\n this.renderer.setAttribute(el, \"contenteditable\", ceMode);\n this.renderer.setAttribute(el, \"aria-controls\", this.controller.listboxId);\n this.renderer.setAttribute(el, \"suppress-content-editable-warning\", \"true\");\n\n // Auto-focus on mount. If the editor already has focus (e.g. from a\n // click that fired before our lifecycle ran), notify the controller\n // instead of stealing focus.\n if (this.autoFocus) {\n queueMicrotask(() => {\n if (typeof document === \"undefined\") return;\n if (document.activeElement === el) {\n this.controller.setFocused(true);\n } else {\n el.focus();\n }\n });\n }\n\n this.bindDocumentSelectionListener();\n this.bindBeforeInputListener();\n this.bindStateSubscription();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n if (this.documentSelectionListener && typeof document !== \"undefined\") {\n document.removeEventListener(\"selectionchange\", this.documentSelectionListener);\n }\n if (this.beforeInputListener) {\n this.el.nativeElement.removeEventListener(\"beforeinput\", this.beforeInputListener);\n }\n }\n\n // === Host event handlers ===\n\n onCompositionStart(): void {\n this.composing = true;\n }\n\n onCompositionEnd(): void {\n this.composing = false;\n this.fireInput();\n }\n\n onInput(): void {\n this.lastInputAt = performance.now();\n this.fireInput();\n this.controller.handleCaretAfterInput(getCursorOffset(this.el.nativeElement));\n }\n\n onKeyDown(event: KeyboardEvent): void {\n this.controller.handleKeyDown(event);\n }\n\n onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const el = this.el.nativeElement;\n const text = (event.clipboardData?.getData(\"text/plain\") ?? \"\").replace(/\\r?\\n/g, \" \");\n if (!text) return;\n const doc = el.ownerDocument ?? document;\n const sel = doc.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (!el.contains(range.startContainer)) return;\n range.deleteContents();\n const node = doc.createTextNode(text);\n range.insertNode(node);\n range.setStartAfter(node);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n this.fireInput();\n }\n\n onFocus(): void {\n this.controller.setFocused(true);\n }\n\n onBlur(): void {\n this.controller.setFocused(false);\n }\n\n // === Internal helpers ===\n\n private fireInput(): void {\n if (this.composing) return;\n const el = this.el.nativeElement;\n const raw = extractPlainText(el);\n const shouldCapitalize = raw.length > 0 && raw[0] !== raw[0].toUpperCase();\n const next = shouldCapitalize ? raw[0].toUpperCase() + raw.slice(1) : raw;\n this.controller.handleTextChange(next);\n }\n\n private bindDocumentSelectionListener(): void {\n if (typeof document === \"undefined\") return;\n const el = this.el.nativeElement;\n // selectionchange fires on every keystroke and caret move — run outside\n // Angular's zone (§16.1) and re-enter only when we actually need to\n // notify the controller of a meaningful change.\n this.zone.runOutsideAngular(() => {\n const handler = (): void => {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n if (!sel.anchorNode || !el.contains(sel.anchorNode)) return;\n const anchor = sel.anchorNode;\n const startEl =\n anchor.nodeType === Node.ELEMENT_NODE ? (anchor as Element) : anchor.parentElement;\n const strong = startEl?.closest<HTMLElement>('strong[data-seg=\"completed\"][data-param-id]');\n // `DOMStringMap` is an index signature; bracket notation is required\n // by `noPropertyAccessFromIndexSignature`.\n const enclosing = strong?.dataset[\"paramId\"] ?? null;\n if (enclosing && enclosing !== this.editingParamId) {\n this.zone.run(() => this.controller.startEditingParam(enclosing));\n return;\n }\n if (performance.now() - this.lastInputAt < 50) return;\n this.zone.run(() => this.controller.handleCaretMove(getCursorOffset(el)));\n };\n this.documentSelectionListener = handler;\n document.addEventListener(\"selectionchange\", handler);\n });\n }\n\n private bindBeforeInputListener(): void {\n const el = this.el.nativeElement;\n // Native beforeinput — React's synthetic onBeforeInput is wired to the\n // legacy textInput event and doesn't fire reliably for delete* types.\n const handler = (event: Event): void => {\n const inputEvent = event as InputEvent;\n const t = inputEvent.inputType;\n if (t === \"insertParagraph\" || t === \"insertLineBreak\" || t === \"insertFromDrop\") {\n event.preventDefault();\n return;\n }\n if (t.startsWith(\"insert\") || t.startsWith(\"delete\")) {\n const replacement = t.startsWith(\"delete\") ? \"\" : (inputEvent.data ?? \"\");\n if (this.controller.replaceEditingRange(replacement)) {\n event.preventDefault();\n }\n }\n };\n this.beforeInputListener = handler;\n el.addEventListener(\"beforeinput\", handler);\n }\n\n private bindStateSubscription(): void {\n const el = this.el.nativeElement;\n this.controller.state$.pipe(takeUntil(this.destroy$)).subscribe((state) => {\n this.editingParamId = state.editingParam?.id ?? null;\n\n renderEditableContent({\n input: el,\n segments: state.segments,\n newParamId: state.newParamId,\n editingParamId: state.editingParam?.id ?? null,\n placeholderText: state.placeholderText,\n isFocused: state.isFocused,\n });\n\n // Post-promote refocus + caret-after-bold placement (mirrors React's\n // useLayoutEffect on newParamId).\n const currentParamId = state.newParamId ?? \"\";\n if (currentParamId && currentParamId !== this.lastSeenParamId) {\n this.lastSeenParamId = currentParamId;\n el.focus();\n const desired = state.caretOffset ?? plainTextLength(el);\n setCursorOffset(el, desired);\n } else if (!currentParamId) {\n this.lastSeenParamId = \"\";\n }\n\n // Re-edit caret park (mirrors React's useLayoutEffect on editingParam).\n const editingId = state.editingParam?.id ?? \"\";\n if (editingId && editingId !== this.lastEditingId && state.editingAnchor != null) {\n this.lastEditingId = editingId;\n setCursorOffset(el, state.editingAnchor);\n } else if (!editingId) {\n this.lastEditingId = \"\";\n }\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from \"@angular/core\";\n\n/**\n * Internal default submit button (up-arrow). Angular analogue of React's\n * `SubmitButton`. The default/custom/hidden branching stays in the parent\n * (`AIAutocompleteComponent`); this is only the built-in button.\n *\n * @internal\n */\n@Component({\n selector: \"aia-submit-button\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./submit-button.component.html\",\n styleUrls: [\"./submit-button.component.css\"],\n})\nexport class SubmitButtonComponent {\n @Input() disabled = false;\n @Output() readonly submit = new EventEmitter<MouseEvent>();\n\n onClick(event: MouseEvent): void {\n this.submit.emit(event);\n }\n}\n","<button\n type=\"button\"\n data-aia-submit=\"\"\n class=\"magicx-aia-submit-button\"\n [disabled]=\"disabled\"\n aria-label=\"Submit\"\n (click)=\"onClick($event)\"\n>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" role=\"img\" aria-label=\"Submit\">\n <path\n d=\"M9 14V4M9 4L4 9M9 4L14 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n</button>\n","import { CommonModule, isPlatformBrowser } from \"@angular/common\";\nimport {\n type AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n type ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n inject,\n NgZone,\n type OnChanges,\n type OnDestroy,\n type OnInit,\n Output,\n PLATFORM_ID,\n type SimpleChanges,\n type TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport {\n type APIConfig,\n type AppearanceMode,\n type AutocompleteResult,\n buildQuery,\n type CompletedParamState,\n extractPlainText,\n ModeController,\n type OptionOverrides,\n setCursorOffset,\n} from \"@magicx-eng/ai-autocomplete-vanilla\";\nimport { AIAutocompleteDropdownComponent } from \"../ai-autocomplete-dropdown/ai-autocomplete-dropdown.component\";\nimport { AIAutocompleteController } from \"../controller/ai-autocomplete.controller\";\nimport { AIAutocompleteEditorHostDirective } from \"../internal/editor-host/editor-host.directive\";\nimport { PillListComponent } from \"../internal/pill-list/pill-list.component\";\nimport { SubmitButtonComponent } from \"../internal/submit-button/submit-button.component\";\n\n/**\n * Tier 1 component — `<ai-autocomplete>`. The Angular equivalent of React's\n * `<AIAutocomplete />`. Owns the contentEditable editor, inline pills, mode\n * controller, submit button slot, and an embedded\n * {@link AIAutocompleteController} that drives the dropdown.\n *\n * @public\n */\n@Component({\n selector: \"ai-autocomplete\",\n standalone: true,\n imports: [\n CommonModule,\n AIAutocompleteDropdownComponent,\n AIAutocompleteEditorHostDirective,\n PillListComponent,\n SubmitButtonComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./ai-autocomplete.component.html\",\n styleUrls: [\"./ai-autocomplete.component.css\"],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n useExisting: forwardRef(() => AIAutocompleteComponent),\n multi: true,\n },\n ],\n})\nexport class AIAutocompleteComponent\n implements OnInit, AfterViewInit, OnChanges, OnDestroy, ControlValueAccessor\n{\n // === Inputs (mirrors React's AIAutocompleteProps) ===\n\n @Input() apiConfig?: APIConfig;\n @Input() optionOverrides?: OptionOverrides;\n @Input() maskCompletedText = false;\n @Input() columns?: number;\n /** Where unfilled pills render. Default: \"dropdown\". */\n @Input() pillPlacement: \"inline\" | \"dropdown\" | \"hidden\" = \"dropdown\";\n /** Color mode. \"auto\" follows prefers-color-scheme. Default: \"auto\". */\n @Input() mode: AppearanceMode = \"auto\";\n @Input() optionsPosition: \"above\" | \"below\" = \"below\";\n @Input() animations = true;\n @Input() dropdownTrigger?: \"auto\" | \"manual\" | \"hidden\";\n @Input() closeDropdownOnBlur?: boolean;\n @Input() showNonTappableOptions?: boolean;\n /** Focus the editor on mount. Default: true. */\n @Input() autoFocus = true;\n /** Controlled-mode text value. */\n @Input() value?: string;\n /** Controlled-mode completed params. */\n @Input() completedParams?: CompletedParamState[];\n /**\n * Custom submit button. Pass a `<ng-template>` to replace the default arrow\n * button. Pass `null` to render no button. Default (`undefined`) renders\n * the built-in arrow.\n */\n @Input() submitButton?: TemplateRef<unknown> | null;\n\n // === Outputs ===\n\n /** Called on Enter or submit-button click. */\n @Output() readonly submitted = new EventEmitter<AutocompleteResult>();\n @Output() readonly errored = new EventEmitter<Error>();\n @Output() readonly valueChange = new EventEmitter<string>();\n @Output() readonly completedParamsChange = new EventEmitter<CompletedParamState[]>();\n @Output() readonly focused = new EventEmitter<void>();\n @Output() readonly blurred = new EventEmitter<void>();\n\n // === View refs ===\n\n @ViewChild(\"container\", { static: true }) containerRef!: ElementRef<HTMLDivElement>;\n @ViewChild(\"editor\", { static: false }) editorRef?: ElementRef<HTMLDivElement>;\n @ViewChild(\"pillContainer\") pillContainerRef?: ElementRef<HTMLSpanElement>;\n\n // === Public state for the template ===\n\n controller!: AIAutocompleteController;\n /**\n * Concrete light/dark value bound to `[attr.data-mode]`. Seeded in ngOnInit\n * so the attribute is present during SSR (where ModeController, gated behind\n * isPlatformBrowser in ngAfterViewInit, never runs). On the browser the\n * ModeController's resolve callback keeps this in sync — so its runtime\n * prefers-color-scheme updates and this binding always agree (no clobber).\n */\n resolvedMode: \"light\" | \"dark\" = \"dark\";\n\n // === Internal ===\n\n private modeController?: ModeController;\n private resizeObserver?: ResizeObserver;\n private onChangeFn: (value: string) => void = noop;\n private onTouchedFn: () => void = noop;\n // Holds a value written by Reactive Forms before ngOnInit ran. Reactive\n // Forms can call writeValue() during dynamic form construction (e.g. when\n // a FormControl already holds a value at the moment the directive is\n // created). We stash the value here and flush it in ngOnInit *after*\n // the controller exists — otherwise the editor renders empty even though\n // the form had a value. `undefined` means \"no pending write\".\n private pendingWriteValue: string | undefined;\n\n // §16.9: prefer `inject()` over constructor-parameter DI for components.\n private readonly platformId = inject(PLATFORM_ID);\n private readonly zone = inject(NgZone);\n private readonly cdr = inject(ChangeDetectorRef);\n\n ngOnInit(): void {\n // Seed before the browser guard so SSR renders a concrete data-mode.\n this.resolvedMode = resolveInitialMode(this.mode);\n if (!isPlatformBrowser(this.platformId)) return;\n\n this.controller = new AIAutocompleteController({\n apiConfig: this.apiConfig,\n optionOverrides: this.optionOverrides,\n maskCompletedText: this.maskCompletedText,\n columns: this.columns,\n dropdownTrigger: this.dropdownTrigger,\n optionsPosition: this.optionsPosition,\n closeDropdownOnBlur: this.closeDropdownOnBlur,\n showNonTappableOptions: this.showNonTappableOptions,\n source: \"full-sdk\",\n value: this.value,\n completedParams: this.completedParams,\n onSubmit: (result) => this.handleSubmit(result),\n onError: (error) => this.errored.emit(error),\n onChange: (text) => {\n this.valueChange.emit(text);\n this.onChangeFn(text);\n },\n onParamsChange: (params) => this.completedParamsChange.emit(params),\n onFocus: () => this.focused.emit(),\n onBlur: () => {\n this.blurred.emit();\n this.onTouchedFn();\n },\n setCursor: (offset) => {\n const editor = this.editorRef?.nativeElement;\n if (!editor) return;\n editor.focus();\n setCursorOffset(editor, offset);\n },\n });\n\n if (this.pendingWriteValue !== undefined) {\n this.controller.setValue(this.pendingWriteValue);\n this.pendingWriteValue = undefined;\n }\n }\n\n ngAfterViewInit(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n // ModeController writes `data-mode` to the element it's given. The CSS\n // selectors are scoped to `.magicx-aia[data-mode=\"...\"]` — which lives on\n // the inner `<div class=\"magicx-aia magicx-aia-container\" #container>`,\n // NOT the host `<ai-autocomplete>` element. The resolve callback mirrors\n // the value into `resolvedMode` so the `[attr.data-mode]` binding stays in\n // lockstep with ModeController — the binding handles SSR, ModeController\n // handles runtime prefers-color-scheme switches, and because they always\n // agree neither clobbers the other.\n this.modeController = new ModeController(\n this.containerRef.nativeElement,\n this.mode,\n (resolved) => {\n this.resolvedMode = resolved;\n this.cdr.markForCheck();\n },\n );\n\n // Pill-wrap detection — when the pill list wraps below the editor's last\n // line, drop its 8px left margin via a data attribute the CSS keys off.\n // Mirrors the React component's useLayoutEffect.\n if (typeof ResizeObserver !== \"undefined\") {\n this.zone.runOutsideAngular(() => {\n this.resizeObserver = new ResizeObserver(() => this.measurePillWrap());\n const editor = this.editorRef?.nativeElement;\n if (editor) this.resizeObserver.observe(editor);\n });\n this.measurePillWrap();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.controller) return;\n // `SimpleChanges` is `{ [key: string]: SimpleChange }`, so per\n // `noPropertyAccessFromIndexSignature` each key lookup uses bracket\n // notation — this keeps the strictness contract that the rest of the\n // workspace enforces.\n // Controlled-mode propagation\n if (changes[\"value\"] && this.value !== undefined) {\n this.controller.setValue(this.value);\n }\n if (changes[\"completedParams\"] && this.completedParams !== undefined) {\n this.controller.setCompletedParams(this.completedParams);\n }\n // Reactive options\n if (\n changes[\"apiConfig\"] ||\n changes[\"optionOverrides\"] ||\n changes[\"dropdownTrigger\"] ||\n changes[\"optionsPosition\"] ||\n changes[\"closeDropdownOnBlur\"] ||\n changes[\"showNonTappableOptions\"]\n ) {\n this.controller.update({\n apiConfig: this.apiConfig,\n optionOverrides: this.optionOverrides,\n dropdownTrigger: this.dropdownTrigger,\n optionsPosition: this.optionsPosition,\n closeDropdownOnBlur: this.closeDropdownOnBlur,\n showNonTappableOptions: this.showNonTappableOptions,\n });\n }\n if (changes[\"mode\"]) {\n // Keep the binding correct even when ModeController doesn't exist yet\n // (SSR / pre-ngAfterViewInit). On the browser, setMode triggers the\n // resolve callback which sets the same value.\n this.resolvedMode = resolveInitialMode(this.mode);\n this.modeController?.setMode(this.mode);\n }\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n this.modeController?.destroy();\n this.controller?.destroy();\n }\n\n // === Imperative API (exposed on the component instance via @ViewChild) ===\n\n /** Programmatically focus the editor. */\n focus(): void {\n this.editorRef?.nativeElement.focus();\n }\n\n /** Programmatically blur the editor. */\n blur(): void {\n this.editorRef?.nativeElement.blur();\n }\n\n /** Clear all state, rotate session, and re-fetch. */\n reset(): void {\n this.controller?.reset();\n }\n\n /** Switch color mode at runtime. */\n setMode(mode: AppearanceMode): void {\n this.mode = mode;\n this.resolvedMode = resolveInitialMode(mode);\n this.modeController?.setMode(mode);\n this.cdr.markForCheck();\n }\n\n // === Template helpers ===\n\n /**\n * 'default' → render the built-in arrow button.\n * 'custom' → project the consumer-supplied TemplateRef.\n * 'hidden' → no button.\n */\n get submitButtonState(): \"default\" | \"custom\" | \"hidden\" {\n if (this.submitButton === null) return \"hidden\";\n if (this.submitButton === undefined) return \"default\";\n return \"custom\";\n }\n\n /** Narrowed accessor for *ngTemplateOutlet — never undefined. */\n get customSubmitTemplate(): TemplateRef<unknown> | null {\n return this.submitButton ?? null;\n }\n\n get showInlinePills(): boolean {\n return this.pillPlacement === \"inline\";\n }\n\n get showDropdownPills(): boolean {\n return this.pillPlacement === \"dropdown\";\n }\n\n /**\n * `true` when there's something to submit — driven by current segments\n * and completed params. Read off the live editor via the controller state.\n */\n canSubmit(state: { segments: { length: number }; completedParams: { length: number } }): boolean {\n return state.segments.length > 0 || state.completedParams.length > 0;\n }\n\n onWrapperClick(event: MouseEvent): void {\n // Clicking a pill should activate it without stealing focus elsewhere.\n const target = event.target as HTMLElement | null;\n if (target?.closest(\"[data-aia-pill]\")) return;\n this.focus();\n }\n\n onSubmitButtonClick(event: MouseEvent): void {\n event.stopPropagation();\n this.handleSubmitFromUserAction();\n }\n\n onSubmitSlotClick(event: MouseEvent): void {\n event.stopPropagation();\n this.handleSubmitFromUserAction();\n }\n\n onSelectPill(index: number): void {\n this.controller.setActivePill(index);\n }\n\n // === ControlValueAccessor ===\n\n writeValue(value: string | null): void {\n const next = value ?? \"\";\n if (!this.controller) {\n // Reactive Forms can call writeValue() before ngOnInit creates the\n // controller (dynamic form construction, or a FormControl that already\n // had a value at directive-creation time). Buffer the value; ngOnInit\n // flushes it as soon as the controller exists.\n this.pendingWriteValue = next;\n return;\n }\n this.controller.setValue(next);\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(_disabled: boolean): void {\n // The contentEditable host doesn't have a native disabled attribute. For\n // v0.1 we accept the call so Angular's forms layer doesn't throw, but\n // the editor stays interactive. A future enhancement can toggle\n // contentEditable + ARIA disabled here.\n }\n\n // === Submit flow ===\n\n /**\n * Called by the controller's onSubmit callback (which fires from the\n * keyboard controller on Enter). Reads the live editor text — same trick\n * the React component uses — so the emitted query reflects whatever's in\n * the DOM right now, not a possibly-stale state snapshot.\n */\n private handleSubmit(_result: AutocompleteResult): void {\n const editor = this.editorRef?.nativeElement;\n if (!editor) return;\n const text = extractPlainText(editor);\n const params = this.completedParams ?? this.controller.getState().completedParams;\n const built = buildQuery(text, params);\n this.submitted.emit({\n query: text.trim(),\n raw_query: built.rawQuery,\n completed_params: built.completedParams,\n });\n this.controller.reset();\n }\n\n private handleSubmitFromUserAction(): void {\n const state = this.controller.getState();\n if (!this.canSubmit(state)) return;\n // Synthesize the result for the submit-button click path; same shape\n // the controller would deliver from a keyboard Enter, so handleSubmit\n // can take either entry point.\n this.handleSubmit({\n query: state.text.trim(),\n raw_query: \"\",\n completed_params: [],\n });\n }\n\n private measurePillWrap(): void {\n const container = this.pillContainerRef?.nativeElement;\n const editor = this.editorRef?.nativeElement;\n if (!container || !editor) return;\n const inner = container.firstElementChild as HTMLElement | null;\n if (!inner) return;\n // Wrap detection: the pill row's top vs the editor's bottom. When the\n // pills sit on (or above) the editor's last line they're NOT wrapped —\n // keep the 8px margin so they don't butt against typed text or the\n // placeholder. This handles the empty-editor + placeholder case\n // naturally: the placeholder still occupies the editor's line box.\n const cRect = inner.getBoundingClientRect();\n const eRect = editor.getBoundingClientRect();\n const wrapped = cRect.top >= eRect.bottom - 2;\n this.zone.run(() => {\n if (wrapped) container.setAttribute(\"data-aia-pill-wrapped\", \"\");\n else container.removeAttribute(\"data-aia-pill-wrapped\");\n });\n }\n}\n\nfunction noop(): void {\n // Default no-op for CVA callbacks.\n}\n\n/**\n * Resolve a concrete light/dark value from the configured mode. Used to seed\n * the `data-mode` attribute synchronously (including during SSR, where\n * ModeController never runs). On the server `window` is undefined → defaults\n * to \"dark\" (matches the vanilla/React behavior).\n */\nfunction resolveInitialMode(mode: AppearanceMode): \"light\" | \"dark\" {\n if (mode !== \"auto\") return mode;\n if (typeof window === \"undefined\") return \"dark\";\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n","<div\n #container\n class=\"magicx-aia magicx-aia-container\"\n [attr.data-pill-placement]=\"pillPlacement\"\n [attr.data-options-position]=\"optionsPosition\"\n [attr.data-animations]=\"animations ? 'on' : 'off'\"\n [attr.data-mode]=\"resolvedMode\"\n>\n <ai-autocomplete-dropdown\n *ngIf=\"controller\"\n [controller]=\"controller\"\n [showPills]=\"showDropdownPills\"\n ></ai-autocomplete-dropdown>\n\n <div\n class=\"magicx-aia-input-wrapper\"\n (click)=\"onWrapperClick($event)\"\n (keyup)=\"$event.stopPropagation()\"\n >\n <div class=\"magicx-aia-editor-area\" data-aia-editor=\"\">\n <div\n #editor\n *ngIf=\"controller\"\n [aiaEditorHost]=\"controller\"\n [autoFocus]=\"autoFocus\"\n class=\"magicx-aia-input\"\n data-aia-input=\"\"\n ></div>\n\n <ng-container *ngIf=\"controller && showInlinePills\">\n <span\n #pillContainer\n class=\"magicx-aia-pill-list-container\"\n data-aia-pill-list-container=\"\"\n *ngIf=\"\n (controller.isLoading$ | async) ||\n ((controller.suggestionPills$ | async)?.length ?? 0) > 0\n \"\n >\n <aia-pill-list\n [pills]=\"(controller.suggestionPills$ | async) ?? []\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"(controller.isActivePillSelected$ | async) ?? false\"\n [loading]=\"(controller.isLoading$ | async) ?? false\"\n (selectPill)=\"onSelectPill($event)\"\n ></aia-pill-list>\n </span>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"submitButtonState\">\n <aia-submit-button\n *ngSwitchCase=\"'default'\"\n [disabled]=\"\n !(\n controller &&\n canSubmit({\n segments: (controller.segments$ | async) ?? [],\n completedParams: (controller.completedParams$ | async) ?? []\n })\n )\n \"\n (submit)=\"onSubmitButtonClick($event)\"\n ></aia-submit-button>\n\n <span\n *ngSwitchCase=\"'custom'\"\n data-aia-submit=\"\"\n class=\"magicx-aia-submit-slot\"\n (click)=\"onSubmitSlotClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"customSubmitTemplate\"></ng-container>\n </span>\n </ng-container>\n </div>\n</div>\n","import {\n Directive,\n ElementRef,\n forwardRef,\n Input,\n inject,\n type OnDestroy,\n type OnInit,\n Renderer2,\n} from \"@angular/core\";\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport type { AIAutocompleteController } from \"../controller/ai-autocomplete.controller\";\n\n/**\n * Tier 2 input binder. Attach to a `<textarea>` or `<input>` and pass an\n * {@link AIAutocompleteController}:\n *\n * ```html\n * <textarea [aiaInput]=\"ac\"></textarea>\n * ```\n *\n * The directive wires the input's events (input/keydown/focus/blur) to the\n * controller, mirrors controller state into ARIA attributes\n * (`role=\"combobox\"`, `aria-expanded`, `aria-activedescendant`,\n * `aria-autocomplete`, `aria-controls`), and implements\n * {@link ControlValueAccessor} so the host element participates in Reactive\n * Forms out of the box:\n *\n * ```html\n * <textarea [aiaInput]=\"ac\" [formControl]=\"myControl\"></textarea>\n * ```\n *\n * Per the React hook's behavior, the first typed character is auto-capitalized\n * — typing \"h\" becomes \"H\" before being forwarded to the controller. The\n * cursor position is preserved across that rewrite.\n *\n * @public\n */\n@Directive({\n selector: \"[aiaInput]\",\n standalone: true,\n host: {\n role: \"combobox\",\n \"aria-autocomplete\": \"list\",\n \"(input)\": \"onInput($event)\",\n \"(keydown)\": \"onKeyDown($event)\",\n \"(keyup)\": \"onCaretMove()\",\n \"(mouseup)\": \"onCaretMove()\",\n \"(focus)\": \"onFocus()\",\n \"(blur)\": \"onBlur()\",\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n useExisting: forwardRef(() => AIAutocompleteInputDirective),\n multi: true,\n },\n ],\n})\nexport class AIAutocompleteInputDirective implements OnInit, OnDestroy, ControlValueAccessor {\n /**\n * The {@link AIAutocompleteController} that owns the autocomplete state.\n * Required. The directive throws on init if this is missing.\n */\n @Input(\"aiaInput\") controller!: AIAutocompleteController;\n\n private readonly el = inject<ElementRef<HTMLInputElement | HTMLTextAreaElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly destroy$ = new Subject<void>();\n\n private onChangeFn: (value: string) => void = noop;\n private onTouchedFn: () => void = noop;\n // Timestamp of the last `input` event. A `keyup`/`select` that fires within\n // this window is the tail of a keystroke, not a deliberate caret move, so we\n // skip the caret-move handler there (mirrors the editor host's selectionchange\n // guard). performance.now() is monotonic; 0 means \"no input yet\".\n private lastInputAt = 0;\n // Tracks the most-recently-promoted param so we only reposition the caret\n // once per option selection (mirrors the editor host's post-promote refocus).\n private lastSeenParamId = \"\";\n // Holds a value written by Reactive Forms before ngOnInit ran. Reactive\n // Forms can call writeValue() during dynamic form construction (e.g. when\n // a control is patched at the moment the directive is created), and our\n // controller binding may not be initialized yet. We stash the value here\n // and flush it into the controller in ngOnInit *before* subscribing to\n // text$, otherwise text$'s initial \"\" emission would clobber the form\n // value the textarea already shows. `undefined` means \"no pending write\".\n private pendingWriteValue: string | undefined;\n\n ngOnInit(): void {\n if (!this.controller) {\n throw new Error('[aiaInput] requires a controller — use `[aiaInput]=\"myController\"`.');\n }\n\n if (this.pendingWriteValue !== undefined) {\n this.controller.setValue(this.pendingWriteValue);\n this.pendingWriteValue = undefined;\n }\n\n const el = this.el.nativeElement;\n this.renderer.setAttribute(el, \"aria-controls\", this.controller.listboxId);\n\n // Sync editor text → DOM. Skips the write when values already match, so\n // user keystrokes don't fight with our writeback. Preserves the caret\n // position when we do write (and the element still has focus).\n this.controller.text$.pipe(takeUntil(this.destroy$)).subscribe((text) => {\n if (el.value === text) return;\n const wasFocused = typeof document !== \"undefined\" && document.activeElement === el;\n const start = el.selectionStart;\n const end = el.selectionEnd;\n this.renderer.setProperty(el, \"value\", text);\n if (wasFocused && start != null && end != null) {\n const clampedStart = Math.min(start, text.length);\n const clampedEnd = Math.min(end, text.length);\n try {\n el.setSelectionRange(clampedStart, clampedEnd);\n } catch {\n // `setSelectionRange` throws on some input types (e.g. \"number\");\n // safe to ignore — those inputs don't have a meaningful selection.\n }\n }\n });\n\n this.controller.isDropdownOpen$.pipe(takeUntil(this.destroy$)).subscribe((isOpen) => {\n this.renderer.setAttribute(el, \"aria-expanded\", String(isOpen));\n });\n\n this.controller.activeIndex$.pipe(takeUntil(this.destroy$)).subscribe((idx) => {\n if (idx >= 0) {\n this.renderer.setAttribute(\n el,\n \"aria-activedescendant\",\n `${this.controller.listboxId}-option-${idx}`,\n );\n } else {\n this.renderer.removeAttribute(el, \"aria-activedescendant\");\n }\n });\n\n // After an option selection promotes a param, the core appends its text and\n // stamps `caretOffset` at the end of the inserted text. The text$ subscriber\n // above writes the new value but *restores the pre-write caret* (correct for\n // typing echoes, wrong here), so we move the caret to the promoted position.\n // Keyed on newParamId so it fires once per selection, not on every tick.\n // Registered after text$ so the new value is in the DOM before we seek.\n this.controller.newParamId$.pipe(takeUntil(this.destroy$)).subscribe((id) => {\n const current = id ?? \"\";\n if (current && current !== this.lastSeenParamId) {\n this.lastSeenParamId = current;\n const offset = this.controller.getState().caretOffset ?? el.value.length;\n const clamped = Math.min(Math.max(offset, 0), el.value.length);\n // Only grab focus if we don't already have it — don't yank focus back\n // from wherever the user moved it after selecting (e.g. a host-app\n // button). setSelectionRange still positions the caret regardless.\n if (typeof document !== \"undefined\" && document.activeElement !== el) {\n el.focus();\n }\n try {\n el.setSelectionRange(clamped, clamped);\n } catch {\n // Some input types (e.g. \"number\") don't support setSelectionRange.\n }\n } else if (!current) {\n this.lastSeenParamId = \"\";\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // === Event handlers (wired via host metadata above) ===\n\n /**\n * Auto-capitalizes the first character on the user's first keystroke so the\n * server receives \"Create\" instead of \"create\". Matches React's\n * `handleChange` in `useAIAutocomplete`. Skipped during IME composition so\n * we don't disrupt multi-keystroke input methods (Pinyin, Hangul, etc.).\n */\n onInput(event: Event): void {\n // Stamp the input time before anything else. The autocapitalize path below\n // calls setSelectionRange, which can synchronously fire a `select` event →\n // onCaretMove; stamping first ensures that event falls inside the guard\n // window and is treated as part of this keystroke, not a caret move.\n this.lastInputAt = performance.now();\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const raw = target.value;\n const isComposing = (event as InputEvent).isComposing === true;\n const shouldCapitalize = raw.length > 0 && !isComposing && raw[0] !== raw[0].toUpperCase();\n\n let next = raw;\n if (shouldCapitalize) {\n const start = target.selectionStart;\n const end = target.selectionEnd;\n next = raw[0].toUpperCase() + raw.slice(1);\n this.renderer.setProperty(target, \"value\", next);\n if (start != null && end != null) {\n try {\n target.setSelectionRange(start, end);\n } catch {\n // See note in ngOnInit's text$ subscriber.\n }\n }\n }\n\n this.controller.handleTextChange(next);\n // Sync the real caret into the core. The dropdown's auto-trigger gate only\n // opens when the caret is at the end of the text; without this, the core's\n // `caretOffset` stays pinned at whatever a prior promote/select set it to\n // and goes stale as the user keeps typing, wedging the dropdown closed.\n // selectionStart is null on some input types (number/email/color); treat\n // that as \"caret at end\" rather than feeding null into the core.\n this.controller.handleCaretAfterInput(target.selectionStart ?? target.value.length);\n this.onChangeFn(next);\n }\n\n onKeyDown(event: KeyboardEvent): void {\n this.controller.handleKeyDown(event);\n }\n\n /**\n * Caret moved by something other than typing — arrow keys, Home/End, or a\n * mouse click/drag (keyup + mouseup). Forward the new offset so the core can\n * re-evaluate the caret-at-end dropdown gate (and exit re-edit if the caret\n * left the region). We deliberately do NOT listen for the `select` event:\n * programmatic `setSelectionRange` calls (the text$ writeback, the post-select\n * caret reposition) fire it in jsdom/some browsers, which would re-enter here\n * and clobber `caretOffset`. `keyup`/`mouseup` only fire for real user input.\n * Skipped right after an `input` event, where the caret is already handled by\n * `handleCaretAfterInput` above.\n */\n onCaretMove(): void {\n if (performance.now() - this.lastInputAt < 50) return;\n const el = this.el.nativeElement;\n // selectionStart is null on some input types — treat as caret at end.\n this.controller.handleCaretMove(el.selectionStart ?? el.value.length);\n }\n\n onFocus(): void {\n this.controller.setFocused(true);\n }\n\n onBlur(): void {\n this.controller.setFocused(false);\n this.onTouchedFn();\n }\n\n // === ControlValueAccessor ===\n\n writeValue(value: string | null): void {\n const next = value ?? \"\";\n this.renderer.setProperty(this.el.nativeElement, \"value\", next);\n // If Angular calls writeValue() before ngOnInit (possible during dynamic\n // form construction), queue the value and let ngOnInit flush it. We\n // can't push it into the controller now because either the controller\n // binding hasn't resolved yet, or text$'s initial subscription would\n // overwrite it moments later.\n if (this.controller) {\n this.controller.setValue(next);\n } else {\n this.pendingWriteValue = next;\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this.renderer.setProperty(this.el.nativeElement, \"disabled\", disabled);\n }\n}\n\nfunction noop(): void {\n // Default no-op callback for CVA — overwritten by Angular's form bridge.\n}\n","import { NgModule } from \"@angular/core\";\nimport { AIAutocompleteComponent } from \"./ai-autocomplete/ai-autocomplete.component\";\nimport { AIAutocompleteDropdownComponent } from \"./ai-autocomplete-dropdown/ai-autocomplete-dropdown.component\";\nimport { AIAutocompleteInputDirective } from \"./input/ai-autocomplete-input.directive\";\n\n/**\n * Convenience NgModule that re-exports every public component and directive\n * in this package. Standalone-first consumers can import the individual\n * symbols directly; legacy NgModule-based codebases import this once and\n * get everything.\n *\n * @public\n */\n@NgModule({\n imports: [AIAutocompleteComponent, AIAutocompleteDropdownComponent, AIAutocompleteInputDirective],\n exports: [AIAutocompleteComponent, AIAutocompleteDropdownComponent, AIAutocompleteInputDirective],\n})\nexport class AIAutocompleteModule {}\n","/**\n * Public API surface for @magicx-eng/ai-autocomplete-angular.\n *\n * Populated incrementally as features land — see TDB.md §6.6 for the full\n * planned export list. Only symbols re-exported here are considered part of\n * the package's public contract (TDB §19.2).\n */\n\n// === Re-exported wire types ===\nexport type {\n AccessTokenConfig,\n AccessTokenResult,\n APIConfig,\n APIKeyConfig,\n AppearanceMode,\n AutocompleteResult,\n CompletedParam,\n CompletedParamState,\n OptionOverrides,\n Segment,\n Suggestion,\n SuggestionOption,\n TaskKind,\n} from \"@magicx-eng/ai-autocomplete-vanilla\";\n// === Tier 1: Full component ===\nexport { AIAutocompleteComponent } from \"./lib/ai-autocomplete\";\n// === Convenience NgModule ===\nexport { AIAutocompleteModule } from \"./lib/ai-autocomplete.module\";\n// === Tier 2: Dropdown component ===\nexport { AIAutocompleteDropdownComponent } from \"./lib/ai-autocomplete-dropdown\";\n// === Tier 2: Controller (headless logic class) ===\nexport { AIAutocompleteController } from \"./lib/controller\";\n// === Tier 2: Input binder + ControlValueAccessor ===\nexport { AIAutocompleteInputDirective } from \"./lib/input\";\n// === Angular-specific public types ===\nexport type {\n AIAutocompleteControllerOptions,\n AIAutocompleteControllerState,\n AIAutocompleteControllerUpdate,\n AIAutocompleteDropdownState,\n} from \"./lib/shared/types\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map","CoreAIAutocomplete","noop"],"mappings":";;;;;;;;;AAEA;;;;;;AAMG;MAiBU,gBAAgB,CAAA;AAhB7B,IAAA,WAAA,GAAA;;AAoBW,QAAA,IAAK,CAAA,KAAA,GAA4C,QAAQ,CAAC;;AAE1D,QAAA,IAAO,CAAA,OAAA,GAAsD,OAAO,CAAC;;AAErE,QAAA,IAAM,CAAA,MAAA,GAAG,KAAK,CAAC;;AAEf,QAAA,IAAM,CAAA,MAAA,GAAG,KAAK,CAAC;KACzB;;8GAXY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,kZAXjB,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kqBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FAW1B,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAhB5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EACX,UAAA,EAAA,IAAI,EACC,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC3B,QAAA,EAAA,2BAA2B,EAE/B,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,aAAa;AACpB,wBAAA,mBAAmB,EAAE,OAAO;AAC5B,wBAAA,qBAAqB,EAAE,SAAS;AAChC,wBAAA,oBAAoB,EAAE,oBAAoB;AAC1C,wBAAA,oBAAoB,EAAE,oBAAoB;AAC1C,wBAAA,2BAA2B,EAAE,KAAK;AACnC,qBAAA,EAAA,MAAA,EAAA,CAAA,kqBAAA,CAAA,EAAA,CAAA;8BAIQ,GAAG,EAAA,CAAA;sBAAX,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;;;ACjCR;;;;;AAKG;MAcU,cAAc,CAAA;AAb3B,IAAA,WAAA,GAAA;;AAiBW,QAAA,IAAK,CAAA,KAAA,GAA2C,SAAS,CAAC;KACpE;;4GALY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,wOARf,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8OAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FAQ1B,cAAc,EAAA,UAAA,EAAA,CAAA;kBAb1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EACT,UAAA,EAAA,IAAI,EACC,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC3B,QAAA,EAAA,2BAA2B,EAE/B,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,mBAAmB,EAAE,OAAO;AAC5B,wBAAA,2BAA2B,EAAE,OAAO;AACrC,qBAAA,EAAA,MAAA,EAAA,CAAA,8OAAA,CAAA,EAAA,CAAA;8BAIQ,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;;;ACdR;;;;;;;AAOG;MAUU,iBAAiB,CAAA;AAT9B,IAAA,WAAA,GAAA;AAUW,QAAA,IAAK,CAAA,KAAA,GAAiB,EAAE,CAAC;AACzB,QAAA,IAAe,CAAA,eAAA,GAAG,CAAC,CAAC;AACpB,QAAA,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AACzB;;;;;AAKG;AACM,QAAA,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AACzB;;;;;AAKG;AACM,QAAA,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;AAEb,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU,CAAC;;QAGlD,IAAA,CAAA,sBAAsB,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAmB5C,QAAA,IAAW,CAAA,WAAA,GAAG,CAAC,CAAS,EAAE,IAAgB,KAAa,IAAI,CAAC,IAAI,CAAC;QACjE,IAAY,CAAA,YAAA,GAAG,CAAC,CAAS,EAAE,CAAS,KAAa,CAAC,CAAC;KAWpD;;AA5BC,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,OAAO,IAAI,CAAC,cAAc,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC;KAC9D;AAED;;;;AAIG;AACH,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAC5B,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAC5B,OAAO,GAAG,CAAC;KACZ;AAKD,IAAA,WAAW,CAAC,KAAa,EAAA;QACvB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC7B;AAED,IAAA,eAAe,CAAC,KAAY,EAAA;;QAE1B,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;;+GApDU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5B9B,2oCAoCA,EAAA,MAAA,EAAA,CAAA,88BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDdY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FAMX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAT7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACb,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EACN,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,2oCAAA,EAAA,MAAA,EAAA,CAAA,88BAAA,CAAA,EAAA,CAAA;8BAK5B,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAOG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAOG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEa,UAAU,EAAA,CAAA;sBAA5B,MAAM;;;AEpCT;;;;;;;;AAQG;MASU,aAAa,CAAA;AAR1B,IAAA,WAAA,GAAA;;AAUW,QAAA,IAAG,CAAA,GAAA,GAAG,OAAO,CAAC;;AAMd,QAAA,IAAM,CAAA,MAAA,GAAG,KAAK,CAAC;KAmBzB;AAXC;;;;AAIG;AACH,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAChC,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,EAAE;YAAE,OAAO;QAC9C,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AACzC,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KAC9B;;2GA1BU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,aAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,sTC5B1B,iRAWA,EAAA,MAAA,EAAA,CAAA,mrBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FDiBa,aAAa,EAAA,UAAA,EAAA,CAAA;kBARzB,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EACC,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,iRAAA,EAAA,MAAA,EAAA,CAAA,mrBAAA,CAAA,EAAA,CAAA;8BAM5B,GAAG,EAAA,CAAA;sBAAX,KAAK;gBAEG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBAEG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEgC,OAAO,EAAA,CAAA;sBAA5C,SAAS;gBAAC,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;;;AE5BtC;;;;;;;;;;;AAWG;MAUU,uBAAuB,CAAA;AATpC,IAAA,WAAA,GAAA;AAWW,QAAA,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AACtB,QAAA,IAAE,CAAA,EAAA,GAAG,EAAE,CAAC;AACR,QAAA,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AAEN,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAoB,CAAC;AAC9C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;AAExD,QAAA,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AAEC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;KA+BlD;IA5BC,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACtE;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;AACrE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;SACzB,EAAE,GAAG,CAAC,CAAC;KACT;IAED,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO;AACrD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KACvB;AAED,IAAA,SAAS,CAAC,KAAoB,EAAA;QAC5B,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO;QACrD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAC9C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjB,SAAA;KACF;;qHAzCU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;yGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCpC,ykCA4BA,EAAA,MAAA,EAAA,CAAA,w1LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDCY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FAMX,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBATnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EACnB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EACN,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,ykCAAA,EAAA,MAAA,EAAA,CAAA,w1LAAA,CAAA,EAAA,CAAA;8BAK5B,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEa,MAAM,EAAA,CAAA;sBAAxB,MAAM;gBACY,SAAS,EAAA,CAAA;sBAA3B,MAAM;;;AE7BT;;;;;;;;AAQG;MASU,uBAAuB,CAAA;AARpC,IAAA,WAAA,GAAA;AASW,QAAA,IAAO,CAAA,OAAA,GAAuB,EAAE,CAAC;AACjC,QAAA,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC,CAAC;AACjB,QAAA,IAAS,CAAA,SAAA,GAAG,EAAE,CAAC;AACf,QAAA,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AACzB;;;;AAIG;AACM,QAAA,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;AAEJ,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAoB,CAAC;AAC9C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAU,CAAC;AAE1D,QAAA,IAAiB,CAAA,iBAAA,GAAG,CAAC,CAAS,EAAE,GAAqB,KAAa,GAAG,CAAC,IAAI,CAAC;KAC5E;;qHAhBY,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,oQC9BpC,klBAaA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDYY,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,6HAAE,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,eAAA,EAAA,IAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FAKnD,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBARnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,aAAa,EAAE,uBAAuB,CAAC,mBAC9C,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,klBAAA,EAAA,CAAA;8BAI5B,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAMG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEa,MAAM,EAAA,CAAA;sBAAxB,MAAM;gBACY,SAAS,EAAA,CAAA;sBAA3B,MAAM;;;AEKT;;;;;;;;;;;;;;AAcG;MAmBU,+BAA+B,CAAA;AAlB5C,IAAA,WAAA,GAAA;;AAsBW,QAAA,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;;AAY1B,QAAA,IAAY,CAAA,YAAA,GAA4B,IAAI,CAAC;AAG5B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;;QAWxC,IAAyB,CAAA,yBAAA,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAErD;;;AAGG;AACM,QAAA,IAAS,CAAA,SAAA,GAAG,mBAAmB,EAAE,CAAC;;;;;QAmB1B,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAC;;;AAIzD,QAAA,IAAkB,CAAA,kBAAA,GAA2B,IAAI,CAAC;QAmH1D,IAAY,CAAA,YAAA,GAAG,CAAC,CAAS,EAAE,CAAS,KAAa,CAAC,CAAC;KAkBpD;;AA1KC,IAAA,IAAI,SAAS,GAAA;QACX,IAAI,GAAG,GAAG,qBAAqB,CAAC;QAChC,IAAI,IAAI,CAAC,YAAY;YAAE,GAAG,IAAI,aAAa,CAAC;QAC5C,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,GAAG,IAAI,CAAI,CAAA,EAAA,IAAI,CAAC,SAAS,EAAE,CAAC;AAChD,QAAA,OAAO,GAAG,CAAC;KACZ;IAkCD,QAAQ,GAAA;;QAEN,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACtC,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;YACnD,IAAI,CAAC,SAAS,EAAE,CAAC;AAClB,SAAA;;;;;;;AAOD,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE;YAClF,IAAI,CAAC,MAAM,EAAE,CAAC;AACf,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;AAED;;;;AAIG;IACK,SAAS,GAAA;QACf,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,OAAO;AACR,SAAA;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACjD,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;YAC9B,OAAO;AACR,SAAA;;QAED,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE;AAC5E,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;YAC5B,OAAO;AACR,SAAA;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAC5D,QAAA,IAAI,CAAC,YAAY,GAAG,MAAK;;AACvB,YAAA,IAAI,CAAC,YAAY,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,IAAG,MAAM,GAAG,OAAO,CAAC;AAC7D,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC1B,SAAC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;KAC5D;IAEO,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE;YACrC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/D,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;KAC/B;;IAGO,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CACzE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,KAAI;;YACtB,MAAM,gBAAgB,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3C,YAAA,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,gBAAgB,KAAhB,IAAA,IAAA,gBAAgB,KAAhB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,gBAAgB,CAAE,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;AAChD,YAAA,MAAM,UAAU,GAAG,SAAS,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;AACtE,YAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACxC,MAAM,qBAAqB,GAAG,EAAE,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC;AAC5D,YAAA,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,KAAK,YAAY,IAAI,UAAU,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;;;;;;;AAQ5E,YAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzC,gBAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAY,IAAI,CAAC,kBAAkB,KAAE,SAAS,EAAE,KAAK,EAAG,CAAA,CAAA;AACzD,aAAA;YAED,MAAM,iBAAiB,GACrB,EAAE,CAAC,WAAW,IAAI,CAAC,IAAI,OAAO,CAAC,MAAA,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,CAAC,CAAC;AACvE,YAAA,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,aAAa,CACxD,iBAAiB,EACjB,EAAE,CAAC,YAAY,CAChB,CAAC;AACF,YAAA,MAAM,OAAO,GAAoB;gBAC/B,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,OAAO;gBACP,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,oBAAoB,EAAE,EAAE,CAAC,oBAAoB;gBAC7C,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,UAAU;gBACV,YAAY;gBACZ,qBAAqB;AACrB,gBAAA,QAAQ,EAAE,gBAAgB,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAA,CAAA,EAAI,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE;gBACrF,SAAS;gBACT,UAAU;gBACV,eAAe,EAAE,EAAE,CAAC,eAAe;aACpC,CAAC;AACF,YAAA,IAAI,SAAS;AAAE,gBAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;YACjD,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,OAAO,CAAE,EAAA,EAAA,SAAS,EAAG,CAAA,CAAA;SAClC,CAAC,CACH,CAAC;KACH;AAID,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KACtC;AAED,IAAA,QAAQ,CAAC,MAAwB,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KACtC;AAED,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;KAC/C;AAED,IAAA,WAAW,CAAC,KAAY,EAAA;;QAEtB,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;;6HA/LU,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;iHAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjF5C,muEAuEA,EAAA,MAAA,EAAA,CAAA,ywLAAA,EAAA,6kHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FAUP,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAlB3C,SAAS;+BACE,0BAA0B,EAAA,UAAA,EACxB,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,uBAAuB;wBACvB,cAAc;wBACd,gBAAgB;qBACjB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,muEAAA,EAAA,MAAA,EAAA,CAAA,ywLAAA,EAAA,6kHAAA,CAAA,EAAA,CAAA;8BAS5B,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAOG,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;AE5FR;;;;;;;;;;;;;;;;;;AAkBG;SACa,WAAW,CACzB,OAAsB,EACtB,QAAyB,EACzB,UAAoC,EAAA;IAEpC,OAAO,OAAO,CAAC,IAAI,CACjBA,KAAG,CAAC,QAAQ,CAAC,EACb,oBAAoB,CAAC,UAAU,CAAC,EAChC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAC;AACJ;;ACdA;;;;;;;;;;;;AAYG;MACU,wBAAwB,CAAA;AAwEnC;;;AAGG;IACH,WAAY,CAAA,OAAwC,EAAE,EAAA;;;;;QAtErC,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAoB,OAAO,CAAC,CAAC;AAE5E,QAAA,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAqE1B,QAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;YACnC,MAAM,IAAI,KAAK,CACb,2DAA2D;AACzD,gBAAA,wEAAwE,CAC3E,CAAC;AACH,SAAA;;;QAID,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE3C,IAAI,CAAC,IAAI,GAAG,IAAIC,cAAkB,CAAC,IAAI,kCAClC,IAAI,CAAA,EAAA,EACP,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,cAAc;;;;YAIrC,eAAe,EAAE,MAAA,IAAI,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,OAAO,IAChD,CAAC;AAEH,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;QAetE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAK;YAC9C,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnE,SAAC,CAAC,CAAC;;;;;;;;AASH,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACrF,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAC9E,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,CAAC;AACxF,QAAA,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC;AAC9E,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;;;;;;;;;;QAWtE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAC/BD,KAAG,CAAC,YAAY,CAAC,EACjB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAC1EA,KAAG,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,KAAK,eAAe,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,EAClE,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAC;KACH;;;AAKD,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;KAC5B;;AAGD,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;AAED;;;;AAIG;IACH,QAAQ,GAAA;QACN,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAC3C;;;;;;;;;;;;IAcD,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KACnB;;AAGD,IAAA,YAAY,CAAC,MAAwB,EAAA;QACnC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KAChC;;AAGD,IAAA,aAAa,CAAC,KAAa,EAAA;QACzB,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAChC;;IAGD,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;KAC7B;;IAGD,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;KAC7B;;AAGD,IAAA,QAAQ,CAAC,IAAY,EAAA;QACnB,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC1B;;AAGD,IAAA,kBAAkB,CAAC,MAA6B,EAAA;QAC9C,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;KACtC;;AAGD,IAAA,gBAAgB,CAAC,KAAa,EAAA;QAC5B,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;KACnC;;AAGD,IAAA,aAAa,CAAC,KAAoB,EAAA;QAChC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAChC;;AAGD,IAAA,UAAU,CAAC,OAAgB,EAAA;QACzB,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KAC/B;;AAGD,IAAA,iBAAiB,CAAC,OAAe,EAAA;QAC/B,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;KACtC;;IAGD,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;KAC1B;;AAGD,IAAA,qBAAqB,CAAC,MAAqB,EAAA;QACzC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;KACzC;;AAGD,IAAA,eAAe,CAAC,MAAqB,EAAA;QACnC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;KACnC;;AAGD,IAAA,mBAAmB,CAAC,WAAmB,EAAA;QACrC,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,KAAK,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;KACnD;;AAGD,IAAA,sBAAsB,CAAC,KAAa,EAAA;QAClC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;KACzC;;AAID;;;;;;AAMG;AACH,IAAA,MAAM,CAAC,IAAoC,EAAA;QACzC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvB,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE;YACtC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClD,SAAA;KACF;AAED;;;;AAIG;IACH,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;KAC3B;AACF,CAAA;AAED;AAEA;;;;;;AAMG;AACH,SAAS,KAAK,CAAI,CAAe,EAAE,CAAe,EAAA;IAChD,IAAI,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;AACzB,IAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK,CAAC;AACxC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACjC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;AACjC,KAAA;AACD,IAAA,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAY,EAAA;AACpC,IAAA,OAAO,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACnE,CAAC;AAED,SAAS,YAAY,CAAC,CAAY,EAAA;IAChC,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,eAAe,EAAE,CAAC,CAAC,eAAe;QAClC,eAAe,EAAE,CAAC,CAAC,qBAAqB;QACxC,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,mBAAmB;AAClC,QAAA,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,cAAc,EAAE,CAAC,CAAC,cAAc;QAChC,eAAe,EAAE,CAAC,CAAC,eAAe;QAClC,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,WAAW,EAAE,CAAC,CAAC,WAAW;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,CAAY,EACZ,eAAkC,EAAA;AAElC,IAAA,MAAM,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;IACpC,MAAM,gBAAgB,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,YAAY,GAAsB,YAAY;AAClD,UAAE;YACE,IAAI,EAAE,YAAY,CAAC,cAAc;YACjC,IAAI,EAAE,YAAY,CAAC,qBAAqB;AACxC,YAAA,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,YAAY,CAAC,OAAO;AAC9B,SAAA;UACD,IAAI,CAAC;IACT,MAAM,kBAAkB,GAAG,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,KAAA,CAAA,GAAA,YAAY,GAAI,gBAAgB,CAAC;AAC5D,IAAA,MAAM,aAAa,GAAG,YAAY,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC;IAC9E,OAAO;AACL,QAAA,WAAW,EAAE,kBAAkB,GAAG,iCAAM,kBAAkB,CAAA,EAAA,EAAE,OAAO,EAAE,CAAC,CAAC,eAAe,IAAG,GAAG,EAAE;QAC9F,WAAW,EAAE,CAAC,CAAC,mBAAmB;QAClC,MAAM,EAAE,CAAC,CAAC,cAAc;AACxB,QAAA,KAAK,EAAE,aAAa;QACpB,oBAAoB,EAAE,CAAC,CAAC,oBAAoB;AAC5C,QAAA,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC9B,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QACxC,eAAe;KAChB,CAAC;AACJ;;ACjZA;;;AAGG;AACH,IAAI,kBAAuC,CAAC;AAC5C,SAAS,qBAAqB,GAAA;IAC5B,IAAI,kBAAkB,KAAK,SAAS;AAAE,QAAA,OAAO,kBAAkB,CAAC;IAChE,IAAI,OAAO,QAAQ,KAAK,WAAW;AAAE,QAAA,OAAO,KAAK,CAAC;IAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC5C,IAAA,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;AACxD,IAAA,kBAAkB,GAAG,KAAK,CAAC,eAAe,KAAK,gBAAgB,CAAC;AAChE,IAAA,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;AAWG;MAoBU,iCAAiC,CAAA;AAnB9C,IAAA,WAAA,GAAA;AAqBW,QAAA,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;AAET,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAA6B,UAAU,CAAC,CAAC;AACpD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACtB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AAExC,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAClB,QAAA,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;AAChB,QAAA,IAAe,CAAA,eAAA,GAAG,EAAE,CAAC;AACrB,QAAA,IAAa,CAAA,aAAA,GAAG,EAAE,CAAC;AACnB,QAAA,IAAc,CAAA,cAAA,GAAkB,IAAI,CAAC;KAkM9C;IA7LC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC1D,SAAA;AAED,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;AACjC,QAAA,MAAM,MAAM,GAAG,qBAAqB,EAAE,GAAG,gBAAgB,GAAG,MAAM,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,mCAAmC,EAAE,MAAM,CAAC,CAAC;;;;QAK5E,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,cAAc,CAAC,MAAK;gBAClB,IAAI,OAAO,QAAQ,KAAK,WAAW;oBAAE,OAAO;AAC5C,gBAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,EAAE,EAAE;AACjC,oBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAClC,iBAAA;AAAM,qBAAA;oBACL,EAAE,CAAC,KAAK,EAAE,CAAC;AACZ,iBAAA;AACH,aAAC,CAAC,CAAC;AACJ,SAAA;QAED,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,yBAAyB,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;YACrE,QAAQ,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACjF,SAAA;QACD,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACpF,SAAA;KACF;;IAID,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACvB;IAED,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;KAC/E;AAED,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KACtC;AAED,IAAA,OAAO,CAAC,KAAqB,EAAA;;QAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QACjC,MAAM,IAAI,GAAG,CAAC,CAAA,EAAA,GAAA,MAAA,KAAK,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAC,YAAY,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACvF,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,EAAE,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,QAAQ,CAAC;AACzC,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,CAAC;YAAE,OAAO;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC;YAAE,OAAO;QAC/C,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACtC,QAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACvB,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrB,GAAG,CAAC,eAAe,EAAE,CAAC;AACtB,QAAA,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KAClC;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KACnC;;IAIO,SAAS,GAAA;QACf,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;AAC3B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;AACjC,QAAA,MAAM,GAAG,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3E,MAAM,IAAI,GAAG,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC1E,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;KACxC;IAEO,6BAA6B,GAAA;QACnC,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO;AAC5C,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;;;;AAIjC,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YAC/B,MAAM,OAAO,GAAG,MAAW;;AACzB,gBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;AACpC,gBAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,CAAC;oBAAE,OAAO;AACzC,gBAAA,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;oBAAE,OAAO;AAC5D,gBAAA,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC;AAC9B,gBAAA,MAAM,OAAO,GACX,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,GAAI,MAAkB,GAAG,MAAM,CAAC,aAAa,CAAC;AACrF,gBAAA,MAAM,MAAM,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,OAAO,CAAc,6CAA6C,CAAC,CAAC;;;AAG5F,gBAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,MAAM,aAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,OAAO,CAAC,SAAS,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC;AACrD,gBAAA,IAAI,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE;AAClD,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;oBAClE,OAAO;AACR,iBAAA;gBACD,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE;oBAAE,OAAO;gBACtD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,yBAAyB,GAAG,OAAO,CAAC;AACzC,YAAA,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;AACxD,SAAC,CAAC,CAAC;KACJ;IAEO,uBAAuB,GAAA;AAC7B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;;;AAGjC,QAAA,MAAM,OAAO,GAAG,CAAC,KAAY,KAAU;;YACrC,MAAM,UAAU,GAAG,KAAmB,CAAC;AACvC,YAAA,MAAM,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC;YAC/B,IAAI,CAAC,KAAK,iBAAiB,IAAI,CAAC,KAAK,iBAAiB,IAAI,CAAC,KAAK,gBAAgB,EAAE;gBAChF,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,OAAO;AACR,aAAA;AACD,YAAA,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBACpD,MAAM,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAA,EAAA,GAAA,UAAU,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC,CAAC;gBAC1E,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;oBACpD,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB,iBAAA;AACF,aAAA;AACH,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC;AACnC,QAAA,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;KAC7C;IAEO,qBAAqB,GAAA;AAC3B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;;AACxE,YAAA,IAAI,CAAC,cAAc,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAK,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,EAAE,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC;AAErD,YAAA,qBAAqB,CAAC;AACpB,gBAAA,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,cAAc,EAAE,MAAA,CAAA,EAAA,GAAA,KAAK,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI;gBAC9C,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,SAAS,EAAE,KAAK,CAAC,SAAS;AAC3B,aAAA,CAAC,CAAC;;;YAIH,MAAM,cAAc,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;AAC9C,YAAA,IAAI,cAAc,IAAI,cAAc,KAAK,IAAI,CAAC,eAAe,EAAE;AAC7D,gBAAA,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;gBACtC,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,eAAe,CAAC,EAAE,CAAC,CAAC;AACzD,gBAAA,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAC9B,aAAA;iBAAM,IAAI,CAAC,cAAc,EAAE;AAC1B,gBAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC3B,aAAA;;YAGD,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAK,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,EAAE,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;AAC/C,YAAA,IAAI,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,EAAE;AAChF,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAC/B,gBAAA,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;AAC1C,aAAA;iBAAM,IAAI,CAAC,SAAS,EAAE;AACrB,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACzB,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;;+HA9MU,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mHAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,CAAA,eAAA,EAAA,YAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,UAAA,EAAA,GAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAAjC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAnB7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,mBAAmB,EAAE,MAAM;AAC3B,wBAAA,eAAe,EAAE,SAAS;AAC1B,wBAAA,UAAU,EAAE,MAAM;AAClB,wBAAA,YAAY,EAAE,MAAM;AACpB,wBAAA,QAAQ,EAAE,GAAG;AACb,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,oBAAoB,EAAE,sBAAsB;AAC5C,wBAAA,kBAAkB,EAAE,oBAAoB;AACxC,wBAAA,SAAS,EAAE,iBAAiB;AAC5B,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,QAAQ,EAAE,UAAU;AACrB,qBAAA;iBACF,CAAA;8BAEyB,UAAU,EAAA,CAAA;sBAAjC,KAAK;uBAAC,eAAe,CAAA;gBACb,SAAS,EAAA,CAAA;sBAAjB,KAAK;;;AC1DR;;;;;;AAMG;MASU,qBAAqB,CAAA;AARlC,IAAA,WAAA,GAAA;AASW,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AACP,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAc,CAAC;KAK5D;AAHC,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzB;;mHANU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,8ICxBlC,qeAkBA,EAAA,MAAA,EAAA,CAAA,4bAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FDMa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EACC,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,qeAAA,EAAA,MAAA,EAAA,CAAA,4bAAA,CAAA,EAAA,CAAA;8BAK5B,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACa,MAAM,EAAA,CAAA;sBAAxB,MAAM;;;AEcT;;;;;;;AAOG;MAwBU,uBAAuB,CAAA;AAvBpC,IAAA,WAAA,GAAA;AA8BW,QAAA,IAAiB,CAAA,iBAAA,GAAG,KAAK,CAAC;;AAG1B,QAAA,IAAa,CAAA,aAAA,GAAqC,UAAU,CAAC;;AAE7D,QAAA,IAAI,CAAA,IAAA,GAAmB,MAAM,CAAC;AAC9B,QAAA,IAAe,CAAA,eAAA,GAAsB,OAAO,CAAC;AAC7C,QAAA,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC;;AAKlB,QAAA,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;;;AAeP,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAsB,CAAC;AACnD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAS,CAAC;AACpC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;AACzC,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAyB,CAAC;AAClE,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;AACnC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;AAWtD;;;;;;AAMG;AACH,QAAA,IAAY,CAAA,YAAA,GAAqB,MAAM,CAAC;AAMhC,QAAA,IAAU,CAAA,UAAA,GAA4BE,MAAI,CAAC;AAC3C,QAAA,IAAW,CAAA,WAAA,GAAeA,MAAI,CAAC;;AAUtB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACjC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACtB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;KA+RlD;IA7RC,QAAQ,GAAA;;QAEN,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO;AAEhD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAwB,CAAC;YAC7C,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;AACnD,YAAA,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAC/C,YAAA,OAAO,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5C,YAAA,QAAQ,EAAE,CAAC,IAAI,KAAI;AACjB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACvB;AACD,YAAA,cAAc,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;YACnE,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAClC,MAAM,EAAE,MAAK;AACX,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACpB,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB;AACD,YAAA,SAAS,EAAE,CAAC,MAAM,KAAI;;gBACpB,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AAC7C,gBAAA,IAAI,CAAC,MAAM;oBAAE,OAAO;gBACpB,MAAM,CAAC,KAAK,EAAE,CAAC;AACf,gBAAA,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;aACjC;AACF,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE;YACxC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACpC,SAAA;KACF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO;;;;;;;;;AAShD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CACtC,IAAI,CAAC,YAAY,CAAC,aAAa,EAC/B,IAAI,CAAC,IAAI,EACT,CAAC,QAAQ,KAAI;AACX,YAAA,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;AAC7B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC1B,SAAC,CACF,CAAC;;;;AAKF,QAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;AACzC,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;;AAC/B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;gBACvE,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AAC7C,gBAAA,IAAI,MAAM;AAAE,oBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAClD,aAAC,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;KACF;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;;QAChC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;;;;;;QAM7B,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAChD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,SAAA;QACD,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE;YACpE,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC1D,SAAA;;QAED,IACE,OAAO,CAAC,WAAW,CAAC;YACpB,OAAO,CAAC,iBAAiB,CAAC;YAC1B,OAAO,CAAC,iBAAiB,CAAC;YAC1B,OAAO,CAAC,iBAAiB,CAAC;YAC1B,OAAO,CAAC,qBAAqB,CAAC;YAC9B,OAAO,CAAC,wBAAwB,CAAC,EACjC;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;gBAC7C,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;AACpD,aAAA,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;;;;YAInB,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,SAAA;KACF;IAED,WAAW,GAAA;;AACT,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAU,EAAE,CAAC;AAClC,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;AAC/B,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;KAC5B;;;IAKD,KAAK,GAAA;;QACH,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,KAAK,EAAE,CAAC;KACvC;;IAGD,IAAI,GAAA;;QACF,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,IAAI,EAAE,CAAC;KACtC;;IAGD,KAAK,GAAA;;AACH,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,EAAE,CAAC;KAC1B;;AAGD,IAAA,OAAO,CAAC,IAAoB,EAAA;;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;;AAID;;;;AAIG;AACH,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI;AAAE,YAAA,OAAO,QAAQ,CAAC;AAChD,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS,CAAC;AACtD,QAAA,OAAO,QAAQ,CAAC;KACjB;;AAGD,IAAA,IAAI,oBAAoB,GAAA;;AACtB,QAAA,OAAO,MAAA,IAAI,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC;KAClC;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC;KACxC;AAED,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,UAAU,CAAC;KAC1C;AAED;;;AAGG;AACH,IAAA,SAAS,CAAC,KAA4E,EAAA;AACpF,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;KACtE;AAED,IAAA,cAAc,CAAC,KAAiB,EAAA;;AAE9B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B,CAAC;QAClD,IAAI,MAAM,aAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,OAAO,CAAC,iBAAiB,CAAC;YAAE,OAAO;QAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;KACd;AAED,IAAA,mBAAmB,CAAC,KAAiB,EAAA;QACnC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,0BAA0B,EAAE,CAAC;KACnC;AAED,IAAA,iBAAiB,CAAC,KAAiB,EAAA;QACjC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,0BAA0B,EAAE,CAAC;KACnC;AAED,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KACtC;;AAID,IAAA,UAAU,CAAC,KAAoB,EAAA;QAC7B,MAAM,IAAI,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAK,GAAI,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;;;;;AAKpB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAChC;AAED,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACtB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;KACvB;AAED,IAAA,gBAAgB,CAAC,SAAkB,EAAA;;;;;KAKlC;;AAID;;;;;AAKG;AACK,IAAA,YAAY,CAAC,OAA2B,EAAA;;QAC9C,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AAC7C,QAAA,IAAI,CAAC,MAAM;YAAE,OAAO;AACpB,QAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACtC,QAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC;QAClF,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,YAAA,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;YAClB,SAAS,EAAE,KAAK,CAAC,QAAQ;YACzB,gBAAgB,EAAE,KAAK,CAAC,eAAe;AACxC,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;KACzB;IAEO,0BAA0B,GAAA;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO;;;;QAInC,IAAI,CAAC,YAAY,CAAC;AAChB,YAAA,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,gBAAgB,EAAE,EAAE;AACrB,SAAA,CAAC,CAAC;KACJ;IAEO,eAAe,GAAA;;QACrB,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;QACvD,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AAC7C,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM;YAAE,OAAO;AAClC,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,iBAAuC,CAAC;AAChE,QAAA,IAAI,CAAC,KAAK;YAAE,OAAO;;;;;;AAMnB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;AAC5C,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,IAAI,OAAO;AAAE,gBAAA,SAAS,CAAC,YAAY,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;;AAC5D,gBAAA,SAAS,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC;AAC1D,SAAC,CAAC,CAAC;KACJ;;qHA1WU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EATvB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA;AACT,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;;AAE1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;AACF,KAAA,ECrEH,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,o2EA4EA,EDxBI,MAAA,EAAA,CAAA,u+MAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,+BAA+B,+HAC/B,iCAAiC,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjC,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FAeZ,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAvBnC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,+BAA+B;wBAC/B,iCAAiC;wBACjC,iBAAiB;wBACjB,qBAAqB;AACtB,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAG1B,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;;AAE1B,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;AACtD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,QAAA,EAAA,o2EAAA,EAAA,MAAA,EAAA,CAAA,u+MAAA,CAAA,EAAA,CAAA;8BAOQ,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBACG,sBAAsB,EAAA,CAAA;sBAA9B,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAMG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAKa,SAAS,EAAA,CAAA;sBAA3B,MAAM;gBACY,OAAO,EAAA,CAAA;sBAAzB,MAAM;gBACY,WAAW,EAAA,CAAA;sBAA7B,MAAM;gBACY,qBAAqB,EAAA,CAAA;sBAAvC,MAAM;gBACY,OAAO,EAAA,CAAA;sBAAzB,MAAM;gBACY,OAAO,EAAA,CAAA;sBAAzB,MAAM;gBAImC,YAAY,EAAA,CAAA;sBAArD,SAAS;gBAAC,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBACA,SAAS,EAAA,CAAA;sBAAhD,SAAS;gBAAC,IAAA,EAAA,CAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBACV,gBAAgB,EAAA,CAAA;sBAA3C,SAAS;uBAAC,eAAe,CAAA;;AAgU5B,SAASA,MAAI,GAAA;;AAEb,CAAC;AAED;;;;;AAKG;AACH,SAAS,kBAAkB,CAAC,IAAoB,EAAA;IAC9C,IAAI,IAAI,KAAK,MAAM;AAAE,QAAA,OAAO,IAAI,CAAC;IACjC,IAAI,OAAO,MAAM,KAAK,WAAW;AAAE,QAAA,OAAO,MAAM,CAAC;AACjD,IAAA,OAAO,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AACtF;;AEpbA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MAuBU,4BAA4B,CAAA;AAtBzC,IAAA,WAAA,GAAA;AA6BmB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAqD,UAAU,CAAC,CAAC;AAC5E,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AAExC,QAAA,IAAU,CAAA,UAAA,GAA4B,IAAI,CAAC;AAC3C,QAAA,IAAW,CAAA,WAAA,GAAe,IAAI,CAAC;;;;;AAK/B,QAAA,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;;;AAGhB,QAAA,IAAe,CAAA,eAAA,GAAG,EAAE,CAAC;KAsM9B;IA5LC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;AACxF,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE;YACxC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACpC,SAAA;AAED,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;;;;QAK3E,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACtE,YAAA,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI;gBAAE,OAAO;AAC9B,YAAA,MAAM,UAAU,GAAG,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,aAAa,KAAK,EAAE,CAAC;AACpF,YAAA,MAAM,KAAK,GAAG,EAAE,CAAC,cAAc,CAAC;AAChC,YAAA,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,UAAU,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE;AAC9C,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAClD,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9C,IAAI;AACF,oBAAA,EAAE,CAAC,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAChD,iBAAA;gBAAC,OAAM,EAAA,EAAA;;;AAGP,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAClF,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAClE,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAC5E,IAAI,GAAG,IAAI,CAAC,EAAE;AACZ,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CACxB,EAAE,EACF,uBAAuB,EACvB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,WAAW,GAAG,CAAA,CAAE,CAC7C,CAAC;AACH,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAC;AAC5D,aAAA;AACH,SAAC,CAAC,CAAC;;;;;;;QAQH,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAI;;YAC1E,MAAM,OAAO,GAAG,EAAE,KAAA,IAAA,IAAF,EAAE,KAAF,KAAA,CAAA,GAAA,EAAE,GAAI,EAAE,CAAC;AACzB,YAAA,IAAI,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,eAAe,EAAE;AAC/C,gBAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;AAC/B,gBAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,WAAW,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;gBACzE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;;;gBAI/D,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,aAAa,KAAK,EAAE,EAAE;oBACpE,EAAE,CAAC,KAAK,EAAE,CAAC;AACZ,iBAAA;gBACD,IAAI;AACF,oBAAA,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACxC,iBAAA;gBAAC,OAAM,EAAA,EAAA;;AAEP,iBAAA;AACF,aAAA;iBAAM,IAAI,CAAC,OAAO,EAAE;AACnB,gBAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC3B,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;;AAID;;;;;AAKG;AACH,IAAA,OAAO,CAAC,KAAY,EAAA;;;;;;AAKlB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;AACrC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAgD,CAAC;AACtE,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;AACzB,QAAA,MAAM,WAAW,GAAI,KAAoB,CAAC,WAAW,KAAK,IAAI,CAAC;QAC/D,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAE3F,IAAI,IAAI,GAAG,GAAG,CAAC;AACf,QAAA,IAAI,gBAAgB,EAAE;AACpB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AACpC,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC;AAChC,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACjD,YAAA,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE;gBAChC,IAAI;AACF,oBAAA,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACtC,iBAAA;gBAAC,OAAM,EAAA,EAAA;;AAEP,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;;;;;;;AAOvC,QAAA,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,MAAA,MAAM,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACpF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KACvB;AAED,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KACtC;AAED;;;;;;;;;;AAUG;IACH,WAAW,GAAA;;QACT,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE;YAAE,OAAO;AACtD,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;;AAEjC,QAAA,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,MAAA,EAAE,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KACvE;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KAClC;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;;AAID,IAAA,UAAU,CAAC,KAAoB,EAAA;QAC7B,MAAM,IAAI,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAK,GAAI,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;;;;;;QAMhE,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACtB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;KACvB;AAED,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;KACxE;;0HAzNU,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,4BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,EAT5B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,CAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,eAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;;AAE1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,4BAA4B,CAAC;AAC3D,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;AACF,KAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAEU,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAtBxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,mBAAmB,EAAE,MAAM;AAC3B,wBAAA,SAAS,EAAE,iBAAiB;AAC5B,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,WAAW,EAAE,eAAe;AAC5B,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,QAAQ,EAAE,UAAU;AACrB,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;;AAE1B,4BAAA,WAAW,EAAE,UAAU,CAAC,kCAAkC,CAAC;AAC3D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;iBACF,CAAA;8BAMoB,UAAU,EAAA,CAAA;sBAA5B,KAAK;uBAAC,UAAU,CAAA;;AAuNnB,SAAS,IAAI,GAAA;;AAEb;;ACtRA;;;;;;;AAOG;MAKU,oBAAoB,CAAA;;kHAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;mHAApB,oBAAoB,EAAA,OAAA,EAAA,CAHrB,uBAAuB,EAAE,+BAA+B,EAAE,4BAA4B,CAAA,EAAA,OAAA,EAAA,CACtF,uBAAuB,EAAE,+BAA+B,EAAE,4BAA4B,CAAA,EAAA,CAAA,CAAA;mHAErF,oBAAoB,EAAA,OAAA,EAAA,CAHrB,uBAAuB,EAAE,+BAA+B,CAAA,EAAA,CAAA,CAAA;4FAGvD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,uBAAuB,EAAE,+BAA+B,EAAE,4BAA4B,CAAC;AACjG,oBAAA,OAAO,EAAE,CAAC,uBAAuB,EAAE,+BAA+B,EAAE,4BAA4B,CAAC;iBAClG,CAAA;;;AChBD;;;;;;AAMG;AAkBH;;ACxBA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"magicx-eng-ai-autocomplete-angular.mjs","sources":["../../src/lib/internal/layout/cluster.component.ts","../../src/lib/internal/layout/stack.component.ts","../../src/lib/internal/pill-list/pill-list.component.ts","../../src/lib/internal/pill-list/pill-list.component.html","../../src/lib/internal/layout/grid.component.ts","../../src/lib/internal/layout/grid.component.html","../../src/lib/internal/suggestion-item/suggestion-item.component.ts","../../src/lib/internal/suggestion-item/suggestion-item.component.html","../../src/lib/internal/suggestion-grid/suggestion-grid.component.ts","../../src/lib/internal/suggestion-grid/suggestion-grid.component.html","../../src/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.ts","../../src/lib/ai-autocomplete-dropdown/ai-autocomplete-dropdown.component.html","../../src/lib/controller/observables.ts","../../src/lib/controller/ai-autocomplete.controller.ts","../../src/lib/internal/editor-host/editor-host.directive.ts","../../src/lib/internal/submit-button/submit-button.component.ts","../../src/lib/internal/submit-button/submit-button.component.html","../../src/lib/ai-autocomplete/ai-autocomplete.component.ts","../../src/lib/ai-autocomplete/ai-autocomplete.component.html","../../src/lib/input/ai-autocomplete-input.directive.ts","../../src/lib/ai-autocomplete.module.ts","../../src/public-api.ts","../../src/magicx-eng-ai-autocomplete-angular.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from \"@angular/core\";\n\n/**\n * Horizontal layout primitive — children sit in a row and wrap when out of\n * room. Mirrors the React `<Cluster>` component / vanilla `.aia-cluster` CSS\n * primitive. `noWrap` keeps a single row; `inline` makes it inline-level.\n *\n * @internal\n */\n@Component({\n selector: \"aia-cluster\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: \"<ng-content></ng-content>\",\n styleUrls: [\"./cluster.component.css\"],\n host: {\n class: \"aia-cluster\",\n \"[attr.data-align]\": \"align\",\n \"[attr.data-justify]\": \"justify\",\n \"[attr.data-nowrap]\": \"noWrap ? '' : null\",\n \"[attr.data-inline]\": \"inline ? '' : null\",\n \"[style.--aia-cluster-gap]\": \"gap\",\n },\n})\nexport class ClusterComponent {\n /** Gap between children. Any CSS length. Defaults to the CSS fallback (0.5rem). */\n @Input() gap?: string;\n /** Cross-axis alignment. Defaults to `center`. */\n @Input() align: \"start\" | \"center\" | \"end\" | \"baseline\" = \"center\";\n /** Main-axis distribution. Defaults to `start`. */\n @Input() justify: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" = \"start\";\n /** When true, the cluster does NOT flex-wrap (single-row clusters). */\n @Input() noWrap = false;\n /** Render inline-level (inline-flex) instead of block. */\n @Input() inline = false;\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from \"@angular/core\";\n\n/**\n * Vertical layout primitive — children stack top-to-bottom with `space` gap.\n * Mirrors the React `<Stack>` component / vanilla `.aia-stack` CSS primitive.\n *\n * @internal\n */\n@Component({\n selector: \"aia-stack\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: \"<ng-content></ng-content>\",\n styleUrls: [\"./stack.component.css\"],\n host: {\n class: \"aia-stack\",\n \"[attr.data-align]\": \"align\",\n \"[style.--aia-stack-space]\": \"space\",\n },\n})\nexport class StackComponent {\n /** Gap between children. Any CSS length. Defaults to the CSS fallback (0.5rem). */\n @Input() space?: string;\n /** Cross-axis alignment of children. Defaults to `stretch` (full width). */\n @Input() align: \"start\" | \"center\" | \"end\" | \"stretch\" = \"stretch\";\n}\n","import { CommonModule } from \"@angular/common\";\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport type { Suggestion } from \"@magicx-eng/ai-autocomplete-vanilla\";\n\n/**\n * Internal pill list used by both the dropdown and Tier 1's inline pillbar.\n * Mirrors `packages/react/src/components/PillList.tsx` one-for-one — including\n * the per-index opacity ramp (1 / 0.7 / 0.4 / 0.2) and the skeleton-loading\n * fallback that preserves layout while the next fetch is in flight.\n *\n * @internal\n */\n@Component({\n selector: \"aia-pill-list\",\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./pill-list.component.html\",\n styleUrls: [\"./pill-list.component.css\"],\n})\nexport class PillListComponent {\n @Input() pills: Suggestion[] = [];\n @Input() activePillIndex = 0;\n @Input() rounded = false;\n /**\n * When true, pills become non-interactive shimmering skeletons. Real pills\n * (with their text) are rendered when provided so widths/positions match\n * the previous state; with no pills, fixed-width fallback placeholders are\n * rendered instead.\n */\n @Input() loading = false;\n /**\n * Whether the active (leading) pill should render selected (full opacity)\n * rather than its positional `first` tier. Auto trigger ⇒ true while a\n * dropdown option is highlighted; manual trigger ⇒ true after the user taps\n * the pill. See `AIAutocompleteController.isActivePillSelected$`.\n */\n @Input() activeSelected = false;\n\n @Output() readonly selectPill = new EventEmitter<number>();\n\n /** Fallback widths when loading with zero cached pills (matches React). */\n readonly fallbackSkeletonWidths = [125, 69];\n\n /** The active pill is \"selected\" only when `activeSelected` is set. */\n isSelected(index: number): boolean {\n return this.activeSelected && index === this.activePillIndex;\n }\n\n /**\n * Opacity per pill state — mirrors PillList.tsx `PILL_OPACITY`. The selected\n * pill is full opacity; otherwise pills take a positional tier (first / next\n * / last).\n */\n pillOpacity(index: number): number {\n if (this.isSelected(index)) return 1; // Selected\n if (index === 0) return 0.7; // First\n if (index === 1) return 0.4; // Next\n return 0.2; // Last\n }\n\n trackByType = (_: number, pill: Suggestion): string => pill.type;\n trackByWidth = (_: number, w: number): number => w;\n\n onPillClick(index: number): void {\n if (this.loading) return;\n this.selectPill.emit(index);\n }\n\n onPillMouseDown(event: Event): void {\n // Prevent the editor from losing focus when a pill is tapped.\n event.preventDefault();\n }\n}\n","<ng-container *ngIf=\"loading && pills.length === 0; else realPills\">\n <span class=\"aia-pill-list\" data-aia-pill-list-loading=\"\">\n <span\n *ngFor=\"let w of fallbackSkeletonWidths; trackBy: trackByWidth; let i = index\"\n data-aia-pill-skeleton=\"\"\n class=\"aia-pill aia-pill-skeleton\"\n [class.aia-pill-rounded]=\"rounded\"\n [style.width.px]=\"w\"\n [style.opacity]=\"pillOpacity(i)\"\n ></span>\n </span>\n</ng-container>\n\n<ng-template #realPills>\n <span\n class=\"aia-pill-list\"\n [attr.data-aia-pill-list-loading]=\"loading ? '' : null\"\n >\n <button\n *ngFor=\"let pill of pills; trackBy: trackByType; let i = index\"\n type=\"button\"\n data-aia-pill=\"\"\n [attr.data-aia-loading]=\"loading ? '' : null\"\n tabindex=\"-1\"\n class=\"aia-pill\"\n [class.aia-pill-rounded]=\"rounded\"\n [class.aia-pill-skeleton]=\"loading\"\n [style.opacity]=\"pillOpacity(i)\"\n [disabled]=\"loading\"\n (mousedown)=\"onPillMouseDown($event)\"\n (click)=\"onPillClick(i)\"\n >\n {{ pill.text }}\n </button>\n </span>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n type ElementRef,\n Input,\n type OnChanges,\n type SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from \"@angular/core\";\n\n/**\n * Intrinsic grid layout primitive — auto-fits as many columns as fit between\n * `min` and `max` wide, wrapping to new rows when there's no more horizontal\n * room. Mirrors the React `<Grid>` component / vanilla `.aia-grid` primitive.\n *\n * Optionally scrolls (`scroll`, capped height).\n *\n * @internal\n */\n@Component({\n selector: \"aia-grid\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./grid.component.html\",\n styleUrls: [\"./grid.component.css\"],\n})\nexport class GridComponent implements OnChanges {\n /** Minimum cell width. CSS length, e.g. \"16rem\". Columns auto-fit at runtime. */\n @Input() min = \"16rem\";\n /** Maximum cell width. CSS length. Defaults (via CSS) to `1fr` (stretch). */\n @Input() max?: string;\n /** Gap between cells. */\n @Input() gap?: string;\n /** Cap the height and scroll vertically when content overflows. */\n @Input() scroll = false;\n /** Max height when `scroll`. CSS length. Defaults (via CSS) to 120px. */\n @Input() maxHeight?: string;\n /** Scroll back to the top whenever this key changes (`scroll` only). */\n @Input() scrollResetKey?: string;\n\n @ViewChild(\"grid\", { static: false }) gridRef?: ElementRef<HTMLDivElement>;\n\n /**\n * A new `scrollResetKey` means a different content group is being shown (e.g.\n * the next suggestion's options after a selection) — start it from the top\n * instead of inheriting the previous group's scroll offset.\n */\n ngOnChanges(changes: SimpleChanges): void {\n const change = changes[\"scrollResetKey\"];\n if (!change || change.isFirstChange()) return;\n const grid = this.gridRef?.nativeElement;\n if (grid) grid.scrollTop = 0;\n }\n}\n","<div\n #grid\n class=\"aia-grid\"\n [attr.data-scroll]=\"scroll ? '' : null\"\n [style.--aia-grid-min]=\"min\"\n [style.--aia-grid-max]=\"max\"\n [style.--aia-grid-gap]=\"gap\"\n [style.--aia-grid-max-height]=\"maxHeight\"\n>\n <ng-content></ng-content>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n inject,\n type OnDestroy,\n Output,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport type { SuggestionOption } from \"@magicx-eng/ai-autocomplete-vanilla\";\n\n/**\n * Internal single-option cell used inside the suggestion grid. Mirrors\n * `packages/react/src/components/SuggestionItem.tsx`. Handles:\n *\n * - Tappable vs non-tappable cursor + hover styling\n * - Pressed-state streak animation (500ms, single-flight)\n * - Keyboard activation (Enter/Space)\n * - ARIA `role=\"option\"` + `aria-selected` for the listbox pattern\n * - Loading skeleton when `loading=true`\n *\n * @internal\n */\n@Component({\n selector: \"aia-suggestion-item\",\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./suggestion-item.component.html\",\n styleUrls: [\"./suggestion-item.component.css\"],\n})\nexport class SuggestionItemComponent implements OnDestroy {\n @Input() option!: SuggestionOption;\n @Input() isHighlighted = false;\n @Input() id = \"\";\n @Input() loading = false;\n\n @Output() readonly select = new EventEmitter<SuggestionOption>();\n @Output() readonly highlight = new EventEmitter<void>();\n\n pressed = false;\n\n private readonly cdr = inject(ChangeDetectorRef);\n private pressedTimer: ReturnType<typeof setTimeout> | undefined;\n\n ngOnDestroy(): void {\n if (this.pressedTimer !== undefined) clearTimeout(this.pressedTimer);\n }\n\n onSelect(): void {\n if (this.loading || !this.option.is_tappable || this.pressed) return;\n this.pressed = true;\n this.cdr.markForCheck();\n this.select.emit(this.option);\n if (this.pressedTimer !== undefined) clearTimeout(this.pressedTimer);\n this.pressedTimer = setTimeout(() => {\n this.pressed = false;\n this.cdr.markForCheck();\n }, 500);\n }\n\n onMouseEnter(): void {\n if (this.loading || !this.option.is_tappable) return;\n this.highlight.emit();\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if (this.loading || !this.option.is_tappable) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this.onSelect();\n }\n }\n}\n","<div\n [id]=\"id\"\n role=\"option\"\n data-aia-option=\"\"\n [attr.data-aia-loading]=\"loading ? '' : null\"\n [attr.aria-selected]=\"isHighlighted\"\n class=\"aia-suggestion-item\"\n [class.aia-suggestion-item-highlighted]=\"isHighlighted && !loading\"\n [class.aia-suggestion-item-tappable]=\"option.is_tappable\"\n [class.aia-suggestion-item-non-tappable]=\"!option.is_tappable\"\n [class.aia-suggestion-item-pressed]=\"pressed\"\n [attr.tabindex]=\"loading || !option.is_tappable ? -1 : 0\"\n (click)=\"onSelect()\"\n (keydown)=\"onKeyDown($event)\"\n (mouseenter)=\"onMouseEnter()\"\n>\n <div class=\"aia-suggestion-streaks\"></div>\n <div class=\"aia-suggestion-streaks-vert\"></div>\n <span class=\"aia-suggestion-content\">\n <span class=\"aia-suggestion-text\">\n <ng-container *ngIf=\"option.icon; else noIcon\"\n >{{ option.icon }} {{ option.text }}</ng-container\n >\n <ng-template #noIcon>{{ option.text }}</ng-template>\n </span>\n <span *ngIf=\"option.tag\" class=\"aia-suggestion-tag\">{{ option.tag }}</span>\n </span>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport type { SuggestionOption } from \"@magicx-eng/ai-autocomplete-vanilla\";\nimport { GridComponent } from \"../layout/grid.component\";\nimport { SuggestionItemComponent } from \"../suggestion-item/suggestion-item.component\";\n\n/**\n * Internal grid of suggestion options. Mirrors\n * `packages/react/src/components/SuggestionGrid.tsx` — a thin wrapper over the\n * `Grid` layout primitive (which owns the auto-fit columns and the\n * capped-height scroll). It only wires each option to its\n * select/highlight handlers and listbox-scoped id.\n *\n * @internal\n */\n@Component({\n selector: \"aia-suggestion-grid\",\n standalone: true,\n imports: [CommonModule, GridComponent, SuggestionItemComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./suggestion-grid.component.html\",\n})\nexport class SuggestionGridComponent {\n @Input() options: SuggestionOption[] = [];\n @Input() activeIndex = -1;\n @Input() listboxId = \"\";\n @Input() loading = false;\n /**\n * Identity of the suggestion these options belong to. When it changes the\n * grid scrolls back to the top, so the next parameter's options are read\n * from the first one instead of from the previous list's scroll offset.\n */\n @Input() groupKey = \"\";\n\n @Output() readonly select = new EventEmitter<SuggestionOption>();\n @Output() readonly highlight = new EventEmitter<number>();\n\n trackByOptionText = (_: number, opt: SuggestionOption): string => opt.text;\n}\n","<!-- max=\"1fr\": columns share out the full width, so a lone column spans the\n whole options box instead of stopping at 250px. -->\n<aia-grid min=\"250px\" max=\"1fr\" gap=\"0\" [scroll]=\"true\" [scrollResetKey]=\"groupKey\">\n <aia-suggestion-item\n *ngFor=\"let option of options; trackBy: trackByOptionText; let i = index\"\n [option]=\"option\"\n [isHighlighted]=\"i === activeIndex\"\n [id]=\"listboxId + '-option-' + i\"\n [loading]=\"loading\"\n (select)=\"select.emit($event)\"\n (highlight)=\"highlight.emit(i)\"\n ></aia-suggestion-item>\n</aia-grid>\n","import { CommonModule } from \"@angular/common\";\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n inject,\n type OnChanges,\n type OnDestroy,\n type OnInit,\n type SimpleChanges,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport {\n type AppearanceMode,\n buildAttributionUrl,\n getFooterHint,\n type Suggestion,\n type SuggestionOption,\n} from \"@magicx-eng/ai-autocomplete-vanilla\";\nimport { BehaviorSubject, combineLatest, type Observable } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\nimport type { AIAutocompleteController } from \"../controller/ai-autocomplete.controller\";\nimport { ClusterComponent } from \"../internal/layout/cluster.component\";\nimport { StackComponent } from \"../internal/layout/stack.component\";\nimport { PillListComponent } from \"../internal/pill-list/pill-list.component\";\nimport { SuggestionGridComponent } from \"../internal/suggestion-grid/suggestion-grid.component\";\n\ninterface DropdownVm {\n pills: Suggestion[];\n options: SuggestionOption[];\n activeIndex: number;\n isActivePillSelected: boolean;\n isLoading: boolean;\n showsPills: boolean;\n showsOptions: boolean;\n showsFallbackSkeleton: boolean;\n isVisible: boolean;\n /** Identity of the suggestion the options belong to — drives the grid's scroll reset. */\n groupKey: string;\n footerKey: string;\n footerHint: string;\n optionsPosition: \"above\" | \"below\";\n}\n\n/** The content-bearing fields of the view-model (everything but `isVisible`). */\ntype DropdownContent = Omit<DropdownVm, \"isVisible\">;\n\n/**\n * Tier 2 dropdown component — the Angular equivalent of React's\n * `<AIAutocompleteDropdown />`. Renders the pillbar, options grid, and\n * loading skeleton based on the supplied controller's `dropdown$` snapshot.\n *\n * ```html\n * <ai-autocomplete-dropdown [controller]=\"ac\"></ai-autocomplete-dropdown>\n * ```\n *\n * All actions (pill click, option select, option highlight) are forwarded to\n * the controller. Consumers who need to observe these events can subscribe\n * to the controller's per-field observables.\n *\n * @public\n */\n@Component({\n selector: \"ai-autocomplete-dropdown\",\n standalone: true,\n imports: [\n CommonModule,\n PillListComponent,\n SuggestionGridComponent,\n StackComponent,\n ClusterComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./ai-autocomplete-dropdown.component.html\",\n // The shared appearance layer carries the design tokens + box-sizing reset +\n // optionsPosition reversal, so a standalone dropdown (no Tier 1 component on\n // the page) is fully styled once `mode` is set.\n styleUrls: [\"../shared/appearance.css\", \"./ai-autocomplete-dropdown.component.css\"],\n})\nexport class AIAutocompleteDropdownComponent implements OnInit, OnChanges, OnDestroy {\n /** The controller that owns the autocomplete state. Required. */\n @Input() controller!: AIAutocompleteController;\n /** Whether to render the pillbar above the options grid. Default: true. */\n @Input() showPills = true;\n /** Optional CSS class applied to the dropdown root. */\n @Input() className?: string;\n /**\n * Color mode for a standalone dropdown. When set, the dropdown self-scopes the\n * design tokens to its own root (adds `magicx-aia` + `data-mode`), so it needs\n * no `.magicx-aia` wrapper. `\"auto\"` follows `prefers-color-scheme`. Leave it\n * unset when the dropdown sits inside a `.magicx-aia` ancestor (e.g. Tier 1).\n */\n @Input() mode?: AppearanceMode;\n\n /** Concrete resolved mode, or null when `mode` is unset (inherit from ancestor). */\n resolvedMode: \"light\" | \"dark\" | null = null;\n private modeMql?: MediaQueryList;\n private modeListener?: () => void;\n private readonly cdr = inject(ChangeDetectorRef);\n\n /** Root class list — adds `magicx-aia` only when self-scoping via `mode`. */\n get rootClass(): string {\n let cls = \"magicx-aia-dropdown\";\n if (this.resolvedMode) cls += \" magicx-aia\";\n if (this.className) cls += ` ${this.className}`;\n return cls;\n }\n\n /** Fallback skeleton-bar widths used when loading with zero cached options. */\n readonly fallbackSkeletonBarWidths = [159, 119, 164];\n\n /**\n * Attribution/branding link URL for the footer, with a `utm_source` derived\n * from the embedding page's hostname (see {@link buildAttributionUrl}).\n */\n readonly brandHref = buildAttributionUrl();\n\n /**\n * View-model derived from the controller's `dropdown$`. Adds three booleans\n * (`showsPills`, `showsOptions`, `showsFallbackSkeleton`, `isVisible`) that\n * keep template-level logic to a property read per §19.6.\n *\n * Initialized once in `ngOnInit` — must NOT be a getter. A getter returns a\n * fresh `Observable` instance on every property read; with OnPush + `async`\n * pipe that means each change-detection cycle unsubscribes/resubscribes,\n * causing the `*ngIf=\"vm$ | async as vm\"` root to briefly resolve `null`\n * and flicker the entire dropdown DOM.\n */\n vm$!: Observable<DropdownVm>;\n\n // Bridge for the @Input `showPills` into the reactive pipeline. Without this,\n // changing the input after init wouldn't trigger a new vm emission until the\n // next controller.dropdown$ tick — and we'd lose the showPills update entirely\n // if the controller is idle. Updated from ngOnChanges below.\n private readonly showPills$ = new BehaviorSubject<boolean>(true);\n\n // Last content emitted while the dropdown was visible. Reused during the\n // close fade so the populated dropdown fades out as one — see initVm.\n private lastVisibleContent: DropdownContent | null = null;\n\n ngOnInit(): void {\n // Seed showPills$ from the input's resolved value at init time.\n this.showPills$.next(this.showPills);\n this.applyMode();\n this.initVm();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"showPills\"]) {\n this.showPills$.next(this.showPills);\n }\n if (changes[\"mode\"] && !changes[\"mode\"].firstChange) {\n this.applyMode();\n }\n // Re-bind vm$ when the controller @Input is swapped (e.g. a multi-step form\n // toggling between controllers). Without this, vm$ stays subscribed to the\n // previous controller's dropdown$ — rendering stale options, or, if that\n // controller was destroy()-ed, receiving a completion that collapses the\n // dropdown permanently. Skip the first change: ngOnChanges fires before\n // ngOnInit, which owns the initial creation.\n if (changes[\"controller\"] && !changes[\"controller\"].firstChange && this.controller) {\n this.initVm();\n }\n }\n\n ngOnDestroy(): void {\n this.teardownModeListener();\n }\n\n /**\n * Resolve the `mode` input into `resolvedMode`. Unset → null (the dropdown\n * stays class-less and inherits from a `.magicx-aia` ancestor). `\"auto\"` reads\n * `prefers-color-scheme` and tracks it live via a media-query listener.\n */\n private applyMode(): void {\n this.teardownModeListener();\n if (this.mode === undefined) {\n this.resolvedMode = null;\n return;\n }\n if (this.mode === \"light\" || this.mode === \"dark\") {\n this.resolvedMode = this.mode;\n return;\n }\n // \"auto\"\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n this.resolvedMode = \"light\";\n return;\n }\n this.modeMql = window.matchMedia(\"(prefers-color-scheme: dark)\");\n this.resolvedMode = this.modeMql.matches ? \"dark\" : \"light\";\n this.modeListener = () => {\n this.resolvedMode = this.modeMql?.matches ? \"dark\" : \"light\";\n this.cdr.markForCheck();\n };\n this.modeMql.addEventListener(\"change\", this.modeListener);\n }\n\n private teardownModeListener(): void {\n if (this.modeMql && this.modeListener) {\n this.modeMql.removeEventListener(\"change\", this.modeListener);\n }\n this.modeMql = undefined;\n this.modeListener = undefined;\n }\n\n /** Build the view-model stream from the current controller + showPills$. */\n private initVm(): void {\n this.vm$ = combineLatest([this.controller.dropdown$, this.showPills$]).pipe(\n map(([dd, showPills]) => {\n const activeSuggestion = dd.suggestions[0];\n const options = activeSuggestion?.options ?? [];\n const showsPills = showPills && (dd.pills.length > 0 || dd.isLoading);\n const showsOptions = options.length > 0;\n const showsFallbackSkeleton = dd.isLoading && !showsOptions;\n const isVisible = dd.isOpen && (showsOptions || showsPills || dd.isLoading);\n\n // While closing, reuse the last visible content so the populated\n // dropdown fades out as one. Otherwise the pills/options vanish the\n // instant the state empties (e.g. skipping the last pill with →),\n // leaving the always-present footer alone for a flash of a footer-only\n // \"no options\" box mid-fade. Only `isVisible` tracks live state to\n // drive the opacity transition.\n if (!isVisible && this.lastVisibleContent) {\n return { ...this.lastVisibleContent, isVisible: false };\n }\n\n const optionHighlighted =\n dd.activeIndex >= 0 && Boolean(options[dd.activeIndex]?.is_tappable);\n const { key: footerKey, hint: footerHint } = getFooterHint(\n optionHighlighted,\n dd.isInputEmpty,\n );\n const content: DropdownContent = {\n pills: dd.pills,\n options,\n activeIndex: dd.activeIndex,\n isActivePillSelected: dd.isActivePillSelected,\n isLoading: dd.isLoading,\n showsPills,\n showsOptions,\n showsFallbackSkeleton,\n groupKey: activeSuggestion ? `${activeSuggestion.type} ${activeSuggestion.text}` : \"\",\n footerKey,\n footerHint,\n optionsPosition: dd.optionsPosition,\n };\n if (isVisible) this.lastVisibleContent = content;\n return { ...content, isVisible };\n }),\n );\n }\n\n trackByWidth = (_: number, w: number): number => w;\n\n onPillClick(index: number): void {\n this.controller.setActivePill(index);\n }\n\n onSelect(option: SuggestionOption): void {\n this.controller.selectOption(option);\n }\n\n onHighlight(index: number): void {\n this.controller.setActiveDropdownIndex(index);\n }\n\n preventBlur(event: Event): void {\n // Prevent the editor from losing focus when interacting with the dropdown.\n event.preventDefault();\n }\n}\n","<div\n *ngIf=\"vm$ | async as vm\"\n [id]=\"controller.listboxId\"\n role=\"listbox\"\n data-aia-dropdown=\"\"\n [attr.data-aia-loading]=\"vm.isLoading ? '' : null\"\n [attr.data-mode]=\"resolvedMode\"\n [attr.data-options-position]=\"vm.optionsPosition\"\n [class]=\"rootClass\"\n [class.magicx-aia-dropdown-visible]=\"vm.isVisible\"\n (mousedown)=\"preventBlur($event)\"\n>\n <aia-stack space=\"8px\">\n <aia-cluster\n *ngIf=\"vm.showsPills\"\n class=\"magicx-aia-dropdown-pillbar\"\n data-aia-pillbar=\"\"\n [noWrap]=\"true\"\n >\n <aia-pill-list\n [pills]=\"vm.pills\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"vm.isActivePillSelected\"\n [rounded]=\"true\"\n [loading]=\"vm.isLoading\"\n (selectPill)=\"onPillClick($event)\"\n ></aia-pill-list>\n </aia-cluster>\n\n <aia-suggestion-grid\n *ngIf=\"vm.showsOptions\"\n [options]=\"vm.options\"\n [activeIndex]=\"vm.activeIndex\"\n [listboxId]=\"controller.listboxId\"\n [loading]=\"vm.isLoading\"\n [groupKey]=\"vm.groupKey\"\n (select)=\"onSelect($event)\"\n (highlight)=\"onHighlight($event)\"\n ></aia-suggestion-grid>\n\n <div\n *ngIf=\"vm.showsFallbackSkeleton\"\n class=\"magicx-aia-dropdown-skeleton-bars\"\n data-aia-skeleton-bars=\"\"\n >\n <span\n *ngFor=\"let w of fallbackSkeletonBarWidths; trackBy: trackByWidth\"\n class=\"magicx-aia-dropdown-skeleton-bar\"\n [style.width.px]=\"w\"\n ></span>\n </div>\n\n <footer class=\"magicx-aia-footer\" data-aia-footer=\"\">\n <div class=\"magicx-aia-footer-row\">\n <span class=\"magicx-aia-footer-hint-group\">\n <kbd class=\"magicx-aia-footer-key\">{{ vm.footerKey }}</kbd>\n <span class=\"magicx-aia-footer-hint\">{{ vm.footerHint }}</span>\n </span>\n <a\n class=\"magicx-aia-footer-brand-link\"\n [href]=\"brandHref\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span class=\"magicx-aia-footer-brand\">AI</span>\n <span class=\"magicx-aia-footer-badge\">Autocomplete</span>\n </a>\n </div>\n </footer>\n </aia-stack>\n</div>\n","import { distinctUntilChanged, map, type Observable, shareReplay } from \"rxjs\";\n\n/**\n * Per-field observable derivation factory. Enforces the §19.4 invariant:\n *\n * - `distinctUntilChanged` — prevents re-emission storms when the upstream\n * state object ticks but the field a consumer cares about hasn't changed.\n * Without this, every keystroke would re-render every async-pipe binding\n * in the consumer's template even when nothing changed for that binding.\n * - `shareReplay({ bufferSize: 1, refCount: true })` — guarantees that\n * multiple subscribers (multiple `async` pipes in a template, e.g.\n * `*ngIf=\"isLoading$ | async\"` and `[disabled]=\"isLoading$ | async\"`)\n * share a single upstream subscription. `refCount: true` is non-obvious\n * but essential: without it, the inner subscription survives after the\n * last subscriber unmounts, leaking the chain back to `state$`.\n *\n * Every public observable on {@link AIAutocompleteController} must go through\n * this factory — no exceptions.\n *\n * @internal\n */\nexport function deriveField<T, R>(\n source$: Observable<T>,\n selector: (value: T) => R,\n equalityFn?: (a: R, b: R) => boolean,\n): Observable<R> {\n return source$.pipe(\n map(selector),\n distinctUntilChanged(equalityFn),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n}\n","import {\n type CompletedParamState,\n AIAutocomplete as CoreAIAutocomplete,\n type CoreState,\n type Segment,\n type SkippedParamState,\n type Suggestion,\n type SuggestionOption,\n} from \"@magicx-eng/ai-autocomplete-vanilla\";\nimport { BehaviorSubject, combineLatest, map, type Observable, shareReplay } from \"rxjs\";\nimport type {\n AIAutocompleteControllerOptions,\n AIAutocompleteControllerState,\n AIAutocompleteControllerUpdate,\n AIAutocompleteDropdownState,\n} from \"../shared/types\";\nimport { deriveField } from \"./observables\";\n\n/**\n * Tier 2 logic surface for `@magicx-eng/ai-autocomplete-angular` — the Angular\n * equivalent of React's `useAIAutocomplete()` hook. Wraps a headless\n * `@magicx-eng/ai-autocomplete-vanilla` core and exposes its state as RxJS\n * observables plus thin action methods.\n *\n * Per TDB §3.3, the controller is consumer-managed — the consumer creates it\n * with `new`, holds the reference, and **must call `destroy()`** in their\n * own `ngOnDestroy`. The Tier 1 `<ai-autocomplete>` component does this\n * automatically; Tier 2 consumers do not get auto-cleanup.\n *\n * @public\n */\nexport class AIAutocompleteController {\n private readonly core: CoreAIAutocomplete;\n private readonly rawState$: BehaviorSubject<CoreState>;\n // optionsPosition isn't part of CoreState (it's a core option), so track it\n // here and fold it into `dropdown$` so the dropdown can read placement from\n // the controller — configured once, kept in sync through update().\n private readonly optionsPosition$ = new BehaviorSubject<\"above\" | \"below\">(\"below\");\n private readonly unsubscribeCore: () => void;\n private isDestroyed = false;\n\n // === Per-field observables ===\n // Each one runs through deriveField, which bakes in distinctUntilChanged\n // and shareReplay({ bufferSize: 1, refCount: true }) per §19.4.\n\n /** Plain-text content of the editor. */\n readonly text$: Observable<string>;\n /** Completed (bold) params currently in the editor. */\n readonly completedParams$: Observable<CompletedParamState[]>;\n /**\n * Suggestions the user dismissed with the skip key (→). Nothing renders\n * them; they exist so a hand-rolled submit can pass them to\n * `buildSubmitResult` and carry the same `text: \"skipped\"` entries the\n * SDK's own requests do.\n */\n readonly skippedParams$: Observable<SkippedParamState[]>;\n /** Actionable suggestion pills (first one is the active pill). */\n readonly suggestionPills$: Observable<Suggestion[]>;\n /** Text + completed-param segments for rendering the editor body. */\n readonly segments$: Observable<Segment[]>;\n /** ID of the most-recently-promoted param (drives shimmer animation). */\n readonly newParamId$: Observable<string | null>;\n /** All suggestions from the server (including non-actionable ones). */\n readonly suggestions$: Observable<Suggestion[]>;\n /** Currently highlighted dropdown option index. -1 = none. */\n readonly activeIndex$: Observable<number>;\n /**\n * UI-visible loading flag — suppressed during the post-select streak\n * animation and during re-edit (cached options stay visible there). Use\n * this instead of the raw core state for any loading-skeleton binding.\n */\n readonly isLoading$: Observable<boolean>;\n /** Server-reported \"query is complete\" flag. */\n readonly isReady$: Observable<boolean>;\n /** Whether the editor currently has focus. */\n readonly isFocused$: Observable<boolean>;\n /** Whether the dropdown should currently be visible. */\n readonly isDropdownOpen$: Observable<boolean>;\n /**\n * Whether the active (leading) pill should render selected (full opacity)\n * rather than the de-emphasized `first` tier. Auto trigger ⇒ true only while\n * a dropdown option is highlighted; manual ⇒ true once the pill is tapped.\n */\n readonly isActivePillSelected$: Observable<boolean>;\n /** Server-suggested placeholder text for the editor. */\n readonly placeholderText$: Observable<string>;\n /** Last fetch error, or null. */\n readonly error$: Observable<Error | null>;\n /** Param currently being re-edited, or null. */\n readonly editingParam$: Observable<CompletedParamState | null>;\n /** Plain-text offset where the edit region starts, or null. */\n readonly editingAnchor$: Observable<number | null>;\n /** Live caret offset within the editor. */\n readonly caretOffset$: Observable<number | null>;\n\n // === Composite observables ===\n\n /**\n * Snapshot of every public field in one object. Convenient for\n * `*ngIf=\"ctrl.state$ | async as state\"` templating — aliases all fields\n * under a single subscription instead of multiple `| async` pipes.\n */\n readonly state$: Observable<AIAutocompleteControllerState>;\n\n /**\n * Composite state for the dropdown view. Tier 2 consumers spread this into\n * `<ai-autocomplete-dropdown>`; Tier 1 uses the same shape internally.\n */\n readonly dropdown$: Observable<AIAutocompleteDropdownState>;\n\n /**\n * Throws if invoked outside a browser environment. For SSR / Angular\n * Universal, gate construction with `isPlatformBrowser` — see TDB §16.3.\n */\n constructor(opts: AIAutocompleteControllerOptions = {}) {\n if (typeof document === \"undefined\") {\n throw new Error(\n \"AIAutocompleteController requires a browser environment. \" +\n \"For SSR / Angular Universal, gate construction with isPlatformBrowser.\",\n );\n }\n\n // Headless mode never renders to the host, so a throwaway div is fine —\n // it's required by the core's signature for symmetry with full mode.\n const host = document.createElement(\"div\");\n\n this.core = new CoreAIAutocomplete(host, {\n ...opts,\n renderMode: \"headless\",\n source: opts.source ?? \"headless-sdk\",\n // Headless mode never renders the dropdown DOM, but the keyboard\n // controller still reads `optionsPosition` to decide which vertical\n // arrow opens the dropdown from the input.\n optionsPosition: opts.optionsPosition ?? \"below\",\n });\n\n this.rawState$ = new BehaviorSubject<CoreState>(this.core.getState());\n // Push the store's *current* state, not the snapshot the listener was\n // handed. The core notifies listeners synchronously, and some actions\n // trigger reentrant `store.set` calls (e.g. typing a non-matching char\n // during re-edit makes the core synchronously exit re-edit and kick off a\n // fetch).\n //\n // The core's store used to deliver such a nested set inline and then\n // resume the outer listener loop, so a listener could be handed an older\n // state (still in re-edit) *after* a newer one (re-edit exited) — which\n // resurrected a stale `editingParam` and retriggered the editor's re-edit\n // caret-park, yanking the caret back to where re-editing started. The\n // store now queues notifications and drains them in order, so that\n // out-of-order delivery can no longer happen at the source.\n //\n // Reading `getState()` at emission time is kept as belt-and-braces: it\n // costs nothing (distinctUntilChanged downstream drops the duplicate\n // emissions) and keeps this bridge correct for any future consumer that\n // emits mid-cascade. React needs neither, since it batches renders and\n // gates its caret effects on dependencies.\n this.unsubscribeCore = this.core.subscribe(() => {\n if (!this.isDestroyed) this.rawState$.next(this.core.getState());\n });\n\n // === Per-field observables ===\n // Array-valued fields use shallow equality. The vanilla store spreads on\n // every write (`store.set({ completedParams: [...] })`), so reference\n // equality would re-fire downstream subscribers on every state tick even\n // when the array's contents are unchanged. The other fields are\n // primitives or stable object references, so default identity equality\n // works fine.\n this.text$ = deriveField(this.rawState$, (s) => s.text);\n this.completedParams$ = deriveField(this.rawState$, (s) => s.completedParams, arrEq);\n this.skippedParams$ = deriveField(this.rawState$, (s) => s.skippedParams, arrEq);\n this.suggestionPills$ = deriveField(this.rawState$, (s) => s.actionableSuggestions, arrEq);\n this.segments$ = deriveField(this.rawState$, (s) => s.segments, arrEq);\n this.newParamId$ = deriveField(this.rawState$, (s) => s.newParamId);\n this.suggestions$ = deriveField(this.rawState$, (s) => s.suggestions, arrEq);\n this.activeIndex$ = deriveField(this.rawState$, (s) => s.activeDropdownIndex);\n this.isLoading$ = deriveField(this.rawState$, computeUiLoading);\n this.isReady$ = deriveField(this.rawState$, (s) => s.isReady);\n this.isFocused$ = deriveField(this.rawState$, (s) => s.isFocused);\n this.isDropdownOpen$ = deriveField(this.rawState$, (s) => s.isDropdownOpen);\n this.isActivePillSelected$ = deriveField(this.rawState$, (s) => s.isActivePillSelected);\n this.placeholderText$ = deriveField(this.rawState$, (s) => s.placeholderText);\n this.error$ = deriveField(this.rawState$, (s) => s.error);\n this.editingParam$ = deriveField(this.rawState$, (s) => s.editingParam);\n this.editingAnchor$ = deriveField(this.rawState$, (s) => s.editingAnchor);\n this.caretOffset$ = deriveField(this.rawState$, (s) => s.caretOffset);\n\n // === Composite observables ===\n // Project directly off `rawState$` with a single map() so each store\n // tick produces exactly ONE coherent state$ emission. Using\n // `combineLatest` over the per-field observables here would fire one\n // emission per inner-source tick (up to N per store update), and the\n // editor-host directive's post-promote refocus would run against an\n // intermediate state where `newParamId` was set but `segments` /\n // `caretOffset` still held their old values — leaving the caret stuck\n // at the pre-click position.\n this.state$ = this.rawState$.pipe(\n map(computeState),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n this.optionsPosition$.next(opts.optionsPosition ?? \"below\");\n this.dropdown$ = combineLatest([this.rawState$, this.optionsPosition$]).pipe(\n map(([s, optionsPosition]) => computeDropdown(s, optionsPosition)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n // === Read-only accessors ===\n\n /** Stable ARIA listbox ID for the dropdown. Pass to `<textarea aria-controls=\"...\">`. */\n get listboxId(): string {\n return this.core.listboxId;\n }\n\n /** Whether `destroy()` has been called. After destruction all action methods no-op. */\n get destroyed(): boolean {\n return this.isDestroyed;\n }\n\n /**\n * Synchronous snapshot of the controller's current public state. Mirrors\n * the latest emission of `state$`. Useful in callbacks where you can't\n * `subscribe` (e.g. inside an event handler).\n */\n getState(): AIAutocompleteControllerState {\n return computeState(this.rawState$.value);\n }\n\n // === Action methods (pass-through to the core) ===\n //\n // Every action method begins with an `isDestroyed` guard so that callers\n // who hold a stale reference after `destroy()` don't accidentally trigger\n // work on a torn-down core. The vanilla core does not gate its own methods\n // post-dispose — `reset()`, `handleTextChange()`, and friends would still\n // schedule fetches or fire HTTP requests against an aborted controller,\n // and the responses would have nowhere to surface (rawState$ is already\n // complete). The guard makes the JSDoc-promised \"no-op silently\"\n // semantics actually true.\n\n /** Clear all state, rotate `session_id`, and re-fetch. Call after submit. */\n reset(): void {\n if (this.isDestroyed) return;\n this.core.reset();\n }\n\n /** Pick a dropdown option (or replace the re-edited param if in re-edit mode). */\n selectOption(option: SuggestionOption): void {\n if (this.isDestroyed) return;\n this.core.selectOption(option);\n }\n\n /** Promote the pill at `index` to active (front of the list). */\n setActivePill(index: number): void {\n if (this.isDestroyed) return;\n this.core.setActivePill(index);\n }\n\n /** Drop the last completed param's \"completed\" status. Text stays as plain text. */\n removeLastParam(): void {\n if (this.isDestroyed) return;\n this.core.removeLastParam();\n }\n\n /** Clear the shimmer animation state for the most-recently-added param. */\n clearNewParamId(): void {\n if (this.isDestroyed) return;\n this.core.clearNewParamId();\n }\n\n /** Controlled-mode setter for editor text. */\n setValue(text: string): void {\n if (this.isDestroyed) return;\n this.core.setValue(text);\n }\n\n /** Controlled-mode setter for completed params. */\n setCompletedParams(params: CompletedParamState[]): void {\n if (this.isDestroyed) return;\n this.core.setCompletedParams(params);\n }\n\n /** Forward plain-text input from the consumer's `<textarea>` to the core. */\n handleTextChange(value: string): void {\n if (this.isDestroyed) return;\n this.core.handleTextChange(value);\n }\n\n /** Forward keyboard events from the consumer's `<textarea>` to the core. */\n handleKeyDown(event: KeyboardEvent): void {\n if (this.isDestroyed) return;\n this.core.handleKeyDown(event);\n }\n\n /** Notify the core of focus state. */\n setFocused(focused: boolean): void {\n if (this.isDestroyed) return;\n this.core.setFocused(focused);\n }\n\n /** Enter re-edit mode for the bold param with the given id. */\n startEditingParam(paramId: string): void {\n if (this.isDestroyed) return;\n this.core.startEditingParam(paramId);\n }\n\n /** Exit re-edit mode without changing the bold param. */\n exitEditMode(): void {\n if (this.isDestroyed) return;\n this.core.exitEditMode();\n }\n\n /** Forward post-input caret position (extends the edit tail). */\n handleCaretAfterInput(offset: number | null): void {\n if (this.isDestroyed) return;\n this.core.handleCaretAfterInput(offset);\n }\n\n /** Forward selection-only caret moves (may exit re-edit). */\n handleCaretMove(offset: number | null): void {\n if (this.isDestroyed) return;\n this.core.handleCaretMove(offset);\n }\n\n /** Replace the bold param being re-edited. Returns true when applied. */\n replaceEditingRange(replacement: string): boolean {\n if (this.isDestroyed) return false;\n return this.core.replaceEditingRange(replacement);\n }\n\n /** Set the highlighted option index (typically driven by hover). */\n setActiveDropdownIndex(index: number): void {\n if (this.isDestroyed) return;\n this.core.setActiveDropdownIndex(index);\n }\n\n // === Lifecycle ===\n\n /**\n * Apply runtime changes to a subset of options. Event callbacks\n * (`onSubmit`, `onError`, etc.) cannot be swapped this way — they are\n * registered once at construction (matches the React hook's design). For\n * dynamic event reactivity, subscribe to the corresponding observable\n * (e.g. `text$` instead of `onChange`).\n */\n update(opts: AIAutocompleteControllerUpdate): void {\n if (this.isDestroyed) return;\n this.core.update(opts);\n if (opts.optionsPosition !== undefined) {\n this.optionsPosition$.next(opts.optionsPosition);\n }\n }\n\n /**\n * Release all resources — unsubscribes from the core, destroys the core,\n * and completes the internal state subject. Safe to call multiple times.\n * After destruction, action methods no-op silently.\n */\n destroy(): void {\n if (this.isDestroyed) return;\n this.isDestroyed = true;\n this.unsubscribeCore();\n this.core.destroy();\n this.rawState$.complete();\n }\n}\n\n// ===== Pure helpers — not part of the public surface =====\n\n/**\n * Shallow array equality. The vanilla store reassigns array fields on every\n * write (`store.set({ completedParams: [...prev, x] })`), so reference\n * equality alone would re-emit downstream even when the contents are\n * identical. Used for `completedParams$`, `suggestions$`, `suggestionPills$`,\n * and `segments$`.\n */\nfunction arrEq<T>(a: readonly T[], b: readonly T[]): boolean {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction computeUiLoading(s: CoreState): boolean {\n return s.isLoading && !s.editingParam && !s.inSelectionAnimation;\n}\n\nfunction computeState(s: CoreState): AIAutocompleteControllerState {\n return {\n text: s.text,\n completedParams: s.completedParams,\n skippedParams: s.skippedParams,\n suggestionPills: s.actionableSuggestions,\n segments: s.segments,\n newParamId: s.newParamId,\n suggestions: s.suggestions,\n activeIndex: s.activeDropdownIndex,\n isLoading: computeUiLoading(s),\n isReady: s.isReady,\n isFocused: s.isFocused,\n isDropdownOpen: s.isDropdownOpen,\n placeholderText: s.placeholderText,\n error: s.error,\n editingParam: s.editingParam,\n editingAnchor: s.editingAnchor,\n caretOffset: s.caretOffset,\n };\n}\n\nfunction computeDropdown(\n s: CoreState,\n optionsPosition: \"above\" | \"below\",\n): AIAutocompleteDropdownState {\n const editingParam = s.editingParam;\n const activeSuggestion = s.actionableSuggestions[0];\n const dropdownPill: Suggestion | null = editingParam\n ? {\n type: editingParam.suggestionType,\n text: editingParam.suggestionPlaceholder,\n required: true,\n options: editingParam.options,\n }\n : null;\n const dropdownActivePill = dropdownPill ?? activeSuggestion;\n const dropdownPills = dropdownPill ? [dropdownPill] : s.actionableSuggestions;\n return {\n suggestions: dropdownActivePill ? [{ ...dropdownActivePill, options: s.filteredOptions }] : [],\n activeIndex: s.activeDropdownIndex,\n isOpen: s.isDropdownOpen,\n pills: dropdownPills,\n isActivePillSelected: s.isActivePillSelected,\n isLoading: computeUiLoading(s),\n isInputEmpty: s.text.trim().length === 0,\n optionsPosition,\n };\n}\n","import {\n Directive,\n ElementRef,\n Input,\n inject,\n NgZone,\n type OnDestroy,\n type OnInit,\n Renderer2,\n} from \"@angular/core\";\nimport {\n extractPlainText,\n getCursorOffset,\n plainTextLength,\n renderEditableContent,\n setCursorOffset,\n} from \"@magicx-eng/ai-autocomplete-vanilla\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport type { AIAutocompleteController } from \"../../controller/ai-autocomplete.controller\";\n\n/**\n * Module-level cache for the one-time plaintext-only feature detection.\n * Mirrors `supportsPlaintextOnly` in useContentEditableEditor.ts.\n */\nlet plaintextOnlyCache: boolean | undefined;\nfunction supportsPlaintextOnly(): boolean {\n if (plaintextOnlyCache !== undefined) return plaintextOnlyCache;\n if (typeof document === \"undefined\") return false;\n const probe = document.createElement(\"div\");\n probe.setAttribute(\"contenteditable\", \"plaintext-only\");\n plaintextOnlyCache = probe.contentEditable === \"plaintext-only\";\n return plaintextOnlyCache;\n}\n\n/**\n * Internal directive that owns every concern specific to running the\n * autocomplete on top of a contentEditable host: composition state, caret\n * tracking, selectionchange handling, `beforeinput` interception, paste\n * sanitization, plaintext-only feature detection, segment rendering,\n * post-promote refocus, and re-edit caret park.\n *\n * Mirrors `packages/react/src/hooks/useContentEditableEditor.ts` one-for-one.\n * Used only by the Tier 1 `<ai-autocomplete>` component — never exported.\n *\n * @internal\n */\n@Directive({\n selector: \"[aiaEditorHost]\",\n standalone: true,\n host: {\n role: \"combobox\",\n \"aria-autocomplete\": \"list\",\n \"aria-haspopup\": \"listbox\",\n spellcheck: \"true\",\n enterkeyhint: \"send\",\n tabindex: \"0\",\n \"(input)\": \"onInput()\",\n \"(keydown)\": \"onKeyDown($event)\",\n \"(compositionstart)\": \"onCompositionStart()\",\n \"(compositionend)\": \"onCompositionEnd()\",\n \"(paste)\": \"onPaste($event)\",\n \"(focus)\": \"onFocus()\",\n \"(blur)\": \"onBlur()\",\n },\n})\nexport class AIAutocompleteEditorHostDirective implements OnInit, OnDestroy {\n @Input(\"aiaEditorHost\") controller!: AIAutocompleteController;\n @Input() autoFocus = true;\n\n private readonly el = inject<ElementRef<HTMLDivElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly zone = inject(NgZone);\n private readonly destroy$ = new Subject<void>();\n\n private composing = false;\n private lastInputAt = 0;\n private lastSeenParamId = \"\";\n private lastEditingId = \"\";\n private editingParamId: string | null = null;\n\n private documentSelectionListener?: () => void;\n private beforeInputListener?: (event: Event) => void;\n\n ngOnInit(): void {\n if (!this.controller) {\n throw new Error(\"[aiaEditorHost] requires a controller\");\n }\n\n const el = this.el.nativeElement;\n const ceMode = supportsPlaintextOnly() ? \"plaintext-only\" : \"true\";\n this.renderer.setAttribute(el, \"contenteditable\", ceMode);\n this.renderer.setAttribute(el, \"aria-controls\", this.controller.listboxId);\n this.renderer.setAttribute(el, \"suppress-content-editable-warning\", \"true\");\n\n // Auto-focus on mount. If the editor already has focus (e.g. from a\n // click that fired before our lifecycle ran), notify the controller\n // instead of stealing focus.\n if (this.autoFocus) {\n queueMicrotask(() => {\n if (typeof document === \"undefined\") return;\n if (document.activeElement === el) {\n this.controller.setFocused(true);\n } else {\n el.focus();\n }\n });\n }\n\n this.bindDocumentSelectionListener();\n this.bindBeforeInputListener();\n this.bindStateSubscription();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n if (this.documentSelectionListener && typeof document !== \"undefined\") {\n document.removeEventListener(\"selectionchange\", this.documentSelectionListener);\n }\n if (this.beforeInputListener) {\n this.el.nativeElement.removeEventListener(\"beforeinput\", this.beforeInputListener);\n }\n }\n\n // === Host event handlers ===\n\n onCompositionStart(): void {\n this.composing = true;\n }\n\n onCompositionEnd(): void {\n this.composing = false;\n this.fireInput();\n }\n\n onInput(): void {\n this.lastInputAt = performance.now();\n this.fireInput();\n this.controller.handleCaretAfterInput(getCursorOffset(this.el.nativeElement));\n }\n\n onKeyDown(event: KeyboardEvent): void {\n this.controller.handleKeyDown(event);\n }\n\n onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const el = this.el.nativeElement;\n const text = (event.clipboardData?.getData(\"text/plain\") ?? \"\").replace(/\\r?\\n/g, \" \");\n if (!text) return;\n const doc = el.ownerDocument ?? document;\n const sel = doc.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (!el.contains(range.startContainer)) return;\n range.deleteContents();\n const node = doc.createTextNode(text);\n range.insertNode(node);\n range.setStartAfter(node);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n this.fireInput();\n }\n\n onFocus(): void {\n this.controller.setFocused(true);\n }\n\n onBlur(): void {\n this.controller.setFocused(false);\n }\n\n // === Internal helpers ===\n\n private fireInput(): void {\n if (this.composing) return;\n const el = this.el.nativeElement;\n const raw = extractPlainText(el);\n const shouldCapitalize = raw.length > 0 && raw[0] !== raw[0].toUpperCase();\n const next = shouldCapitalize ? raw[0].toUpperCase() + raw.slice(1) : raw;\n this.controller.handleTextChange(next);\n }\n\n private bindDocumentSelectionListener(): void {\n if (typeof document === \"undefined\") return;\n const el = this.el.nativeElement;\n // selectionchange fires on every keystroke and caret move — run outside\n // Angular's zone (§16.1) and re-enter only when we actually need to\n // notify the controller of a meaningful change.\n this.zone.runOutsideAngular(() => {\n const handler = (): void => {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n if (!sel.anchorNode || !el.contains(sel.anchorNode)) return;\n const anchor = sel.anchorNode;\n const startEl =\n anchor.nodeType === Node.ELEMENT_NODE ? (anchor as Element) : anchor.parentElement;\n const strong = startEl?.closest<HTMLElement>('strong[data-seg=\"completed\"][data-param-id]');\n // `DOMStringMap` is an index signature; bracket notation is required\n // by `noPropertyAccessFromIndexSignature`.\n const enclosing = strong?.dataset[\"paramId\"] ?? null;\n if (enclosing && enclosing !== this.editingParamId) {\n this.zone.run(() => this.controller.startEditingParam(enclosing));\n return;\n }\n if (performance.now() - this.lastInputAt < 50) return;\n this.zone.run(() => this.controller.handleCaretMove(getCursorOffset(el)));\n };\n this.documentSelectionListener = handler;\n document.addEventListener(\"selectionchange\", handler);\n });\n }\n\n private bindBeforeInputListener(): void {\n const el = this.el.nativeElement;\n // Native beforeinput — React's synthetic onBeforeInput is wired to the\n // legacy textInput event and doesn't fire reliably for delete* types.\n const handler = (event: Event): void => {\n const inputEvent = event as InputEvent;\n const t = inputEvent.inputType;\n if (t === \"insertParagraph\" || t === \"insertLineBreak\" || t === \"insertFromDrop\") {\n event.preventDefault();\n return;\n }\n if (t.startsWith(\"insert\") || t.startsWith(\"delete\")) {\n const replacement = t.startsWith(\"delete\") ? \"\" : (inputEvent.data ?? \"\");\n if (this.controller.replaceEditingRange(replacement)) {\n event.preventDefault();\n }\n }\n };\n this.beforeInputListener = handler;\n el.addEventListener(\"beforeinput\", handler);\n }\n\n private bindStateSubscription(): void {\n const el = this.el.nativeElement;\n this.controller.state$.pipe(takeUntil(this.destroy$)).subscribe((state) => {\n this.editingParamId = state.editingParam?.id ?? null;\n\n renderEditableContent({\n input: el,\n segments: state.segments,\n newParamId: state.newParamId,\n editingParamId: state.editingParam?.id ?? null,\n placeholderText: state.placeholderText,\n isFocused: state.isFocused,\n });\n\n // Post-promote refocus + caret-after-bold placement (mirrors React's\n // useLayoutEffect on newParamId).\n const currentParamId = state.newParamId ?? \"\";\n if (currentParamId && currentParamId !== this.lastSeenParamId) {\n this.lastSeenParamId = currentParamId;\n el.focus();\n const desired = state.caretOffset ?? plainTextLength(el);\n setCursorOffset(el, desired);\n } else if (!currentParamId) {\n this.lastSeenParamId = \"\";\n }\n\n // Re-edit caret park (mirrors React's useLayoutEffect on editingParam).\n const editingId = state.editingParam?.id ?? \"\";\n if (editingId && editingId !== this.lastEditingId && state.editingAnchor != null) {\n this.lastEditingId = editingId;\n setCursorOffset(el, state.editingAnchor);\n } else if (!editingId) {\n this.lastEditingId = \"\";\n }\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from \"@angular/core\";\n\n/**\n * Internal default submit button (up-arrow). Angular analogue of React's\n * `SubmitButton`. The default/custom/hidden branching stays in the parent\n * (`AIAutocompleteComponent`); this is only the built-in button.\n *\n * @internal\n */\n@Component({\n selector: \"aia-submit-button\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./submit-button.component.html\",\n styleUrls: [\"./submit-button.component.css\"],\n})\nexport class SubmitButtonComponent {\n @Input() disabled = false;\n @Output() readonly submit = new EventEmitter<MouseEvent>();\n\n onClick(event: MouseEvent): void {\n this.submit.emit(event);\n }\n}\n","<button\n type=\"button\"\n data-aia-submit=\"\"\n class=\"magicx-aia-submit-button\"\n [disabled]=\"disabled\"\n aria-label=\"Submit\"\n (click)=\"onClick($event)\"\n>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" role=\"img\" aria-label=\"Submit\">\n <path\n d=\"M9 14V4M9 4L4 9M9 4L14 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n</button>\n","import { CommonModule, isPlatformBrowser } from \"@angular/common\";\nimport {\n type AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n type ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n inject,\n NgZone,\n type OnChanges,\n type OnDestroy,\n type OnInit,\n Output,\n PLATFORM_ID,\n type SimpleChanges,\n type TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport {\n type APIConfig,\n type AppearanceMode,\n type AutocompleteResult,\n buildSubmitResult,\n type CompletedParamState,\n extractPlainText,\n ModeController,\n type OptionOverrides,\n setCursorOffset,\n} from \"@magicx-eng/ai-autocomplete-vanilla\";\nimport { AIAutocompleteDropdownComponent } from \"../ai-autocomplete-dropdown/ai-autocomplete-dropdown.component\";\nimport { AIAutocompleteController } from \"../controller/ai-autocomplete.controller\";\nimport { AIAutocompleteEditorHostDirective } from \"../internal/editor-host/editor-host.directive\";\nimport { PillListComponent } from \"../internal/pill-list/pill-list.component\";\nimport { SubmitButtonComponent } from \"../internal/submit-button/submit-button.component\";\n\n/**\n * Tier 1 component — `<ai-autocomplete>`. The Angular equivalent of React's\n * `<AIAutocomplete />`. Owns the contentEditable editor, inline pills, mode\n * controller, submit button slot, and an embedded\n * {@link AIAutocompleteController} that drives the dropdown.\n *\n * @public\n */\n@Component({\n selector: \"ai-autocomplete\",\n standalone: true,\n imports: [\n CommonModule,\n AIAutocompleteDropdownComponent,\n AIAutocompleteEditorHostDirective,\n PillListComponent,\n SubmitButtonComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./ai-autocomplete.component.html\",\n styleUrls: [\"./ai-autocomplete.component.css\"],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n useExisting: forwardRef(() => AIAutocompleteComponent),\n multi: true,\n },\n ],\n})\nexport class AIAutocompleteComponent\n implements OnInit, AfterViewInit, OnChanges, OnDestroy, ControlValueAccessor\n{\n // === Inputs (mirrors React's AIAutocompleteProps) ===\n\n @Input() apiConfig?: APIConfig;\n @Input() optionOverrides?: OptionOverrides;\n @Input() maskCompletedText = false;\n @Input() columns?: number;\n /** Where unfilled pills render. Default: \"dropdown\". */\n @Input() pillPlacement: \"inline\" | \"dropdown\" | \"hidden\" = \"dropdown\";\n /** Color mode. \"auto\" follows prefers-color-scheme. Default: \"auto\". */\n @Input() mode: AppearanceMode = \"auto\";\n @Input() optionsPosition: \"above\" | \"below\" = \"below\";\n @Input() animations = true;\n @Input() dropdownTrigger?: \"auto\" | \"manual\" | \"hidden\";\n @Input() closeDropdownOnBlur?: boolean;\n @Input() showNonTappableOptions?: boolean;\n /** Focus the editor on mount. Default: true. */\n @Input() autoFocus = true;\n /** Controlled-mode text value. */\n @Input() value?: string;\n /** Controlled-mode completed params. */\n @Input() completedParams?: CompletedParamState[];\n /**\n * Custom submit button. Pass a `<ng-template>` to replace the default arrow\n * button. Pass `null` to render no button. Default (`undefined`) renders\n * the built-in arrow.\n */\n @Input() submitButton?: TemplateRef<unknown> | null;\n\n // === Outputs ===\n\n /** Called on Enter or submit-button click. */\n @Output() readonly submitted = new EventEmitter<AutocompleteResult>();\n @Output() readonly errored = new EventEmitter<Error>();\n @Output() readonly valueChange = new EventEmitter<string>();\n @Output() readonly completedParamsChange = new EventEmitter<CompletedParamState[]>();\n @Output() readonly focused = new EventEmitter<void>();\n @Output() readonly blurred = new EventEmitter<void>();\n\n // === View refs ===\n\n @ViewChild(\"container\", { static: true }) containerRef!: ElementRef<HTMLDivElement>;\n @ViewChild(\"editor\", { static: false }) editorRef?: ElementRef<HTMLDivElement>;\n @ViewChild(\"pillContainer\") pillContainerRef?: ElementRef<HTMLSpanElement>;\n\n // === Public state for the template ===\n\n controller!: AIAutocompleteController;\n /**\n * Concrete light/dark value bound to `[attr.data-mode]`. Seeded in ngOnInit\n * so the attribute is present during SSR (where ModeController, gated behind\n * isPlatformBrowser in ngAfterViewInit, never runs). On the browser the\n * ModeController's resolve callback keeps this in sync — so its runtime\n * prefers-color-scheme updates and this binding always agree (no clobber).\n */\n resolvedMode: \"light\" | \"dark\" = \"dark\";\n\n // === Internal ===\n\n private modeController?: ModeController;\n private resizeObserver?: ResizeObserver;\n private onChangeFn: (value: string) => void = noop;\n private onTouchedFn: () => void = noop;\n // Holds a value written by Reactive Forms before ngOnInit ran. Reactive\n // Forms can call writeValue() during dynamic form construction (e.g. when\n // a FormControl already holds a value at the moment the directive is\n // created). We stash the value here and flush it in ngOnInit *after*\n // the controller exists — otherwise the editor renders empty even though\n // the form had a value. `undefined` means \"no pending write\".\n private pendingWriteValue: string | undefined;\n\n // §16.9: prefer `inject()` over constructor-parameter DI for components.\n private readonly platformId = inject(PLATFORM_ID);\n private readonly zone = inject(NgZone);\n private readonly cdr = inject(ChangeDetectorRef);\n\n ngOnInit(): void {\n // Seed before the browser guard so SSR renders a concrete data-mode.\n this.resolvedMode = resolveInitialMode(this.mode);\n if (!isPlatformBrowser(this.platformId)) return;\n\n this.controller = new AIAutocompleteController({\n apiConfig: this.apiConfig,\n optionOverrides: this.optionOverrides,\n maskCompletedText: this.maskCompletedText,\n columns: this.columns,\n dropdownTrigger: this.dropdownTrigger,\n optionsPosition: this.optionsPosition,\n closeDropdownOnBlur: this.closeDropdownOnBlur,\n showNonTappableOptions: this.showNonTappableOptions,\n source: \"full-sdk\",\n value: this.value,\n completedParams: this.completedParams,\n onSubmit: (result) => this.handleSubmit(result),\n onError: (error) => this.errored.emit(error),\n onChange: (text) => {\n this.valueChange.emit(text);\n this.onChangeFn(text);\n },\n onParamsChange: (params) => this.completedParamsChange.emit(params),\n onFocus: () => this.focused.emit(),\n onBlur: () => {\n this.blurred.emit();\n this.onTouchedFn();\n },\n setCursor: (offset) => {\n const editor = this.editorRef?.nativeElement;\n if (!editor) return;\n editor.focus();\n setCursorOffset(editor, offset);\n },\n });\n\n if (this.pendingWriteValue !== undefined) {\n this.controller.setValue(this.pendingWriteValue);\n this.pendingWriteValue = undefined;\n }\n }\n\n ngAfterViewInit(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n // ModeController writes `data-mode` to the element it's given. The CSS\n // selectors are scoped to `.magicx-aia[data-mode=\"...\"]` — which lives on\n // the inner `<div class=\"magicx-aia magicx-aia-container\" #container>`,\n // NOT the host `<ai-autocomplete>` element. The resolve callback mirrors\n // the value into `resolvedMode` so the `[attr.data-mode]` binding stays in\n // lockstep with ModeController — the binding handles SSR, ModeController\n // handles runtime prefers-color-scheme switches, and because they always\n // agree neither clobbers the other.\n this.modeController = new ModeController(\n this.containerRef.nativeElement,\n this.mode,\n (resolved) => {\n this.resolvedMode = resolved;\n this.cdr.markForCheck();\n },\n );\n\n // Pill-wrap detection — when the pill list wraps below the editor's last\n // line, drop its 8px left margin via a data attribute the CSS keys off.\n // Mirrors the React component's useLayoutEffect.\n if (typeof ResizeObserver !== \"undefined\") {\n this.zone.runOutsideAngular(() => {\n this.resizeObserver = new ResizeObserver(() => this.measurePillWrap());\n const editor = this.editorRef?.nativeElement;\n if (editor) this.resizeObserver.observe(editor);\n });\n this.measurePillWrap();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.controller) return;\n // `SimpleChanges` is `{ [key: string]: SimpleChange }`, so per\n // `noPropertyAccessFromIndexSignature` each key lookup uses bracket\n // notation — this keeps the strictness contract that the rest of the\n // workspace enforces.\n // Controlled-mode propagation\n if (changes[\"value\"] && this.value !== undefined) {\n this.controller.setValue(this.value);\n }\n if (changes[\"completedParams\"] && this.completedParams !== undefined) {\n this.controller.setCompletedParams(this.completedParams);\n }\n // Reactive options\n if (\n changes[\"apiConfig\"] ||\n changes[\"optionOverrides\"] ||\n changes[\"dropdownTrigger\"] ||\n changes[\"optionsPosition\"] ||\n changes[\"closeDropdownOnBlur\"] ||\n changes[\"showNonTappableOptions\"]\n ) {\n this.controller.update({\n apiConfig: this.apiConfig,\n optionOverrides: this.optionOverrides,\n dropdownTrigger: this.dropdownTrigger,\n optionsPosition: this.optionsPosition,\n closeDropdownOnBlur: this.closeDropdownOnBlur,\n showNonTappableOptions: this.showNonTappableOptions,\n });\n }\n if (changes[\"mode\"]) {\n // Keep the binding correct even when ModeController doesn't exist yet\n // (SSR / pre-ngAfterViewInit). On the browser, setMode triggers the\n // resolve callback which sets the same value.\n this.resolvedMode = resolveInitialMode(this.mode);\n this.modeController?.setMode(this.mode);\n }\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n this.modeController?.destroy();\n this.controller?.destroy();\n }\n\n // === Imperative API (exposed on the component instance via @ViewChild) ===\n\n /** Programmatically focus the editor. */\n focus(): void {\n this.editorRef?.nativeElement.focus();\n }\n\n /** Programmatically blur the editor. */\n blur(): void {\n this.editorRef?.nativeElement.blur();\n }\n\n /** Clear all state, rotate session, and re-fetch. */\n reset(): void {\n this.controller?.reset();\n }\n\n /** Switch color mode at runtime. */\n setMode(mode: AppearanceMode): void {\n this.mode = mode;\n this.resolvedMode = resolveInitialMode(mode);\n this.modeController?.setMode(mode);\n this.cdr.markForCheck();\n }\n\n // === Template helpers ===\n\n /**\n * 'default' → render the built-in arrow button.\n * 'custom' → project the consumer-supplied TemplateRef.\n * 'hidden' → no button.\n */\n get submitButtonState(): \"default\" | \"custom\" | \"hidden\" {\n if (this.submitButton === null) return \"hidden\";\n if (this.submitButton === undefined) return \"default\";\n return \"custom\";\n }\n\n /** Narrowed accessor for *ngTemplateOutlet — never undefined. */\n get customSubmitTemplate(): TemplateRef<unknown> | null {\n return this.submitButton ?? null;\n }\n\n get showInlinePills(): boolean {\n return this.pillPlacement === \"inline\";\n }\n\n get showDropdownPills(): boolean {\n return this.pillPlacement === \"dropdown\";\n }\n\n /**\n * `true` when there's something to submit — driven by current segments\n * and completed params. Read off the live editor via the controller state.\n */\n canSubmit(state: { segments: { length: number }; completedParams: { length: number } }): boolean {\n return state.segments.length > 0 || state.completedParams.length > 0;\n }\n\n onWrapperClick(event: MouseEvent): void {\n // Clicking a pill should activate it without stealing focus elsewhere.\n const target = event.target as HTMLElement | null;\n if (target?.closest(\"[data-aia-pill]\")) return;\n this.focus();\n }\n\n onSubmitButtonClick(event: MouseEvent): void {\n event.stopPropagation();\n this.handleSubmitFromUserAction();\n }\n\n onSubmitSlotClick(event: MouseEvent): void {\n event.stopPropagation();\n this.handleSubmitFromUserAction();\n }\n\n onSelectPill(index: number): void {\n this.controller.setActivePill(index);\n }\n\n // === ControlValueAccessor ===\n\n writeValue(value: string | null): void {\n const next = value ?? \"\";\n if (!this.controller) {\n // Reactive Forms can call writeValue() before ngOnInit creates the\n // controller (dynamic form construction, or a FormControl that already\n // had a value at directive-creation time). Buffer the value; ngOnInit\n // flushes it as soon as the controller exists.\n this.pendingWriteValue = next;\n return;\n }\n this.controller.setValue(next);\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(_disabled: boolean): void {\n // The contentEditable host doesn't have a native disabled attribute. For\n // v0.1 we accept the call so Angular's forms layer doesn't throw, but\n // the editor stays interactive. A future enhancement can toggle\n // contentEditable + ARIA disabled here.\n }\n\n // === Submit flow ===\n\n /**\n * Called by the controller's onSubmit callback (which fires from the\n * keyboard controller on Enter). Reads the live editor text — same trick\n * the React component uses — so the emitted query reflects whatever's in\n * the DOM right now, not a possibly-stale state snapshot.\n */\n private handleSubmit(_result: AutocompleteResult): void {\n const editor = this.editorRef?.nativeElement;\n if (!editor) return;\n const text = extractPlainText(editor);\n const state = this.controller.getState();\n const params = this.completedParams ?? state.completedParams;\n this.submitted.emit(buildSubmitResult(text, params, state.skippedParams));\n this.controller.reset();\n }\n\n private handleSubmitFromUserAction(): void {\n const state = this.controller.getState();\n if (!this.canSubmit(state)) return;\n // Synthesize the result for the submit-button click path; same shape\n // the controller would deliver from a keyboard Enter, so handleSubmit\n // can take either entry point.\n this.handleSubmit({\n query: state.text.trim(),\n raw_query: \"\",\n completed_params: [],\n });\n }\n\n private measurePillWrap(): void {\n const container = this.pillContainerRef?.nativeElement;\n const editor = this.editorRef?.nativeElement;\n if (!container || !editor) return;\n const inner = container.firstElementChild as HTMLElement | null;\n if (!inner) return;\n // Wrap detection: the pill row's top vs the editor's bottom. When the\n // pills sit on (or above) the editor's last line they're NOT wrapped —\n // keep the 8px margin so they don't butt against typed text or the\n // placeholder. This handles the empty-editor + placeholder case\n // naturally: the placeholder still occupies the editor's line box.\n const cRect = inner.getBoundingClientRect();\n const eRect = editor.getBoundingClientRect();\n const wrapped = cRect.top >= eRect.bottom - 2;\n this.zone.run(() => {\n if (wrapped) container.setAttribute(\"data-aia-pill-wrapped\", \"\");\n else container.removeAttribute(\"data-aia-pill-wrapped\");\n });\n }\n}\n\nfunction noop(): void {\n // Default no-op for CVA callbacks.\n}\n\n/**\n * Resolve a concrete light/dark value from the configured mode. Used to seed\n * the `data-mode` attribute synchronously (including during SSR, where\n * ModeController never runs). On the server `window` is undefined → defaults\n * to \"dark\" (matches the vanilla/React behavior).\n */\nfunction resolveInitialMode(mode: AppearanceMode): \"light\" | \"dark\" {\n if (mode !== \"auto\") return mode;\n if (typeof window === \"undefined\") return \"dark\";\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n","<div\n #container\n class=\"magicx-aia magicx-aia-container\"\n [attr.data-pill-placement]=\"pillPlacement\"\n [attr.data-options-position]=\"optionsPosition\"\n [attr.data-animations]=\"animations ? 'on' : 'off'\"\n [attr.data-mode]=\"resolvedMode\"\n>\n <ai-autocomplete-dropdown\n *ngIf=\"controller\"\n [controller]=\"controller\"\n [showPills]=\"showDropdownPills\"\n ></ai-autocomplete-dropdown>\n\n <div\n class=\"magicx-aia-input-wrapper\"\n (click)=\"onWrapperClick($event)\"\n (keyup)=\"$event.stopPropagation()\"\n >\n <div class=\"magicx-aia-editor-area\" data-aia-editor=\"\">\n <div\n #editor\n *ngIf=\"controller\"\n [aiaEditorHost]=\"controller\"\n [autoFocus]=\"autoFocus\"\n class=\"magicx-aia-input\"\n data-aia-input=\"\"\n ></div>\n\n <ng-container *ngIf=\"controller && showInlinePills\">\n <span\n #pillContainer\n class=\"magicx-aia-pill-list-container\"\n data-aia-pill-list-container=\"\"\n *ngIf=\"\n (controller.isLoading$ | async) ||\n ((controller.suggestionPills$ | async)?.length ?? 0) > 0\n \"\n >\n <aia-pill-list\n [pills]=\"(controller.suggestionPills$ | async) ?? []\"\n [activePillIndex]=\"0\"\n [activeSelected]=\"(controller.isActivePillSelected$ | async) ?? false\"\n [loading]=\"(controller.isLoading$ | async) ?? false\"\n (selectPill)=\"onSelectPill($event)\"\n ></aia-pill-list>\n </span>\n </ng-container>\n </div>\n\n <ng-container [ngSwitch]=\"submitButtonState\">\n <aia-submit-button\n *ngSwitchCase=\"'default'\"\n [disabled]=\"\n !(\n controller &&\n canSubmit({\n segments: (controller.segments$ | async) ?? [],\n completedParams: (controller.completedParams$ | async) ?? []\n })\n )\n \"\n (submit)=\"onSubmitButtonClick($event)\"\n ></aia-submit-button>\n\n <span\n *ngSwitchCase=\"'custom'\"\n data-aia-submit=\"\"\n class=\"magicx-aia-submit-slot\"\n (click)=\"onSubmitSlotClick($event)\"\n >\n <ng-container *ngTemplateOutlet=\"customSubmitTemplate\"></ng-container>\n </span>\n </ng-container>\n </div>\n</div>\n","import {\n Directive,\n ElementRef,\n forwardRef,\n Input,\n inject,\n type OnDestroy,\n type OnInit,\n Renderer2,\n} from \"@angular/core\";\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport type { AIAutocompleteController } from \"../controller/ai-autocomplete.controller\";\n\n/**\n * Tier 2 input binder. Attach to a `<textarea>` or `<input>` and pass an\n * {@link AIAutocompleteController}:\n *\n * ```html\n * <textarea [aiaInput]=\"ac\"></textarea>\n * ```\n *\n * The directive wires the input's events (input/keydown/focus/blur) to the\n * controller, mirrors controller state into ARIA attributes\n * (`role=\"combobox\"`, `aria-expanded`, `aria-activedescendant`,\n * `aria-autocomplete`, `aria-controls`), and implements\n * {@link ControlValueAccessor} so the host element participates in Reactive\n * Forms out of the box:\n *\n * ```html\n * <textarea [aiaInput]=\"ac\" [formControl]=\"myControl\"></textarea>\n * ```\n *\n * Per the React hook's behavior, the first typed character is auto-capitalized\n * — typing \"h\" becomes \"H\" before being forwarded to the controller. The\n * cursor position is preserved across that rewrite.\n *\n * @public\n */\n@Directive({\n selector: \"[aiaInput]\",\n standalone: true,\n host: {\n role: \"combobox\",\n \"aria-autocomplete\": \"list\",\n \"(input)\": \"onInput($event)\",\n \"(keydown)\": \"onKeyDown($event)\",\n \"(keyup)\": \"onCaretMove()\",\n \"(mouseup)\": \"onCaretMove()\",\n \"(focus)\": \"onFocus()\",\n \"(blur)\": \"onBlur()\",\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n useExisting: forwardRef(() => AIAutocompleteInputDirective),\n multi: true,\n },\n ],\n})\nexport class AIAutocompleteInputDirective implements OnInit, OnDestroy, ControlValueAccessor {\n /**\n * The {@link AIAutocompleteController} that owns the autocomplete state.\n * Required. The directive throws on init if this is missing.\n */\n @Input(\"aiaInput\") controller!: AIAutocompleteController;\n\n private readonly el = inject<ElementRef<HTMLInputElement | HTMLTextAreaElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly destroy$ = new Subject<void>();\n\n private onChangeFn: (value: string) => void = noop;\n private onTouchedFn: () => void = noop;\n // Timestamp of the last `input` event. A `keyup`/`select` that fires within\n // this window is the tail of a keystroke, not a deliberate caret move, so we\n // skip the caret-move handler there (mirrors the editor host's selectionchange\n // guard). performance.now() is monotonic; 0 means \"no input yet\".\n private lastInputAt = 0;\n // Tracks the most-recently-promoted param so we only reposition the caret\n // once per option selection (mirrors the editor host's post-promote refocus).\n private lastSeenParamId = \"\";\n // Holds a value written by Reactive Forms before ngOnInit ran. Reactive\n // Forms can call writeValue() during dynamic form construction (e.g. when\n // a control is patched at the moment the directive is created), and our\n // controller binding may not be initialized yet. We stash the value here\n // and flush it into the controller in ngOnInit *before* subscribing to\n // text$, otherwise text$'s initial \"\" emission would clobber the form\n // value the textarea already shows. `undefined` means \"no pending write\".\n private pendingWriteValue: string | undefined;\n\n ngOnInit(): void {\n if (!this.controller) {\n throw new Error('[aiaInput] requires a controller — use `[aiaInput]=\"myController\"`.');\n }\n\n if (this.pendingWriteValue !== undefined) {\n this.controller.setValue(this.pendingWriteValue);\n this.pendingWriteValue = undefined;\n }\n\n const el = this.el.nativeElement;\n this.renderer.setAttribute(el, \"aria-controls\", this.controller.listboxId);\n\n // Sync editor text → DOM. Skips the write when values already match, so\n // user keystrokes don't fight with our writeback. Preserves the caret\n // position when we do write (and the element still has focus).\n this.controller.text$.pipe(takeUntil(this.destroy$)).subscribe((text) => {\n if (el.value === text) return;\n const wasFocused = typeof document !== \"undefined\" && document.activeElement === el;\n const start = el.selectionStart;\n const end = el.selectionEnd;\n this.renderer.setProperty(el, \"value\", text);\n if (wasFocused && start != null && end != null) {\n const clampedStart = Math.min(start, text.length);\n const clampedEnd = Math.min(end, text.length);\n try {\n el.setSelectionRange(clampedStart, clampedEnd);\n } catch {\n // `setSelectionRange` throws on some input types (e.g. \"number\");\n // safe to ignore — those inputs don't have a meaningful selection.\n }\n }\n });\n\n this.controller.isDropdownOpen$.pipe(takeUntil(this.destroy$)).subscribe((isOpen) => {\n this.renderer.setAttribute(el, \"aria-expanded\", String(isOpen));\n });\n\n this.controller.activeIndex$.pipe(takeUntil(this.destroy$)).subscribe((idx) => {\n if (idx >= 0) {\n this.renderer.setAttribute(\n el,\n \"aria-activedescendant\",\n `${this.controller.listboxId}-option-${idx}`,\n );\n } else {\n this.renderer.removeAttribute(el, \"aria-activedescendant\");\n }\n });\n\n // After an option selection promotes a param, the core appends its text and\n // stamps `caretOffset` at the end of the inserted text. The text$ subscriber\n // above writes the new value but *restores the pre-write caret* (correct for\n // typing echoes, wrong here), so we move the caret to the promoted position.\n // Keyed on newParamId so it fires once per selection, not on every tick.\n // Registered after text$ so the new value is in the DOM before we seek.\n this.controller.newParamId$.pipe(takeUntil(this.destroy$)).subscribe((id) => {\n const current = id ?? \"\";\n if (current && current !== this.lastSeenParamId) {\n this.lastSeenParamId = current;\n const offset = this.controller.getState().caretOffset ?? el.value.length;\n const clamped = Math.min(Math.max(offset, 0), el.value.length);\n // Only grab focus if we don't already have it — don't yank focus back\n // from wherever the user moved it after selecting (e.g. a host-app\n // button). setSelectionRange still positions the caret regardless.\n if (typeof document !== \"undefined\" && document.activeElement !== el) {\n el.focus();\n }\n try {\n el.setSelectionRange(clamped, clamped);\n } catch {\n // Some input types (e.g. \"number\") don't support setSelectionRange.\n }\n } else if (!current) {\n this.lastSeenParamId = \"\";\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // === Event handlers (wired via host metadata above) ===\n\n /**\n * Auto-capitalizes the first character on the user's first keystroke so the\n * server receives \"Create\" instead of \"create\". Matches React's\n * `handleChange` in `useAIAutocomplete`. Skipped during IME composition so\n * we don't disrupt multi-keystroke input methods (Pinyin, Hangul, etc.).\n */\n onInput(event: Event): void {\n // Stamp the input time before anything else. The autocapitalize path below\n // calls setSelectionRange, which can synchronously fire a `select` event →\n // onCaretMove; stamping first ensures that event falls inside the guard\n // window and is treated as part of this keystroke, not a caret move.\n this.lastInputAt = performance.now();\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const raw = target.value;\n const isComposing = (event as InputEvent).isComposing === true;\n const shouldCapitalize = raw.length > 0 && !isComposing && raw[0] !== raw[0].toUpperCase();\n\n let next = raw;\n if (shouldCapitalize) {\n const start = target.selectionStart;\n const end = target.selectionEnd;\n next = raw[0].toUpperCase() + raw.slice(1);\n this.renderer.setProperty(target, \"value\", next);\n if (start != null && end != null) {\n try {\n target.setSelectionRange(start, end);\n } catch {\n // See note in ngOnInit's text$ subscriber.\n }\n }\n }\n\n this.controller.handleTextChange(next);\n // Sync the real caret into the core. The dropdown's auto-trigger gate only\n // opens when the caret is at the end of the text; without this, the core's\n // `caretOffset` stays pinned at whatever a prior promote/select set it to\n // and goes stale as the user keeps typing, wedging the dropdown closed.\n // selectionStart is null on some input types (number/email/color); treat\n // that as \"caret at end\" rather than feeding null into the core.\n this.controller.handleCaretAfterInput(target.selectionStart ?? target.value.length);\n this.onChangeFn(next);\n }\n\n onKeyDown(event: KeyboardEvent): void {\n this.controller.handleKeyDown(event);\n }\n\n /**\n * Caret moved by something other than typing — arrow keys, Home/End, or a\n * mouse click/drag (keyup + mouseup). Forward the new offset so the core can\n * re-evaluate the caret-at-end dropdown gate (and exit re-edit if the caret\n * left the region). We deliberately do NOT listen for the `select` event:\n * programmatic `setSelectionRange` calls (the text$ writeback, the post-select\n * caret reposition) fire it in jsdom/some browsers, which would re-enter here\n * and clobber `caretOffset`. `keyup`/`mouseup` only fire for real user input.\n * Skipped right after an `input` event, where the caret is already handled by\n * `handleCaretAfterInput` above.\n */\n onCaretMove(): void {\n if (performance.now() - this.lastInputAt < 50) return;\n const el = this.el.nativeElement;\n // selectionStart is null on some input types — treat as caret at end.\n this.controller.handleCaretMove(el.selectionStart ?? el.value.length);\n }\n\n onFocus(): void {\n this.controller.setFocused(true);\n }\n\n onBlur(): void {\n this.controller.setFocused(false);\n this.onTouchedFn();\n }\n\n // === ControlValueAccessor ===\n\n writeValue(value: string | null): void {\n const next = value ?? \"\";\n this.renderer.setProperty(this.el.nativeElement, \"value\", next);\n // If Angular calls writeValue() before ngOnInit (possible during dynamic\n // form construction), queue the value and let ngOnInit flush it. We\n // can't push it into the controller now because either the controller\n // binding hasn't resolved yet, or text$'s initial subscription would\n // overwrite it moments later.\n if (this.controller) {\n this.controller.setValue(next);\n } else {\n this.pendingWriteValue = next;\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this.renderer.setProperty(this.el.nativeElement, \"disabled\", disabled);\n }\n}\n\nfunction noop(): void {\n // Default no-op callback for CVA — overwritten by Angular's form bridge.\n}\n","import { NgModule } from \"@angular/core\";\nimport { AIAutocompleteComponent } from \"./ai-autocomplete/ai-autocomplete.component\";\nimport { AIAutocompleteDropdownComponent } from \"./ai-autocomplete-dropdown/ai-autocomplete-dropdown.component\";\nimport { AIAutocompleteInputDirective } from \"./input/ai-autocomplete-input.directive\";\n\n/**\n * Convenience NgModule that re-exports every public component and directive\n * in this package. Standalone-first consumers can import the individual\n * symbols directly; legacy NgModule-based codebases import this once and\n * get everything.\n *\n * @public\n */\n@NgModule({\n imports: [AIAutocompleteComponent, AIAutocompleteDropdownComponent, AIAutocompleteInputDirective],\n exports: [AIAutocompleteComponent, AIAutocompleteDropdownComponent, AIAutocompleteInputDirective],\n})\nexport class AIAutocompleteModule {}\n","/**\n * Public API surface for @magicx-eng/ai-autocomplete-angular.\n *\n * Populated incrementally as features land — see TDB.md §6.6 for the full\n * planned export list. Only symbols re-exported here are considered part of\n * the package's public contract (TDB §19.2).\n */\n\n// === Re-exported wire types ===\nexport type {\n AccessTokenConfig,\n AccessTokenResult,\n APIConfig,\n APIKeyConfig,\n AppearanceMode,\n AutocompleteResult,\n CompletedParam,\n CompletedParamState,\n OptionOverrides,\n Segment,\n SkippedParamState,\n Suggestion,\n SuggestionOption,\n TaskKind,\n} from \"@magicx-eng/ai-autocomplete-vanilla\";\n// === Submit-result builder (folds skipped params into completed_params) ===\nexport { buildSubmitResult, withSkippedParams } from \"@magicx-eng/ai-autocomplete-vanilla\";\n// === Tier 1: Full component ===\nexport { AIAutocompleteComponent } from \"./lib/ai-autocomplete\";\n// === Convenience NgModule ===\nexport { AIAutocompleteModule } from \"./lib/ai-autocomplete.module\";\n// === Tier 2: Dropdown component ===\nexport { AIAutocompleteDropdownComponent } from \"./lib/ai-autocomplete-dropdown\";\n// === Tier 2: Controller (headless logic class) ===\nexport { AIAutocompleteController } from \"./lib/controller\";\n// === Tier 2: Input binder + ControlValueAccessor ===\nexport { AIAutocompleteInputDirective } from \"./lib/input\";\n// === Angular-specific public types ===\nexport type {\n AIAutocompleteControllerOptions,\n AIAutocompleteControllerState,\n AIAutocompleteControllerUpdate,\n AIAutocompleteDropdownState,\n} from \"./lib/shared/types\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map","CoreAIAutocomplete","noop"],"mappings":"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"}
|