forty-cdk 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/README.md +122 -0
- package/aspect-ratio/README.md +76 -0
- package/avatar/README.md +100 -0
- package/breadcrumbs/README.md +49 -0
- package/breakpoints/README.md +81 -0
- package/button/README.md +49 -0
- package/calendar/README.md +458 -0
- package/carousel/README.md +358 -0
- package/checkbox/README.md +146 -0
- package/combobox/README.md +535 -0
- package/context-menu/README.md +139 -0
- package/date-field/README.md +184 -0
- package/date-picker/README.md +338 -0
- package/dialog/README.md +388 -0
- package/disclosure/README.md +114 -0
- package/drag-drop/README.md +359 -0
- package/drawer/README.md +560 -0
- package/dropdown-menu/README.md +176 -0
- package/fesm2022/forty-cdk-accordion.mjs +348 -0
- package/fesm2022/forty-cdk-accordion.mjs.map +1 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs +74 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs.map +1 -0
- package/fesm2022/forty-cdk-avatar.mjs +308 -0
- package/fesm2022/forty-cdk-avatar.mjs.map +1 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs +125 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs.map +1 -0
- package/fesm2022/forty-cdk-breakpoints.mjs +117 -0
- package/fesm2022/forty-cdk-breakpoints.mjs.map +1 -0
- package/fesm2022/forty-cdk-button.mjs +134 -0
- package/fesm2022/forty-cdk-button.mjs.map +1 -0
- package/fesm2022/forty-cdk-calendar.mjs +2034 -0
- package/fesm2022/forty-cdk-calendar.mjs.map +1 -0
- package/fesm2022/forty-cdk-carousel.mjs +968 -0
- package/fesm2022/forty-cdk-carousel.mjs.map +1 -0
- package/fesm2022/forty-cdk-checkbox.mjs +226 -0
- package/fesm2022/forty-cdk-checkbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-combobox.mjs +2596 -0
- package/fesm2022/forty-cdk-combobox.mjs.map +1 -0
- package/fesm2022/forty-cdk-context-menu.mjs +413 -0
- package/fesm2022/forty-cdk-context-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-core.mjs +9022 -0
- package/fesm2022/forty-cdk-core.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-field.mjs +744 -0
- package/fesm2022/forty-cdk-date-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-picker.mjs +1011 -0
- package/fesm2022/forty-cdk-date-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-dialog.mjs +707 -0
- package/fesm2022/forty-cdk-dialog.mjs.map +1 -0
- package/fesm2022/forty-cdk-disclosure.mjs +190 -0
- package/fesm2022/forty-cdk-disclosure.mjs.map +1 -0
- package/fesm2022/forty-cdk-drag-drop.mjs +1180 -0
- package/fesm2022/forty-cdk-drag-drop.mjs.map +1 -0
- package/fesm2022/forty-cdk-drawer.mjs +1641 -0
- package/fesm2022/forty-cdk-drawer.mjs.map +1 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs +350 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-field.mjs +425 -0
- package/fesm2022/forty-cdk-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-fieldset.mjs +164 -0
- package/fesm2022/forty-cdk-fieldset.mjs.map +1 -0
- package/fesm2022/forty-cdk-file-upload.mjs +221 -0
- package/fesm2022/forty-cdk-file-upload.mjs.map +1 -0
- package/fesm2022/forty-cdk-hover-card.mjs +496 -0
- package/fesm2022/forty-cdk-hover-card.mjs.map +1 -0
- package/fesm2022/forty-cdk-input.mjs +274 -0
- package/fesm2022/forty-cdk-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-internationalized-date.mjs +1 -1
- package/fesm2022/forty-cdk-internationalized-date.mjs.map +1 -1
- package/fesm2022/forty-cdk-listbox.mjs +1279 -0
- package/fesm2022/forty-cdk-listbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-menu.mjs +1439 -0
- package/fesm2022/forty-cdk-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-menubar.mjs +787 -0
- package/fesm2022/forty-cdk-menubar.mjs.map +1 -0
- package/fesm2022/forty-cdk-meter.mjs +211 -0
- package/fesm2022/forty-cdk-meter.mjs.map +1 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs +1145 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-number-input.mjs +559 -0
- package/fesm2022/forty-cdk-number-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-otp-input.mjs +527 -0
- package/fesm2022/forty-cdk-otp-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-pagination.mjs +323 -0
- package/fesm2022/forty-cdk-pagination.mjs.map +1 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs +297 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs.map +1 -0
- package/fesm2022/forty-cdk-popover.mjs +698 -0
- package/fesm2022/forty-cdk-popover.mjs.map +1 -0
- package/fesm2022/forty-cdk-progress.mjs +226 -0
- package/fesm2022/forty-cdk-progress.mjs.map +1 -0
- package/fesm2022/forty-cdk-radio-group.mjs +378 -0
- package/fesm2022/forty-cdk-radio-group.mjs.map +1 -0
- package/fesm2022/forty-cdk-scroll-area.mjs +640 -0
- package/fesm2022/forty-cdk-scroll-area.mjs.map +1 -0
- package/fesm2022/forty-cdk-search.mjs +205 -0
- package/fesm2022/forty-cdk-search.mjs.map +1 -0
- package/fesm2022/forty-cdk-select.mjs +1661 -0
- package/fesm2022/forty-cdk-select.mjs.map +1 -0
- package/fesm2022/forty-cdk-separator.mjs +82 -0
- package/fesm2022/forty-cdk-separator.mjs.map +1 -0
- package/fesm2022/forty-cdk-signal-forms.mjs +97 -0
- package/fesm2022/forty-cdk-signal-forms.mjs.map +1 -0
- package/fesm2022/forty-cdk-slider.mjs +803 -0
- package/fesm2022/forty-cdk-slider.mjs.map +1 -0
- package/fesm2022/forty-cdk-stepper.mjs +886 -0
- package/fesm2022/forty-cdk-stepper.mjs.map +1 -0
- package/fesm2022/forty-cdk-switch.mjs +137 -0
- package/fesm2022/forty-cdk-switch.mjs.map +1 -0
- package/fesm2022/forty-cdk-table.mjs +1518 -0
- package/fesm2022/forty-cdk-table.mjs.map +1 -0
- package/fesm2022/forty-cdk-tabs.mjs +400 -0
- package/fesm2022/forty-cdk-tabs.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-field.mjs +593 -0
- package/fesm2022/forty-cdk-time-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-picker.mjs +1013 -0
- package/fesm2022/forty-cdk-time-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-toast.mjs +1153 -0
- package/fesm2022/forty-cdk-toast.mjs.map +1 -0
- package/fesm2022/forty-cdk-toggle.mjs +516 -0
- package/fesm2022/forty-cdk-toggle.mjs.map +1 -0
- package/fesm2022/forty-cdk-toolbar.mjs +374 -0
- package/fesm2022/forty-cdk-toolbar.mjs.map +1 -0
- package/fesm2022/forty-cdk-tooltip.mjs +672 -0
- package/fesm2022/forty-cdk-tooltip.mjs.map +1 -0
- package/fesm2022/forty-cdk-tree.mjs +2007 -0
- package/fesm2022/forty-cdk-tree.mjs.map +1 -0
- package/fesm2022/forty-cdk-virtualization.mjs +1 -1
- package/fesm2022/forty-cdk-virtualization.mjs.map +1 -1
- package/fesm2022/forty-cdk.mjs +0 -43310
- package/fesm2022/forty-cdk.mjs.map +1 -1
- package/field/README.md +97 -0
- package/fieldset/README.md +86 -0
- package/file-upload/README.md +73 -0
- package/hover-card/README.md +171 -0
- package/input/README.md +156 -0
- package/listbox/README.md +424 -0
- package/menu/README.md +181 -0
- package/menubar/README.md +140 -0
- package/meter/README.md +128 -0
- package/navigation-menu/README.md +253 -0
- package/number-input/README.md +171 -0
- package/otp-input/README.md +198 -0
- package/package.json +213 -1
- package/pagination/README.md +61 -0
- package/pane-resizer/README.md +136 -0
- package/popover/README.md +262 -0
- package/progress/README.md +115 -0
- package/radio-group/README.md +129 -0
- package/scroll-area/README.md +184 -0
- package/search/README.md +42 -0
- package/select/README.md +488 -0
- package/separator/README.md +84 -0
- package/signal-forms/README.md +72 -0
- package/slider/README.md +152 -0
- package/stepper/README.md +292 -0
- package/switch/README.md +116 -0
- package/table/README.md +769 -0
- package/tabs/README.md +130 -0
- package/time-field/README.md +157 -0
- package/time-picker/README.md +172 -0
- package/toast/README.md +398 -0
- package/toggle/README.md +224 -0
- package/toolbar/README.md +109 -0
- package/tooltip/README.md +274 -0
- package/tree/README.md +708 -0
- package/types/forty-cdk-accordion.d.ts +242 -0
- package/types/forty-cdk-aspect-ratio.d.ts +59 -0
- package/types/forty-cdk-avatar.d.ts +133 -0
- package/types/forty-cdk-breadcrumbs.d.ts +92 -0
- package/types/forty-cdk-breakpoints.d.ts +141 -0
- package/types/forty-cdk-button.d.ts +80 -0
- package/types/forty-cdk-calendar.d.ts +914 -0
- package/types/forty-cdk-carousel.d.ts +530 -0
- package/types/forty-cdk-checkbox.d.ts +141 -0
- package/types/forty-cdk-combobox.d.ts +1259 -0
- package/types/forty-cdk-context-menu.d.ts +313 -0
- package/types/forty-cdk-core.d.ts +5774 -0
- package/types/forty-cdk-date-field.d.ts +307 -0
- package/types/forty-cdk-date-picker.d.ts +622 -0
- package/types/forty-cdk-dialog.d.ts +546 -0
- package/types/forty-cdk-disclosure.d.ts +127 -0
- package/types/forty-cdk-drag-drop.d.ts +456 -0
- package/types/forty-cdk-drawer.d.ts +871 -0
- package/types/forty-cdk-dropdown-menu.d.ts +242 -0
- package/types/forty-cdk-field.d.ts +236 -0
- package/types/forty-cdk-fieldset.d.ts +119 -0
- package/types/forty-cdk-file-upload.d.ts +124 -0
- package/types/forty-cdk-hover-card.d.ts +320 -0
- package/types/forty-cdk-input.d.ts +169 -0
- package/types/forty-cdk-internationalized-date.d.ts +1 -1
- package/types/forty-cdk-listbox.d.ts +513 -0
- package/types/forty-cdk-menu.d.ts +629 -0
- package/types/forty-cdk-menubar.d.ts +451 -0
- package/types/forty-cdk-meter.d.ts +122 -0
- package/types/forty-cdk-navigation-menu.d.ts +514 -0
- package/types/forty-cdk-number-input.d.ts +319 -0
- package/types/forty-cdk-otp-input.d.ts +248 -0
- package/types/forty-cdk-pagination.d.ts +214 -0
- package/types/forty-cdk-pane-resizer.d.ts +145 -0
- package/types/forty-cdk-popover.d.ts +509 -0
- package/types/forty-cdk-progress.d.ts +143 -0
- package/types/forty-cdk-radio-group.d.ts +222 -0
- package/types/forty-cdk-scroll-area.d.ts +258 -0
- package/types/forty-cdk-search.d.ts +142 -0
- package/types/forty-cdk-select.d.ts +899 -0
- package/types/forty-cdk-separator.d.ts +59 -0
- package/types/forty-cdk-signal-forms.d.ts +58 -0
- package/types/forty-cdk-slider.d.ts +379 -0
- package/types/forty-cdk-stepper.d.ts +650 -0
- package/types/forty-cdk-switch.d.ts +87 -0
- package/types/forty-cdk-table.d.ts +723 -0
- package/types/forty-cdk-tabs.d.ts +235 -0
- package/types/forty-cdk-time-field.d.ts +307 -0
- package/types/forty-cdk-time-picker.d.ts +578 -0
- package/types/forty-cdk-toast.d.ts +598 -0
- package/types/forty-cdk-toggle.d.ts +310 -0
- package/types/forty-cdk-toolbar.d.ts +217 -0
- package/types/forty-cdk-tooltip.d.ts +436 -0
- package/types/forty-cdk-tree.d.ts +688 -0
- package/types/forty-cdk.d.ts +1 -19743
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forty-cdk-listbox.mjs","sources":["../../../projects/forty-cdk/listbox/src/listbox-context.ts","../../../projects/forty-cdk/listbox/src/listbox-defaults.ts","../../../projects/forty-cdk/listbox/src/listbox-virtualized-navigator.ts","../../../projects/forty-cdk/listbox/src/listbox.ts","../../../projects/forty-cdk/listbox/src/listbox-option.ts","../../../projects/forty-cdk/listbox/src/listbox-option-indicator.ts","../../../projects/forty-cdk/listbox/src/listbox-group.ts","../../../projects/forty-cdk/listbox/src/listbox-group-label.ts","../../../projects/forty-cdk/listbox/src/listbox-reorder-announcements.ts","../../../projects/forty-cdk/listbox/src/listbox-reorder.ts","../../../projects/forty-cdk/listbox/src/listbox-host-directive.ts","../../../projects/forty-cdk/listbox/src/forty-cdk-listbox.ts"],"sourcesContent":["import { inject, InjectionToken, type Signal } from '@angular/core';\n\nimport { type ListNavigationAction, type WritingDirection } from 'forty-cdk/core';\n\nexport interface ForListboxOptionHandle<T = unknown> {\n readonly host: HTMLElement;\n readonly value: Signal<T>;\n readonly disabled: Signal<boolean>;\n readonly id: Signal<string>;\n readonly posInSet: Signal<number | null>;\n}\n\n/**\n * Coordination contract owned by `ForListbox`. Each `ForListboxOption`\n * registers a handle on init so the group can react to disabled changes,\n * compute the first-enabled tab entry, and run typeahead matching.\n *\n * Generic over the option value type `T` (default `string` at the public\n * root). When a consumer binds object items the directive infers `T` from\n * `[(value)]` and `[forListboxOption][value]`; object identity is resolved\n * by the consumer-supplied `isItemEqualToValue` and the form's hidden inputs\n * serialize via `itemToFormValue`. Option text labels are still read from the\n * rendered `textContent`.\n */\nexport interface ForListboxContext<T = unknown> {\n readonly value: Signal<readonly T[]>;\n readonly multiple: Signal<boolean>;\n /**\n * The listbox's effective disabled — its own `disabled` input OR'd with a\n * surrounding disabled `[forFieldset]`. Each `ForListboxOption` ORs this into\n * its own `effectiveDisabled`, so a disabled listbox (or fieldset) disables\n * every option.\n */\n readonly effectiveDisabled: Signal<boolean>;\n readonly readonly: Signal<boolean>;\n readonly orientation: Signal<'horizontal' | 'vertical'>;\n readonly dir: Signal<WritingDirection>;\n readonly selectionFollowsFocus: Signal<boolean>;\n\n /** Compare two items for equality. Defaults to `===`; overridden for object values. */\n readonly isItemEqualToValue: Signal<(a: T, b: T) => boolean>;\n /** Serialize an item for the hidden input's `value` attribute. Defaults to `String(item)`. */\n readonly itemToFormValue: Signal<(item: T) => string>;\n\n /**\n * Full source length when virtualizing, `undefined` in the roving-tabindex\n * path. Drives the option's `aria-setsize` / `aria-posinset` and the\n * option's focus-model branch.\n */\n readonly totalCount: Signal<number | undefined>;\n /**\n * The active option's `id` when using the activedescendant focus model,\n * `null` in the roving-tabindex path. Options read this to compute\n * `data-highlighted`.\n */\n readonly activeDescendantId: Signal<string | null>;\n\n isSelected(value: T): boolean;\n /** Toggle in multi-mode, replace in single-mode. No-op on disabled / readonly. */\n activate(value: T): void;\n /** Move focus from `currentOption` according to `action`. May also select if `selectionFollowsFocus` is on. */\n navigate(currentOption: HTMLElement, action: ListNavigationAction): void;\n /**\n * Multi-mode only. Move focus to the next/prev enabled option AND toggle its\n * selected state — APG \"Shift+ArrowDown / Shift+ArrowUp toggles selection\n * while moving focus\". No-op in single mode, on disabled, or when no enabled\n * neighbor exists. On `readonly` the focus still moves (matching\n * {@link navigate}); only the selection mutation is blocked.\n */\n extendByArrow(currentOption: HTMLElement, action: 'next' | 'prev'): void;\n /**\n * Multi-mode only. APG \"Shift+Space\": select every enabled option from the\n * anchor (set on the most recent unmodified activation) up to and including\n * `currentOption`. Existing selection outside the range is preserved. No-op\n * in single mode or when the listbox is disabled / readonly.\n */\n selectRangeToFocused(currentOption: HTMLElement): void;\n /**\n * Multi-mode only. APG \"Ctrl/Cmd+A\": select every enabled option. If every\n * enabled option is already selected, clears the selection (toggle).\n */\n selectAll(): void;\n /**\n * Multi-mode only. APG \"Ctrl+Shift+Home / Ctrl+Shift+End\": select every\n * enabled option from `currentOption` (inclusive) to the first / last\n * enabled option, and move focus to that edge.\n */\n selectFromCurrentToEdge(currentOption: HTMLElement, edge: 'first' | 'last'): void;\n /**\n * Forward a keydown to the typeahead helper. If the key is a printable\n * character, finds the first matching option and focuses it; returns true\n * to indicate the event was consumed.\n */\n handleTypeahead(event: KeyboardEvent): boolean;\n /**\n * Pre-focus tab-stop policy: with at least one selection, the first selected\n * enabled option is the sole entry point; otherwise the first enabled option\n * in DOM order. Guarantees a single `tabindex=\"0\"` before roving takes over.\n */\n isFirstFocusableOption(el: HTMLElement): boolean;\n /** `true` when `el` is the roving-tabindex active option (reflected as `data-highlighted`). */\n isOptionHighlighted(el: HTMLElement): boolean;\n /**\n * Roving-tabindex value for `el`: `0` for the active option once roving has\n * taken over, `-1` otherwise. Returns `null` before any option is active so\n * the caller can fall back to {@link isFirstFocusableOption}.\n */\n optionTabindex(el: HTMLElement): -1 | 0 | null;\n /** Mark `el` as the roving-tabindex active option (called on option focus). */\n setActiveOption(el: HTMLElement): void;\n\n /**\n * All registered options, in DOM (rendered) order. Exposed for container-level\n * coordinators that compose onto the listbox — e.g. `ForListboxReorder` reads the\n * ordered hosts to resolve drop targets and emit reorder indices — without each\n * option needing a `[forDraggable]` that would fight the listbox's own roving tabindex.\n */\n readonly options: Signal<readonly ForListboxOptionHandle<T>[]>;\n\n /**\n * Called by an option on click. In the virtualized path, moves\n * `aria-activedescendant` to that option and returns DOM focus to the\n * container. A no-op in the roving-tabindex path.\n */\n notifyOptionClick(optionId: string): void;\n\n registerOption(handle: ForListboxOptionHandle<T>): void;\n unregisterOption(handle: ForListboxOptionHandle<T>): void;\n}\n\nexport const FOR_LISTBOX_CONTEXT = new InjectionToken<ForListboxContext>('FOR_LISTBOX_CONTEXT');\n\nexport function injectListboxContext<T = unknown>(piece: string): ForListboxContext<T> {\n const ctx = inject(FOR_LISTBOX_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(`[forty-cdk/listbox] ${piece} must be used inside a [forListbox] element.`);\n }\n return ctx as unknown as ForListboxContext<T>;\n}\n","import { type Provider } from '@angular/core';\n\nimport { createDefaults } from 'forty-cdk/core';\n\n/**\n * Defaults inherited by descendant listboxes in the surrounding injector\n * scope. Configure with `provideForListboxDefaults` either at the\n * application root or in any component's `providers` array; partial\n * overrides merge with the parent scope.\n */\nexport interface ForListboxDefaults {\n /**\n * Single-mode only: when `true`, arrow navigation also selects the\n * focused option. APG calls this optional and recommends caution —\n * leave `false` unless the UX truly benefits from selection following\n * focus.\n */\n selectionFollowsFocus: boolean;\n}\n\n/**\n * Library fallback for listbox defaults, read at the root injector when no\n * consumer has called `provideForListboxDefaults`. Exported for the shared defaults\n * contract spec; not re-exported from the primitive's public entry.\n */\nexport const FOR_LISTBOX_FALLBACK_DEFAULTS: ForListboxDefaults = {\n selectionFollowsFocus: false,\n};\n\nconst { token, provideDefaults } = createDefaults<ForListboxDefaults>(\n 'FOR_LISTBOX_DEFAULTS',\n FOR_LISTBOX_FALLBACK_DEFAULTS,\n);\n\n/** Token holding the resolved listbox defaults for the current scope. */\nexport const FOR_LISTBOX_DEFAULTS = token;\n\n/**\n * Configures forty-cdk listbox defaults for this injector scope. Partial\n * overrides inherit unspecified keys from the parent scope (or library\n * defaults at the root).\n */\nexport function provideForListboxDefaults(defaults: Partial<ForListboxDefaults> = {}): Provider[] {\n return provideDefaults(defaults);\n}\n","import { type Signal } from '@angular/core';\n\nimport { VirtualizedNavigator } from 'forty-cdk/core';\nimport type { ForListboxOptionHandle } from './listbox-context';\n\ninterface PositionEntry {\n readonly id: string;\n readonly disabled: boolean;\n}\n\n/**\n * Dependencies for `ListboxVirtualizedNavigator`. Wires the helper to the\n * host directive's signal graph and a small set of imperative callbacks.\n */\nexport interface ListboxVirtualizedNavigatorDeps<T> {\n /** Live registered options. */\n readonly items: Signal<readonly ForListboxOptionHandle<T>[]>;\n /** Total option count for the virtualized path. */\n readonly totalCount: Signal<number | undefined>;\n /** Inclusive-exclusive range of currently rendered options when virtualizing. */\n readonly visibleRange: Signal<readonly [number, number] | undefined>;\n /** Whether keyboard navigation wraps at the ends. */\n readonly loop: Signal<boolean>;\n /** Read the host's current activedescendant id. */\n readonly getActiveId: () => string | null;\n /** Write the host's activedescendant id. */\n readonly setActiveId: (id: string | null) => void;\n /** Forward a `(scrollToIndex)` request to the consumer's virtualizer. */\n readonly emitScrollToIndex: (idx: number) => void;\n}\n\n/**\n * Virtualization navigation engine for `ForListbox`. A thin adapter over the\n * shared `_internal/virtualized-navigator` engine: the listbox snapshot needs\n * only the id + disabled flag (it never reads option values), so no NG0950 read\n * guard is required.\n *\n * Internal — not re-exported from `listbox/index.ts` or `public-api.ts`.\n */\nexport class ListboxVirtualizedNavigator<T> {\n readonly #core: VirtualizedNavigator<ForListboxOptionHandle<T>, PositionEntry>;\n\n constructor(deps: ListboxVirtualizedNavigatorDeps<T>) {\n this.#core = new VirtualizedNavigator(\n { ...deps, loop: deps.loop },\n {\n posOf: (o) => o.posInSet(),\n idOf: (o) => o.id(),\n hostOf: (o) => o.host,\n readEntry: (o) => ({ id: o.id(), disabled: o.disabled() }),\n },\n );\n }\n\n /** @see VirtualizedNavigator.prime */\n prime(): void {\n this.#core.prime();\n }\n\n /** @see VirtualizedNavigator.tryResolvePending */\n tryResolvePending(): boolean {\n return this.#core.tryResolvePending();\n }\n\n /** @see VirtualizedNavigator.navigate */\n navigate(direction: 'next' | 'prev' | 'first' | 'last'): void {\n this.#core.navigate(direction);\n }\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nimport {\n Collection,\n firstEnabledHost,\n FormUiControlBase,\n injectHiddenInput,\n type ListNavigationAction,\n resolveListNavigation,\n type WritingDirection,\n nextEnabledHandle,\n reconcileRovingActive,\n RovingTabindex,\n defaultItemToFormValue,\n isInArray,\n singleSelected,\n toggleInArray,\n injectTextDirection,\n findTypeaheadMatch,\n injectTypeahead,\n} from 'forty-cdk/core';\nimport {\n FOR_LISTBOX_CONTEXT,\n type ForListboxContext,\n type ForListboxOptionHandle,\n} from './listbox-context';\nimport { FOR_LISTBOX_DEFAULTS } from './listbox-defaults';\nimport { ListboxVirtualizedNavigator } from './listbox-virtualized-navigator';\n\n/**\n * Headless implementation of the [WAI-ARIA Listbox pattern](https://www.w3.org/WAI/ARIA/apg/patterns/listbox/).\n * Implements `FormValueControl<readonly T[]>` from\n * `@angular/forms/signals` for `[formField]` auto-wiring.\n *\n * Generic over the option value type `T` (default `string`). When the\n * consumer binds object items the directive infers `T` from `[(value)]` and\n * `[forListboxOption][value]`; object identity is resolved by the\n * consumer-supplied `[isItemEqualToValue]` and the hidden inputs serialize\n * via `[itemToFormValue]`. Option display text is read from the rendered\n * `textContent`, so no separate label function is needed.\n *\n * Selection is always modeled as `readonly T[]`:\n * - In single mode (`multiple=false`, default), the array has 0 or 1 element.\n * - In multi mode, any number of items can be selected.\n *\n * Single-select consumers can read the sole value through the\n * {@link ForListbox.selected} convenience accessor instead of unwrapping the\n * array.\n *\n * Keyboard supports the full APG-recommended model: arrows + Home/End for\n * focus movement, Space/Enter (via native `<button>` activation) to select\n * or toggle, typeahead, plus multi-select range modifiers (Shift+Arrow,\n * Shift+Space, Ctrl/Cmd+A, Ctrl+Shift+Home/End).\n */\n@Directive({\n selector: '[forListbox]',\n exportAs: 'forListbox',\n host: {\n role: 'listbox',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.aria-orientation]': 'orientation()',\n '[attr.aria-multiselectable]': 'multiple() ? \"true\" : null',\n '[attr.aria-disabled]': 'effectiveDisabled() ? \"true\" : null',\n '[attr.aria-readonly]': 'readonly() ? \"true\" : null',\n '[attr.aria-required]': 'required() ? \"true\" : null',\n '[attr.aria-invalid]': 'invalid() ? \"true\" : null',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n '[attr.aria-activedescendant]': 'activeDescendantId()',\n '[attr.tabindex]': 'hostTabindex()',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-disabled]': 'effectiveDisabled() ? \"\" : null',\n '[attr.dir]': 'dir()',\n '(keydown)': 'onHostKeyDown($event)',\n '(focusin)': 'onHostFocusIn()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [{ provide: FOR_LISTBOX_CONTEXT, useExisting: ForListbox }],\n})\nexport class ForListbox<T = string>\n extends FormUiControlBase\n implements FormValueControl<readonly T[]>, ForListboxContext<T>\n{\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #defaults = inject(FOR_LISTBOX_DEFAULTS);\n\n /**\n * Two-way bindable. Selected option values. Single-mode keeps 0 or 1\n * element. The `model()` change emitter (`(valueChange)`) fires only on\n * internal selection changes (option activation or `selectionFollowsFocus`\n * nav), never on consumer writes via `[(value)]` — observe transitions\n * without binding back.\n */\n readonly value = model<readonly T[]>([]);\n\n /**\n * Compare two items for equality. Defaults to `===`, which is the\n * correct identity for primitive `T` (e.g. strings, numbers). Override\n * when binding object items so the directive can locate selected entries\n * by id (or any other stable key) instead of by reference:\n * `[isItemEqualToValue]=\"(a, b) => a.id === b.id\"`.\n */\n readonly isItemEqualToValue = input<(a: T, b: T) => boolean>((a, b) => a === b);\n\n /**\n * Serialize an item for the hidden input that participates in native\n * form submission. Defaults to identity for strings and to\n * `JSON.stringify` for non-string items so the primitive works out of\n * the box round-tripping objects. Override to emit a specific wire\n * format — typically a per-item id — when the backend expects that:\n * `[itemToFormValue]=\"(it) => it.id\"`.\n */\n readonly itemToFormValue = input<(item: T) => string>(defaultItemToFormValue);\n\n /**\n * Read-only single-select convenience view of {@link value}. Returns the\n * sole value when exactly one is selected (regardless of `multiple`),\n * otherwise `null` (zero, or 2+ selected). Lets single-select consumers\n * read `selected()` instead of unwrapping `value()[0]`. The array-backed\n * `value` model remains the source of truth and the `FormValueControl`\n * contract; this is a derived accessor.\n */\n readonly selected = singleSelected(this.value);\n\n readonly multiple = input(false, { transform: booleanAttribute });\n\n /**\n * Manual `aria-label` for the listbox. Use this when no visible label\n * element exists; otherwise prefer pointing `aria-labelledby` at one. A\n * `null` (default) or empty value emits no attribute.\n */\n readonly ariaLabel = input<string | null>(null);\n\n readonly orientation = input<'vertical' | 'horizontal'>('vertical');\n\n /**\n * When true (default), arrow navigation wraps at the ends — moving past the\n * last option focuses the first and vice versa. Set `false` to stop at the\n * boundaries. Mirrors the `loop` input on `ForSelect`, `ForToggleGroup` and\n * `ForCombobox`. Range extension (Shift+Arrow) never wraps regardless of\n * this input, per the APG.\n */\n readonly loop = input(true, { transform: booleanAttribute });\n\n /**\n * Total number of items in the source data. When set, enables the\n * virtualized activedescendant focus model and populates `aria-setsize`\n * on each rendered option. Leave unset (default `undefined`) for the\n * standard roving-tabindex model.\n */\n readonly totalCount = input(undefined, {\n transform: (v: unknown): number | undefined => (v == null ? undefined : numberAttribute(v)),\n });\n\n /**\n * Inclusive-exclusive `[start, end)` index range of the currently rendered\n * options. The virtualizer provides this; the listbox uses it to decide\n * whether a navigation target is in the visible window.\n */\n readonly visibleRange = input<readonly [number, number] | undefined>(undefined);\n\n /**\n * Emitted when keyboard navigation reaches an option outside the rendered\n * window. The consumer passes this index to `injectVirtualizer`'s\n * `scrollToIndex` so the correct option mounts.\n */\n readonly scrollToIndex = output<number>();\n\n /**\n * Writing direction. When unset (default `null`), the inherited ambient\n * direction is resolved from the nearest ancestor carrying a `dir` attribute\n * (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.\n * The resolved value is reflected to the host `dir` attribute and swaps\n * ArrowLeft / ArrowRight semantics in RTL for horizontal listboxes.\n */\n readonly _dirInput = input<WritingDirection | null>(null, { alias: 'dir' });\n readonly dir = injectTextDirection(this._dirInput);\n\n /**\n * Single-mode only: when true, arrow nav also selects the focused option.\n * APG calls this optional and recommends caution — leave off unless your\n * UX truly benefits from selection following focus. Default `false`.\n * The default is read from `provideForListboxDefaults` for the surrounding\n * scope.\n */\n readonly selectionFollowsFocus = input(this.#defaults.selectionFollowsFocus, {\n transform: booleanAttribute,\n });\n\n readonly roving = new RovingTabindex();\n readonly #typeahead = injectTypeahead();\n\n readonly #options = new Collection<ForListboxOptionHandle<T>>();\n\n /**\n * All registered options in DOM (rendered) order. Part of the public\n * {@link ForListboxContext} surface so container-level coordinators (e.g.\n * `ForListboxReorder`) can read the ordered hosts without each option owning a\n * `[forDraggable]` that would fight the listbox's roving tabindex.\n */\n readonly options = this.#options.items;\n\n readonly #firstEnabledHost = computed(() => firstEnabledHost(this.#options.items()));\n\n readonly #firstSelectedHost = computed<HTMLElement | null>(() => {\n const selected = this.value();\n if (selected.length === 0) {\n return null;\n }\n const equals = this.isItemEqualToValue();\n for (const option of this.#options.items()) {\n if (!option.disabled() && selected.some((v) => equals(v, option.value()))) {\n return option.host;\n }\n }\n return null;\n });\n\n readonly #virtualized = computed(() => this.totalCount() !== undefined);\n\n readonly #activeId = signal<string | null>(null);\n\n /**\n * The active option's `id` when using the activedescendant focus model,\n * `null` in the roving-tabindex path. The host reflects this as\n * `aria-activedescendant`; options read it to compute `data-highlighted`.\n */\n readonly activeDescendantId = computed<string | null>(() =>\n this.#virtualized() ? this.#activeId() : null,\n );\n\n /**\n * Tabindex for the listbox host. In the virtualized path the host is always\n * the single tab stop. In the roving path the host carries `tabindex=\"0\"`\n * only when no option qualifies — an empty listbox or one whose options are\n * all disabled — so the control is still reachable. A disabled listbox is\n * never tabbable.\n */\n protected readonly hostTabindex = computed<'0' | null>(() => {\n if (this.effectiveDisabled()) {\n return null;\n }\n if (this.#virtualized()) {\n return '0';\n }\n const hasRovingEntry = this.#firstSelectedHost() !== null || this.#firstEnabledHost() !== null;\n return hasRovingEntry ? null : '0';\n });\n\n /**\n * Anchor value for APG range-selection actions (Shift+Space). Stored as the\n * option's *value* (resolved to its current index at range time via\n * {@link isItemEqualToValue}) rather than a DOM index, so reordering or\n * removing options before the anchor can't silently shift the range to the\n * wrong span. Set on every unmodified activation (click / Space / Enter); not\n * affected by Shift+Arrow, which APG defines as per-option toggle.\n */\n readonly #anchorValue = signal<T | null>(null);\n\n #navigator: ListboxVirtualizedNavigator<T> | null = null;\n\n #requireNavigator(): ListboxVirtualizedNavigator<T> {\n return (this.#navigator ??= new ListboxVirtualizedNavigator<T>({\n items: this.#options.items,\n totalCount: this.totalCount,\n visibleRange: this.visibleRange,\n loop: this.loop,\n getActiveId: () => this.#activeId(),\n setActiveId: (id) => this.#activeId.set(id),\n emitScrollToIndex: (idx) => this.scrollToIndex.emit(idx),\n }));\n }\n\n constructor() {\n super();\n injectHiddenInput<T>({\n name: this.name,\n values: this.value,\n serialize: (item) => this.itemToFormValue()(item),\n disabled: this.effectiveDisabled,\n });\n reconcileRovingActive(this.roving, this.#options.items);\n effect(() => {\n this.#options.items();\n if (!this.#virtualized()) {\n return;\n }\n const navigator = this.#requireNavigator();\n navigator.prime();\n navigator.tryResolvePending();\n });\n }\n\n isSelected(v: T): boolean {\n return isInArray(this.value(), v, this.isItemEqualToValue());\n }\n\n activate(v: T): void {\n if (this.effectiveDisabled() || this.readonly()) {\n return;\n }\n if (this.multiple()) {\n this.value.set(toggleInArray(this.value(), v, this.isItemEqualToValue()));\n } else {\n // Single-mode: idempotent select (no deselect on click of selected).\n this.value.set([v]);\n }\n this.#anchorValue.set(v);\n }\n\n extendByArrow(currentOption: HTMLElement, action: 'next' | 'prev'): void {\n if (this.effectiveDisabled() || !this.multiple()) {\n return;\n }\n const target = nextEnabledHandle(this.#options.items(), currentOption, action, { loop: false });\n if (target === null) {\n return;\n }\n // Focus moves regardless of readonly — same contract as `navigate()`. Readonly\n // only blocks the selection mutation.\n target.host.focus();\n if (this.readonly()) {\n return;\n }\n this.value.set(toggleInArray(this.value(), target.value(), this.isItemEqualToValue()));\n }\n\n selectRangeToFocused(currentOption: HTMLElement): void {\n if (this.effectiveDisabled() || this.readonly() || !this.multiple()) {\n return;\n }\n const options = this.#options.items();\n const currentIndex = options.findIndex((o) => o.host === currentOption);\n if (currentIndex < 0) {\n return;\n }\n const anchorValue = this.#anchorValue();\n const equals = this.isItemEqualToValue();\n const anchorIndex =\n anchorValue === null ? -1 : options.findIndex((o) => equals(o.value(), anchorValue));\n const start = anchorIndex < 0 ? currentIndex : anchorIndex;\n const [lo, hi] = start <= currentIndex ? [start, currentIndex] : [currentIndex, start];\n\n const next = [...this.value()];\n for (let i = lo; i <= hi; i++) {\n const opt = options[i];\n if (!opt || opt.disabled()) {\n continue;\n }\n const v = opt.value();\n if (!next.some((x) => equals(x, v))) {\n next.push(v);\n }\n }\n this.value.set(next);\n }\n\n selectAll(): void {\n if (this.effectiveDisabled() || this.readonly() || !this.multiple()) {\n return;\n }\n const enabled: T[] = [];\n for (const opt of this.#options.items()) {\n if (opt.disabled()) {\n continue;\n }\n enabled.push(opt.value());\n }\n if (enabled.length === 0) {\n return;\n }\n const equals = this.isItemEqualToValue();\n const current = this.value();\n const allSelected = enabled.every((v) => current.some((x) => equals(x, v)));\n this.value.set(allSelected ? [] : enabled);\n }\n\n selectFromCurrentToEdge(currentOption: HTMLElement, edge: 'first' | 'last'): void {\n if (this.effectiveDisabled() || !this.multiple()) {\n return;\n }\n const options = this.#options.items();\n const currentIndex = options.findIndex((o) => o.host === currentOption);\n if (currentIndex < 0) {\n return;\n }\n const [lo, hi] = edge === 'first' ? [0, currentIndex] : [currentIndex, options.length - 1];\n\n const equals = this.isItemEqualToValue();\n const next = [...this.value()];\n let firstEnabled: HTMLElement | null = null;\n let lastEnabled: HTMLElement | null = null;\n // Walk forward so the resulting array preserves DOM order (insertion order).\n for (let i = lo; i <= hi; i++) {\n const opt = options[i];\n if (!opt || opt.disabled()) {\n continue;\n }\n const v = opt.value();\n if (!next.some((x) => equals(x, v))) {\n next.push(v);\n }\n if (firstEnabled === null) {\n firstEnabled = opt.host;\n }\n lastEnabled = opt.host;\n }\n const edgeFocusTarget = edge === 'first' ? firstEnabled : lastEnabled;\n // Focus moves regardless of readonly — same contract as `navigate()`. Readonly\n // only blocks the selection mutation.\n edgeFocusTarget?.focus();\n if (this.readonly()) {\n return;\n }\n this.value.set(next);\n }\n\n navigate(currentOption: HTMLElement, action: ListNavigationAction): void {\n if (this.effectiveDisabled()) {\n return;\n }\n const target = nextEnabledHandle(this.#options.items(), currentOption, action, {\n loop: this.loop(),\n });\n if (target === null) {\n return;\n }\n target.host.focus();\n target.host.scrollIntoView?.({ block: 'nearest' });\n if (!this.multiple() && this.selectionFollowsFocus() && !this.readonly()) {\n this.value.set([target.value()]);\n }\n }\n\n handleTypeahead(event: KeyboardEvent): boolean {\n if (!this.#typeahead.handle(event)) {\n return false;\n }\n const options = this.#options.items();\n const currentIndex = options.findIndex((o) => o.host === event.target);\n const match = findTypeaheadMatch(\n options,\n {\n buffer: this.#typeahead.buffer(),\n repeated: this.#typeahead.isRepeatedChar(),\n anchorIndex: currentIndex,\n },\n (o) => o.host.textContent ?? '',\n (o) => o.disabled(),\n );\n match?.host.focus();\n return true;\n }\n\n isFirstFocusableOption(el: HTMLElement): boolean {\n const firstSelected = this.#firstSelectedHost();\n if (firstSelected) {\n return firstSelected === el;\n }\n return this.#firstEnabledHost() === el;\n }\n\n isOptionHighlighted(el: HTMLElement): boolean {\n return this.roving.active() === el;\n }\n\n optionTabindex(el: HTMLElement): -1 | 0 | null {\n if (this.#virtualized()) {\n return -1;\n }\n return this.roving.hasActive() ? this.roving.tabindexFor(el) : null;\n }\n\n setActiveOption(el: HTMLElement): void {\n this.roving.setActive(el);\n }\n\n registerOption(handle: ForListboxOptionHandle<T>): void {\n this.#options.register(handle);\n }\n\n notifyOptionClick(optionId: string): void {\n if (!this.#virtualized()) {\n return;\n }\n this.#activeId.set(optionId);\n this.#host.nativeElement.focus();\n }\n\n unregisterOption(handle: ForListboxOptionHandle<T>): void {\n this.#options.unregister(handle);\n this.roving.unregister(handle.host);\n if (this.#virtualized() && this.#activeId() === handle.id()) {\n this.#activeId.set(null);\n }\n }\n\n protected onHostKeyDown(event: KeyboardEvent): void {\n if (!this.#virtualized() || this.effectiveDisabled()) {\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.#activateActiveDescendant();\n return;\n }\n const action = resolveListNavigation(event, {\n orientation: this.orientation(),\n dir: this.dir(),\n pageKeys: true,\n });\n if (action) {\n event.preventDefault();\n this.#requireNavigator().navigate(action);\n return;\n }\n this.#typeaheadVirtualized(event);\n }\n\n #activateActiveDescendant(): void {\n const id = this.#activeId();\n if (id === null) {\n return;\n }\n const handle = this.#options.items().find((o) => o.id() === id);\n if (!handle || handle.disabled()) {\n return;\n }\n this.activate(handle.value());\n }\n\n #typeaheadVirtualized(event: KeyboardEvent): void {\n if (!this.#typeahead.handle(event)) {\n return;\n }\n const options = this.#options.items();\n const activeId = this.#activeId();\n const anchor = activeId === null ? -1 : options.findIndex((o) => o.id() === activeId);\n const match = findTypeaheadMatch(\n options,\n {\n buffer: this.#typeahead.buffer(),\n repeated: this.#typeahead.isRepeatedChar(),\n anchorIndex: anchor,\n },\n (o) => o.host.textContent ?? '',\n (o) => o.disabled(),\n );\n if (match) {\n this.#activeId.set(match.id());\n match.host.scrollIntoView?.({ block: 'nearest' });\n }\n }\n\n protected onHostFocusIn(): void {\n if (!this.#virtualized() || this.effectiveDisabled()) {\n return;\n }\n if (this.#activeId() !== null) {\n return;\n }\n const items = this.#options.items();\n if (items.length === 0) {\n return;\n }\n const ordered = [...items].sort((a, b) => (a.posInSet() ?? 0) - (b.posInSet() ?? 0));\n const equals = this.isItemEqualToValue();\n const value = this.value();\n const selectedFirst = ordered.find(\n (o) => !o.disabled() && value.some((v) => equals(v, o.value())),\n );\n const target = selectedFirst ?? ordered.find((o) => !o.disabled());\n if (target) {\n this.#activeId.set(target.id());\n }\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as HTMLElement | null;\n if (next && this.#host.nativeElement.contains(next)) {\n return;\n }\n this.markTouched();\n }\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n InjectionToken,\n input,\n} from '@angular/core';\n\nimport { registerHandle, hostId, resolveListNavigation } from 'forty-cdk/core';\nimport { injectListboxContext } from './listbox-context';\n\n/**\n * Injection key the `[forListboxOptionIndicator]` uses to resolve its parent\n * option, decoupled from the concrete `ForListboxOption` class.\n * `ForListboxOption` provides itself under this token, so a design system\n * wrapping the option by subclassing re-points it at the subclass with a\n * single provider (`{ provide: FOR_LISTBOX_OPTION, useExisting: MtxListboxOption }`)\n * and the indicator keeps resolving — see `docs/wrapping-form-primitives.md`.\n */\nexport const FOR_LISTBOX_OPTION = new InjectionToken<ForListboxOption>('FOR_LISTBOX_OPTION');\n\n/**\n * One option inside a `ForListbox`. Apply on a `<button type=\"button\">` so\n * Space / Enter activation come from native button behavior — printable keys\n * fall through to the parent listbox for typeahead matching.\n *\n * Generic over the option value type `T` (default `string`). Inferred from\n * the `[value]` binding so consumers can pass either primitive ids or full\n * objects (`[value]=\"lang\"` infers `T = Language`); the parent `[forListbox]`\n * must be parameterized over the same `T`. The parent's\n * `[isItemEqualToValue]` decides how options are matched against the\n * committed selection.\n */\n@Directive({\n selector: '[forListboxOption]',\n exportAs: 'forListboxOption',\n providers: [{ provide: FOR_LISTBOX_OPTION, useExisting: ForListboxOption }],\n host: {\n role: 'option',\n type: 'button',\n '[id]': 'id()',\n '[attr.aria-selected]': 'selected() ? \"true\" : \"false\"',\n '[attr.aria-disabled]': 'effectiveDisabled() ? \"true\" : null',\n '[attr.aria-setsize]': 'ariaSetSize()',\n '[attr.aria-posinset]': 'ariaPosInSet()',\n '[attr.tabindex]': 'tabindex()',\n '[attr.data-state]': 'selected() ? \"checked\" : \"unchecked\"',\n '[attr.data-highlighted]': 'highlighted() ? \"\" : null',\n '[attr.data-disabled]': 'effectiveDisabled() ? \"\" : null',\n '(click)': 'onClick()',\n '(focus)': 'onFocus()',\n '(keydown)': 'onKeyDown($event)',\n '(pointerdown)': 'onPointerDown($event)',\n },\n})\nexport class ForListboxOption<T = string> {\n readonly #group = injectListboxContext<T>('ForListboxOption');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Stable identifier serialized into `[(value)]` and the hidden input.\n * Defaults to `string` for back-compat; bind an object to specialize the\n * parent `[forListbox]` over a richer `T`. The parent's\n * `[isItemEqualToValue]` decides how options are matched against the\n * committed selection.\n */\n readonly value = input.required<T>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Zero-based absolute position of this option in the full source data.\n * Required in the virtualized path — the listbox uses it to build the\n * position snapshot and to emit `aria-posinset` (which is `posInSet + 1`).\n * Leave unset (default `null`) outside the virtualized path.\n */\n readonly posInSet = input<number | null>(null);\n\n readonly id = hostId('for-listbox-option');\n\n readonly selected = computed(() => this.#group.isSelected(this.value()));\n\n /**\n * True when this option is the keyboard-focused / active candidate.\n * In the roving-tabindex path this tracks the DOM-focused option.\n * In the virtualized activedescendant path it tracks `aria-activedescendant`.\n * Reflected as `data-highlighted` so consumers can style it uniformly\n * with the other primitives.\n */\n readonly highlighted = computed(() => {\n const activeId = this.#group.activeDescendantId();\n if (activeId !== null) {\n return activeId === this.id();\n }\n return this.#group.isOptionHighlighted(this.#host.nativeElement);\n });\n\n protected readonly ariaSetSize = computed<string | null>(() => {\n const total = this.#group.totalCount();\n return total === undefined ? null : String(total);\n });\n\n protected readonly ariaPosInSet = computed<string | null>(() => {\n if (this.#group.totalCount() === undefined) {\n return null;\n }\n const pos = this.posInSet();\n return pos === null ? null : String(pos + 1);\n });\n\n readonly effectiveDisabled = computed(() => this.disabled() || this.#group.effectiveDisabled());\n\n protected readonly tabindex = computed<-1 | 0>(() => {\n if (this.effectiveDisabled()) {\n return -1;\n }\n const rovingTabindex = this.#group.optionTabindex(this.#host.nativeElement);\n if (rovingTabindex !== null) {\n return rovingTabindex;\n }\n return this.#group.isFirstFocusableOption(this.#host.nativeElement) ? 0 : -1;\n });\n\n constructor() {\n const handle = {\n host: this.#host.nativeElement,\n value: this.value,\n disabled: this.effectiveDisabled,\n id: this.id,\n posInSet: this.posInSet,\n };\n registerHandle(\n handle,\n (h) => this.#group.registerOption(h),\n (h) => this.#group.unregisterOption(h),\n );\n }\n\n protected onClick(): void {\n if (this.effectiveDisabled() || this.#group.readonly()) {\n return;\n }\n this.#group.activate(this.value());\n this.#group.notifyOptionClick(this.id());\n }\n\n protected onPointerDown(event: PointerEvent): void {\n if (this.#group.totalCount() === undefined) {\n return;\n }\n event.preventDefault();\n }\n\n protected onFocus(): void {\n if (this.effectiveDisabled()) {\n return;\n }\n this.#group.setActiveOption(this.#host.nativeElement);\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (this.effectiveDisabled()) {\n return;\n }\n\n // APG-recommended multi-select range modifiers. Single-mode falls through\n // to plain navigation so Shift+Arrow / Ctrl+A behave like their unmodified\n // counterparts (or no-op).\n if (this.#group.multiple()) {\n // Ctrl/Cmd+A — select all enabled (toggle if all already selected).\n if ((event.ctrlKey || event.metaKey) && !event.shiftKey && !event.altKey) {\n if (event.key === 'a' || event.key === 'A') {\n event.preventDefault();\n this.#group.selectAll();\n return;\n }\n }\n\n // Ctrl+Shift+Home / Ctrl+Shift+End — extend selection to first/last.\n if ((event.ctrlKey || event.metaKey) && event.shiftKey && !event.altKey) {\n if (event.key === 'Home') {\n event.preventDefault();\n this.#group.selectFromCurrentToEdge(this.#host.nativeElement, 'first');\n return;\n }\n if (event.key === 'End') {\n event.preventDefault();\n this.#group.selectFromCurrentToEdge(this.#host.nativeElement, 'last');\n return;\n }\n }\n\n // Shift+Space — contiguous range from anchor to current.\n if (event.shiftKey && event.key === ' ') {\n event.preventDefault();\n this.#group.selectRangeToFocused(this.#host.nativeElement);\n return;\n }\n\n // Shift+Arrow — move focus AND toggle the destination option.\n if (event.shiftKey && !event.ctrlKey && !event.metaKey && !event.altKey) {\n const action = resolveListNavigation(event, {\n orientation: this.#group.orientation(),\n dir: this.#group.dir(),\n });\n if (action === 'next' || action === 'prev') {\n event.preventDefault();\n this.#group.extendByArrow(this.#host.nativeElement, action);\n return;\n }\n }\n }\n\n const action = resolveListNavigation(event, {\n orientation: this.#group.orientation(),\n dir: this.#group.dir(),\n pageKeys: true,\n });\n if (action) {\n event.preventDefault();\n this.#group.navigate(this.#host.nativeElement, action);\n return;\n }\n this.#group.handleTypeahead(event);\n }\n}\n","import { Directive, inject } from '@angular/core';\n\nimport { FOR_LISTBOX_OPTION, type ForListboxOption } from './listbox-option';\n\n/**\n * Optional indicator slot inside a `ForListboxOption`. Apply on the\n * element the consumer wants to show only while this option is selected\n * (typically a check icon to the left of the label). Mirrors `data-state`\n * and hides itself while unselected. Visibility is enforced with an inline\n * `display: none` (which beats any author `display` rule a consumer applies\n * via a class) in addition to the `hidden` attribute that removes it from\n * the a11y tree.\n */\n@Directive({\n selector: '[forListboxOptionIndicator]',\n exportAs: 'forListboxOptionIndicator',\n host: {\n '[attr.data-state]': 'parent.selected() ? \"checked\" : \"unchecked\"',\n '[attr.hidden]': 'parent.selected() ? null : \"\"',\n '[style.display]': 'parent.selected() ? null : \"none\"',\n },\n})\nexport class ForListboxOptionIndicator {\n protected readonly parent: ForListboxOption;\n\n constructor() {\n const parent = inject(FOR_LISTBOX_OPTION, { optional: true });\n if (!parent) {\n throw new Error(\n '[forty-cdk/listbox] ForListboxOptionIndicator must be used inside a [forListboxOption] element.',\n );\n }\n this.parent = parent;\n }\n}\n","import { Directive, signal } from '@angular/core';\n\n/**\n * Optional grouping wrapper inside a `ForListbox`. Renders `role=\"group\"`\n * and references the descendant `[forListboxGroupLabel]` (if any) via\n * `aria-labelledby`. Options inside a group still register with the\n * listbox normally, so keyboard navigation traverses across groups in DOM\n * order without special handling.\n */\n@Directive({\n selector: '[forListboxGroup]',\n exportAs: 'forListboxGroup',\n host: {\n role: 'group',\n '[attr.aria-labelledby]': 'labelId() || null',\n },\n})\nexport class ForListboxGroup {\n readonly #labelId = signal<string | null>(null);\n\n /** The id of the registered group label (or `null` if none). */\n readonly labelId = this.#labelId.asReadonly();\n\n /** Called by `ForListboxGroupLabel` on mount. */\n registerLabel(id: string): void {\n this.#labelId.set(id);\n }\n\n /** Called by `ForListboxGroupLabel` on destroy. Idempotent. */\n unregisterLabel(id: string): void {\n if (this.#labelId() === id) {\n this.#labelId.set(null);\n }\n }\n}\n","import { Directive, inject, type Signal } from '@angular/core';\n\nimport { registerA11yName } from 'forty-cdk/core';\nimport { ForListboxGroup } from './listbox-group';\n\n/**\n * Visible label for a `ForListboxGroup`. Generates a stable id and\n * registers with its parent group so the group's `aria-labelledby` points\n * at this element. Apply on whatever heading element fits the design\n * (often `<div>` styled as a small caption — `<h3>`/`<h4>` if the\n * surrounding document has a sensible heading hierarchy).\n */\n@Directive({\n selector: '[forListboxGroupLabel]',\n exportAs: 'forListboxGroupLabel',\n host: {\n '[id]': 'id()',\n },\n})\nexport class ForListboxGroupLabel {\n /** Stable host id used by the parent group's `aria-labelledby`. */\n readonly id: Signal<string>;\n\n constructor() {\n const group = inject(ForListboxGroup, { optional: true });\n if (!group) {\n throw new Error(\n '[forty-cdk/listbox] ForListboxGroupLabel must be used inside a [forListboxGroup] element.',\n );\n }\n this.id = registerA11yName(group, 'for-listbox-group-label');\n }\n}\n","/**\n * Live-region phrasing for `ForListboxReorder`. Framework-free and unit-testable in isolation.\n * Not part of the public API. Mirrors the lift / move / drop / cancel cadence the drag-drop and\n * tree coordinators use so a consumer hears consistent reorder announcements across primitives.\n */\n\n/** Announcement when an option is lifted. `index` / `total` are 1-based. */\nexport function announceReorderLift(label: string, index: number, total: number): string {\n return `${label}, lifted. ${index} of ${total}.`;\n}\n\n/** Announcement when the drop position changes during a drag. `index` / `total` are 1-based. */\nexport function announceReorderMove(label: string, index: number, total: number): string {\n return `${label}, moved to position ${index} of ${total}.`;\n}\n\n/** Announcement on a committed drop. `index` / `total` are 1-based. */\nexport function announceReorderDrop(label: string, index: number, total: number): string {\n return `${label}, dropped at position ${index} of ${total}.`;\n}\n\n/** Announcement when a drag is cancelled. */\nexport function announceReorderCancel(label: string): string {\n return `${label}, movement cancelled.`;\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n booleanAttribute,\n DestroyRef,\n Directive,\n DOCUMENT,\n ElementRef,\n inject,\n input,\n output,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\n\nimport {\n resolveDropTarget,\n isDragLiftKey,\n resolveLiftedDragControl,\n createKeyboardDragMediator,\n createPointerDragSession,\n type PointerDragSession,\n PreviewController,\n LiveAnnouncer,\n type WritingDirection,\n} from 'forty-cdk/core';\nimport { injectListboxContext, type ForListboxContext } from './listbox-context';\nimport {\n announceReorderCancel,\n announceReorderDrop,\n announceReorderLift,\n announceReorderMove,\n} from './listbox-reorder-announcements';\n\nconst POINTER_ARM_THRESHOLD_PX = 5;\n\ntype ReorderMode = 'idle' | 'keyboard' | 'pointer';\n\ntype ReorderAction = 'cancel' | 'commit' | 'next' | 'prev' | 'first' | 'last';\n\n/** Payload of `optionReorder`: the lifted option's previous and new index, both 0-based. */\nexport interface ForListboxReorderEvent {\n /** The lifted option's index before the move, in DOM (rendered) order. */\n readonly from: number;\n /** The option's index after the move — pass to `moveItemInArray(items, from, to)`. */\n readonly to: number;\n}\n\n/**\n * Resolves a lifted-drag keydown to a reorder action. `Escape` / `Tab` cancel and\n * `Space` / `Enter` commit (shared with the tree coordinator); arrow keys step the target\n * linearly in DOM order (both axes, so a wrapping chip grid reorders by either pair), and\n * `Home` / `End` jump to the ends. Honors writing direction for the horizontal arrows.\n */\nfunction resolveReorderAction(event: KeyboardEvent, dir: WritingDirection): ReorderAction | null {\n const control = resolveLiftedDragControl(event);\n if (control) {\n return control;\n }\n const isRtl = dir === 'rtl';\n switch (event.key) {\n case 'ArrowDown':\n return 'next';\n case 'ArrowUp':\n return 'prev';\n case 'ArrowRight':\n return isRtl ? 'prev' : 'next';\n case 'ArrowLeft':\n return isRtl ? 'next' : 'prev';\n case 'Home':\n return 'first';\n case 'End':\n return 'last';\n default:\n return null;\n }\n}\n\n/**\n * Opt-in **pointer + keyboard reordering** for `ForListbox`, composed onto the same element as\n * `[forListbox]`.\n *\n * `[forDraggable]` cannot stack on a `[forListboxOption]` — both would manage the option's\n * roving tabindex and keyboard, colliding on `tabindex`, on Space / Enter activation, and on the\n * container `orientation` input. This coordinator is the listbox-side analogue of\n * `ForTreeNodeDrag` / `ForTableRowReorder`: it lives on the container, **never touches the\n * option's roving tabindex**, intercepts keys in the capture phase, and owns its own 2D drop\n * geometry — so the listbox keeps full selection + typeahead behavior while becoming sortable.\n *\n * Keyboard: focus an option, press `Ctrl+Space` (or `Cmd+Space`) to lift. While lifted, the\n * arrow keys step the target position (linearly in DOM order, so a wrapping chip grid works with\n * either axis), `Home` / `End` jump to the ends, `Space` / `Enter` drop, `Escape` / `Tab` cancel.\n *\n * Pointer: drag an option past a small threshold to reorder; a short press without movement still\n * selects (the post-drag click is suppressed). A floating preview follows the pointer; drop\n * geometry is resolved in 2D, so vertical lists, horizontal lists, and wrapping grids all work\n * without configuring `orientation`.\n *\n * It **never reorders the options itself** (BYO-data): `(optionReorder)` emits the previous / new\n * index on every committed drop; apply `moveItemInArray(items, from, to)` to your own array.\n * Intended for the standard roving-tabindex listbox; a virtualized listbox (`[totalCount]` set)\n * is left untouched, since reordering a windowed subset is ill-defined.\n *\n * @example\n * ```html\n * <ul forListbox forListboxReorder multiple [(value)]=\"selected\" (optionReorder)=\"reorder($event)\">\n * @for (tag of tags(); track tag) {\n * <li><button type=\"button\" forListboxOption [value]=\"tag\">{{ tag }}</button></li>\n * }\n * </ul>\n * ```\n */\n@Directive({\n selector: '[forListboxReorder]',\n exportAs: 'forListboxReorder',\n host: {\n '[attr.data-dragging]': '_dragging() ? \"\" : null',\n },\n})\nexport class ForListboxReorder {\n readonly #ctx: ForListboxContext = injectListboxContext('ForListboxReorder');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n readonly #document = inject(DOCUMENT);\n readonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n readonly #announcer = inject(LiveAnnouncer);\n readonly #destroyRef = inject(DestroyRef);\n\n /**\n * Disables reorder interactions while leaving selection / typeahead intact. Named distinctly\n * from the listbox's own `disabled` so the two never share a single `[disabled]` binding on the\n * shared host. The listbox being disabled (its own `disabled` or a surrounding `[forFieldset]`)\n * also disables reorder.\n */\n readonly reorderDisabled = input(false, { transform: booleanAttribute });\n\n /** Emitted once per committed reorder gesture with the previous / new option index. */\n readonly optionReorder = output<ForListboxReorderEvent>();\n\n protected readonly _dragging = signal(false);\n\n #mode: ReorderMode = 'idle';\n #liftedHost: HTMLElement | null = null;\n #fromIndex = 0;\n #targetIndex = 0;\n #label = '';\n #previewController: PreviewController | null = null;\n #pointerSession: PointerDragSession | null = null;\n\n constructor() {\n createKeyboardDragMediator({\n host: this.#host,\n isBrowser: this.#isBrowser,\n destroyRef: this.#destroyRef,\n isLifted: () => this.#mode === 'keyboard',\n onIdleKeydown: (event) => this.#onIdleKeydown(event),\n onLiftedKeydown: (event) => this.#onLiftedKeydown(event),\n onFocusOut: (event) => this.#onFocusOut(event),\n });\n\n if (this.#isBrowser) {\n this.#pointerSession = createPointerDragSession({\n host: this.#host,\n document: this.#document,\n armThreshold: POINTER_ARM_THRESHOLD_PX,\n cancelOnEscape: true,\n capturePointer: true,\n canStart: (event) => this.#canStartPointer(event),\n onLift: (event) => this.#onPointerLift(event),\n onMove: (event) => this.#onPointerMove(event),\n onCommit: (event) => this.#onPointerCommit(event),\n onCancel: () => this.#onPointerCancel(),\n });\n this.#destroyRef.onDestroy(() => {\n this.#pointerSession?.destroy();\n if (this.#mode !== 'idle') {\n this.#clearSession();\n }\n });\n }\n }\n\n #reorderable(): boolean {\n return (\n !this.reorderDisabled() &&\n !this.#ctx.effectiveDisabled() &&\n this.#ctx.totalCount() === undefined\n );\n }\n\n #resolveOption(target: EventTarget | null): { host: HTMLElement; index: number } | null {\n if (!(target instanceof Node)) {\n return null;\n }\n const options = this.#ctx.options();\n for (let i = 0; i < options.length; i++) {\n const option = options[i]!;\n if (option.host === target || option.host.contains(target)) {\n return option.disabled() ? null : { host: option.host, index: i };\n }\n }\n return null;\n }\n\n #canStartPointer(event: PointerEvent): boolean {\n if (!this.#reorderable() || (event.pointerType === 'mouse' && event.button !== 0)) {\n return false;\n }\n const resolved = this.#resolveOption(event.target);\n if (!resolved) {\n return false;\n }\n this.#liftedHost = resolved.host;\n this.#fromIndex = resolved.index;\n return true;\n }\n\n #onPointerLift(event: PointerEvent): boolean {\n if (this.#liftedHost === null) {\n return false;\n }\n this.#lift(this.#liftedHost, this.#fromIndex, 'pointer', {\n x: event.clientX,\n y: event.clientY,\n });\n return true;\n }\n\n #onPointerMove(event: PointerEvent): void {\n if (this.#mode !== 'pointer') {\n return;\n }\n const point = { x: event.clientX, y: event.clientY };\n this.#previewController?.moveTo(point);\n this.#setTarget(this.#resolvePointerTarget(point), 'polite');\n }\n\n #onPointerCommit(event: PointerEvent): void {\n if (this.#mode !== 'pointer') {\n return;\n }\n this.#targetIndex = this.#resolvePointerTarget({ x: event.clientX, y: event.clientY });\n this.#commit();\n }\n\n #onPointerCancel(): void {\n if (this.#mode !== 'pointer') {\n return;\n }\n this.#cancel();\n }\n\n #resolvePointerTarget(point: { x: number; y: number }): number {\n const lifted = this.#liftedHost;\n const itemRects = this.#ctx\n .options()\n .filter((option) => option.host !== lifted)\n .map((option) => option.host.getBoundingClientRect());\n const target = resolveDropTarget(\n point,\n [{ rect: this.#host.getBoundingClientRect(), itemRects }],\n 'mixed',\n this.#ctx.dir(),\n );\n return target ? target.index : this.#targetIndex;\n }\n\n #onIdleKeydown(event: KeyboardEvent): void {\n if (this.#mode !== 'idle' || !isDragLiftKey(event) || !this.#reorderable()) {\n return;\n }\n const resolved = this.#resolveOption(event.target);\n if (!resolved) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.#lift(resolved.host, resolved.index, 'keyboard');\n }\n\n #onLiftedKeydown(event: KeyboardEvent): void {\n const action = resolveReorderAction(event, this.#ctx.dir());\n if (action === null) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n switch (action) {\n case 'cancel':\n this.#cancel();\n return;\n case 'commit':\n this.#commit();\n return;\n case 'next':\n this.#setTarget(this.#targetIndex + 1, 'polite');\n return;\n case 'prev':\n this.#setTarget(this.#targetIndex - 1, 'polite');\n return;\n case 'first':\n this.#setTarget(0, 'polite');\n return;\n case 'last':\n this.#setTarget(this.#ctx.options().length - 1, 'polite');\n return;\n }\n }\n\n #onFocusOut(event: FocusEvent): void {\n if (this.#mode !== 'keyboard') {\n return;\n }\n const related = event.relatedTarget as HTMLElement | null;\n if (related && this.#host.contains(related)) {\n return;\n }\n this.#cancel();\n }\n\n #lift(\n host: HTMLElement,\n index: number,\n mode: 'keyboard' | 'pointer',\n point?: { x: number; y: number },\n ): void {\n this.#mode = mode;\n this.#liftedHost = host;\n this.#fromIndex = index;\n this.#targetIndex = index;\n this.#label = (host.textContent ?? '').trim();\n host.setAttribute('data-dragging', '');\n this._dragging.set(true);\n\n if (mode === 'pointer' && point) {\n this.#previewController = new PreviewController({\n source: host,\n point,\n preview: null,\n doc: this.#document,\n boundary: null,\n lockAxis: () => null,\n });\n }\n\n this.#announcer.announce(\n announceReorderLift(this.#label, index + 1, this.#ctx.options().length),\n 'assertive',\n );\n }\n\n #setTarget(to: number, politeness: 'polite' | 'assertive'): void {\n const total = this.#ctx.options().length;\n const clamped = Math.max(0, Math.min(total - 1, to));\n if (clamped === this.#targetIndex) {\n return;\n }\n this.#targetIndex = clamped;\n this.#announcer.announce(announceReorderMove(this.#label, clamped + 1, total), politeness);\n }\n\n #commit(): void {\n if (this.#mode === 'idle' || this.#liftedHost === null) {\n return;\n }\n const total = this.#ctx.options().length;\n const to = Math.max(0, Math.min(total - 1, this.#targetIndex));\n const from = this.#fromIndex;\n const label = this.#label;\n this.#clearSession();\n this.optionReorder.emit({ from, to });\n this.#announcer.announce(announceReorderDrop(label, to + 1, total), 'assertive');\n }\n\n #cancel(): void {\n if (this.#mode === 'idle') {\n return;\n }\n const label = this.#label;\n this.#clearSession();\n this.#announcer.announce(announceReorderCancel(label), 'assertive');\n }\n\n #clearSession(): void {\n this.#liftedHost?.removeAttribute('data-dragging');\n this.#mode = 'idle';\n this.#liftedHost = null;\n this.#fromIndex = 0;\n this.#targetIndex = 0;\n this.#label = '';\n this.#previewController?.destroy();\n this.#previewController = null;\n this._dragging.set(false);\n }\n}\n","/**\n * Exact public names of every `ForListbox` input, its models included. Spread it into the\n * `inputs` array of a `hostDirectives` entry so a wrapper component re-exposes the\n * primitive's full surface — the Signal Forms members `[formField]` binds among them —\n * without hand-maintaining the list. Always spread into an inline object literal as shown\n * below: the literal is what keeps the entry statically analyzable for consumers compiling\n * against the published package. An anti-drift spec fails when this list no longer matches\n * the directive's actual API. See `docs/wrapping-form-primitives.md` for both supported\n * wrapping patterns.\n *\n * @example\n * ```ts\n * @Component({\n * selector: 'div[myListbox]',\n * template: '',\n * hostDirectives: [\n * {\n * directive: ForListbox,\n * inputs: [...FOR_LISTBOX_HOST_DIRECTIVE_INPUTS],\n * outputs: [...FOR_LISTBOX_HOST_DIRECTIVE_OUTPUTS],\n * },\n * ],\n * })\n * export class MyListbox {}\n * ```\n */\nexport const FOR_LISTBOX_HOST_DIRECTIVE_INPUTS = [\n 'value',\n 'ariaLabel',\n 'dir',\n 'dirty',\n 'disabled',\n 'errors',\n 'invalid',\n 'isItemEqualToValue',\n 'itemToFormValue',\n 'loop',\n 'multiple',\n 'name',\n 'orientation',\n 'pending',\n 'readonly',\n 'required',\n 'selectionFollowsFocus',\n 'totalCount',\n 'touched',\n 'visibleRange',\n] as const;\n\n/**\n * Exact public names of every `ForListbox` output, the Signal Forms `touch` output\n * included. Spread it into the `outputs` array of the same `hostDirectives` entry as\n * {@link FOR_LISTBOX_HOST_DIRECTIVE_INPUTS}.\n */\nexport const FOR_LISTBOX_HOST_DIRECTIVE_OUTPUTS = [\n 'scrollToIndex',\n 'touch',\n 'touchedChange',\n 'valueChange',\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAkIa,mBAAmB,GAAG,IAAI,cAAc,CAAoB,qBAAqB;AAExF,SAAU,oBAAoB,CAAc,KAAa,EAAA;AAC7D,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3D,IAAI,CAAC,GAAG,EAAE;AACR,QAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,CAAA,4CAAA,CAA8C,CAAC;IAC7F;AACA,IAAA,OAAO,GAAsC;AAC/C;;ACtHA;;;;AAIG;AACI,MAAM,6BAA6B,GAAuB;AAC/D,IAAA,qBAAqB,EAAE,KAAK;CAC7B;AAED,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,cAAc,CAC/C,sBAAsB,EACtB,6BAA6B,CAC9B;AAED;AACO,MAAM,oBAAoB,GAAG;AAEpC;;;;AAIG;AACG,SAAU,yBAAyB,CAAC,QAAA,GAAwC,EAAE,EAAA;AAClF,IAAA,OAAO,eAAe,CAAC,QAAQ,CAAC;AAClC;;ACbA;;;;;;;AAOG;MACU,2BAA2B,CAAA;AAC7B,IAAA,KAAK;AAEd,IAAA,WAAA,CAAY,IAAwC,EAAA;AAClD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAoB,CACnC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAC5B;YACE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;YAC1B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE;YACnB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI;YACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC3D,SAAA,CACF;IACH;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IACpB;;IAGA,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;IACvC;;AAGA,IAAA,QAAQ,CAAC,SAA6C,EAAA;AACpD,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;IAChC;AACD;;AC1BD;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AAyBG,MAAO,UACX,SAAQ,iBAAiB,CAAA;AAGhB,IAAA,KAAK,GAAG,MAAM,CAA0B,UAAU,CAAC;AACnD,IAAA,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAEjD;;;;;;AAMG;IACM,KAAK,GAAG,KAAK,CAAe,EAAE;8EAAC;AAExC;;;;;;AAMG;AACM,IAAA,kBAAkB,GAAG,KAAK,CAA0B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;2FAAC;AAE/E;;;;;;;AAOG;IACM,eAAe,GAAG,KAAK,CAAsB,sBAAsB;wFAAC;AAE7E;;;;;;;AAOG;AACM,IAAA,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IAErC,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEjE;;;;AAIG;IACM,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;IAEtC,WAAW,GAAG,KAAK,CAA4B,UAAU;oFAAC;AAEnE;;;;;;AAMG;IACM,IAAI,GAAG,KAAK,CAAC,IAAI,4EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE5D;;;;;AAKG;AACM,IAAA,UAAU,GAAG,KAAK,CAAC,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,CAAA,EACnC,SAAS,EAAE,CAAC,CAAU,MAA0B,CAAC,IAAI,IAAI,GAAG,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,GAC3F;AAEF;;;;AAIG;IACM,YAAY,GAAG,KAAK,CAAwC,SAAS;qFAAC;AAE/E;;;;AAIG;IACM,aAAa,GAAG,MAAM,EAAU;AAEzC;;;;;;AAMG;IACM,SAAS,GAAG,KAAK,CAA0B,IAAI,iFAAI,KAAK,EAAE,KAAK,EAAA,CAAG;AAClE,IAAA,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;AAElD;;;;;;AAMG;AACM,IAAA,qBAAqB,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,CAAA,EACzE,SAAS,EAAE,gBAAgB,GAC3B;AAEO,IAAA,MAAM,GAAG,IAAI,cAAc,EAAE;IAC7B,UAAU,GAAG,eAAe,EAAE;AAE9B,IAAA,QAAQ,GAAG,IAAI,UAAU,EAA6B;AAE/D;;;;;AAKG;AACM,IAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK;AAE7B,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;0FAAC;AAE3E,IAAA,kBAAkB,GAAG,QAAQ,CAAqB,MAAK;AAC9D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE;QACxC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE;YAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;gBACzE,OAAO,MAAM,CAAC,IAAI;YACpB;QACF;AACA,QAAA,OAAO,IAAI;IACb,CAAC;2FAAC;IAEO,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS;qFAAC;IAE9D,SAAS,GAAG,MAAM,CAAgB,IAAI;kFAAC;AAEhD;;;;AAIG;IACM,kBAAkB,GAAG,QAAQ,CAAgB,MACpD,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI;2FAC9C;AAED;;;;;;AAMG;AACgB,IAAA,YAAY,GAAG,QAAQ,CAAa,MAAK;AAC1D,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAC5B,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,OAAO,GAAG;QACZ;AACA,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,IAAI;QAC9F,OAAO,cAAc,GAAG,IAAI,GAAG,GAAG;IACpC,CAAC;qFAAC;AAEF;;;;;;;AAOG;IACM,YAAY,GAAG,MAAM,CAAW,IAAI;qFAAC;IAE9C,UAAU,GAA0C,IAAI;IAExD,iBAAiB,GAAA;AACf,QAAA,QAAQ,IAAI,CAAC,UAAU,KAAK,IAAI,2BAA2B,CAAI;AAC7D,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;YAC1B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,WAAW,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;AACnC,YAAA,WAAW,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3C,YAAA,iBAAiB,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;AACzD,SAAA,CAAC;IACJ;AAEA,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AACP,QAAA,iBAAiB,CAAI;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,KAAK;AAClB,YAAA,SAAS,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC;YACjD,QAAQ,EAAE,IAAI,CAAC,iBAAiB;AACjC,SAAA,CAAC;QACF,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvD,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;gBACxB;YACF;AACA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE;YAC1C,SAAS,CAAC,KAAK,EAAE;YACjB,SAAS,CAAC,iBAAiB,EAAE;AAC/B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,CAAI,EAAA;AACb,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9D;AAEA,IAAA,QAAQ,CAAC,CAAI,EAAA;QACX,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YAC/C;QACF;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC3E;aAAO;;YAEL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B;IAEA,aAAa,CAAC,aAA0B,EAAE,MAAuB,EAAA;QAC/D,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YAChD;QACF;QACA,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC/F,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB;QACF;;;AAGA,QAAA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;QACA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACxF;AAEA,IAAA,oBAAoB,CAAC,aAA0B,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnE;QACF;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrC,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC;AACvE,QAAA,IAAI,YAAY,GAAG,CAAC,EAAE;YACpB;QACF;AACA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE;AACvC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACxC,QAAA,MAAM,WAAW,GACf,WAAW,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC;AACtF,QAAA,MAAM,KAAK,GAAG,WAAW,GAAG,CAAC,GAAG,YAAY,GAAG,WAAW;QAC1D,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,YAAY,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC;QAEtF,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAC9B,QAAA,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;AAC7B,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE;gBAC1B;YACF;AACA,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACnC,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACd;QACF;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IACtB;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnE;QACF;QACA,MAAM,OAAO,GAAQ,EAAE;QACvB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE;AACvC,YAAA,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE;gBAClB;YACF;YACA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QAC3B;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB;QACF;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;AAC5B,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC;IAC5C;IAEA,uBAAuB,CAAC,aAA0B,EAAE,IAAsB,EAAA;QACxE,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YAChD;QACF;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrC,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC;AACvE,QAAA,IAAI,YAAY,GAAG,CAAC,EAAE;YACpB;QACF;AACA,QAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAE1F,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE;QACxC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAuB,IAAI;QAC3C,IAAI,WAAW,GAAuB,IAAI;;AAE1C,QAAA,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;AAC7B,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE;gBAC1B;YACF;AACA,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACnC,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACd;AACA,YAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,gBAAA,YAAY,GAAG,GAAG,CAAC,IAAI;YACzB;AACA,YAAA,WAAW,GAAG,GAAG,CAAC,IAAI;QACxB;AACA,QAAA,MAAM,eAAe,GAAG,IAAI,KAAK,OAAO,GAAG,YAAY,GAAG,WAAW;;;QAGrE,eAAe,EAAE,KAAK,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IACtB;IAEA,QAAQ,CAAC,aAA0B,EAAE,MAA4B,EAAA;AAC/D,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC5B;QACF;AACA,QAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE;AAC7E,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AAClB,SAAA,CAAC;AACF,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB;QACF;AACA,QAAA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,QAAA,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAClD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACxE,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAClC;IACF;AAEA,IAAA,eAAe,CAAC,KAAoB,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAClC,YAAA,OAAO,KAAK;QACd;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrC,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC;AACtE,QAAA,MAAM,KAAK,GAAG,kBAAkB,CAC9B,OAAO,EACP;AACE,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AAChC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;AAC1C,YAAA,WAAW,EAAE,YAAY;SAC1B,EACD,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAC/B,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CACpB;AACD,QAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,sBAAsB,CAAC,EAAe,EAAA;AACpC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE;QAC/C,IAAI,aAAa,EAAE;YACjB,OAAO,aAAa,KAAK,EAAE;QAC7B;AACA,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE;IACxC;AAEA,IAAA,mBAAmB,CAAC,EAAe,EAAA;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE;IACpC;AAEA,IAAA,cAAc,CAAC,EAAe,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACvB,OAAO,CAAC,CAAC;QACX;QACA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI;IACrE;AAEA,IAAA,eAAe,CAAC,EAAe,EAAA;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;IAC3B;AAEA,IAAA,cAAc,CAAC,MAAiC,EAAA;AAC9C,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;IAChC;AAEA,IAAA,iBAAiB,CAAC,QAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACxB;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;IAClC;AAEA,IAAA,gBAAgB,CAAC,MAAiC,EAAA;AAChD,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE;AAC3D,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B;IACF;AAEU,IAAA,aAAa,CAAC,KAAoB,EAAA;QAC1C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YACpD;QACF;AACA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAC9C,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,yBAAyB,EAAE;YAChC;QACF;AACA,QAAA,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,EAAE;AAC1C,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AACf,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;QACF,IAAI,MAAM,EAAE;YACV,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzC;QACF;AACA,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;IACnC;IAEA,yBAAyB,GAAA;AACvB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;AAC3B,QAAA,IAAI,EAAE,KAAK,IAAI,EAAE;YACf;QACF;QACA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QAC/D,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE;YAChC;QACF;QACA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC/B;AAEA,IAAA,qBAAqB,CAAC,KAAoB,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAClC;QACF;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;AACjC,QAAA,MAAM,MAAM,GAAG,QAAQ,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,QAAQ,CAAC;AACrF,QAAA,MAAM,KAAK,GAAG,kBAAkB,CAC9B,OAAO,EACP;AACE,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AAChC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;AAC1C,YAAA,WAAW,EAAE,MAAM;SACpB,EACD,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAC/B,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CACpB;QACD,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AAC9B,YAAA,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACnD;IACF;IAEU,aAAa,GAAA;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YACpD;QACF;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC7B;QACF;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACnC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB;QACF;AACA,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;AACpF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAChC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAChE;AACD,QAAA,MAAM,MAAM,GAAG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClE,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACjC;IACF;AAEU,IAAA,UAAU,CAAC,KAAiB,EAAA;AACpC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAmC;AACtD,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACnD;QACF;QACA,IAAI,CAAC,WAAW,EAAE;IACpB;uGAxfW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,2BAAA,EAAA,8BAAA,EAAA,oBAAA,EAAA,uCAAA,EAAA,oBAAA,EAAA,8BAAA,EAAA,oBAAA,EAAA,8BAAA,EAAA,mBAAA,EAAA,6BAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,4BAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,mCAAA,EAAA,UAAA,EAAA,OAAA,EAAA,EAAA,EAAA,SAAA,EAFV,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAE3D,UAAU,EAAA,UAAA,EAAA,CAAA;kBAxBtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,mBAAmB,EAAE,qBAAqB;AAC1C,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,6BAA6B,EAAE,4BAA4B;AAC3D,wBAAA,sBAAsB,EAAE,qCAAqC;AAC7D,wBAAA,sBAAsB,EAAE,4BAA4B;AACpD,wBAAA,sBAAsB,EAAE,4BAA4B;AACpD,wBAAA,qBAAqB,EAAE,2BAA2B;AAClD,wBAAA,kBAAkB,EAAE,2BAA2B;AAC/C,wBAAA,8BAA8B,EAAE,sBAAsB;AACtD,wBAAA,iBAAiB,EAAE,gBAAgB;AACnC,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,sBAAsB,EAAE,iCAAiC;AACzD,wBAAA,YAAY,EAAE,OAAO;AACrB,wBAAA,WAAW,EAAE,uBAAuB;AACpC,wBAAA,WAAW,EAAE,iBAAiB;AAC9B,wBAAA,YAAY,EAAE,oBAAoB;AACnC,qBAAA;oBACD,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAA,UAAY,EAAE,CAAC;AACvE,iBAAA;;;AC7ED;;;;;;;AAOG;MACU,kBAAkB,GAAG,IAAI,cAAc,CAAmB,oBAAoB;AAE3F;;;;;;;;;;;AAWG;MAuBU,gBAAgB,CAAA;AAClB,IAAA,MAAM,GAAG,oBAAoB,CAAI,kBAAkB,CAAC;AACpD,IAAA,KAAK,GAAG,MAAM,CAA0B,UAAU,CAAC;AAE5D;;;;;;AAMG;IACM,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAK;IAC3B,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEjE;;;;;AAKG;IACM,QAAQ,GAAG,KAAK,CAAgB,IAAI;iFAAC;AAErC,IAAA,EAAE,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAEjC,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;iFAAC;AAExE;;;;;;AAMG;AACM,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;AACjD,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,YAAA,OAAO,QAAQ,KAAK,IAAI,CAAC,EAAE,EAAE;QAC/B;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IAClE,CAAC;oFAAC;AAEiB,IAAA,WAAW,GAAG,QAAQ,CAAgB,MAAK;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACtC,QAAA,OAAO,KAAK,KAAK,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;IACnD,CAAC;oFAAC;AAEiB,IAAA,YAAY,GAAG,QAAQ,CAAgB,MAAK;QAC7D,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,SAAS,EAAE;AAC1C,YAAA,OAAO,IAAI;QACb;AACA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,QAAA,OAAO,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;IAC9C,CAAC;qFAAC;AAEO,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;0FAAC;AAE5E,IAAA,QAAQ,GAAG,QAAQ,CAAS,MAAK;AAClD,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC5B,OAAO,CAAC,CAAC;QACX;AACA,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC3E,QAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3B,YAAA,OAAO,cAAc;QACvB;QACA,OAAO,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9E,CAAC;iFAAC;AAEF,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;YAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,iBAAiB;YAChC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;AACD,QAAA,cAAc,CACZ,MAAM,EACN,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EACpC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACvC;IACH;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE;YACtD;QACF;QACA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IAC1C;AAEU,IAAA,aAAa,CAAC,KAAmB,EAAA;QACzC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,SAAS,EAAE;YAC1C;QACF;QACA,KAAK,CAAC,cAAc,EAAE;IACxB;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC5B;QACF;QACA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IACvD;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC5B;QACF;;;;AAKA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE;;YAE1B,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACxE,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;oBAC1C,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;oBACvB;gBACF;YACF;;AAGA,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACvE,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE;oBACxB,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC;oBACtE;gBACF;AACA,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;oBACvB,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;oBACrE;gBACF;YACF;;YAGA,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBACvC,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;gBAC1D;YACF;;AAGA,YAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACvE,gBAAA,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,EAAE;AAC1C,oBAAA,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AACtC,oBAAA,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;AACvB,iBAAA,CAAC;gBACF,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE;oBAC1C,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;oBAC3D;gBACF;YACF;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,EAAE;AAC1C,YAAA,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AACtC,YAAA,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;AACtB,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;QACF,IAAI,MAAM,EAAE;YACV,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;YACtD;QACF;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC;IACpC;uGAxKW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,WAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,mCAAA,EAAA,oBAAA,EAAA,uCAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,0CAAA,EAAA,uBAAA,EAAA,6BAAA,EAAA,oBAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,SAAA,EAnBhB,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAmBhE,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAtB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,kBAAkB;oBAC5B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAA,gBAAkB,EAAE,CAAC;AAC3E,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,sBAAsB,EAAE,+BAA+B;AACvD,wBAAA,sBAAsB,EAAE,qCAAqC;AAC7D,wBAAA,qBAAqB,EAAE,eAAe;AACtC,wBAAA,sBAAsB,EAAE,gBAAgB;AACxC,wBAAA,iBAAiB,EAAE,YAAY;AAC/B,wBAAA,mBAAmB,EAAE,sCAAsC;AAC3D,wBAAA,yBAAyB,EAAE,2BAA2B;AACtD,wBAAA,sBAAsB,EAAE,iCAAiC;AACzD,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,eAAe,EAAE,uBAAuB;AACzC,qBAAA;AACF,iBAAA;;;ACpDD;;;;;;;;AAQG;MAUU,yBAAyB,CAAA;AACjB,IAAA,MAAM;AAEzB,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC7D,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG;QACH;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;uGAXW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,iDAAA,EAAA,aAAA,EAAA,iCAAA,EAAA,eAAA,EAAA,qCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBATrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,mBAAmB,EAAE,6CAA6C;AAClE,wBAAA,eAAe,EAAE,+BAA+B;AAChD,wBAAA,iBAAiB,EAAE,mCAAmC;AACvD,qBAAA;AACF,iBAAA;;;ACnBD;;;;;;AAMG;MASU,eAAe,CAAA;IACjB,QAAQ,GAAG,MAAM,CAAgB,IAAI;iFAAC;;AAGtC,IAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;;AAG7C,IAAA,aAAa,CAAC,EAAU,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IACvB;;AAGA,IAAA,eAAe,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB;IACF;uGAhBW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,wBAAwB,EAAE,mBAAmB;AAC9C,qBAAA;AACF,iBAAA;;;ACXD;;;;;;AAMG;MAQU,oBAAoB,CAAA;;AAEtB,IAAA,EAAE;AAEX,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACzD,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F;QACH;QACA,IAAI,CAAC,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,yBAAyB,CAAC;IAC9D;uGAZW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,IAAI,EAAE;AACJ,wBAAA,MAAM,EAAE,MAAM;AACf,qBAAA;AACF,iBAAA;;;AClBD;;;;AAIG;AAEH;SACgB,mBAAmB,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa,EAAA;AAC7E,IAAA,OAAO,GAAG,KAAK,CAAA,UAAA,EAAa,KAAK,CAAA,IAAA,EAAO,KAAK,GAAG;AAClD;AAEA;SACgB,mBAAmB,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa,EAAA;AAC7E,IAAA,OAAO,GAAG,KAAK,CAAA,oBAAA,EAAuB,KAAK,CAAA,IAAA,EAAO,KAAK,GAAG;AAC5D;AAEA;SACgB,mBAAmB,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa,EAAA;AAC7E,IAAA,OAAO,GAAG,KAAK,CAAA,sBAAA,EAAyB,KAAK,CAAA,IAAA,EAAO,KAAK,GAAG;AAC9D;AAEA;AACM,SAAU,qBAAqB,CAAC,KAAa,EAAA;IACjD,OAAO,CAAA,EAAG,KAAK,CAAA,qBAAA,CAAuB;AACxC;;ACSA,MAAM,wBAAwB,GAAG,CAAC;AAclC;;;;;AAKG;AACH,SAAS,oBAAoB,CAAC,KAAoB,EAAE,GAAqB,EAAA;AACvE,IAAA,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC;IAC/C,IAAI,OAAO,EAAE;AACX,QAAA,OAAO,OAAO;IAChB;AACA,IAAA,MAAM,KAAK,GAAG,GAAG,KAAK,KAAK;AAC3B,IAAA,QAAQ,KAAK,CAAC,GAAG;AACf,QAAA,KAAK,WAAW;AACd,YAAA,OAAO,MAAM;AACf,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,MAAM;AACf,QAAA,KAAK,YAAY;YACf,OAAO,KAAK,GAAG,MAAM,GAAG,MAAM;AAChC,QAAA,KAAK,WAAW;YACd,OAAO,KAAK,GAAG,MAAM,GAAG,MAAM;AAChC,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,OAAO;AAChB,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,MAAM;AACf,QAAA;AACE,YAAA,OAAO,IAAI;;AAEjB;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;MAQU,iBAAiB,CAAA;AACnB,IAAA,IAAI,GAAsB,oBAAoB,CAAC,mBAAmB,CAAC;AACnE,IAAA,KAAK,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC,aAAa;AACjE,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC5B,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACnD,IAAA,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC;AAClC,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAEzC;;;;;AAKG;IACM,eAAe,GAAG,KAAK,CAAC,KAAK,uFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG/D,aAAa,GAAG,MAAM,EAA0B;IAEtC,SAAS,GAAG,MAAM,CAAC,KAAK;kFAAC;IAE5C,KAAK,GAAgB,MAAM;IAC3B,WAAW,GAAuB,IAAI;IACtC,UAAU,GAAG,CAAC;IACd,YAAY,GAAG,CAAC;IAChB,MAAM,GAAG,EAAE;IACX,kBAAkB,GAA6B,IAAI;IACnD,eAAe,GAA8B,IAAI;AAEjD,IAAA,WAAA,GAAA;AACE,QAAA,0BAA0B,CAAC;YACzB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,QAAQ,EAAE,MAAM,IAAI,CAAC,KAAK,KAAK,UAAU;YACzC,aAAa,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YACpD,eAAe,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACxD,UAAU,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,SAAA,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,eAAe,GAAG,wBAAwB,CAAC;gBAC9C,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,gBAAA,YAAY,EAAE,wBAAwB;AACtC,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,cAAc,EAAE,IAAI;gBACpB,QAAQ,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;gBACjD,MAAM,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBAC7C,MAAM,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBAC7C,QAAQ,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACjD,gBAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE;AACxC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AAC9B,gBAAA,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE;AAC/B,gBAAA,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE;oBACzB,IAAI,CAAC,aAAa,EAAE;gBACtB;AACF,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,YAAY,GAAA;AACV,QAAA,QACE,CAAC,IAAI,CAAC,eAAe,EAAE;AACvB,YAAA,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS;IAExC;AAEA,IAAA,cAAc,CAAC,MAA0B,EAAA;AACvC,QAAA,IAAI,EAAE,MAAM,YAAY,IAAI,CAAC,EAAE;AAC7B,YAAA,OAAO,IAAI;QACb;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACnC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAE;AAC1B,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBAC1D,OAAO,MAAM,CAAC,QAAQ,EAAE,GAAG,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;YACnE;QACF;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,gBAAgB,CAAC,KAAmB,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,CAAC,WAAW,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AACjF,YAAA,OAAO,KAAK;QACd;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK;AAChC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,cAAc,CAAC,KAAmB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;AAC7B,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE;YACvD,CAAC,EAAE,KAAK,CAAC,OAAO;YAChB,CAAC,EAAE,KAAK,CAAC,OAAO;AACjB,SAAA,CAAC;AACF,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,cAAc,CAAC,KAAmB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC5B;QACF;AACA,QAAA,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE;AACpD,QAAA,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;IAC9D;AAEA,IAAA,gBAAgB,CAAC,KAAmB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC5B;QACF;QACA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACtF,IAAI,CAAC,OAAO,EAAE;IAChB;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC5B;QACF;QACA,IAAI,CAAC,OAAO,EAAE;IAChB;AAEA,IAAA,qBAAqB,CAAC,KAA+B,EAAA;AACnD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW;AAC/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC;AACpB,aAAA,OAAO;aACP,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM;AACzC,aAAA,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACvD,QAAA,MAAM,MAAM,GAAG,iBAAiB,CAC9B,KAAK,EACL,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,CAAC,EACzD,OAAO,EACP,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAChB;AACD,QAAA,OAAO,MAAM,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY;IAClD;AAEA,IAAA,cAAc,CAAC,KAAoB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YAC1E;QACF;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE;YACb;QACF;QACA,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IACvD;AAEA,IAAA,gBAAgB,CAAC,KAAoB,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3D,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB;QACF;QACA,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,QAAQ,MAAM;AACZ,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,OAAO,EAAE;gBACd;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,OAAO,EAAE;gBACd;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,QAAQ,CAAC;gBAChD;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,QAAQ,CAAC;gBAChD;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC;gBAC5B;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,CAAC;gBACzD;;IAEN;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE;YAC7B;QACF;AACA,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAAmC;QACzD,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC3C;QACF;QACA,IAAI,CAAC,OAAO,EAAE;IAChB;AAEA,IAAA,KAAK,CACH,IAAiB,EACjB,KAAa,EACb,IAA4B,EAC5B,KAAgC,EAAA;AAEhC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAExB,QAAA,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,EAAE;AAC/B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,iBAAiB,CAAC;AAC9C,gBAAA,MAAM,EAAE,IAAI;gBACZ,KAAK;AACL,gBAAA,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,IAAI,CAAC,SAAS;AACnB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,QAAQ,EAAE,MAAM,IAAI;AACrB,aAAA,CAAC;QACJ;QAEA,IAAI,CAAC,UAAU,CAAC,QAAQ,CACtB,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EACvE,WAAW,CACZ;IACH;IAEA,UAAU,CAAC,EAAU,EAAE,UAAkC,EAAA;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACpD,QAAA,IAAI,OAAO,KAAK,IAAI,CAAC,YAAY,EAAE;YACjC;QACF;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO;QAC3B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5F;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;YACtD;QACF;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM;QACxC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC9D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;QACzB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,WAAW,CAAC;IAClF;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE;YACzB;QACF;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;QACzB,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IACrE;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,eAAe,CAAC;AAClD,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE;AAClC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;uGAjRW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACJ,wBAAA,sBAAsB,EAAE,yBAAyB;AAClD,qBAAA;AACF,iBAAA;;;ACrHD;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AACI,MAAM,iCAAiC,GAAG;IAC/C,OAAO;IACP,WAAW;IACX,KAAK;IACL,OAAO;IACP,UAAU;IACV,QAAQ;IACR,SAAS;IACT,oBAAoB;IACpB,iBAAiB;IACjB,MAAM;IACN,UAAU;IACV,MAAM;IACN,aAAa;IACb,SAAS;IACT,UAAU;IACV,UAAU;IACV,uBAAuB;IACvB,YAAY;IACZ,SAAS;IACT,cAAc;;AAGhB;;;;AAIG;AACI,MAAM,kCAAkC,GAAG;IAChD,eAAe;IACf,OAAO;IACP,eAAe;IACf,aAAa;;;AC1Df;;AAEG;;;;"}
|