@vectoriox/iox-builder 3.2.0 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"vectoriox-iox-builder.mjs","sources":["../../../projects/iox-builder/src/lib/models/component.model.ts","../../../projects/iox-builder/src/lib/utils/clone-ids.util.ts","../../../projects/iox-builder/src/lib/models/wrap-node.ts","../../../projects/iox-builder/src/lib/panels/panel-event.service.ts","../../../projects/iox-builder/src/lib/panels/panel.model.ts","../../../projects/iox-builder/src/lib/services/component-registry.service.ts","../../../projects/iox-builder/src/lib/overlay/overlay.service.ts","../../../projects/iox-builder/src/lib/services/symbol-registry.service.ts","../../../projects/iox-builder/src/lib/services/drag-engine.service.ts","../../../projects/iox-builder/src/lib/services/data-source-registry.service.ts","../../../projects/iox-builder/src/lib/services/viewport.service.ts","../../../projects/iox-builder/src/lib/services/component-instance-registry.service.ts","../../../projects/iox-builder/src/lib/services/interaction-engine.service.ts","../../../projects/iox-builder/src/lib/services/interaction-preset-registry.service.ts","../../../projects/iox-builder/src/lib/services/builder-clipboard.service.ts","../../../projects/iox-builder/src/lib/services/style-registry.service.ts","../../../projects/iox-builder/src/lib/services/moveable-canvas.service.ts","../../../projects/iox-builder/src/lib/services/selecto-canvas.service.ts","../../../projects/iox-builder/src/lib/style-compose.ts","../../../projects/iox-builder/src/lib/render/render.directive.ts","../../../projects/iox-builder/src/lib/services/preset-registry.service.ts","../../../projects/iox-builder/src/lib/overlay/overlay.component.ts","../../../projects/iox-builder/src/lib/overlay/overlay.component.html","../../../projects/iox-builder/src/lib/toolbar/toolbar.component.ts","../../../projects/iox-builder/src/lib/toolbar/toolbar.component.html","../../../projects/iox-builder/src/lib/panels/layer-tree/layer-tree.component.ts","../../../projects/iox-builder/src/lib/panels/layer-tree/layer-tree.component.html","../../../projects/iox-builder/src/lib/builder.component.ts","../../../projects/iox-builder/src/lib/builder.component.html","../../../projects/iox-builder/src/lib/components/section/section.component.ts","../../../projects/iox-builder/src/lib/components/container/container.component.ts","../../../projects/iox-builder/src/lib/directives/iox-dropzone.directive.ts","../../../projects/iox-builder/src/lib/components/linked-container/linked-container.component.ts","../../../projects/iox-builder/src/lib/utils/binding-path.util.ts","../../../projects/iox-builder/src/lib/services/builder-data-source.service.ts","../../../projects/iox-builder/src/lib/directives/iox-draggable.directive.ts","../../../projects/iox-builder/src/lib/components/repeater/repeater.component.ts","../../../projects/iox-builder/src/lib/components/button-block/button-block.component.ts","../../../projects/iox-builder/src/lib/components/slider-container/slider-container.component.ts","../../../projects/iox-builder/src/lib/components/slider-slide/slider-slide.component.ts","../../../projects/iox-builder/src/lib/panels/panel/panel-child.component.ts","../../../projects/iox-builder/src/lib/panels/panel/panel.component.ts","../../../projects/iox-builder/src/lib/panels/panel/panel.component.html","../../../projects/iox-builder/src/lib/services/builder-history.service.ts","../../../projects/iox-builder/src/lib/iox-builder.module.ts","../../../projects/iox-builder/src/lib/tokens/builder.tokens.ts","../../../projects/iox-builder/src/lib/components/button/button.config.ts","../../../projects/iox-builder/src/lib/components/button-block/button-block.config.ts","../../../projects/iox-builder/src/lib/components/card/card.config.ts","../../../projects/iox-builder/src/lib/components/container/container.config.ts","../../../projects/iox-builder/src/lib/components/divider/divider.config.ts","../../../projects/iox-builder/src/lib/components/gallery/gallery.config.ts","../../../projects/iox-builder/src/lib/components/heading/heading.config.ts","../../../projects/iox-builder/src/lib/components/icon/icon.config.ts","../../../projects/iox-builder/src/lib/components/image/image.config.ts","../../../projects/iox-builder/src/lib/components/link/link.config.ts","../../../projects/iox-builder/src/lib/components/linked-container/linked-container.config.ts","../../../projects/iox-builder/src/lib/components/list-item/list-item.config.ts","../../../projects/iox-builder/src/lib/components/text/text.config.ts","../../../projects/iox-builder/src/lib/components/list/list.config.ts","../../../projects/iox-builder/src/lib/components/repeater/repeater.config.ts","../../../projects/iox-builder/src/lib/components/section/section.config.ts","../../../projects/iox-builder/src/lib/components/slider-slide/slider-slide.config.ts","../../../projects/iox-builder/src/lib/components/slider-container/slider-container.config.ts","../../../projects/iox-builder/src/lib/components/spacer/spacer.config.ts","../../../projects/iox-builder/src/public-api.ts","../../../projects/iox-builder/src/vectoriox-iox-builder.ts"],"sourcesContent":["import { DEFAULT_WIDTH_BY_TYPE, IoxContextSlot, RelativeSourceSpec, SetContextParams } from '@vectoriox/iox-ui';\n\nexport enum StyleCategory {\n Layout = 'Layout',\n /** How THIS node participates in its parent's flex/grid flow (align-self, flex-grow, grid-column…).\n * Distinct from Layout, which configures the node as a container for its OWN children. */\n ChildLayout = 'Child Layout',\n Size = 'Size',\n Typography = 'Typography',\n Spacing = 'Spacing',\n Border = 'Border',\n Position = 'Position',\n Background = 'Background',\n Effects = 'Effects',\n List = 'List',\n // Legacy — kept for backward compat; prefer Size\n Dimensions = 'Dimensions',\n}\n\nexport interface IoxBinding {\n prop: string;\n source: string;\n path: string;\n fallback?: any;\n /** Render-time transform chain (UI: \"Filters\"), applied LEFT→RIGHT after resolvePath by the shared\n * `applyBindingPipes` from `@vectoriox/iox-ui` — same on the builder canvas and the SSR engine.\n * Shape mirrors iox-ui's `IoxPipe` (kept inline so this model needs no cross-package import). */\n pipes?: { name: string; args?: any[] }[];\n}\n\n/**\n * When mode=single: looks up a single CMS item by matching a schema field\n * against a URL path param (e.g. /project/:projectId → field _id).\n * `defaultId` is used as a fallback value in the builder preview when no\n * live route is active.\n */\nexport interface DsFilterByRouteParam {\n field: string;\n routeParam: string;\n defaultId?: string;\n}\n\n/**\n * When mode=query: each entry filters a schema field, either from a URL query string key\n * (e.g. ?status=active → field \"status\") or by a constant.\n * `queryParam` OMITTED → constant filter: `defaultValue` is always the value.\n * `queryParam` present → the URL value wins and `defaultValue` is the fallback (which is what the\n * builder preview always uses — design time has no live query params).\n */\nexport interface DsFilterByQueryParam {\n field: string;\n queryParam?: string;\n defaultValue?: string;\n}\n\nexport enum DataSourceType {\n Cms = 'cms',\n Shop = 'shop',\n ExternalApi = 'external-api',\n InternalApi = 'internal-api',\n Static = 'static',\n /** A VIEW into another variable: `{ from: <alias>, path }` (e.g. galleryImages = product.gallery).\n * Resolves to the value one (or more) level(s) into a parent variable — page-scoped. */\n Derived = 'derived',\n /** A ROUTE-CONTEXT value derived from the current route item — `$route`/`$current`/`$siblings`/\n * `$related`. Not fetched: computed by the shared `computeRelative` from other resolved sources.\n * See relative-data-sources-plan.md. */\n Relative = 'relative',\n /** A page-local VARIABLE: a named resource whose value is WRITTEN at runtime by an interaction\n * (`setContext`), never fetched. Starts empty; elements bind to it like any other alias.\n * `request.variable.itemsFrom` names the source whose items it holds, for field suggestions.\n * See element-context-state-plan.md. */\n Variable = 'variable',\n}\n\nexport interface IoxDataSource {\n id: string;\n type: 'cms' | 'shop' | 'internal-api' | 'external-api' | 'static' | 'derived' | 'relative' | 'variable';\n mode: 'single' | 'query';\n alias: string;\n request: {\n method?: 'GET' | 'POST';\n endpoint?: string;\n /** `derived` alias: resolve `from` (another alias) then getByPath(value, path). */\n derived?: { from: string; path: string };\n /** `relative` alias: a route-context computation (kind + from/subjectFrom/sortBy/matchFields…),\n * resolved by the shared `computeRelative`. */\n relative?: RelativeSourceSpec;\n /** `variable` alias: written at runtime by an interaction. `itemsFrom` names the source whose\n * items it holds — optional, and used only to suggest fields in the bind picker. */\n variable?: { itemsFrom?: string };\n cms?: {\n contentType: string;\n filter?: any;\n limit?: number;\n sort?: any;\n /** Single-result lookup: match field against a route path param */\n filterByRouteParam?: DsFilterByRouteParam;\n /** Array-result filtering: match fields against URL query params */\n filterByQueryParams?: DsFilterByQueryParam[];\n };\n shop?: {\n contentType: 'products' | 'categories' | 'subCategories';\n filterByRouteParam?: DsFilterByRouteParam;\n filterByQueryParams?: DsFilterByQueryParam[];\n };\n params?: Record<string, any>;\n };\n}\n\n// ── Interactions / Animations ────────────────────────────────\n\n/**\n * Element context state — the shared types live in @vectoriox/iox-ui (the engine cannot import\n * iox-builder), and are re-exported here so builder code has one import site. See\n * element-context-state-plan.md.\n */\nexport type { IoxContextSlot, SetContextParams };\n\nexport type InteractionTrigger =\n | 'pageLoad' | 'click' | 'hover' | 'viewportEnter' | 'scrollProgress'\n // Page-transition choreography (see page-transitions.md). pageLeave plays on navigate-AWAY and\n // the route swap waits for all of them; pageEnter plays after the page transition completes.\n | 'pageLeave' | 'pageEnter'\n // Swiper container-level events (used as triggers on a SliderContainer node)\n | 'swiperSlideChange' | 'swiperReachBeginning' | 'swiperReachEnd'\n | 'swiperAutoplayStart' | 'swiperAutoplayStop'\n // Swiper slide-level events (used as triggers on a SliderSlide node)\n | 'swiperSlideActive' | 'swiperSlideInactive';\n\nexport type InteractionActionType =\n | 'fadeIn' | 'fadeOut'\n | 'moveUp' | 'moveDown' | 'moveLeft' | 'moveRight'\n | 'scaleIn' | 'scaleOut'\n | 'rotate'\n | 'show' | 'hide' | 'toggleVisibility'\n // Element context state — write/clear a named runtime slot other elements bind to. Not an\n // animation: these carry `SetContextParams` in `params`. See element-context-state-plan.md.\n | 'setContext' | 'clearContext'\n // Swiper imperative method actions (target must be a labeled SliderContainer node)\n | 'swiperNext' | 'swiperPrev' | 'swiperGoToSlide'\n | 'swiperAutoplayStart' | 'swiperAutoplayStop' | 'swiperAutoplayPause';\n\nexport interface InteractionAction {\n type: InteractionActionType;\n /** 'self' targets the node that owns the interaction; otherwise a node ID. */\n target: 'self' | string;\n /** Duration in milliseconds. */\n duration: number;\n /** Delay in milliseconds before the action starts. */\n delay: number;\n easing: 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out';\n /**\n * Extra parameters — `{ distance: 20 }` for move actions. For `setContext`/`clearContext` this\n * holds a `SetContextParams` (`{ slot, value, noReverse? }`), read structurally by the shared\n * `contextActionEffect` in @vectoriox/iox-ui. Kept as an index signature because animation\n * actions access it by key (`params?.['degrees']`).\n */\n params?: Record<string, any>;\n /** If true, the action only plays once (relevant for viewport/scroll triggers). */\n once?: boolean;\n}\n\nexport interface IoxInteraction {\n id: string;\n trigger: InteractionTrigger;\n actions: InteractionAction[];\n /**\n * Optional second set of actions for click-toggle behaviour.\n * When set, the first click runs `actions` and the second click runs\n * `reverseActions`, alternating on every subsequent click.\n * Only meaningful for trigger === 'click'.\n */\n reverseActions?: InteractionAction[];\n}\n\n/**\n * Maps each action type to its logical inverse for auto-populating toggle\n * reverse actions. Types without a natural inverse are omitted.\n */\nexport const INVERSE_ACTION: Partial<Record<InteractionActionType, InteractionActionType>> = {\n fadeIn: 'fadeOut',\n fadeOut: 'fadeIn',\n show: 'hide',\n hide: 'show',\n scaleIn: 'scaleOut',\n scaleOut: 'scaleIn',\n moveUp: 'moveDown',\n moveDown: 'moveUp',\n moveLeft: 'moveRight',\n moveRight: 'moveLeft',\n // Click-toggle only: click sets the slot, click again clears it. This map does NOT drive\n // hover-leave — that runs the same actions on a reverse pass, whose context semantics live in\n // `contextActionEffect` (@vectoriox/iox-ui).\n setContext: 'clearContext',\n clearContext: 'setContext',\n};\n\n// ── Component capability declarations ─────────────────────────────────────────\n\n/** An event that a component can emit, usable as an interaction trigger. */\nexport interface ComponentEventDef {\n /** Value stored on IoxInteraction.trigger (e.g. 'swiperSlideChange'). */\n value: string;\n label: string;\n icon?: string;\n}\n\n/** An imperative method a component exposes, usable as an interaction action. */\nexport interface ComponentMethodDef {\n /** Value stored on InteractionAction.type (e.g. 'swiperNext'). */\n value: string;\n label: string;\n /** Optional parameters the user can configure when this action is selected. */\n params?: { name: string; type: 'number' | 'string' | 'boolean'; label: string }[];\n}\n\nexport const TRIGGER_OPTIONS: { value: InteractionTrigger; label: string; icon: string }[] = [\n { value: 'pageLoad', label: 'Page load', icon: 'ph-thin ph-play' },\n { value: 'pageEnter', label: 'Page enter', icon: 'ph-thin ph-sign-in' },\n { value: 'pageLeave', label: 'Page leave', icon: 'ph-thin ph-sign-out' },\n { value: 'viewportEnter', label: 'Enter viewport', icon: 'ph-thin ph-eye' },\n { value: 'click', label: 'Click', icon: 'ph-thin ph-cursor-click' },\n { value: 'hover', label: 'Hover', icon: 'ph-thin ph-hand-pointing' },\n { value: 'scrollProgress', label: 'Scroll progress', icon: 'ph-thin ph-arrow-fat-lines-down' },\n];\n\nexport const ACTION_TYPE_OPTIONS: { value: InteractionActionType; label: string }[] = [\n { value: 'fadeIn', label: 'Fade in' },\n { value: 'fadeOut', label: 'Fade out' },\n { value: 'moveUp', label: 'Move up' },\n { value: 'moveDown', label: 'Move down' },\n { value: 'moveLeft', label: 'Move left' },\n { value: 'moveRight', label: 'Move right' },\n { value: 'scaleIn', label: 'Scale in' },\n { value: 'scaleOut', label: 'Scale out' },\n { value: 'rotate', label: 'Rotate' },\n { value: 'show', label: 'Show' },\n { value: 'hide', label: 'Hide' },\n { value: 'toggleVisibility', label: 'Toggle visibility' },\n { value: 'setContext', label: 'Set context' },\n { value: 'clearContext', label: 'Clear context' },\n];\n\nexport const EASING_OPTIONS = ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out'];\n\n// ── Style Presets ─────────────────────────────────────────────────────────────\n\n/**\n * A named, reusable collection of CSS style properties stored at the org level.\n * Elements reference a preset by `stylePresetId`. At render time the engine\n * merges `preset.styleProps → element.styleOverrides` so local overrides win.\n */\nexport interface StylePreset {\n id: string;\n name: string;\n /** Flat CSS property map — same shape as IoxLayoutNode.styleProps. */\n styleProps: Record<string, any>;\n /** Per-state style overrides stored alongside the preset (e.g. hover, active, focus). */\n stateStyles?: Partial<Record<ElementState, Record<string, any>>>;\n}\n\n/** A reusable element definition whose instances all stay in sync.\n * Stored in the `symbols` backend collection; referenced by ComponentNode.symbolId. */\nexport interface IoxSymbol {\n id: string;\n name: string;\n /** Full serialised node tree — same shape as a page layout node. */\n node: Record<string, any>;\n}\n\n/**\n * A named, reusable collection of IoxInteraction[] stored at the org level.\n * Elements reference a preset by `interactionPresetId`. Editing the preset\n * propagates updated interactions to all linked elements immediately.\n */\nexport interface InteractionPreset {\n id: string;\n name: string;\n interactions: IoxInteraction[];\n}\n\nexport type ElementState =\n | 'hover' | 'active' | 'focus'\n | 'first-child' | 'last-child' | 'nth-child(odd)' | 'nth-child(even)'\n | 'parent-hover'\n | 'trigger-hover';\n\n/** Interaction pseudo-classes — compiled to .iox-node-{id}:state */\nexport const INTERACTION_STATES: ElementState[] = ['hover', 'active', 'focus'];\n\n/** Structural pseudo-classes — compiled to .iox-outer-{id}:state */\nexport const STRUCTURAL_STATES: ElementState[] = ['first-child', 'last-child', 'nth-child(odd)', 'nth-child(even)'];\n\n/**\n * Relational pseudo-classes — the styled element is a descendant, the pseudo-class\n * lives on an ANCESTOR. Compiled to `.iox-node-{parentId}:{base} .iox-node-{id} { … }`,\n * so they require the ancestor's css id (`relativeToId`) at compile time.\n * `RELATIONAL_STATE_BASE` maps each relational state to the ancestor pseudo-class.\n */\nexport const RELATIONAL_STATES: ElementState[] = ['parent-hover'];\n\nexport const RELATIONAL_STATE_BASE: Partial<Record<ElementState, string>> = {\n 'parent-hover': 'hover',\n};\n\n/**\n * Targeted relational pseudo-classes — the styled element restyles when an ARBITRARY\n * chosen element (the `trigger`, not the DOM parent) matches a pseudo-class. Compiled to\n * `.iox-node-{scopeId}:has(.iox-node-{triggerId}:{base}) .iox-node-{id} { … }`, where\n * `scopeId` is the NEAREST COMMON ANCESTOR of the styled node and the trigger. Scoping the\n * `:has()` to that ancestor keeps the rule repetition-safe (each cloned subtree matches\n * independently) with a single shared CSS rule.\n *\n * The trigger node id per state is stored on `ComponentNode.stateTriggers`.\n * `TARGETED_STATE_BASE` maps each targeted state to the trigger's pseudo-class.\n */\nexport const TARGETED_STATES: ElementState[] = ['trigger-hover'];\n\nexport const TARGETED_STATE_BASE: Partial<Record<ElementState, string>> = {\n 'trigger-hover': 'hover',\n};\n\nexport const SUPPORTED_STATES: ElementState[] = [...INTERACTION_STATES, ...STRUCTURAL_STATES, ...RELATIONAL_STATES, ...TARGETED_STATES];\n\nexport interface ComponentNode {\n id?: string;\n /**\n * The CSS class key (`iox-node-{styleId}`) used by the style engine.\n * Set on clone nodes to point back to the original template node's id,\n * so all repeated rows share a single CSS rule.\n * Absent on original (non-clone) nodes — they use `id` directly.\n */\n styleId?: string;\n type: string;\n inputs?: Record<string, any>;\n traits?: ComponentTrait[];\n styleTraits?: StyleTraitGroup[];\n bindings?: IoxBinding[];\n interactions?: IoxInteraction[];\n children?: ComponentNode[];\n isGlobal?: boolean;\n globalPosition?: 'before' | 'after';\n /** ID of the org-level StylePreset applied to this node. */\n stylePresetId?: string;\n /**\n * CSS properties explicitly overridden by the user after a preset was applied.\n * Serialized to `styleProps` in the page layout JSON when a preset is active.\n * Absent when no preset is applied (full styles stored in styleTraits instead).\n */\n styleOverrides?: Record<string, any>;\n /**\n * Per-state style overrides. Only stores properties that differ from the base\n * style — same sparse pattern as styleOverrides. Each key maps to a flat CSS\n * property map that is compiled to `.iox-node-{id}:hover { … }` etc.\n */\n stateStyles?: Partial<Record<ElementState, Record<string, any>>>;\n /**\n * For TARGETED_STATES (e.g. `trigger-hover`): the node id whose pseudo-class drives\n * that state. Keyed by state so future targeted states (trigger-active/focus) slot in.\n * The styled node restyles when this trigger node is hovered; the compiler scopes the\n * `:has()` selector to the nearest common ancestor of the two. Only nodes with a `label`\n * appear in the trigger picker.\n */\n stateTriggers?: Partial<Record<ElementState, string>>;\n /** User-defined display name for this node. Used in the layer tree and as an\n * interaction target identifier. Only nodes with a label appear in the\n * interaction target picker. */\n label?: string;\n /** ID of the org-level IoxSymbol this node is linked to.\n * Absent on stamps (independent copies). When present, any style change\n * on this node propagates to all other instances of the same symbol. */\n symbolId?: string;\n /** Set when the user detaches an instance from its symbol. Remembers the\n * origin symbol ID so the instance can be re-linked (resynced) later. */\n detachedSymbolId?: string;\n /** ID of the org-level InteractionPreset applied to this node.\n * When set, node.interactions reflects the preset's interactions. */\n interactionPresetId?: string;\n}\n\n/**\n * Build a full StyleTraitGroup[] schema populated with values from a flat\n * styleProps map. Used when editing a preset in the Style panel — the panel\n * receives the same `StyleTraitGroup[]` shape regardless of context.\n */\nexport function buildPresetStyleTraits(styleProps: Record<string, any>): StyleTraitGroup[] {\n const allGroups: GroupStyleConfig[] = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n new PositionGroupStyleConfig(),\n ];\n return allGroups.map(group => ({\n ...group,\n traits: group.traits.map(trait => ({\n ...trait,\n default: styleProps[trait.name] !== undefined ? styleProps[trait.name] : trait.default,\n })),\n }));\n}\n\nexport enum TraitInputType {\n Text = 'text',\n Number = 'number',\n Select = 'select',\n Checkbox = 'checkbox',\n Color = 'colorPicker',\n DirectionalSize = 'directionalSize',\n SelectButton = 'selectButton',\n Scrub = 'scrub',\n Range = 'range',\n Icon = 'icon',\n Media = 'media',\n /** Ordered list of images (URL / one-by-one / filebox; per-item binding in a later phase).\n * Controller registered in the consumer (iox-cms-client) as `mediaList`. Value: GalleryImage[]. */\n MediaList = 'mediaList',\n FontFamily = 'fontFamily',\n GridTemplate = 'gridTemplate',\n SectionLabel = 'sectionLabel',\n Textarea = 'textarea',\n}\n\nexport interface TraitOptionMap {\n [key: string]: any;\n}\n\n/** Named label/value pair for select options where the display label differs from the CSS value. */\nexport interface TraitSelectOption {\n label: string;\n value: string;\n}\n\nexport interface QuadSizeSegment {\n key: string;\n icon: string;\n ariaLabel?: string;\n}\n\n/** Conditional visibility: this trait only shows when a controlling trait matches one of the given values.\n * `scope` selects whose trait is inspected:\n * - `'self'` (default): a sibling trait on the SAME node/group (e.g. grid tracks show when this node's display=grid).\n * - `'parent'`: the same-named trait on the node's PARENT (e.g. flex-child props show when the PARENT's display=flex).\n * Parent-scoped conditions are resolved by the style panel, which threads the parent's live value in. */\nexport interface TraitShowCondition {\n /** name of the controlling trait (a sibling when scope='self'; read off the parent when scope='parent') */\n trait: string;\n /** one value or an array of values that make this trait visible */\n values: string | string[];\n /** whose trait to inspect — defaults to 'self' (a sibling in the same group). */\n scope?: 'self' | 'parent';\n}\n\nexport interface ComponentTrait {\n name: string;\n label: string;\n type: TraitInputType;\n options?: string[] | TraitSelectOption[] | TraitOptionMap;\n default?: any;\n inline?: boolean;\n /** When set, this trait is hidden unless the named sibling trait has one of the specified values. */\n showWhen?: TraitShowCondition;\n}\n\n// StyleTrait is the same shape as ComponentTrait — unified type\nexport type StyleTrait = ComponentTrait;\n\nexport interface StyleTraitGroup {\n category: string;\n traits: ComponentTrait[];\n}\n\nexport function generateNodeId(): string {\n return Math.random().toString(36).substr(2, 9);\n}\n\nexport class ComponentConfig {\n public id: string;\n public type: string;\n public selector: string;\n public icon: string;\n public category: string;\n public inputs: Record<string, any>;\n public traits: ComponentTrait[];\n public styleTraits: StyleTraitGroup[];\n /** Layout components (e.g. Section) set this to []. Leaf components leave it undefined.\n * RenderDirective uses `node.children !== undefined` to detect layout components. */\n public children?: ComponentNode[];\n /** When true, the component is excluded from the Components panel drag list.\n * Use for internal-only types (e.g. SliderSlide) that are created programmatically. */\n public hidden?: boolean;\n /** Events this component emits that can be used as interaction triggers.\n * The Interactions panel appends these to the trigger dropdown for nodes of this type. */\n public componentEvents?: ComponentEventDef[];\n /** Imperative methods this component exposes that can be used as interaction actions.\n * The Interactions panel appends these to the action dropdown when targeting this component. */\n public componentMethods?: ComponentMethodDef[];\n\n constructor(type: string, selector: string, icon = 'ph-thin ph-cube', category = 'General') {\n this.id = generateNodeId();\n this.type = type;\n this.selector = selector;\n this.icon = icon;\n this.category = category;\n this.inputs = {};\n this.traits = [];\n this.styleTraits = [];\n }\n\n /** Override specific trait defaults after styleTraits are set.\n * Call this at the end of each subclass constructor. */\n protected applyStyleDefaults(defaults: Record<string, any>): void {\n // Single source of truth for container-type width defaults: when a subclass does\n // not set width explicitly, fill it from the shared DEFAULT_WIDTH_BY_TYPE map — the\n // same map the SSR engine resolves from. See render-parity.md.\n if (defaults['width'] === undefined && DEFAULT_WIDTH_BY_TYPE[this.type] !== undefined) {\n defaults = { ...defaults, width: DEFAULT_WIDTH_BY_TYPE[this.type] };\n }\n for (const group of this.styleTraits) {\n for (const trait of group.traits) {\n if (defaults[trait.name] !== undefined) {\n trait.default = defaults[trait.name];\n }\n }\n }\n }\n}\n\nexport class TraitConfig {\n public name: string;\n public label: string;\n public type: TraitInputType;\n public options?: string[] | TraitSelectOption[] | TraitOptionMap;\n public default?: any;\n public inline?: boolean;\n public showWhen?: TraitShowCondition;\n\n constructor(\n name: string,\n label: string,\n type: TraitInputType,\n options?: string[] | TraitSelectOption[] | TraitOptionMap,\n defaultValue?: any,\n inline?: boolean,\n showWhen?: TraitShowCondition\n ) {\n this.name = name;\n this.label = label;\n this.type = type;\n this.options = options;\n this.default = defaultValue;\n this.inline = inline;\n this.showWhen = showWhen;\n }\n}\n\n// StyleTraitConfig is unified with TraitConfig — single class for both traits and style traits\nexport { TraitConfig as StyleTraitConfig };\n\nexport class GroupStyleConfig {\n public category: string;\n public traits: TraitConfig[];\n\n constructor(category: string, traits: TraitConfig[]) {\n this.category = category;\n this.traits = traits;\n }\n}\n\n// ─── Unit constants ───────────────────────────────────────────────────────────\n\nexport const UNITS_ALL: string[] = ['px', '%', 'rem', 'em', 'vw', 'vh'];\nexport const UNITS_NO_VW: string[] = ['px', '%', 'rem', 'em', 'vh'];\nexport const UNITS_FIXED: string[] = ['px', '%', 'rem', 'em'];\nexport const UNITS_DEG: string[] = ['deg'];\n\n// ─── Shared panel utilities ──────────────────────────────────────────────────\n\nexport function resolveTraitControllerType(type: TraitInputType): string {\n switch (type) {\n case TraitInputType.Number: return 'number';\n case TraitInputType.Select: return 'select';\n case TraitInputType.Checkbox: return 'switch';\n case TraitInputType.Color: return 'colorPicker';\n case TraitInputType.DirectionalSize: return 'directionalSize';\n case TraitInputType.SelectButton: return 'selectButton';\n case TraitInputType.Scrub: return 'scrub';\n case TraitInputType.Range: return 'range';\n case TraitInputType.SectionLabel: return 'sectionLabel';\n case TraitInputType.Icon: return 'icon';\n case TraitInputType.Media: return 'media';\n case TraitInputType.MediaList: return 'mediaList';\n case TraitInputType.FontFamily: return 'select';\n case TraitInputType.GridTemplate: return 'gridTemplate';\n case TraitInputType.Textarea: return 'textarea';\n default: return 'text';\n }\n}\n\nexport function resolveTraitOptions(trait: ComponentTrait): any {\n if (\n trait.type === TraitInputType.Color ||\n trait.type === TraitInputType.DirectionalSize ||\n trait.type === TraitInputType.SelectButton ||\n trait.type === TraitInputType.Scrub ||\n trait.type === TraitInputType.Range ||\n trait.type === TraitInputType.Media\n ) {\n return trait.options;\n }\n if (trait.type === TraitInputType.FontFamily) {\n // FontFamily options are injected dynamically by the style panel via FontManagerService.\n // Return empty array here; the panel overrides this in resolveOptions().\n return [];\n }\n if (trait.type !== TraitInputType.Select) {\n return undefined;\n }\n const opts = (trait.options as any[]) ?? [];\n // Already formatted as {label, value}[]\n if (opts.length > 0 && typeof opts[0] === 'object' && 'label' in opts[0]) {\n return opts;\n }\n return opts.map((option: string) => ({ label: option, value: option }));\n}\n\n// ─── Style Groups ─────────────────────────────────────────────────────────────\n\nconst NON_STATIC_POSITIONS = ['relative', 'absolute', 'fixed', 'sticky'];\n\nexport class PositionGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Position, [\n new TraitConfig('position', 'Position', TraitInputType.Select,\n ['static', 'relative', 'absolute', 'fixed', 'sticky'], 'static'),\n new TraitConfig('top', 'T', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('right', 'R', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('bottom', 'B', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('left', 'L', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('zIndex', 'Z', TraitInputType.Scrub, { min: -99, max: 9999, step: 1, units: [''] }, '0', false,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n ]);\n }\n}\n\n// ─── Layout ───────────────────────────────────────────────────────────────────\n\nexport class LayoutGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Layout, [\n new TraitConfig('display', 'Display', TraitInputType.Select,\n ['block', 'inline', 'inline-block', 'flex', 'grid'], 'block'),\n\n // ── Flex-only ─────────────────────────────────────────────────────\n new TraitConfig('flexDirection', 'Direction', TraitInputType.SelectButton, [\n { value: 'row', label: 'Horizontal', icon: 'ph-thin ph-arrow-right' },\n { value: 'row-reverse', label: 'Horizontal Reversed', icon: 'ph-thin ph-arrow-left' },\n { value: 'column', label: 'Vertical', icon: 'ph-thin ph-arrow-down' },\n { value: 'column-reverse', label: 'Vertical Reversed', icon: 'ph-thin ph-arrow-up' },\n ], 'row', false, { trait: 'display', values: 'flex' }),\n new TraitConfig('flexWrap', 'Flex Wrap', TraitInputType.SelectButton, [\n { value: 'nowrap', label: 'No Wrap', icon: 'ph-thin ph-minus' },\n { value: 'wrap', label: 'Wrap', icon: 'ph-thin ph-arrow-elbow-down-right' },\n { value: 'wrap-reverse', label: 'Wrap Reversed', icon: 'ph-thin ph-arrow-elbow-up-right' },\n ], 'nowrap', false, { trait: 'display', values: 'flex' }),\n\n // ── Shared flex + grid ────────────────────────────────────────────\n new TraitConfig('justifyContent', 'Justify', TraitInputType.SelectButton, [\n { value: 'flex-start', label: 'Start', icon: 'ph-thin ph-align-left' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-horizontal' },\n { value: 'flex-end', label: 'End', icon: 'ph-thin ph-align-right' },\n { value: 'space-between', label: 'Space Between', icon: 'ph-thin ph-distribute-horizontal' },\n { value: 'space-around', label: 'Space Around', icon: 'ph-thin ph-dots-three' },\n { value: 'space-evenly', label: 'Space Evenly', icon: 'ph-thin ph-dots-six' },\n ], 'flex-start', false, { trait: 'display', values: ['flex', 'grid'] }),\n new TraitConfig('alignItems', 'Align Items', TraitInputType.SelectButton, [\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-vertical' },\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-top' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-vertical' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-bottom' },\n ], 'stretch', false, { trait: 'display', values: ['flex', 'grid'] }),\n new TraitConfig('gap', 'Gap', TraitInputType.Scrub,\n { min: 0, max: 200, step: 1, units: UNITS_FIXED }, '0px', false,\n { trait: 'display', values: ['flex', 'grid'] }),\n\n // ── Grid-only ─────────────────────────────────────────────────────\n new TraitConfig('gridTemplateColumns', 'Columns', TraitInputType.GridTemplate,\n undefined, '1fr', false, { trait: 'display', values: 'grid' }),\n new TraitConfig('gridTemplateRows', 'Rows', TraitInputType.GridTemplate,\n undefined, 'auto', false, { trait: 'display', values: 'grid' }),\n new TraitConfig('justifyItems', 'Justify Items', TraitInputType.SelectButton, [\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-horizontal' },\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-left' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-horizontal' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-right' },\n ], 'stretch', false, { trait: 'display', values: 'grid' }),\n new TraitConfig('alignContent', 'Align Content', TraitInputType.SelectButton, [\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-top' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-vertical' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-bottom' },\n { value: 'space-between', label: 'Space Between', icon: 'ph-thin ph-distribute-vertical' },\n { value: 'space-around', label: 'Space Around', icon: 'ph-thin ph-dots-three' },\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-vertical' },\n ], 'stretch', false, { trait: 'display', values: 'grid' }),\n\n // ── Direction (always visible) ────────────────────────────────────\n new TraitConfig('direction', 'Text Direction', TraitInputType.SelectButton, [\n { value: 'ltr', label: 'LTR' },\n { value: 'rtl', label: 'RTL' },\n ], 'ltr'),\n ]);\n }\n}\n\n// ─── Child Layout ───────────────────────────────────────────────────────────\n//\n// How THIS node sits inside its PARENT's flex/grid container. Every trait here is a\n// child-flow property that the style engine routes to the OUTER host element (see\n// StyleRegistryService.OUTER_PROPS) so it acts on the flex/grid item, not the inner div.\n//\n// Visibility is PARENT-scoped (`scope: 'parent'`): the trait shows based on the PARENT's\n// `display`, not this node's own. When the parent is neither flex nor grid, every trait\n// is hidden and the style panel drops the whole (now-empty) group. `align-self`/`order`\n// apply to both flex and grid items; `justify-self`/`grid-column`/`grid-row` are grid-only;\n// `flex-grow`/`flex-shrink`/`flex-basis` are flex-only.\nconst PARENT_FLEX_OR_GRID: TraitShowCondition = { trait: 'display', values: ['flex', 'grid'], scope: 'parent' };\nconst PARENT_FLEX: TraitShowCondition = { trait: 'display', values: 'flex', scope: 'parent' };\nconst PARENT_GRID: TraitShowCondition = { trait: 'display', values: 'grid', scope: 'parent' };\n\nexport class ChildLayoutGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.ChildLayout, [\n // ── Shared flex + grid child ──────────────────────────────────────\n new TraitConfig('alignSelf', 'Align Self', TraitInputType.SelectButton, [\n { value: 'auto', label: 'Auto', icon: 'ph-thin ph-minus' },\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-vertical' },\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-top' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-vertical' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-bottom' },\n ], 'auto', false, PARENT_FLEX_OR_GRID),\n new TraitConfig('order', 'Order', TraitInputType.Scrub,\n { min: -99, max: 99, step: 1, units: [''] }, '0', false, PARENT_FLEX_OR_GRID),\n\n // ── Flex-only child ───────────────────────────────────────────────\n new TraitConfig('flexGrow', 'Grow', TraitInputType.Scrub,\n { min: 0, max: 10, step: 1, units: [''] }, '0', false, PARENT_FLEX),\n new TraitConfig('flexShrink', 'Shrink', TraitInputType.Scrub,\n { min: 0, max: 10, step: 1, units: [''] }, '1', false, PARENT_FLEX),\n new TraitConfig('flexBasis', 'Basis', TraitInputType.Scrub,\n { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', false, PARENT_FLEX),\n\n // ── Grid-only child ───────────────────────────────────────────────\n // Free-text so users can express `auto`, `span 2`, or explicit lines `1 / 3`.\n new TraitConfig('justifySelf', 'Justify Self', TraitInputType.SelectButton, [\n { value: 'auto', label: 'Auto', icon: 'ph-thin ph-minus' },\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-horizontal' },\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-left' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-horizontal' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-right' },\n ], 'auto', false, PARENT_GRID),\n new TraitConfig('gridColumn', 'Column', TraitInputType.Text, undefined, 'auto', false, PARENT_GRID),\n new TraitConfig('gridRow', 'Row', TraitInputType.Text, undefined, 'auto', false, PARENT_GRID),\n ]);\n }\n}\n\n// ─── Size (replaces Dimensions) ───────────────────────────────────────────────\n\nexport class SizeGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Size, [\n new TraitConfig('width', 'W', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('height', 'H', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('minWidth', 'Min W', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('minHeight', 'Min H', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('maxWidth', 'Max W', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('maxHeight', 'Max H', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n // aspect-ratio is a preset ratio (or 'auto') — a Select popup of standard ratios, no units.\n new TraitConfig('aspectRatio', 'Aspect Ratio', TraitInputType.Select,\n ['auto', '1/1', '4/3', '3/2', '16/9', '9/16', '3/4', '2/3', '21/9'], 'auto'),\n // object-fit is a style trait (applies to replaced elements, e.g. images). Lives here so\n // it flows through the CSS engine (styleProps) instead of a per-component inline binding.\n new TraitConfig('objectFit', 'Object Fit', TraitInputType.Select,\n ['cover', 'contain', 'fill', 'none', 'scale-down'], 'cover'),\n // overflow — how content that exceeds the box is handled. `visible` is the CSS initial\n // (dropped as a no-op by the compiler); other values emit. Applies to the node's own box\n // (inner element), so it is NOT an OUTER_PROP.\n new TraitConfig('overflow', 'Overflow', TraitInputType.Select, [\n { label: 'Visible', value: 'visible' },\n { label: 'Hidden', value: 'hidden' },\n { label: 'Scroll', value: 'scroll' },\n { label: 'Auto', value: 'auto' },\n { label: 'Clip', value: 'clip' },\n ], 'visible'),\n ]);\n }\n}\n\n/** @deprecated Use SizeGroupStyleConfig instead. */\nexport class DimensionsGroupStyleConfig extends SizeGroupStyleConfig {}\n\n// ─── Background ───────────────────────────────────────────────────────────────\n\nexport class BackgroundGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Background, [\n new TraitConfig('backgroundColor', 'Background', TraitInputType.Color,\n { allowGradient: true, allowTransparent: true, formats: ['hex', 'rgb', 'hsl', 'transparent'] }, 'transparent'),\n ]);\n }\n}\n\nexport class SpacingGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Spacing, [\n new TraitConfig('margin', 'Margin', TraitInputType.DirectionalSize, {\n allowNegative: true,\n allowLinkedSlider: true,\n slider: { min: 0, max: 200, step: 1 }\n }, '0px 0px 0px 0px'),\n new TraitConfig('padding', 'Padding', TraitInputType.DirectionalSize, {\n allowNegative: false,\n allowLinkedSlider: true,\n slider: { min: 0, max: 200, step: 1 }\n }, '0px 0px 0px 0px')\n ]);\n }\n}\n\nexport class BorderGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Border, [\n new TraitConfig('borderWidth', 'Border Width', TraitInputType.DirectionalSize, {\n units: UNITS_FIXED,\n allowNegative: false,\n allowLinkedSlider: true,\n slider: { min: 0, max: 32, step: 1 }\n }, '0px'),\n new TraitConfig('borderStyle', 'Border Style', TraitInputType.SelectButton, [\n { value: 'solid', icon: 'ph-thin ph-line-segment' },\n { value: 'dashed', icon: 'ph-thin ph-dots-three' },\n { value: 'dotted', icon: 'ph-thin ph-dots-six' },\n ], 'solid'),\n new TraitConfig('borderColor', 'Border Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: false, formats: ['hex', 'rgb', 'hsl'] }, '#CCCCCC'),\n new TraitConfig('borderRadius', 'Border Radius', TraitInputType.DirectionalSize, {\n units: UNITS_FIXED,\n allowNegative: false,\n allowLinkedSlider: true,\n linkByDefault: true,\n slider: { min: 0, max: 120, step: 1 },\n segments: [\n { key: 'top-left', icon: 'ph-arrow-bend-up-left', ariaLabel: 'top left radius' },\n { key: 'top-right', icon: 'ph-arrow-bend-up-right', ariaLabel: 'top right radius' },\n { key: 'bottom-right', icon: 'ph-arrow-bend-down-right', ariaLabel: 'bottom right radius' },\n { key: 'bottom-left', icon: 'ph-arrow-bend-down-left', ariaLabel: 'bottom left radius' }\n ]\n }, '0px')\n ]);\n }\n}\n\nexport class TypographyGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Typography, [\n new TraitConfig('fontFamily', 'Font Family', TraitInputType.FontFamily, [],\n 'Poppins, sans-serif'),\n new TraitConfig('fontSize', 'Font Size', TraitInputType.Scrub,\n { min: 8, max: 200, step: 1, units: UNITS_ALL }, '16px'),\n new TraitConfig('fontWeight', 'Weight', TraitInputType.Scrub,\n { min: 100, max: 900, step: 100, units: [''] }, '400'),\n new TraitConfig('color', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: false, formats: ['hex', 'rgb', 'hsl'] }, '#000000'),\n // Unitless on purpose (`units: ['']`): a unitless line-height inherits as a RATIO — each\n // descendant multiplies it by its OWN font-size — whereas `1.5em`/`24px` inherits a fixed\n // computed length that ignores the child's font-size. min:0 so a line box can be collapsed\n // completely (icons/glyph-only elements), which `0.5` used to block.\n new TraitConfig('lineHeight', 'Line Height', TraitInputType.Scrub,\n { min: 0, max: 5, step: 0.05, units: [''] }, '1.5'),\n new TraitConfig('letterSpacing', 'Spacing', TraitInputType.Scrub,\n { min: -5, max: 50, step: 0.5, units: UNITS_FIXED }, '0px'),\n new TraitConfig('textAlign', '', TraitInputType.SelectButton, [\n { value: 'left', icon: 'ph-thin ph-text-align-left' },\n { value: 'center', icon: 'ph-thin ph-text-align-center' },\n { value: 'right', icon: 'ph-thin ph-text-align-right' },\n { value: 'justify', icon: 'ph-thin ph-text-align-justify' },\n ], 'left'),\n new TraitConfig('fontStyle', '', TraitInputType.SelectButton,\n { items: [{ value: 'italic', icon: 'ph-thin ph-text-italic', label: 'Italic' }], allowEmpty: true, noneValue: 'normal' },\n 'normal', true),\n new TraitConfig('textDecoration', '', TraitInputType.SelectButton,\n { items: [{ value: 'underline', icon: 'ph-thin ph-text-underline', label: 'Underline' }], allowEmpty: true, noneValue: 'none' },\n 'none', true),\n new TraitConfig('_sep_stroke', 'Stroke', TraitInputType.SectionLabel),\n new TraitConfig('WebkitTextStrokeWidth', 'Width', TraitInputType.Scrub,\n { min: 0, max: 10, step: 0.5, units: ['px'] }, '0px', true),\n new TraitConfig('WebkitTextStrokeColor', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: true, formats: ['hex', 'rgb', 'hsl'] }, 'transparent', true),\n ]);\n }\n}\n\nexport class EffectsGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Effects, [\n // ── Visibility ────────────────────────────────────────\n new TraitConfig('opacity', 'Opacity', TraitInputType.Scrub,\n { min: 0, max: 1, step: 0.01, units: [''] }, '1'),\n new TraitConfig('mixBlendMode', 'Blend Mode', TraitInputType.Select, [\n 'normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten',\n 'color-dodge', 'color-burn', 'hard-light', 'soft-light',\n 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity',\n ], 'normal'),\n new TraitConfig('cursor', 'Cursor', TraitInputType.Select, [\n 'auto', 'default', 'pointer', 'text', 'move', 'not-allowed',\n 'grab', 'grabbing', 'crosshair', 'zoom-in', 'zoom-out', 'none',\n ], 'auto'),\n\n // ── Shadow ────────────────────────────────────────────\n new TraitConfig('_sep_shadow', 'Shadow', TraitInputType.SectionLabel),\n new TraitConfig('boxShadow', 'Box Shadow', TraitInputType.Text, undefined, ''),\n new TraitConfig('textShadow', 'Text Shadow', TraitInputType.Text, undefined, ''),\n\n // ── Transform (virtual — composed to CSS transform: …) ─\n new TraitConfig('_sep_transform', 'Transform', TraitInputType.SectionLabel),\n new TraitConfig('translateX', 'TX', TraitInputType.Scrub,\n { min: -2000, max: 2000, step: 1, units: UNITS_ALL }, '0px', true),\n new TraitConfig('translateY', 'TY', TraitInputType.Scrub,\n { min: -2000, max: 2000, step: 1, units: UNITS_ALL }, '0px', true),\n new TraitConfig('scaleX', 'Scale X', TraitInputType.Range,\n { min: 0, max: 3, step: 0.01, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('scaleY', 'Scale Y', TraitInputType.Range,\n { min: 0, max: 3, step: 0.01, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('rotate', 'Rotate', TraitInputType.Scrub,\n { min: -360, max: 360, step: 1, units: UNITS_DEG }, '0deg', true),\n new TraitConfig('skewX', 'Skew X', TraitInputType.Scrub,\n { min: -180, max: 180, step: 1, units: UNITS_DEG }, '0deg', true),\n new TraitConfig('skewY', 'Skew Y', TraitInputType.Scrub,\n { min: -180, max: 180, step: 1, units: UNITS_DEG }, '0deg', true),\n\n // ── Filter (virtual — composed to CSS filter: …) ──────\n new TraitConfig('_sep_filter', 'Filter', TraitInputType.SectionLabel),\n new TraitConfig('filterBlur', 'Blur', TraitInputType.Scrub,\n { min: 0, max: 50, step: 1, units: ['px'] }, '0px', true),\n new TraitConfig('filterHueRotate', 'Hue Rotate', TraitInputType.Scrub,\n { min: 0, max: 360, step: 1, units: UNITS_DEG }, '0deg', true),\n new TraitConfig('filterBrightness', 'Brightness', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('filterContrast', 'Contrast', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('filterSaturate', 'Saturate', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('filterGrayscale', 'Grayscale', TraitInputType.Range,\n { min: 0, max: 1, step: 0.05, showExtremes: false, showValue: true, compact: true }, '0'),\n new TraitConfig('filterSepia', 'Sepia', TraitInputType.Range,\n { min: 0, max: 1, step: 0.05, showExtremes: false, showValue: true, compact: true }, '0'),\n new TraitConfig('filterInvert', 'Invert', TraitInputType.Range,\n { min: 0, max: 1, step: 0.05, showExtremes: false, showValue: true, compact: true }, '0'),\n\n // ── Backdrop filter (virtual — composed to CSS backdrop-filter: …)\n new TraitConfig('_sep_backdrop', 'Backdrop', TraitInputType.SectionLabel),\n new TraitConfig('backdropBlur', 'Blur', TraitInputType.Scrub,\n { min: 0, max: 50, step: 1, units: ['px'] }, '0px', true),\n new TraitConfig('backdropBrightness', 'Brightness', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1', true),\n new TraitConfig('backdropContrast', 'Contrast', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1', true),\n new TraitConfig('backdropSaturate', 'Saturate', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1', true),\n\n // ── Clip (clip-path — mask the node to a shape) ───────────\n new TraitConfig('_sep_clip', 'Clip', TraitInputType.SectionLabel),\n new TraitConfig('clipPath', 'Shape', TraitInputType.Select, [\n { label: 'None', value: 'none' },\n { label: 'Circle', value: 'circle(50%)' },\n { label: 'Ellipse', value: 'ellipse(50% 40%)' },\n { label: 'Inset', value: 'inset(10%)' },\n { label: 'Rounded inset', value: 'inset(10% round 16px)' },\n { label: 'Triangle', value: 'polygon(50% 0%, 0% 100%, 100% 100%)' },\n { label: 'Diamond', value: 'polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)' },\n { label: 'Hexagon', value: 'polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%)' },\n { label: 'Chevron', value: 'polygon(0 0, 75% 0, 100% 50%, 75% 100%, 0 100%, 25% 50%)' },\n ], 'none'),\n\n // ── Transition (virtual — composed to CSS transition: all …) ──\n new TraitConfig('_sep_transition', 'Transition', TraitInputType.SectionLabel),\n new TraitConfig('transitionDuration', 'Duration', TraitInputType.Scrub,\n { min: 0, max: 3000, step: 50, units: ['ms'] }, '0ms', true),\n new TraitConfig('transitionDelay', 'Delay', TraitInputType.Scrub,\n { min: 0, max: 2000, step: 50, units: ['ms'] }, '0ms', true),\n new TraitConfig('transitionTimingFunction', 'Easing', TraitInputType.Select, [\n 'ease', 'linear', 'ease-in', 'ease-out', 'ease-in-out',\n ], 'ease'),\n ]);\n }\n}\n\nexport class ListGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.List, [\n new TraitConfig('listStyleType', 'Marker Style', TraitInputType.Select, [\n { label: 'None', value: 'none' },\n { label: 'Disc', value: 'disc' },\n { label: 'Circle', value: 'circle' },\n { label: 'Square', value: 'square' },\n { label: 'Decimal', value: 'decimal' },\n { label: 'Lower Alpha', value: 'lower-alpha' },\n { label: 'Upper Alpha', value: 'upper-alpha' },\n { label: 'Lower Roman', value: 'lower-roman' },\n { label: 'Upper Roman', value: 'upper-roman' },\n ], 'disc'),\n new TraitConfig('listStylePosition', 'Marker Position', TraitInputType.SelectButton, [\n { value: 'outside', label: 'Outside' },\n { value: 'inside', label: 'Inside' },\n ], 'outside'),\n new TraitConfig('columnCount', 'Columns', TraitInputType.Scrub,\n { min: 1, max: 6, step: 1, units: [''] }, '1'),\n new TraitConfig('columnGap', 'Column Gap', TraitInputType.Scrub,\n { min: 0, max: 200, step: 1, units: UNITS_FIXED }, '0px'),\n new TraitConfig('_sep_marker', 'Marker', TraitInputType.SectionLabel),\n new TraitConfig('markerColor', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: true, formats: ['hex', 'rgb', 'hsl', 'transparent'] }, ''),\n new TraitConfig('markerFontSize', 'Size', TraitInputType.Scrub,\n { min: 4, max: 100, step: 1, units: UNITS_FIXED }, ''),\n ]);\n }\n}\n\n/**\n * Returns a fresh set of all 8 style-group configs in canonical display order.\n * Every call produces new TraitConfig instances so different component nodes\n * never share mutable state.\n */\nexport function buildFullStyleTraits(): GroupStyleConfig[] {\n return [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new ChildLayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n}\n\nexport function flattenSchemaFields(\n properties: Record<string, any>,\n prefix = ''\n): { label: string; value: string }[] {\n const result: { label: string; value: string }[] = [];\n\n for (const [key, field] of Object.entries(properties)) {\n const fullPath = prefix ? `${prefix}.${key}` : key;\n\n if (field.type === 'object' && field.properties) {\n result.push(...flattenSchemaFields(field.properties, fullPath));\n } else {\n result.push({ label: fullPath, value: fullPath });\n }\n }\n\n return result;\n}\n\n/**\n * The ARRAY (repeatable) properties of a schema — used by the Bindings panel to auto-suggest which\n * property of a SINGLE resource a Repeater can iterate over (e.g. `product.gallery`). A field is\n * repeatable when its schema `type` is `embedded`/`array` (an embedded list) or it is a MANY\n * relation (`rel.type` contains \"many\", case-insensitive). Top-level only — the repeat target is a\n * property of the resource, not a deep leaf.\n */\nexport function arraySchemaFields(properties: Record<string, any>): { label: string; value: string }[] {\n const out: { label: string; value: string }[] = [];\n for (const [key, field] of Object.entries(properties ?? {})) {\n const type = (field?.type ?? '').toString().toLowerCase();\n const relType = (field?.rel?.type ?? '').toString().toLowerCase();\n if (type === 'embedded' || type === 'array' || (type === 'rel' && relType.includes('many'))) {\n out.push({ label: key, value: key });\n }\n }\n return out;\n}\n\n/**\n * Describe the ITEM shape of an array PROPERTY, straight from the schema — the authoritative source\n * (a resolved sample may be missing, or ambiguous). Given a resource's schema `properties` and the\n * dot-path to an array field (e.g. `gallery` or `info.items`):\n * - **object item** → its primitive leaf fields (flattened): `[{label:'url',value:'url'}, …]`.\n * - **primitive item** (`string[]`/`number[]`) → `isPrimitive:true` (caller offers \"(the item value)\").\n * - **can't tell** (many-relation whose items are related docs, or path not found) → both empty, so\n * the caller falls back to a resolved sample.\n * JSON-schema arrays store the item schema under `.items`; embedded objects under `.properties`.\n */\nexport function arrayItemSchemaFields(\n properties: Record<string, any>,\n arrayPath: string,\n): { fields: { label: string; value: string }[]; isPrimitive: boolean } {\n const parts = (arrayPath ?? '').split('.').filter(Boolean);\n let field: any = undefined;\n let cursor: any = properties ?? {};\n for (const part of parts) {\n field = cursor?.[part];\n if (!field) return { fields: [], isPrimitive: false };\n cursor = field.properties ?? field.items?.properties ?? {};\n }\n if (!field) return { fields: [], isPrimitive: false };\n\n const itemProps = field.items?.properties ?? (field.type === 'embedded' ? field.properties : undefined);\n if (itemProps && Object.keys(itemProps).length) {\n return { fields: flattenSchemaFields(itemProps), isPrimitive: false };\n }\n // Many-relation: items are related documents — needs the related schema, so let the caller sample.\n const relType = (field.rel?.type ?? '').toString().toLowerCase();\n if (field.type === 'rel' || relType.includes('many')) return { fields: [], isPrimitive: false };\n // Otherwise a primitive-item array (string[]/number[]/…): the item is bound as its own value.\n return { fields: [], isPrimitive: true };\n}","import { ComponentNode } from '../models/component.model';\n\nconst freshId = () => Math.random().toString(36).substr(2, 9);\n\n/**\n * Assign fresh ids to a cloned ComponentNode subtree AND remap intra-subtree references to the\n * new ids. Used by every author-time clone path (duplicate, paste, block/external drop) so a copied\n * structure stays self-consistent.\n *\n * Absolute node-id references that break under duplication if left unmapped:\n * - `stateTriggers[state]` — the trigger-hover target (see style-engine.md → Targeted states)\n * - interaction `action.target` / `reverseActions.target`\n * A reference pointing OUTSIDE the cloned subtree (id not in the map) is left untouched — the copy\n * intentionally still points at the external node.\n *\n * `styleId` strategy:\n * - `'clear'` (default) — drop styleId so the clone OWNS its own CSS rule (independent copy).\n * - `'regenerate'` — keep a styleId but give it a fresh value (legacy builder.component path).\n */\nexport function regenerateNodeIds(root: ComponentNode, opts: { styleId?: 'clear' | 'regenerate' } = {}): void {\n const idMap = new Map<string, string>();\n const assign = (node: ComponentNode): void => {\n const oldId = node.id;\n node.id = freshId();\n if (opts.styleId === 'regenerate') {\n if (node.styleId) node.styleId = freshId();\n } else {\n node.styleId = undefined;\n }\n if (oldId) idMap.set(oldId, node.id);\n (node.children || []).forEach(assign);\n };\n assign(root);\n remapNodeReferences(root, idMap);\n}\n\n/** Remap absolute node-id references inside a subtree to their new ids (per `idMap`). Ids not in\n * the map (references to nodes outside the cloned subtree) are preserved. */\nexport function remapNodeReferences(node: ComponentNode, idMap: Map<string, string>): void {\n const triggers = node.stateTriggers as Record<string, string> | undefined;\n if (triggers) {\n for (const state of Object.keys(triggers)) {\n const mapped = idMap.get(triggers[state]);\n if (mapped) triggers[state] = mapped;\n }\n }\n for (const interaction of node.interactions || []) {\n const actions = [...(interaction.actions || []), ...((interaction as any).reverseActions || [])];\n for (const action of actions) {\n if (action?.target && action.target !== 'self') {\n const mapped = idMap.get(action.target);\n if (mapped) action.target = mapped;\n }\n }\n }\n (node.children || []).forEach(child => remapNodeReferences(child, idMap));\n}\n","import { ComponentNode } from './component.model';\n\n/**\n * Locate a node within a forest (array of root nodes + their descendants) by\n * reference identity. Returns the parent array holding the node and its index,\n * or `null` if the node is not present.\n *\n * Reference-based to match the rest of the builder tree operations, which pass\n * the live `ComponentNode` object around (see `findNodeInTree`).\n */\nexport function findNodeLocation(\n roots: ComponentNode[],\n target: ComponentNode,\n): { parent: ComponentNode[]; index: number } | null {\n for (let i = 0; i < roots.length; i++) {\n if (roots[i] === target) {\n return { parent: roots, index: i };\n }\n const kids = roots[i].children;\n if (kids) {\n const found = findNodeLocation(kids, target);\n if (found) return found;\n }\n }\n return null;\n}\n\n/**\n * Wrap `target` inside `wrapper`, in place, within the forest it already lives in.\n *\n * The wrapper replaces the target at its original position and takes the target\n * as its only child. **Context is preserved** — the operation never moves the\n * node between the page and global trees; the caller passes the forest the node\n * lives in (page layout OR global elements), and the surgery stays inside it.\n *\n * Global flags (`isGlobal`/`globalPosition`) are carried ONLY by the top-level\n * node of the global forest. When wrapping such a node, those flags transfer to\n * the wrapper — which becomes the new top-level global node — and are cleared on\n * the now-inner node, so the element keeps rendering in its global slot. Wrapping\n * anything else (a page node, or a child nested inside a global element) leaves\n * all global flags untouched.\n *\n * @returns the wrapper on success, or `null` if the target was not found (in\n * which case nothing is mutated).\n */\nexport function wrapNode(\n roots: ComponentNode[],\n target: ComponentNode,\n wrapper: ComponentNode,\n): ComponentNode | null {\n const loc = findNodeLocation(roots, target);\n if (!loc) return null;\n\n if (target.isGlobal) {\n wrapper.isGlobal = true;\n wrapper.globalPosition = target.globalPosition;\n target.isGlobal = false;\n target.globalPosition = undefined;\n }\n\n wrapper.children = [target];\n loc.parent.splice(loc.index, 1, wrapper);\n return wrapper;\n}\n","import { Injectable } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\n\nexport enum PanelEventTypes {\n ELEMENT_SELECT = 'elementselect',\n ELEMENT_DESELECT = 'elementdeselect',\n PANEL_SELECTED = 'panelselect',\n PANEL_OPEN = 'panelopen',\n PANEL_CLOSE = 'panelclose',\n BINDING_CHANGED = 'bindingchanged',\n NODE_RENDERED = 'noderendered',\n /** Open the Style panel in preset-edit mode for the given preset ID. */\n PRESET_EDIT = 'presetedit',\n /** Fired after a preset is created, updated, or deleted so panels refresh their list. */\n PRESETS_CHANGED = 'presetschanged',\n /** Fired when a linked symbol instance's styles change — propagates to all instances. */\n SYMBOLS_CHANGED = 'symbolschanged',\n /** Fired on every structural or style mutation — used by BuilderHistoryService to snapshot. */\n LAYOUT_CHANGED = 'layoutchanged',\n /** Open the Interactions panel in preset-edit mode for the given preset ID. */\n INTERACTION_PRESET_EDIT = 'interactionpresetedit',\n /** Fired after an interaction preset is created, updated, or deleted so panels refresh. */\n INTERACTION_PRESETS_CHANGED = 'interactionpresetschanged',\n /** Open the Interactions panel and EXPAND a specific interaction for editing (data = interaction\n * id). Emitted when the overlay interaction badge is clicked so that badge → \"edit THIS\n * interaction\", without firing the element's (live) animation. */\n INTERACTION_EDIT = 'interactionedit',\n /** A node's `interactions` were added/removed/edited. Carries `{ node }`.\n * Repeater/Slider listen so their PREVIEW CLONES are re-cloned with the new interactions —\n * clones are attached by ELEMENT at render time, so without this a new interaction only starts\n * working after a save + reload. */\n INTERACTION_CHANGED = 'interactionchanged',\n}\n\nexport interface PanelEvent {\n type: PanelEventTypes;\n data: any;\n}\n\n@Injectable()\nexport class PanelEventService {\n private panelEventSubject = new Subject<PanelEvent>();\n\n subscribe(next: (panelEvent: PanelEvent) => void): Subscription {\n return this.panelEventSubject.asObservable().subscribe(next);\n }\n\n emit(type: PanelEventTypes, data?: any): void {\n this.panelEventSubject.next({ type, data });\n }\n}","export enum PanelTypes {\n BINDINGS = 'Bindings',\n STYLES = 'Styles',\n TRAITS = 'Traits',\n PAGE = 'Page',\n INTERACTIONS = 'Interactions',\n}\n\n// ── Route animation presets ──────────────────────────────\nexport type RouteAnimationPreset =\n | 'none'\n | 'fade'\n | 'slideUp'\n | 'slideDown'\n | 'zoomIn'\n | 'zoomOut'\n | 'blurIn'\n | 'flip';\n\nexport const ROUTE_ANIMATION_OPTIONS: { label: string; value: RouteAnimationPreset; description: string }[] = [\n { value: 'none', label: 'None', description: 'No animation' },\n { value: 'fade', label: 'Fade', description: 'Opacity cross-dissolve' },\n { value: 'slideUp', label: 'Slide Up', description: 'Rise from below + fade' },\n { value: 'slideDown', label: 'Slide Down', description: 'Drop from above + fade' },\n { value: 'zoomIn', label: 'Zoom In', description: 'Scale up from 96% + fade' },\n { value: 'zoomOut', label: 'Zoom Out', description: 'Scale down from 104% + fade' },\n { value: 'blurIn', label: 'Blur', description: 'Unblur + fade' },\n { value: 'flip', label: 'Flip', description: 'Perspective tilt + fade' },\n];\n\nexport const EASING_OPTIONS: { label: string; value: string }[] = [\n // Strong symmetric in-out — the default. Slow to leave, quick through the middle, gentle to\n // settle; this is what makes a long page transition read as smooth rather than sluggish.\n { label: 'Smooth (default)', value: 'cubic-bezier(0.76, 0, 0.24, 1)' },\n { label: 'Expo Out', value: 'cubic-bezier(0.16, 1, 0.3, 1)' },\n { label: 'Ease', value: 'ease' },\n { label: 'Ease In', value: 'ease-in' },\n { label: 'Ease Out', value: 'ease-out' },\n { label: 'Ease In Out', value: 'ease-in-out' },\n { label: 'Linear', value: 'linear' },\n { label: 'Spring', value: 'cubic-bezier(0.34, 1.56, 0.64, 1)' },\n];\n\n// ── Page-level settings ──────────────────────────────────\nexport interface PageStyleSettings {\n backgroundColor: string;\n backgroundType: 'solid' | 'gradient' | 'image';\n backgroundGradient: string;\n backgroundImage: string;\n fontFamily: string;\n textColor: string;\n maxWidth: string;\n}\n\nexport interface PageScrollSettings {\n enabled: boolean;\n lerp: number;\n wheelMultiplier: number;\n touchMultiplier: number;\n direction: 'vertical' | 'horizontal';\n infinite: boolean;\n}\n\nexport interface PageRouteAnimationSettings {\n /** @deprecated legacy single-page enter preset — kept for back-compat migration to `transition`. */\n enter: RouteAnimationPreset;\n /** @deprecated legacy single-page leave preset — kept for back-compat migration to `transition`. */\n leave: RouteAnimationPreset;\n duration: number;\n easing: string;\n /**\n * Cinematic paired out/in transition preset id (see PAGE_TRANSITION_PRESETS in @vectoriox/iox-ui).\n * When set it supersedes the legacy `enter`/`leave` fields.\n */\n transition?: string;\n /** Container perspective (px) for 3D transitions. Falls back to the preset / global default. */\n perspective?: number;\n /** Panel colour for the curtain-* (overlay) presets. Defaults to the page's own background. */\n curtainColor?: string;\n}\n\n// Legacy → cinematic transition migration lives in @vectoriox/iox-ui alongside the preset catalog:\n// import { legacyEnterToTransition, effectiveTransitionId } from '@vectoriox/iox-ui';\n\nexport interface PageSettings {\n style: PageStyleSettings;\n scroll: PageScrollSettings;\n routeAnimation: PageRouteAnimationSettings;\n}\n\nexport function defaultPageSettings(): PageSettings {\n return {\n style: {\n backgroundColor: '#ffffff',\n backgroundType: 'solid',\n backgroundGradient: 'linear-gradient(135deg, #ffffff 0%, #f0f0f0 100%)',\n backgroundImage: '',\n fontFamily: 'Poppins, sans-serif',\n textColor: '#000000',\n maxWidth: '1440px',\n },\n scroll: {\n enabled: true,\n lerp: 0.1,\n wheelMultiplier: 1,\n touchMultiplier: 1,\n direction: 'vertical',\n infinite: false,\n },\n routeAnimation: {\n enter: 'fade',\n leave: 'fade',\n // Defaults mirror DEFAULT_PAGE_TRANSITION* in @vectoriox/iox-ui: the parallax look at a\n // long duration with the smooth in-out curve.\n transition: 'parallax-up',\n duration: 1500,\n easing: 'cubic-bezier(0.76, 0, 0.24, 1)',\n },\n };\n}\n\nexport enum ToolbarAction {\n SelectParent = 'select-parent',\n Duplicate = 'duplicate',\n Delete = 'delete',\n Play = 'play',\n SaveAsBlock = 'save-as-block',\n MakeGlobal = 'make-global',\n RemoveGlobal = 'remove-global',\n EditPreset = 'edit-preset',\n DetachSymbol = 'detach-symbol',\n ResyncSymbol = 'resync-symbol',\n EditInteractionPreset = 'edit-interaction-preset',\n CopyPreset = 'copy-preset',\n PastePreset = 'paste-preset',\n CopyInteractionPreset = 'copy-interaction-preset',\n PasteInteractionPreset = 'paste-interaction-preset',\n Copy = 'copy',\n Paste = 'paste',\n AddSlide = 'add-slide',\n Wrap = 'wrap',\n}\n\nexport enum NodeAction {\n Delete = 'delete',\n Duplicate = 'duplicate',\n}\n\nexport enum BuilderMode {\n Select = 'select',\n Style = 'style',\n Pan = 'pan'\n}\n\nexport enum DeviceMode {\n Desktop = 'desktop',\n Tablet = 'tablet',\n Mobile = 'mobile',\n}\n\nexport interface DeviceOption {\n mode: DeviceMode;\n label: string;\n icon: string;\n width: number;\n /** Simulated browser viewport height in CSS px. */\n height: number;\n}\n\nexport const DEVICE_OPTIONS: DeviceOption[] = [\n { mode: DeviceMode.Desktop, label: 'Desktop', icon: 'ph-thin ph-desktop', width: 1440, height: 900 },\n { mode: DeviceMode.Tablet, label: 'Tablet', icon: 'ph-thin ph-device-tablet', width: 768, height: 1024 },\n { mode: DeviceMode.Mobile, label: 'Mobile', icon: 'ph-thin ph-device-mobile', width: 375, height: 812 },\n];\n\nexport interface ZoomOption {\n label: string;\n value: number | 'fit';\n}\n\nexport const ZOOM_OPTIONS: ZoomOption[] = [\n { label: '25%', value: 25 },\n { label: '50%', value: 50 },\n { label: '75%', value: 75 },\n { label: '100%', value: 100 },\n { label: 'Fit', value: 'fit' },\n];\n\nexport interface ScreenWidthOption {\n label: string;\n width: number;\n}\n\nexport const SCREEN_WIDTH_OPTIONS: ScreenWidthOption[] = [\n { label: '1280', width: 1280 },\n { label: '1440', width: 1440 },\n { label: '1920', width: 1920 },\n { label: '2560', width: 2560 },\n];","import { Injectable, Type } from '@angular/core';\n\n@Injectable()\nexport class ComponentRegistryService {\n private components: Record<string, { type: string; component: Type<any>; config: any }> = {};\n\n getComponent(type: string): Type<any> | null {\n return this.components[type]?.component ?? null;\n }\n\n hasComponent(type: string): boolean {\n return !!this.components[type];\n }\n\n createConfig(type: string): any | null {\n const configType = this.components[type]?.config;\n return configType ? new configType() : null;\n }\n\n register(type: string, component: Type<any>, config: any): void {\n this.components[type] = { type, component, config };\n }\n\n getAll() {\n return Object.values(this.components);\n }\n}","import { ComponentRef, Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nimport { ComponentNode } from '../models/component.model';\nimport { BuilderMode, ToolbarAction } from '../panels/panel.model';\n\nexport interface OverlayBoxSpacing {\n top: number; right: number; bottom: number; left: number;\n}\n\nexport interface OverlayBoxModel {\n margin: OverlayBoxSpacing;\n padding: OverlayBoxSpacing;\n border: OverlayBoxSpacing;\n}\n\nexport interface OverlayEntry {\n element: HTMLElement;\n componentName: string;\n boxModel?: OverlayBoxModel; // populated for hover only\n mode: BuilderMode;\n node?: ComponentNode;\n componentRef?: ComponentRef<any>;\n}\n\nexport { ToolbarAction } from '../panels/panel.model';\n\nexport interface NodeRef {\n element: HTMLElement;\n componentRef: ComponentRef<any>;\n}\n\n@Injectable()\nexport class OverlayService {\n private hoverSubject = new BehaviorSubject<OverlayEntry | null>(null);\n private selectSubject = new BehaviorSubject<OverlayEntry | null>(null);\n private nodeMap = new Map<ComponentNode, NodeRef>();\n\n public hover$ = this.hoverSubject.asObservable();\n public select$ = this.selectSubject.asObservable();\n\n private containerElement: HTMLElement | null = null;\n private scrollContainerElement: HTMLElement | null = null;\n private intersectionRootElement: HTMLElement | null = null;\n\n /** Emits the scroll container element whenever it is registered. */\n public scrollContainer$ = new Subject<HTMLElement>();\n\n /** Emits cursor coords when a canvas element is right-clicked. */\n public contextMenu$ = new Subject<{ x: number; y: number }>();\n\n triggerContextMenu(x: number, y: number): void {\n this.contextMenu$.next({ x, y });\n }\n\n setContainer(container: HTMLElement | null): void {\n this.containerElement = container;\n }\n\n getContainer(): HTMLElement | null {\n return this.containerElement;\n }\n\n setScrollContainer(el: HTMLElement | null): void {\n this.scrollContainerElement = el;\n if (el) { this.scrollContainer$.next(el); }\n }\n\n getScrollContainer(): HTMLElement | null {\n return this.scrollContainerElement;\n }\n\n /** The clipping container used as IntersectionObserver root in builder mode (.preview-scroll). */\n setIntersectionRoot(el: HTMLElement | null): void {\n this.intersectionRootElement = el;\n }\n\n getIntersectionRoot(): HTMLElement | null {\n return this.intersectionRootElement;\n }\n\n /**\n * Resolve the styled element (the one carrying `.iox-node-{id}` — where padding/margin/size live).\n * Directive-host components (Image/Heading/Container/Section/…) put `iox-node-{id}` on the HOST\n * itself, so the host IS the styled element. Legacy wrapper components (Card/Repeater/Slider) put\n * it on the first child. Prefer the host when it's the styled element; fall back to the first\n * child otherwise. (Before this, directive-host containers outlined their first child — e.g. a\n * container's outline landed on the image inside it, desyncing from Moveable's resize handles.)\n */\n getStyledElement(host: HTMLElement): HTMLElement {\n for (let i = 0; i < host.classList.length; i++) {\n if (host.classList[i].startsWith('iox-node-')) return host;\n }\n return (host.firstElementChild as HTMLElement) || host;\n }\n\n // ── Node → Element registry ──────────────────────────────\n registerNode(node: ComponentNode, element: HTMLElement, componentRef: ComponentRef<any>): void {\n this.nodeMap.set(node, { element, componentRef });\n }\n\n unregisterNode(node: ComponentNode): void {\n this.nodeMap.delete(node);\n }\n\n getNodeRef(node: ComponentNode): NodeRef | undefined {\n return this.nodeMap.get(node);\n }\n\n /** Return all registered node → ref entries. */\n getAllNodeEntries(): IterableIterator<[ComponentNode, NodeRef]> {\n return this.nodeMap.entries();\n }\n\n /** Find a registered node whose host element matches the given DOM element. */\n findNodeByElement(element: HTMLElement): { node: ComponentNode; ref: NodeRef } | undefined {\n for (const [node, ref] of this.nodeMap) {\n if (ref.element === element) {\n return { node, ref };\n }\n }\n return undefined;\n }\n\n /**\n * Walk up the DOM from a node's registered host element to the nearest ANCESTOR\n * element that is itself a registered node. Used to resolve the immediate parent\n * for relational style states (e.g. parent-hover). Returns undefined for root nodes.\n */\n getParentEntry(node: ComponentNode): { node: ComponentNode; ref: NodeRef } | undefined {\n const ref = this.nodeMap.get(node);\n if (!ref) return undefined;\n let el = ref.element.parentElement;\n while (el) {\n const match = this.findNodeByElement(el);\n if (match) return match;\n el = el.parentElement;\n }\n return undefined;\n }\n\n setHover(element: HTMLElement, componentName: string, mode: BuilderMode): void {\n if (this.selectSubject.getValue()?.element === element) return;\n this.hoverSubject.next({ element, componentName, boxModel: this.buildBoxModel(element), mode });\n }\n\n clearHover(): void {\n this.hoverSubject.next(null);\n }\n\n setSelect(element: HTMLElement, componentName: string, mode: BuilderMode, node?: ComponentNode, componentRef?: ComponentRef<any>): void {\n this.hoverSubject.next(null);\n this.selectSubject.next({ element, componentName, mode, node, componentRef });\n }\n\n clearSelect(): void {\n this.selectSubject.next(null);\n }\n\n refreshSelect(): void {\n const current = this.selectSubject.getValue();\n if (!current) return;\n this.selectSubject.next({ ...current });\n }\n\n /** Lightweight swap for drag-preview tracking. */\n updateSelectElement(element: HTMLElement): void {\n const current = this.selectSubject.getValue();\n if (!current) return;\n this.selectSubject.next({ ...current, element });\n }\n\n buildBoxModel(host: HTMLElement): OverlayBoxModel {\n const inner = this.getStyledElement(host);\n // Margin lives on the wrapper div (host.parentElement) — iox-outer-{id} is\n // applied there so it participates in the parent flex layout.\n const wrapper = (host.parentElement as HTMLElement) || host;\n const si = window.getComputedStyle(inner);\n const sw = window.getComputedStyle(wrapper);\n const px = (v: string) => { const n = Number.parseFloat(v); return Number.isFinite(n) ? n : 0; };\n return {\n margin: { top: px(sw.marginTop), right: px(sw.marginRight), bottom: px(sw.marginBottom), left: px(sw.marginLeft) },\n padding: { top: px(si.paddingTop), right: px(si.paddingRight), bottom: px(si.paddingBottom), left: px(si.paddingLeft) },\n border: { top: px(si.borderTopWidth), right: px(si.borderRightWidth), bottom: px(si.borderBottomWidth), left: px(si.borderLeftWidth) },\n };\n }\n\n}","import { Injectable } from '@angular/core';\n\nimport { IoxSymbol } from '../models/component.model';\n\n/**\n * SymbolRegistryService — in-memory store for org-level symbols.\n *\n * Loaded once per page by PageUiComponent alongside the page layout.\n * Scoped to PageUiComponent.providers[] via IoxBuilderModule — one registry per builder instance.\n */\n@Injectable()\nexport class SymbolRegistryService {\n private symbols = new Map<string, IoxSymbol>();\n /** symbolIds that have a live reusable block in the DB — used to guard isDetachedSymbol. */\n private blockSymbolIds = new Set<string>();\n\n setSymbols(symbols: IoxSymbol[]): void {\n this.symbols.clear();\n for (const s of symbols) {\n this.symbols.set(s.id, s);\n }\n }\n\n getSymbol(id: string): IoxSymbol | undefined {\n return this.symbols.get(id);\n }\n\n getAll(): IoxSymbol[] {\n return Array.from(this.symbols.values());\n }\n\n upsert(symbol: IoxSymbol): void {\n this.symbols.set(symbol.id, symbol);\n }\n\n remove(id: string): void {\n this.symbols.delete(id);\n }\n\n /** Set the symbolIds that have a live reusable block. Called on page load. */\n setBlockSymbolIds(ids: Set<string>): void {\n this.blockSymbolIds = new Set(ids);\n }\n\n /** Returns true only when the symbol has a live backing reusable block. */\n isBlockSymbol(id: string): boolean {\n return this.blockSymbolIds.has(id);\n }\n\n /** Remove a symbolId from the block-backed set (called when a block is deleted). */\n removeBlockSymbolId(id: string): void {\n this.blockSymbolIds.delete(id);\n }\n}\n","import { ChangeDetectorRef, Injectable } from '@angular/core';\nimport interact from 'interactjs';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nimport { ComponentNode } from '../models/component.model';\nimport { regenerateNodeIds } from '../utils/clone-ids.util';\nimport { ComponentRegistryService } from './component-registry.service';\nimport { SymbolRegistryService } from './symbol-registry.service';\n\nexport interface DragPayload {\n type: 'internal' | 'external';\n data: ComponentNode | string;\n sourceId: string | null;\n sourceIndex: number;\n}\n\nexport interface IoxDropEvent {\n payload: DragPayload;\n targetId: string;\n insertIndex: number;\n}\n\nfunction deepCloneNode(node: ComponentNode): ComponentNode {\n const clone: ComponentNode = JSON.parse(JSON.stringify(node));\n // Fresh ids + remap intra-subtree references (stateTriggers, interaction targets) so a cloned\n // structure stays self-consistent — e.g. trigger-hover keeps pointing at the clone's own trigger.\n regenerateNodeIds(clone);\n return clone;\n}\n\n@Injectable()\nexport class DragEngineService {\n\n constructor(\n private registry: ComponentRegistryService,\n private symbolRegistry: SymbolRegistryService,\n ) {}\n\n // ── Shared drop handler — used by all layout components ───────────────────\n\n handleDrop(\n children: ComponentNode[],\n event: IoxDropEvent,\n dropListId: string,\n cdr: ChangeDetectorRef,\n afterDrop?: () => void,\n ): void {\n const { payload, insertIndex } = event;\n\n if (payload.type === 'external') {\n const data = payload.data as any;\n if (typeof data === 'string') {\n // Built-in component type — create from registry.\n const config = this.registry.createConfig(data);\n if (config) {\n children.splice(insertIndex, 0, config);\n cdr.detectChanges();\n this.dropComplete$.next(config);\n }\n } else {\n // Full block object { node, symbolId, syncInstances } or bare ComponentNode.\n // Prefer symbol.node (always up-to-date) over block.node (original snapshot).\n const symbolNode = data.symbolId ? this.symbolRegistry.getSymbol(data.symbolId)?.node : null;\n const nodeData: ComponentNode = (symbolNode ?? data.node ?? data) as ComponentNode;\n const cloned = deepCloneNode(nodeData);\n if (data.syncInstances && data.symbolId) {\n (cloned as any).symbolId = data.symbolId;\n }\n children.splice(insertIndex, 0, cloned);\n cdr.detectChanges();\n this.dropComplete$.next(cloned);\n }\n afterDrop?.();\n return;\n }\n\n const item = payload.data as ComponentNode;\n\n if (payload.sourceId !== dropListId) {\n const sourceData = payload.sourceId ? this.getData(payload.sourceId) : null;\n if (sourceData) {\n const srcIdx = sourceData.indexOf(item);\n if (srcIdx !== -1) {\n sourceData.splice(srcIdx, 1);\n this.getCdr(payload.sourceId!)?.detectChanges();\n }\n children.splice(insertIndex, 0, item);\n cdr.detectChanges();\n this.dropComplete$.next(item);\n } else {\n // Source not in the drop-zone registry → came from an external panel\n // (e.g. the built-in blocks panel stores one pre-built node object and\n // reuses it across drags). Deep-clone with fresh IDs so each drop\n // produces a fully independent node, preventing shared CSS rules.\n // The panel may supply a bare ComponentNode OR a block wrapper object\n // { node, symbolId, syncInstances } — extract the node first.\n // Prefer symbol.node (always up-to-date) over block.node (original snapshot).\n const blk = item as any;\n const symbolNode2 = blk.symbolId ? this.symbolRegistry.getSymbol(blk.symbolId)?.node : null;\n const nodeData: ComponentNode = (symbolNode2 ?? blk.node ?? item) as ComponentNode;\n const cloned = deepCloneNode(nodeData);\n if (blk.syncInstances && blk.symbolId) {\n (cloned as any).symbolId = blk.symbolId;\n }\n children.splice(insertIndex, 0, cloned);\n cdr.detectChanges();\n this.dropComplete$.next(cloned);\n }\n afterDrop?.();\n return;\n }\n\n const currentIdx = children.indexOf(item);\n if (currentIdx !== -1) {\n const adjustedIdx = insertIndex > currentIdx ? insertIndex - 1 : insertIndex;\n children.splice(currentIdx, 1);\n children.splice(adjustedIdx, 0, item);\n cdr.detectChanges();\n this.dropComplete$.next(item);\n }\n afterDrop?.();\n }\n\n // ── Drop-zone registry ────────────────────────────────────\n\n private ids: string[] = [];\n private elMap = new Map<string, HTMLElement>();\n private dataMap = new Map<string, any[]>();\n private cdrMap = new Map<string, ChangeDetectorRef>();\n private dropCbMap = new Map<string, (e: IoxDropEvent) => void>();\n private postDropMap = new Map<string, () => void>();\n\n public readonly ids$ = new BehaviorSubject<string[]>([]);\n public readonly isDragging$ = new BehaviorSubject<boolean>(false);\n public readonly deepTarget$ = new BehaviorSubject<string | null>(null);\n /** Emits the dropped/inserted ComponentNode after every successful drop. */\n public readonly dropComplete$ = new Subject<ComponentNode>();\n\n // ── Active drag state ─────────────────────────────────────\n\n private _isDragging = false;\n private _payload: DragPayload | null = null;\n private _sourceEl: HTMLElement | null = null;\n\n /**\n * For internal drags: a DOM clone of the dragged element appended to <body>.\n * Lives outside any CSS transform, so position:fixed works in viewport coords.\n * For external drags: the label chip overlay.\n */\n private _overlay: HTMLElement | null = null;\n /** Where on the element the user grabbed it (for accurate ghost positioning). */\n private _grabOffsetX = 0;\n private _grabOffsetY = 0;\n\n // ── Pointer tracking ──────────────────────────────────────\n\n private _lastPointerX = 0;\n private _lastPointerY = 0;\n\n // ── Deep-target tracking ──────────────────────────────────\n\n private _deepTargetId: string | null = null;\n\n /** Injected overlay div marking the active drop target. */\n private _targetOverlay: HTMLElement | null = null;\n\n // ── Insertion indicator ───────────────────────────────────\n\n private _indicator: HTMLElement | null = null;\n private _indicatorContainerId: string | null = null;\n private _indicatorIndex = -1;\n private _indicatorRaf = 0;\n\n /** Elements that have temporary FLIP inline styles — cleared on drag end. */\n private _flipEls = new Set<HTMLElement>();\n\n // ── Viewport scale ────────────────────────────────────────\n\n private _scale = 1;\n\n /** Called by BuilderComponent whenever the viewport scale changes. */\n setScale(scale: number): void { this._scale = scale; }\n\n // ── Dropzone rect cache — snapshotted at drag start and on scroll ─────────\n\n private _dropzoneRectCache = new Map<string, DOMRect>();\n\n private _snapshotRects(): void {\n this._dropzoneRectCache.clear();\n for (const id of this.ids) {\n const el = this._getEl(id);\n if (el) this._dropzoneRectCache.set(id, el.getBoundingClientRect());\n }\n }\n\n // ── Root-escape ───────────────────────────────────────────\n\n private readonly ROOT_ESCAPE_PX = 14;\n private _rootEscapeActiveFor: string | null = null;\n\n // ─────────────────────────────────────────────────────────\n // Element lookup — elMap first, DOM id fallback\n // ─────────────────────────────────────────────────────────\n\n private _getEl(id: string): HTMLElement | null {\n return this.elMap.get(id) ?? document.getElementById(id);\n }\n\n // ─────────────────────────────────────────────────────────\n // Drop-zone registration\n // ─────────────────────────────────────────────────────────\n\n registerDropzone(\n id: string,\n el: HTMLElement,\n data: any[],\n cdr: ChangeDetectorRef,\n dropCb: (e: IoxDropEvent) => void,\n postDrop?: () => void,\n ): void {\n if (!id) return;\n\n // Stamp id on element so DOM-walk helpers (_isRootContainer) find it.\n el.id = id;\n\n if (!this.ids.includes(id)) {\n this.ids = [...this.ids, id];\n this.ids$.next(this.ids);\n }\n this.elMap.set(id, el);\n this.dataMap.set(id, data);\n this.cdrMap.set(id, cdr);\n this.dropCbMap.set(id, dropCb);\n if (postDrop) this.postDropMap.set(id, postDrop);\n\n interact(el).dropzone({\n accept: '[data-iox-draggable]',\n overlap: 'pointer',\n });\n }\n\n unregisterDropzone(id: string, el: HTMLElement): void {\n this.ids = this.ids.filter(i => i !== id);\n this.elMap.delete(id);\n this.dataMap.delete(id);\n this.cdrMap.delete(id);\n this.dropCbMap.delete(id);\n this.postDropMap.delete(id);\n this.ids$.next(this.ids);\n try { interact(el).unset(); } catch { /* already unset */ }\n }\n\n // ─────────────────────────────────────────────────────────\n // Draggable registration\n // ─────────────────────────────────────────────────────────\n\n registerDraggable(el: HTMLElement, getPayload: () => DragPayload): void {\n el.setAttribute('data-iox-draggable', '');\n\n interact(el).draggable({\n // Don't start a drag when the pointer goes down inside a contenteditable\n // element (e.g. a text block in inline-edit mode).\n ignoreFrom: '[contenteditable=\"true\"]',\n listeners: {\n start: (event) => this._onDragStart(event, el, getPayload),\n move: (event) => this._onDragMove(event),\n end: (event) => this._onDragEnd(event),\n },\n modifiers: [],\n });\n }\n\n unregisterDraggable(el: HTMLElement): void {\n el.removeAttribute('data-iox-draggable');\n try { interact(el).unset(); } catch { /* already unset */ }\n }\n\n getData(id: string): any[] | undefined { return this.dataMap.get(id); }\n getCdr(id: string): ChangeDetectorRef | undefined { return this.cdrMap.get(id); }\n invokePostDrop(id: string): void { this.postDropMap.get(id)?.(); }\n\n consumeDeepTarget(): string | null {\n const v = this._deepTargetId;\n this._deepTargetId = null;\n return v;\n }\n\n // ─────────────────────────────────────────────────────────\n // Drag lifecycle\n // ─────────────────────────────────────────────────────────\n\n private _onDragStart(event: any, el: HTMLElement, getPayload: () => DragPayload): void {\n if (el.hasAttribute('data-editing')) {\n event.interaction.stop();\n return;\n }\n this._payload = getPayload();\n this._sourceEl = el;\n this._isDragging = true;\n this._rootEscapeActiveFor = null;\n this._lastPointerX = event.client.x;\n this._lastPointerY = event.client.y;\n this.isDragging$.next(true);\n\n if (this._payload.type === 'internal') {\n // ── Clone the element and append to <body> ────────────────────────────\n //\n // DOM structure for a canvas item:\n // div[ioxDraggable] (el — the drag wrapper, may be wider than content)\n // └─ <app-card> / <app-section> … (Angular component host)\n // └─ div.card-root / div.section-root … (visual root with styles)\n //\n // el.getBoundingClientRect() gives the wrapper's rect, which can be\n // wider than the visual element when the wrapper is in a flex container\n // that stretches it. This causes the ghost to have wrong dimensions\n // and the grab offset to be calculated from the wrong origin.\n //\n // Fix: use the Angular component host (el.firstElementChild) for both\n // the rect measurement and as the clone source.\n // - Rect from host → correct visual dimensions and true grab offset.\n // - Clone from host → carries _ngcontent-* attrs so encapsulated CSS works.\n //\n // The wrapper el still gets iox-drag-active-source (visibility:hidden)\n // to keep its layout space stable while dragging.\n const hostEl = (el.firstElementChild as HTMLElement) ?? el;\n const rect = hostEl.getBoundingClientRect();\n this._grabOffsetX = event.client.x - rect.left;\n this._grabOffsetY = event.client.y - rect.top;\n\n // Scale factor: getBoundingClientRect() returns scaled viewport px,\n // but the clone renders at natural CSS px (no transform parent on body).\n // Apply the same scale transform so the clone matches the visual size\n // exactly — no explicit width/height, no overflow clipping.\n const scale = this._scale;\n\n // Cancel fill:forwards animations before cloning so the ghost shows\n // the element at its natural (un-animated) state, and so the original\n // element is clean after a same-position drop (where Angular won't\n // destroy/recreate the DOM node and InteractionEngine.detach() won't fire).\n hostEl.getAnimations().forEach(a => a.cancel());\n\n const clone = hostEl.cloneNode(true) as HTMLElement;\n // getBoundingClientRect() returns scaled viewport px. Divide by scale\n // to get the natural CSS px — this constrains the clone to match the\n // original's width when it's reparented to <body> (no canvas parent).\n // overflow:hidden suppresses scrollbars that can appear when the clone's\n // children lose their layout context (e.g. percentage-width children).\n const cssWidth = Math.round(rect.width / scale);\n const cssHeight = Math.round(rect.height / scale);\n clone.style.cssText = [\n 'position:fixed',\n `left:${rect.left}px`,\n `top:${rect.top}px`,\n `width:${cssWidth}px`,\n `height:${cssHeight}px`,\n `transform:scale(${scale})`,\n 'transform-origin:top left',\n 'pointer-events:none',\n 'overflow:hidden',\n 'z-index:9999',\n 'margin:0',\n ].join(';');\n clone.classList.add('iox-drag-moving');\n document.body.appendChild(clone);\n this._overlay = clone;\n\n // Hide original wrapper in-place (keeps layout space so container size is stable).\n el.classList.add('iox-drag-active-source');\n } else {\n // ── Sidebar external drag — show a label chip ─────────────────────────\n this._createExternalChip(this._payload, event.client.x, event.client.y);\n el.classList.add('iox-drag-source');\n }\n\n this._snapshotRects();\n }\n\n private _onDragMove(event: any): void {\n this._lastPointerX = event.client.x;\n this._lastPointerY = event.client.y;\n\n // Move the clone (or chip) under the cursor.\n if (this._overlay) {\n this._overlay.style.left = (event.client.x - this._grabOffsetX) + 'px';\n this._overlay.style.top = (event.client.y - this._grabOffsetY) + 'px';\n }\n\n this._updateDeepTarget();\n this._updateIndicator();\n }\n\n private _onDragEnd(event: any): void {\n // Restore original element visibility BEFORE Angular re-renders on drop.\n if (this._sourceEl) {\n this._sourceEl.classList.remove('iox-drag-active-source');\n this._sourceEl.classList.remove('iox-drag-source');\n }\n document.querySelectorAll('.iox-drag-active-source')\n .forEach(el => el.classList.remove('iox-drag-active-source'));\n\n // Remove clone/chip overlay.\n this._removeOverlay();\n\n // Remove indicator BEFORE committing so calcInsertIndex sees a clean DOM.\n this._removeIndicator();\n document.body.classList.remove('iox-drag-has-indicator');\n\n // Clean up any FLIP transform/transition inline styles left on container children.\n for (const el of this._flipEls) {\n el.style.transform = '';\n el.style.transition = '';\n }\n this._flipEls.clear();\n\n this._commitDrop();\n\n this._removeTargetOverlay();\n document.querySelectorAll('.iox-drag-over').forEach(el => el.classList.remove('iox-drag-over'));\n this._rootEscapeActiveFor = null;\n this._isDragging = false;\n this._payload = null;\n this._sourceEl = null;\n this.isDragging$.next(false);\n this.deepTarget$.next(null);\n setTimeout(() => { this._deepTargetId = null; });\n }\n\n // ─────────────────────────────────────────────────────────\n // Drop commit\n // ─────────────────────────────────────────────────────────\n\n private _commitDrop(): void {\n if (!this._payload) return;\n\n const targetId = this._deepTargetId ?? 'canvas-preview';\n const insertIndex = this.calcInsertIndex(targetId);\n\n const dropCb = this.dropCbMap.get(targetId);\n if (!dropCb) return;\n\n dropCb({ payload: this._payload, targetId, insertIndex });\n }\n\n // ─────────────────────────────────────────────────────────\n // External-drag chip (sidebar items only)\n // ─────────────────────────────────────────────────────────\n\n private _createExternalChip(payload: DragPayload, pointerX: number, pointerY: number): void {\n this._removeOverlay();\n const label = typeof payload.data === 'string' ? payload.data : 'Component';\n const chip = document.createElement('div');\n chip.className = 'iox-drag-overlay iox-drag-overlay-chip';\n chip.textContent = label;\n // Chip follows 14px below-right of cursor.\n this._grabOffsetX = -14;\n this._grabOffsetY = -14;\n chip.style.left = (pointerX + 14) + 'px';\n chip.style.top = (pointerY + 14) + 'px';\n document.body.appendChild(chip);\n this._overlay = chip;\n }\n\n private _removeOverlay(): void {\n this._overlay?.remove();\n this._overlay = null;\n this._grabOffsetX = 0;\n this._grabOffsetY = 0;\n }\n\n // ─────────────────────────────────────────────────────────\n // Deep-target detection (smallest bounding-rect area)\n // ─────────────────────────────────────────────────────────\n\n private _updateDeepTarget(): void {\n const px = this._lastPointerX;\n const py = this._lastPointerY;\n\n let bestId: string | null = null;\n let bestArea = Infinity;\n\n for (const id of this.ids) {\n const el = this._getEl(id);\n if (!el) continue;\n // Never drop an element into its own subtree: skip any dropzone\n // whose DOM element lives inside the dragged source wrapper.\n if (this._sourceEl?.contains(el)) continue;\n // Skip elements hidden by interaction pre-state, and any of their children.\n if (el.closest('[data-iox-hidden]')) continue;\n const rect = this._dropzoneRectCache.get(id) ?? el.getBoundingClientRect();\n if (px >= rect.left && px <= rect.right && py >= rect.top && py <= rect.bottom) {\n const area = rect.width * rect.height;\n if (area < bestArea) { bestArea = area; bestId = id; }\n }\n }\n\n // Root-escape with hysteresis.\n // Purpose: when the cursor is near the top/bottom edge of a root-level\n // section, treat the target as canvas-preview so the user can insert\n // between root sections.\n //\n // IMPORTANT: only activate if the cursor was ALREADY inside this section\n // (i.e. deepTarget is the section itself or a nested child of it).\n // Without this guard, crossing from Section A into the top 14px of\n // Section C immediately locks the target to canvas-preview and prevents\n // the user from ever reaching Section C's nested containers.\n if (this._rootEscapeActiveFor) {\n const escEl = this._getEl(this._rootEscapeActiveFor);\n if (escEl) {\n const r = this._dropzoneRectCache.get(this._rootEscapeActiveFor) ?? escEl.getBoundingClientRect();\n const inside = px >= r.left && px <= r.right && py >= r.top && py <= r.bottom;\n if (inside) { bestId = 'canvas-preview'; }\n else { this._rootEscapeActiveFor = null; }\n } else {\n this._rootEscapeActiveFor = null;\n }\n }\n\n if (!this._rootEscapeActiveFor &&\n bestId && bestId !== 'canvas-preview' && this._isRootContainer(bestId)) {\n const el = this._getEl(bestId);\n if (el) {\n const rect = this._dropzoneRectCache.get(bestId) ?? el.getBoundingClientRect();\n const nearEdge =\n py <= rect.top + this.ROOT_ESCAPE_PX ||\n py >= rect.bottom - this.ROOT_ESCAPE_PX;\n // Only escape if we were already targeting this section or\n // something nested inside it — not when crossing into it fresh.\n const wasInsideThisSection =\n this._deepTargetId === bestId ||\n this._isDescendantDropzone(this._deepTargetId, bestId);\n if (nearEdge && wasInsideThisSection) {\n this._rootEscapeActiveFor = bestId;\n bestId = 'canvas-preview';\n }\n }\n }\n\n if (bestId !== this._deepTargetId) {\n if (this._deepTargetId) {\n const old = this._getEl(this._deepTargetId);\n old?.classList.remove('iox-drag-over');\n }\n this._deepTargetId = bestId;\n if (bestId) {\n this._getEl(bestId)?.classList.add('iox-drag-over');\n }\n // Move injected overlay to the new target container.\n this._moveTargetOverlay(bestId);\n this.deepTarget$.next(bestId);\n\n // Reset indicator position state when container changes.\n this._indicatorIndex = -1;\n this._indicatorContainerId = null;\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Target overlay — fixed to <body>, sized from getBoundingClientRect\n // so it is always above all canvas content regardless of stacking\n // contexts or background colors inside the target container.\n // ─────────────────────────────────────────────────────────\n\n /** Call on every canvas scroll tick to keep the fixed-position drop-target\n * overlay aligned with the container element that moved in the viewport. */\n refreshDragOverlays(): void {\n if (!this._isDragging) return;\n this._snapshotRects();\n this._moveTargetOverlay(this._deepTargetId);\n }\n\n private _moveTargetOverlay(targetId: string | null): void {\n if (!targetId || targetId === 'canvas-preview') {\n this._removeTargetOverlay();\n return;\n }\n\n const el = this._getEl(targetId);\n if (!el) { this._removeTargetOverlay(); return; }\n\n if (!this._targetOverlay) {\n this._targetOverlay = document.createElement('div');\n this._targetOverlay.className = 'iox-drop-target-overlay';\n document.body.appendChild(this._targetOverlay);\n }\n\n const rect = el.getBoundingClientRect();\n this._targetOverlay.style.cssText = [\n 'position:fixed',\n `left:${rect.left}px`,\n `top:${rect.top}px`,\n `width:${rect.width}px`,\n `height:${rect.height}px`,\n 'pointer-events:none',\n 'z-index:9998',\n 'box-sizing:border-box',\n ].join(';');\n }\n\n private _removeTargetOverlay(): void {\n this._targetOverlay?.remove();\n this._targetOverlay = null;\n }\n\n private _isRootContainer(id: string): boolean {\n const el = this._getEl(id);\n if (!el) return false;\n let parent = el.parentElement;\n while (parent) {\n if (parent.id === 'canvas-preview') return true;\n if (parent.id && this.ids.includes(parent.id)) return false;\n parent = parent.parentElement;\n }\n return false;\n }\n\n /**\n * Returns true if the dropzone with `childId` is a DOM descendant of the\n * dropzone with `parentId`. Used to decide whether the cursor was already\n * \"inside\" a root section before triggering root-escape.\n */\n private _isDescendantDropzone(childId: string | null, parentId: string): boolean {\n if (!childId) return false;\n const childEl = this._getEl(childId);\n const parentEl = this._getEl(parentId);\n if (!childEl || !parentEl) return false;\n return parentEl.contains(childEl);\n }\n\n // ─────────────────────────────────────────────────────────\n // Insertion indicator (animates open so siblings shift smoothly)\n // ─────────────────────────────────────────────────────────\n\n private _updateIndicator(): void {\n const targetId = this._deepTargetId ?? 'canvas-preview';\n document.body.classList.add('iox-drag-has-indicator');\n const idx = this.calcInsertIndex(targetId);\n if (idx !== this._indicatorIndex || targetId !== this._indicatorContainerId) {\n this._indicatorIndex = idx;\n this._positionIndicator(targetId, idx);\n }\n }\n\n private _positionIndicator(containerId: string, index: number): void {\n const container = this._getEl(containerId);\n if (!container) return;\n\n const cs = window.getComputedStyle(container);\n const isRow =\n (cs.display === 'flex' || cs.display === 'inline-flex') &&\n (!cs.flexDirection || cs.flexDirection === 'row' || cs.flexDirection === 'row-reverse');\n\n const containerChanged = this._indicatorContainerId !== containerId;\n\n if (containerChanged) {\n cancelAnimationFrame(this._indicatorRaf);\n this._indicator?.remove();\n this._indicator = null;\n }\n\n const needsCreate = !this._indicator;\n if (needsCreate) {\n this._indicator = document.createElement('div');\n this._indicator.className = 'iox-insert-indicator';\n\n if (isRow) {\n // Start at width:0 with align-self:stretch so it spans the full\n // container height once visible. overflow:hidden keeps it invisible\n // at width:0 — no painted pixels, no phantom height like min-height\n // would cause. Animates width 0→3px on first appearance.\n this._indicator.style.cssText =\n 'flex-shrink:0;width:0;align-self:stretch;' +\n 'background:#6366f1;border-radius:2px;pointer-events:none;margin:0;' +\n 'transition:width 140ms ease,margin 140ms ease;overflow:hidden;';\n } else {\n this._indicator.style.cssText =\n 'height:0;width:100%;background:#6366f1;border-radius:2px;' +\n 'pointer-events:none;margin:0;display:block;' +\n 'transition:height 140ms ease,margin 140ms ease;overflow:hidden;';\n }\n }\n\n this._indicatorContainerId = containerId;\n\n const skipClasses = [\n 'section-placeholder', 'container-placeholder', 'repeater-placeholder',\n 'repeater-badge', 'repeater-preview-row', 'iox-insert-indicator',\n 'iox-drag-active-source',\n ];\n const children = Array.from(container.children).filter(\n el => !skipClasses.some(cls => el.classList.contains(cls))\n );\n\n // ── FLIP: snapshot sibling rects BEFORE DOM change (reposition case only) ──\n let beforeRects: Map<Element, DOMRect> | null = null;\n if (!needsCreate) {\n beforeRects = new Map<Element, DOMRect>();\n Array.from(container.children).forEach(child => {\n if (child !== this._indicator) {\n beforeRects!.set(child, child.getBoundingClientRect());\n }\n });\n }\n\n // Reposition indicator in DOM.\n if (!this._indicator) return;\n if (index >= children.length) {\n container.appendChild(this._indicator);\n } else {\n container.insertBefore(this._indicator, children[index]);\n }\n\n // ── FLIP: animate siblings from their old positions to their new positions ──\n if (beforeRects) {\n Array.from(container.children).forEach(child => {\n const before = beforeRects!.get(child);\n if (!before) return;\n const after = child.getBoundingClientRect();\n const dx = before.left - after.left;\n const dy = before.top - after.top;\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5) return;\n\n const el = child as HTMLElement;\n this._flipEls.add(el);\n // Invert: snap element back to where it was, then animate to new pos.\n el.style.transition = 'none';\n el.style.transform = `translate(${dx}px,${dy}px)`;\n requestAnimationFrame(() => {\n el.style.transition = 'transform 140ms ease';\n el.style.transform = '';\n });\n });\n }\n\n // Animate indicator open (first appearance in this container only).\n if (needsCreate) {\n cancelAnimationFrame(this._indicatorRaf);\n this._indicatorRaf = requestAnimationFrame(() => {\n if (!this._indicator) return;\n if (isRow) {\n this._indicator.style.width = '3px';\n this._indicator.style.margin = '0 3px';\n } else {\n this._indicator.style.height = '4px';\n this._indicator.style.margin = '3px 0';\n }\n });\n }\n }\n\n private _removeIndicator(): void {\n cancelAnimationFrame(this._indicatorRaf);\n this._indicator?.remove();\n this._indicator = null;\n this._indicatorContainerId = null;\n this._indicatorIndex = -1;\n }\n\n // ─────────────────────────────────────────────────────────\n // calcInsertIndex\n // ─────────────────────────────────────────────────────────\n\n calcInsertIndex(containerId: string): number {\n const container = this._getEl(containerId);\n if (!container) return 0;\n\n const skipClasses = [\n 'section-placeholder', 'container-placeholder', 'repeater-placeholder',\n 'repeater-badge', 'repeater-preview-row', 'iox-insert-indicator',\n 'iox-drag-active-source',\n ];\n const children = Array.from(container.children).filter(\n el => !skipClasses.some(cls => el.classList.contains(cls))\n );\n if (!children.length) return 0;\n\n const cs = window.getComputedStyle(container);\n const isHorizontal =\n (cs.display === 'flex' || cs.display === 'inline-flex') &&\n (!cs.flexDirection || cs.flexDirection === 'row' || cs.flexDirection === 'row-reverse');\n\n for (let i = 0; i < children.length; i++) {\n const rect = children[i].getBoundingClientRect();\n if (isHorizontal) {\n if (this._lastPointerX < rect.left + rect.width / 2) return i;\n } else {\n if (this._lastPointerY < rect.top + rect.height / 2) return i;\n }\n }\n return children.length;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { IoxDataSource } from '../models/component.model';\n\n/**\n * Page-scoped registry that holds the current page's data sources.\n * Scoped to PageUiComponent.providers[] so every builder service\n * (BindingsComponent, BuilderRepeaterComponent) shares the same instance.\n *\n * Seeded by PageUiComponent.loadPage() from saved page data, then kept\n * up to date by BindingsComponent whenever the user adds/removes a source.\n */\n@Injectable()\nexport class DataSourceRegistryService {\n private _ds$ = new BehaviorSubject<IoxDataSource[]>([]);\n\n readonly dataSources$ = this._ds$.asObservable();\n\n setDataSources(ds: IoxDataSource[]): void {\n this._ds$.next(ds);\n }\n\n getDataSources(): IoxDataSource[] {\n return this._ds$.value;\n }\n\n findByAlias(alias: string): IoxDataSource | undefined {\n return this._ds$.value.find(ds => ds.alias === alias);\n }\n\n getAliasOptions(): { label: string; value: string }[] {\n return this._ds$.value.map(ds => ({ label: ds.alias, value: ds.alias }));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { DeviceMode, DEVICE_OPTIONS } from '../panels/panel.model';\n\nexport interface ViewportState {\n device: DeviceMode;\n /** Real canvas width in CSS pixels (e.g., 1440 for desktop). */\n width: number;\n /** Real canvas height in CSS pixels (e.g., 900 for desktop). Simulates the browser viewport. */\n height: number;\n /** Visual scale factor (0–1+). Canvas is rendered at `width × height` then scaled. */\n scale: number;\n}\n\nconst STORAGE_KEY = 'iox_builder_viewport';\n\n@Injectable()\nexport class ViewportService {\n private state: ViewportState = this.loadFromStorage();\n\n private stateSubject = new BehaviorSubject<ViewportState>(this.state);\n public state$ = this.stateSubject.asObservable();\n\n getState(): ViewportState {\n return this.state;\n }\n\n getScale(): number {\n return this.state.scale;\n }\n\n setDevice(device: DeviceMode): void {\n const option = DEVICE_OPTIONS.find(d => d.mode === device);\n if (!option) return;\n this.update({ device, width: option.width, height: option.height });\n }\n\n setScale(scale: number): void {\n this.update({ scale: Math.max(0.1, Math.min(2, scale)) });\n }\n\n setWidth(width: number): void {\n this.update({ width });\n }\n\n /**\n * Calculate the scale that makes the canvas fit inside the available editor width.\n * @param availableWidth The pixel width of the editor area that holds the canvas.\n * @param padding Optional horizontal padding to subtract (default 40px total).\n */\n fitToWidth(availableWidth: number, padding = 40): void {\n const usable = availableWidth - padding;\n if (usable <= 0) return;\n const scale = Math.min(1, usable / this.state.width);\n this.setScale(scale);\n }\n\n /**\n * Calculate the scale that makes the canvas fit both the available width AND height.\n * Uses the smaller of the two scale factors so the entire viewport frame is visible.\n * @param containerWidth Available container width in screen pixels.\n * @param containerHeight Available container height in screen pixels.\n * @param padding Total padding to subtract from both dimensions (default 40px).\n */\n fitToSize(containerWidth: number, containerHeight: number, padding = 40): void {\n const usableW = containerWidth - padding;\n const usableH = containerHeight - padding;\n if (usableW <= 0 || usableH <= 0) return;\n const scaleX = usableW / this.state.width;\n const scaleY = usableH / this.state.height;\n this.setScale(Math.min(1, scaleX, scaleY));\n }\n\n /**\n * Convert a screen-space coordinate to canvas-space (unscaled).\n * Call this when translating pointer events into canvas-relative positions.\n */\n screenToCanvas(screenX: number, screenY: number, canvasRect: DOMRect): { x: number; y: number } {\n return {\n x: (screenX - canvasRect.left) / this.state.scale,\n y: (screenY - canvasRect.top) / this.state.scale,\n };\n }\n\n private update(partial: Partial<ViewportState>): void {\n this.state = { ...this.state, ...partial };\n this.stateSubject.next(this.state);\n this.saveToStorage();\n }\n\n private saveToStorage(): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(this.state));\n } catch {}\n }\n\n private loadFromStorage(): ViewportState {\n const defaults: ViewportState = {\n device: DeviceMode.Desktop,\n width: DEVICE_OPTIONS[0].width,\n height: DEVICE_OPTIONS[0].height,\n scale: 0.75,\n };\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return defaults;\n const saved = JSON.parse(raw);\n const device = (Object.values(DeviceMode) as string[]).includes(saved.device)\n ? saved.device as DeviceMode\n : defaults.device;\n const option = DEVICE_OPTIONS.find(d => d.mode === device) ?? DEVICE_OPTIONS[0];\n return {\n device,\n width: typeof saved.width === 'number' && saved.width > 0 ? saved.width : option.width,\n height: typeof saved.height === 'number' && saved.height > 0 ? saved.height : option.height,\n scale: typeof saved.scale === 'number' ? Math.max(0.1, Math.min(2, saved.scale)) : defaults.scale,\n };\n } catch {\n return defaults;\n }\n }\n}\n","// Re-exported from the shared iox-ui package so iox-builder consumers\n// don't need to import from two different packages.\nexport { ComponentInstanceRegistryService } from '@vectoriox/iox-ui';\n","import { Injectable, NgZone, inject } from '@angular/core';\n\nimport {\n ComponentNode,\n InteractionAction,\n InteractionTrigger,\n IoxInteraction,\n} from '../models/component.model';\nimport { OverlayService } from '../overlay/overlay.service';\nimport { ComponentInstanceRegistryService } from './component-instance-registry.service';\nimport { ContextStore, contextActionEffect, isContextAction, resolveContextValue } from '@vectoriox/iox-ui';\n\ninterface AttachedInteraction {\n node: ComponentNode;\n interaction: IoxInteraction;\n cleanup: () => void;\n}\n\n/**\n * Wires ComponentNode interactions to live DOM elements via the\n * OverlayService node-element registry.\n *\n * Call `attach(node)` after the node is rendered and registered.\n * Call `detach(node)` on destroy to tear down listeners/observers.\n */\n@Injectable()\nexport class InteractionEngineService {\n private attached = new Map<ComponentNode, AttachedInteraction[]>();\n\n /** Shared with the SSR engine — one store type, one set of semantics. */\n private contextStore = inject(ContextStore);\n /** Resolved data for the canvas, so a row marker (source + index) resolves back to its item. */\n private contextData: Record<string, any> = {};\n\n /** Elements that have had pre-state applied (hidden by attach). */\n private preStatedElements = new Set<HTMLElement>();\n\n /**\n * Toggle state for click interactions with reverseActions.\n * false = next click runs actions (primary); true = next click runs reverseActions.\n */\n private toggleStates = new Map<string, boolean>();\n\n /**\n * Pre-states queued for elements that weren't registered yet when the owner\n * node's attach() ran. Keyed by target node ID. Consumed when the target\n * element's own attach() fires.\n */\n private pendingPreStates = new Map<string, InteractionAction[]>();\n\n /** Action types that animate an element from hidden → visible. */\n private readonly ENTRANCE_TYPES = new Set([\n 'fadeIn', 'moveUp', 'moveDown', 'moveLeft', 'moveRight', 'scaleIn', 'show',\n ]);\n\n /** Action types that animate an element from visible → hidden. */\n private readonly EXIT_TYPES = new Set(['fadeOut', 'scaleOut', 'hide']);\n\n private readonly SWIPER_ACTIONS = new Set([\n 'swiperNext', 'swiperPrev', 'swiperGoToSlide',\n 'swiperAutoplayStart', 'swiperAutoplayStop', 'swiperAutoplayPause',\n ]);\n\n private instanceRegistry = inject(ComponentInstanceRegistryService);\n private ngZone = inject(NgZone);\n\n constructor(private overlayService: OverlayService) {}\n\n /**\n * Run all DOM-manipulation operations (pre-state, observers, animations)\n * outside the Angular zone so Zone.js does not schedule unnecessary CD ticks\n * for each RAF/IntersectionObserver/animation callback.\n * The caller is responsible for calling markForCheck() / refreshSelect() inside\n * the zone after this returns.\n */\n private runOutside<T>(fn: () => T): T {\n return this.ngZone.runOutsideAngular(fn);\n }\n\n /** Wire all interactions for a node to its rendered DOM element. */\n attach(node: ComponentNode): void { this.runOutside(() => this._attach(node)); }\n /** Attach interactions to a node whose element is NOT overlay-registered — e.g. repeater/slider\n * PREVIEW CLONES, which are non-selectable but must still animate (parity with the SSR runtime,\n * which animates every repeated row). See RenderDirective. */\n attachTo(node: ComponentNode, element: HTMLElement): void { this.runOutside(() => this._attach(node, element)); }\n private _attach(node: ComponentNode, elementOverride?: HTMLElement): void {\n const element = elementOverride ?? this.overlayService.getNodeRef(node)?.element;\n if (!element) return;\n\n const inBuilder = this.isBuilderMode();\n\n // Apply any pre-states queued for THIS element by earlier-registered nodes.\n // Pending entries are only added when appropriate (see loop below), so always consume.\n if (node.id) {\n const pending = this.pendingPreStates.get(node.id);\n if (pending) {\n for (const action of pending) {\n this.applyPreState(element, action);\n }\n this.pendingPreStates.delete(node.id);\n }\n }\n\n if (!node.interactions?.length) return;\n\n const cleanups: AttachedInteraction[] = [];\n\n for (const ix of node.interactions) {\n // Pre-state: hide target elements before their entrance animation fires so\n // the user sees a real hidden→visible animation on the canvas. Every trigger\n // now runs live in the builder (see attachInteraction), so pre-state is applied\n // for all of them EXCEPT scrollProgress — that trigger is unimplemented (no-op),\n // so pre-stating it would leave the element stuck at opacity:0 forever.\n const skipPreState = inBuilder && ix.trigger === 'scrollProgress';\n if (!skipPreState) {\n for (const action of ix.actions) {\n if (this.ENTRANCE_TYPES.has(action.type)) {\n const target = this.resolveTarget(node, action, element);\n if (target) {\n this.applyPreState(target, action);\n } else if (action.target && action.target !== 'self') {\n const list = this.pendingPreStates.get(action.target) ?? [];\n list.push(action);\n this.pendingPreStates.set(action.target, list);\n }\n }\n }\n }\n\n const cleanup = this.attachInteraction(node, ix, element);\n cleanups.push({ node, interaction: ix, cleanup });\n }\n\n this.attached.set(node, cleanups);\n }\n\n /** Tear down all interaction listeners for a node and reset its animated state. */\n detach(node: ComponentNode): void { this.runOutside(() => this._detach(node)); }\n private _detach(node: ComponentNode): void {\n const entries = this.attached.get(node);\n if (!entries) return;\n for (const entry of entries) {\n entry.cleanup();\n }\n this.attached.delete(node);\n\n // Reset toggle state so re-attach starts from the primary actions.\n for (const entry of entries) {\n if (entry.interaction.reverseActions?.length) {\n this.toggleStates.delete(entry.interaction.id);\n }\n }\n\n // Cancel Web Animations and strip any inline pre-state styles that\n // were applied by applyPreState() so the element returns to its natural CSS state.\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n ref.element.getAnimations().forEach(a => a.cancel());\n this.clearInlineAnimationStyles(ref.element);\n }\n\n // Also clean up pre-state on any target elements this node was animating.\n if (node.interactions) {\n for (const ix of node.interactions) {\n for (const action of ix.actions) {\n // Remove any pending pre-states for unregistered targets.\n if (action.target && action.target !== 'self') {\n const pending = this.pendingPreStates.get(action.target);\n if (pending) {\n const filtered = pending.filter(a => a !== action);\n if (filtered.length) {\n this.pendingPreStates.set(action.target, filtered);\n } else {\n this.pendingPreStates.delete(action.target);\n }\n }\n }\n // Clean up inline styles on already-registered target elements.\n const target = this.resolveTarget(node, action);\n if (target && this.preStatedElements.has(target)) {\n target.getAnimations().forEach(a => a.cancel());\n this.clearInlineAnimationStyles(target);\n this.preStatedElements.delete(target);\n }\n }\n }\n }\n }\n\n /** Re-attach interactions after they have been edited in the panel. */\n refresh(node: ComponentNode): void {\n this.runOutside(() => { this._detach(node); this._attach(node); });\n }\n\n /**\n * Replay all interactions on a node immediately, regardless of their trigger.\n * Used by the builder overlay play button for in-editor animation preview.\n * Uses fill:'none' so the element returns to its natural state after the preview.\n */\n replay(node: ComponentNode): void { this.runOutside(() => this._replay(node)); }\n private _replay(node: ComponentNode): void {\n if (!node.interactions?.length) return;\n\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n ref.element.getAnimations().forEach(a => a.cancel());\n // Clear any leftover inline styles so the pre-state applies cleanly.\n this.clearInlineAnimationStyles(ref.element);\n }\n\n // In builder mode pre-state is never applied on attach, so apply it now\n // to give an accurate hidden→visible preview. It is cleaned up via\n // executeAction's anim.finished handler once the animation completes.\n for (const ix of node.interactions) {\n for (const action of ix.actions) {\n if (this.ENTRANCE_TYPES.has(action.type)) {\n const target = this.resolveTarget(node, action);\n if (target) this.applyPreState(target, action);\n }\n }\n }\n\n for (const ix of node.interactions) {\n this.runActions(node, ix.actions);\n }\n }\n\n /**\n * Fire all interactions on the given node that match the specified trigger.\n * Used by Swiper (and future components) to dispatch their events into the\n * interaction engine without coupling to the engine's attach/detach lifecycle.\n */\n replayTrigger(nodeId: string, trigger: InteractionTrigger): void { this.runOutside(() => this._replayTrigger(nodeId, trigger)); }\n private _replayTrigger(nodeId: string, trigger: InteractionTrigger): void {\n for (const [node] of this.attached) {\n if (node.id !== nodeId) continue;\n for (const ix of (node.interactions ?? [])) {\n if (ix.trigger === trigger) {\n this.runActions(node, ix.actions);\n }\n }\n return;\n }\n }\n\n // ── Private ──────────────────────────────────────────────\n\n private attachInteraction(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n // All triggers run live in the builder canvas so the user sees the real\n // animation (pageLoad on attach, viewportEnter on scroll-into-view, click/hover).\n // The former NG0103 crash was caused by (a) Swiper's ResizeObserver created inside\n // the Angular zone — fixed in SliderContainerComponent via runOutsideAngular — and\n // (b) the overlay's Resize/MutationObservers synchronously re-dirtying the view\n // during synchronize() — fixed by coalescing overlay updates through a RAF.\n // scrollProgress is still unimplemented and returns a no-op below.\n switch (ix.trigger) {\n case 'pageLoad':\n return this.attachPageLoad(node, ix, element);\n case 'pageEnter':\n // In the builder canvas there is no navigation, so preview a page-enter the same\n // way as page-load (pre-stated hidden → animate in). In production the SSR engine\n // fires it only after the page transition completes (ClientInteractionService).\n return this.attachPageLoad(node, ix, element);\n case 'pageLeave':\n // Exit choreography that plays on navigate-away. There is no navigation in the\n // builder, so it does not auto-fire (element stays visible) — the overlay play\n // button previews it via replay(). In production the orchestrator awaits it.\n return () => {};\n case 'viewportEnter':\n return this.attachViewportEnter(node, ix, element);\n case 'click':\n return this.attachClick(node, ix, element);\n case 'hover':\n return this.attachHover(node, ix, element);\n case 'scrollProgress':\n // Scroll-progress is complex — deferred.\n return () => {};\n default:\n return () => {};\n }\n }\n\n // ── Triggers ─────────────────────────────────────────────\n\n private attachPageLoad(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const timer = setTimeout(() => {\n if (this.hasPreStatedAncestor(element)) {\n this.deferUntilVisible(element, () => this.runActions(node, ix.actions, element));\n } else {\n this.runActions(node, ix.actions, element);\n }\n }, 50);\n return () => clearTimeout(timer);\n }\n\n private attachViewportEnter(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const firedSet = new Set<string>();\n\n const fire = () => {\n const key = ix.id;\n if (ix.actions.some(a => a.once) && firedSet.has(key)) return;\n if (this.hasPreStatedAncestor(element)) {\n this.deferUntilVisible(element, () => {\n if (ix.actions.some(a => a.once) && firedSet.has(key)) return;\n firedSet.add(key);\n this.runActions(node, ix.actions, element);\n });\n return;\n }\n firedSet.add(key);\n this.runActions(node, ix.actions, element);\n };\n\n // IntersectionObserver with no root uses the browser viewport.\n // It respects overflow:hidden clipping from .preview-scroll so it fires\n // correctly as Lenis scrolls (Lenis changes scrollTop on .preview-scroll).\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) { cleanup(); fire(); }\n }\n }, { threshold: 0.1 });\n observer.observe(element);\n\n // Builder: also listen to Lenis scroll events on .preview-lenis-content\n // as a fallback in case IntersectionObserver misses elements behind a\n // CSS transform (scale) on iox-page-component.\n const lenisEl = this.overlayService.getScrollContainer();\n let scrollFired = false;\n const onScroll = () => {\n if (scrollFired) return;\n const rootEl = this.overlayService.getIntersectionRoot();\n if (!rootEl) return;\n const rootRect = rootEl.getBoundingClientRect();\n const elRect = element.getBoundingClientRect();\n const overlapH = Math.min(elRect.bottom, rootRect.bottom) - Math.max(elRect.top, rootRect.top);\n const elH = elRect.bottom - elRect.top;\n if (elH > 0 && overlapH / elH >= 0.1) { scrollFired = true; cleanup(); fire(); }\n };\n if (lenisEl) lenisEl.addEventListener('scroll', onScroll, { passive: true });\n\n const cleanup = () => {\n observer.disconnect();\n scrollFired = true;\n if (lenisEl) lenisEl.removeEventListener('scroll', onScroll);\n };\n return cleanup;\n }\n\n private isBuilderMode(): boolean {\n return document.body.classList.contains('builder-active');\n }\n\n /** Returns true if any DOM ancestor of element is currently faded out via pre-state. */\n private hasPreStatedAncestor(element: HTMLElement): boolean {\n let el = element.parentElement;\n while (el && el !== document.body) {\n if (this.preStatedElements.has(el)) return true;\n el = el.parentElement;\n }\n return false;\n }\n\n /** Polls via RAF until no ancestor is in pre-state, then fires callback. */\n private deferUntilVisible(element: HTMLElement, callback: () => void): void {\n const poll = () => {\n if (!this.hasPreStatedAncestor(element)) {\n callback();\n } else {\n requestAnimationFrame(poll);\n }\n };\n requestAnimationFrame(poll);\n }\n\n private attachClick(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const handler = () => {\n if (ix.reverseActions?.length) {\n // Toggle: alternate between primary and reverse actions on each click.\n const isToggled = this.toggleStates.get(ix.id) ?? false;\n this.runActions(node, isToggled ? ix.reverseActions : ix.actions, element);\n this.toggleStates.set(ix.id, !isToggled);\n } else {\n this.runActions(node, ix.actions, element);\n }\n };\n element.addEventListener('click', handler);\n return () => element.removeEventListener('click', handler);\n }\n\n private attachHover(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const enterHandler = () => this.runActions(node, ix.actions, element);\n const leaveHandler = () => {\n // Reverse animations on leave for hover triggers\n for (const action of ix.actions) {\n // Context actions have no \"backwards\" — the shared table decides what leave does\n // (clear, unless the action sets noReverse). Same call the SSR engine makes.\n if (isContextAction(action)) {\n this.applyContextAction(action, element, 'reverse');\n continue;\n }\n const target = this.resolveTarget(node, action, element);\n if (!target) continue;\n this.reverseAction(target, action);\n }\n };\n element.addEventListener('mouseenter', enterHandler);\n element.addEventListener('mouseleave', leaveHandler);\n return () => {\n element.removeEventListener('mouseenter', enterHandler);\n element.removeEventListener('mouseleave', leaveHandler);\n };\n }\n\n // ── Actions ──────────────────────────────────────────────\n\n private runActions(node: ComponentNode, actions: InteractionAction[], selfEl?: HTMLElement | null): void {\n for (const action of actions) {\n if (this.SWIPER_ACTIONS.has(action.type)) {\n this.executeSwiperAction(action);\n continue;\n }\n // Context actions write STATE, not animation. `selfEl` is deliberate: $item is read by\n // walking up from the element actually hovered/clicked, which for a repeater PREVIEW ROW\n // is the clone — so each row publishes its own item, exactly as on the live site.\n if (isContextAction(action)) {\n this.applyContextAction(action, selfEl ?? null, 'forward');\n continue;\n }\n // selfEl lets 'self'-targeted actions resolve for preview CLONES, which aren't\n // overlay-registered (getNodeRef would return undefined) — see attachTo. (issue #2)\n const target = this.resolveTarget(node, action, selfEl);\n if (!target) continue;\n this.executeAction(target, action);\n }\n }\n\n /**\n * Execute a context action against the shared store. The forward/reverse semantics come from\n * `contextActionEffect` in @vectoriox/iox-ui — the same function the SSR engine calls, so the\n * builder canvas and the live site behave identically.\n */\n private applyContextAction(action: InteractionAction, el: HTMLElement | null, pass: 'forward' | 'reverse'): void {\n const effect = contextActionEffect(action as any, pass);\n if (!effect) return;\n if (effect.op === 'clear') {\n this.contextStore.clear(effect.slot);\n return;\n }\n const value = resolveContextValue(effect.value, {\n item: this.rowItemFor(el),\n resolvedData: this.contextData,\n });\n this.contextStore.set(effect.slot, value);\n }\n\n /** The repeater item this element belongs to — the nearest marked row ancestor. */\n private rowItemFor(el: HTMLElement | null): unknown {\n const row = el?.closest?.('[data-iox-row-idx]') as HTMLElement | null;\n if (!row) return undefined;\n const source = row.getAttribute('data-iox-row-src') ?? '';\n const index = Number(row.getAttribute('data-iox-row-idx'));\n const items = this.contextData?.[source];\n return Array.isArray(items) && Number.isInteger(index) ? items[index] : undefined;\n }\n\n /** Resolved data for the canvas, kept current by the repeater as it fetches. */\n setContextData(data: Record<string, any>): void {\n // MERGE, not replace — a page can hold several repeaters, each publishing its own source.\n this.contextData = { ...this.contextData, ...(data ?? {}) };\n }\n\n private executeSwiperAction(action: InteractionAction): void {\n // Target is the nodeId of the SliderContainer to control.\n const swiper = this.instanceRegistry.get(action.target) as any;\n if (!swiper) return;\n switch (action.type) {\n case 'swiperNext': swiper.slideNext(); break;\n case 'swiperPrev': swiper.slidePrev(); break;\n case 'swiperGoToSlide': swiper.slideTo(action.params?.['index'] ?? 0); break;\n case 'swiperAutoplayStart': swiper.autoplay?.start(); break;\n case 'swiperAutoplayStop': swiper.autoplay?.stop(); break;\n case 'swiperAutoplayPause': swiper.autoplay?.pause(); break;\n }\n }\n\n private resolveTarget(ownerNode: ComponentNode, action: InteractionAction, selfEl?: HTMLElement | null): HTMLElement | null {\n if (action.target === 'self' || !action.target) {\n return selfEl ?? this.overlayService.getNodeRef(ownerNode)?.element ?? null;\n }\n // Find by node ID\n for (const [n, ref] of this.overlayService.getAllNodeEntries()) {\n if (n.id === action.target) return ref.element;\n }\n return null;\n }\n\n private executeAction(element: HTMLElement, action: InteractionAction): void {\n const { keyframes } = this.buildAnimation(action);\n if (!keyframes.length) return;\n\n // 'both' = backwards (holds first keyframe during delay) + forwards (holds last keyframe after end).\n const anim = element.animate(keyframes, {\n duration: action.duration,\n delay: action.delay,\n easing: action.easing,\n fill: 'both',\n });\n\n if (this.ENTRANCE_TYPES.has(action.type)) {\n anim.finished.then(() => {\n element.style.removeProperty('pointer-events');\n element.removeAttribute('data-iox-hidden');\n this.preStatedElements.delete(element);\n // Builder: clear inline pre-state so cancelling animations later\n // doesn't leave the element invisible after a play preview.\n if (this.isBuilderMode()) this.clearInlineAnimationStyles(element);\n }).catch(() => {});\n } else if (this.EXIT_TYPES.has(action.type)) {\n // Once the exit animation finishes the element is invisible —\n // disable pointer events so it doesn't silently block clicks underneath it.\n anim.finished.then(() => {\n element.style.setProperty('pointer-events', 'none');\n }).catch(() => {});\n }\n }\n\n /**\n * Freeze an element at the animation's starting frame immediately, before any\n * trigger fires. Called for ALL entrance-type actions regardless of trigger so\n * that a click-triggered fadeIn on a menu overlay also starts it hidden.\n *\n * In builder mode only opacity:0 is applied — transforms on canvas elements\n * inside iox-page-component's scale() transform break Lenis scroll. The transform\n * jump at animation t=0 is invisible because the element is already opacity:0.\n * In production the full keyframe is applied + pointer-events:none.\n */\n private applyPreState(element: HTMLElement, action: InteractionAction): void {\n const { keyframes } = this.buildAnimation(action);\n if (!keyframes.length) return;\n const first = keyframes[0] as Record<string, string>;\n if (this.isBuilderMode()) {\n // No transforms — inline transforms on children inside iox-page-component's\n // scale() break Lenis scroll. pointer-events:none lets wheel events and\n // hover fall through to visible elements underneath.\n element.style.setProperty('opacity', '0');\n element.style.setProperty('pointer-events', 'none');\n } else {\n for (const [prop, val] of Object.entries(first)) {\n (element.style as any)[prop] = String(val);\n }\n element.style.setProperty('pointer-events', 'none');\n }\n element.setAttribute('data-iox-hidden', '');\n this.preStatedElements.add(element);\n }\n\n private clearInlineAnimationStyles(element: HTMLElement): void {\n element.style.removeProperty('opacity');\n element.style.removeProperty('transform');\n element.style.removeProperty('visibility');\n element.style.removeProperty('pointer-events');\n element.removeAttribute('data-iox-hidden');\n }\n\n private reverseAction(element: HTMLElement, action: InteractionAction): void {\n const { keyframes } = this.buildAnimation(action);\n if (!keyframes.length) return;\n\n // Reverse: play the keyframes backwards\n element.animate([...keyframes].reverse(), {\n duration: action.duration,\n easing: action.easing,\n fill: 'forwards',\n });\n }\n\n private buildAnimation(action: InteractionAction): { keyframes: Keyframe[]; options: KeyframeAnimationOptions } {\n const dist = action.params?.['distance'] ?? 20;\n let keyframes: Keyframe[] = [];\n\n switch (action.type) {\n case 'fadeIn':\n keyframes = [{ opacity: 0 }, { opacity: 1 }];\n break;\n case 'fadeOut':\n keyframes = [{ opacity: 1 }, { opacity: 0 }];\n break;\n case 'moveUp':\n keyframes = [{ transform: `translateY(${dist}px)`, opacity: 0 }, { transform: 'translateY(0)', opacity: 1 }];\n break;\n case 'moveDown':\n keyframes = [{ transform: `translateY(-${dist}px)`, opacity: 0 }, { transform: 'translateY(0)', opacity: 1 }];\n break;\n case 'moveLeft':\n keyframes = [{ transform: `translateX(${dist}px)`, opacity: 0 }, { transform: 'translateX(0)', opacity: 1 }];\n break;\n case 'moveRight':\n keyframes = [{ transform: `translateX(-${dist}px)`, opacity: 0 }, { transform: 'translateX(0)', opacity: 1 }];\n break;\n case 'scaleIn':\n keyframes = [{ transform: 'scale(0.8)', opacity: 0 }, { transform: 'scale(1)', opacity: 1 }];\n break;\n case 'scaleOut':\n keyframes = [{ transform: 'scale(1)', opacity: 1 }, { transform: 'scale(0.8)', opacity: 0 }];\n break;\n case 'rotate':\n const deg = action.params?.['degrees'] ?? 360;\n keyframes = [{ transform: `rotate(0deg)` }, { transform: `rotate(${deg}deg)` }];\n break;\n case 'show':\n keyframes = [{ opacity: 0, visibility: 'hidden' }, { opacity: 1, visibility: 'visible' }];\n break;\n case 'hide':\n keyframes = [{ opacity: 1, visibility: 'visible' }, { opacity: 0, visibility: 'hidden' }];\n break;\n case 'toggleVisibility':\n // Toggle is stateful — handled separately via element style\n keyframes = [{ opacity: 0 }, { opacity: 1 }];\n break;\n }\n\n return {\n keyframes,\n options: {\n duration: action.duration,\n delay: action.delay,\n easing: action.easing,\n fill: 'forwards',\n },\n };\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { InteractionPreset } from '../models/component.model';\n\n/**\n * InteractionPresetRegistryService — in-memory store for org-level interaction presets.\n *\n * Loaded once per page by PageUiComponent alongside the page layout.\n * Scoped to PageUiComponent.providers[] via IoxBuilderModule — one registry per builder instance.\n */\n@Injectable()\nexport class InteractionPresetRegistryService {\n private presets = new Map<string, InteractionPreset>();\n\n setPresets(presets: InteractionPreset[]): void {\n this.presets.clear();\n for (const p of presets) {\n this.presets.set(p.id, p);\n }\n }\n\n getPreset(id: string): InteractionPreset | undefined {\n return this.presets.get(id);\n }\n\n getAll(): InteractionPreset[] {\n return Array.from(this.presets.values());\n }\n\n upsert(preset: InteractionPreset): void {\n this.presets.set(preset.id, preset);\n }\n\n remove(id: string): void {\n this.presets.delete(id);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\n\nexport interface BuilderClipboard {\n node?: ComponentNode;\n presetId?: string;\n interactionPresetId?: string;\n}\n\n/**\n * BuilderClipboardService — in-memory typed clipboard for the page builder.\n *\n * Stores element copies, style preset references, and interaction preset references.\n * Lives in memory only — no navigator.clipboard usage.\n * Scoped to PageUiComponent.providers[] — one clipboard per builder instance.\n */\n@Injectable()\nexport class BuilderClipboardService {\n private _clip: BuilderClipboard = {};\n\n copyNode(node: ComponentNode): void {\n this._clip = { node: JSON.parse(JSON.stringify(node)) };\n }\n\n copyPreset(presetId: string): void {\n this._clip = { ...this._clip, presetId };\n }\n\n copyInteractionPreset(interactionPresetId: string): void {\n this._clip = { ...this._clip, interactionPresetId };\n }\n\n getNode(): ComponentNode | undefined { return this._clip.node; }\n getPresetId(): string | undefined { return this._clip.presetId; }\n getInteractionPresetId(): string | undefined { return this._clip.interactionPresetId; }\n\n clear(): void { this._clip = {}; }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ElementState, STRUCTURAL_STATES, RELATIONAL_STATES, RELATIONAL_STATE_BASE, TARGETED_STATES, TARGETED_STATE_BASE } from '../models/component.model';\nimport { compileDeclarations, buildTargetedStateSelector } from '@vectoriox/iox-ui';\n\n/**\n * StyleRegistryService — manages a single <style> tag for the builder canvas.\n *\n * Each builder component gets two CSS classes:\n * .iox-node-{id} — applied to the inner element; handles layout/visual props\n * (display, flex, background, border, padding, etc.)\n * .iox-outer-{id} — applied to the host element by RenderDirective; handles\n * properties that participate in the PARENT flow (margin,\n * align-self, flex-grow/shrink/basis, order).\n *\n * This split is necessary because margin on an inner wrapper only adds internal\n * space — it does not push sibling elements. Applying margin to the host element\n * (which IS the flex/block child in the parent container) makes it work correctly.\n *\n * State styles (hover/active/focus) are stored under key `${nodeId}:${state}`\n * and compiled to `.iox-node-{id}:hover { … }` selectors.\n *\n * Design token variables are stored under the reserved key `__tokens__` and\n * compiled to a `:root { … }` block prepended to all other rules.\n *\n * Scoped to PageUiComponent.providers[] — one stylesheet per builder instance.\n */\n@Injectable()\nexport class StyleRegistryService {\n readonly changes$ = new Subject<void>();\n\n private rules = new Map<string, string>();\n private styleEl: HTMLStyleElement | null = null;\n\n /**\n * Properties that must live on the OUTER wrapper (.iox-outer-{id}) because they\n * affect how the element participates in its PARENT layout (flex/block flow).\n * Everything else goes to the INNER element (.iox-node-{id}).\n *\n * Exception — out-of-flow positioning (position:fixed/absolute):\n * When position is fixed or absolute, width is redirected to the inner element\n * (the positioned one) and a default width:100% is added if none is set, so the\n * element stays visible. top/right/bottom/left/zIndex are always inner because\n * they are co-ordinates of the positioned element, not the flow wrapper.\n * position itself goes to inner with `!important` to beat component-scoped CSS.\n */\n private static readonly OUTER_PROPS = new Set([\n 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft',\n 'alignSelf', 'flexGrow', 'flexShrink', 'flexBasis', 'order',\n // Grid-child placement — like the flex-child props above, these position the node\n // within the PARENT's grid, so they must land on the outer host, not the inner div.\n 'gridColumn', 'gridRow', 'justifySelf',\n 'width',\n ]);\n\n /** Properties that need !important on the inner element to beat Angular's scoped-CSS specificity boost. */\n private static readonly IMPORTANT_PROPS = new Set(['position']);\n\n init(): void {\n this.styleEl = document.createElement('style');\n this.styleEl.id = 'iox-runtime-styles';\n document.head.appendChild(this.styleEl);\n }\n\n /**\n * Write or update the base styles for a node, or a pseudo-class state override.\n *\n * @param nodeId The node's CSS id (used in `.iox-node-{nodeId}`)\n * @param styles Flat CSS property map (camelCase keys)\n * @param state Optional pseudo-class state ('hover' | 'active' | 'focus' | …).\n * When provided, compiles to `.iox-node-{id}:{state} { … }`.\n * State rules are NOT partitioned into inner/outer.\n * @param relativeToId For RELATIONAL states (e.g. 'parent-hover') this is the ancestor\n * css id; compiles to `.iox-node-{relativeToId}:{base} .iox-node-{nodeId} { … }`.\n * For TARGETED states (e.g. 'trigger-hover') this is the SCOPE css id\n * (nearest common ancestor of the styled node + trigger).\n * @param triggerId For TARGETED states only: the css id of the trigger node whose\n * pseudo-class drives the state. Compiles a `:has()`-scoped selector.\n */\n upsert(nodeId: string, styles: Record<string, any>, state?: ElementState, relativeToId?: string, triggerId?: string): void {\n if (!nodeId) return;\n\n if (state) {\n const key = `${nodeId}:${state}`;\n\n // Targeted states (trigger-hover): the styled node restyles when an ARBITRARY chosen\n // element is hovered. The selector is `:has()`-scoped to `relativeToId` (the nearest\n // common ancestor of styled + trigger) so it stays repetition-safe with one shared rule.\n if ((TARGETED_STATES as string[]).includes(state)) {\n const base = TARGETED_STATE_BASE[state];\n const css = (relativeToId && triggerId && base)\n ? this.compile(buildTargetedStateSelector(relativeToId, triggerId, nodeId, base), styles)\n : '';\n if (css) {\n this.rules.set(key, css);\n } else {\n this.rules.delete(key);\n }\n this.flush();\n return;\n }\n\n // Relational states (parent-hover): the pseudo-class lives on an ANCESTOR\n // and cascades to this element. Requires the ancestor's css id.\n if ((RELATIONAL_STATES as string[]).includes(state)) {\n const base = RELATIONAL_STATE_BASE[state];\n const css = (relativeToId && base)\n ? this.compile(`iox-node-${relativeToId}:${base} .iox-node-${nodeId}`, styles)\n : '';\n if (css) {\n this.rules.set(key, css);\n } else {\n this.rules.delete(key);\n }\n this.flush();\n return;\n }\n\n // Structural pseudo-classes (first-child, last-child, nth-child) target the\n // outer wrapper element so they participate correctly in grid/flex layout.\n const prefix = (STRUCTURAL_STATES as string[]).includes(state) ? 'iox-outer' : 'iox-node';\n const css = this.compile(`${prefix}-${nodeId}:${state}`, styles);\n if (css) {\n this.rules.set(key, css);\n } else {\n this.rules.delete(key);\n }\n this.flush();\n return;\n }\n\n // ::marker pseudo-element — emitted as a separate rule, not part of inner/outer split.\n const markerStyles = styles['__markerStyles'] as Record<string, any> | undefined;\n if (markerStyles && Object.keys(markerStyles).length) {\n const markerCss = this.compile(`iox-node-${nodeId}::marker`, markerStyles);\n if (markerCss) this.rules.set(`${nodeId}::marker`, markerCss);\n else this.rules.delete(`${nodeId}::marker`);\n } else {\n this.rules.delete(`${nodeId}::marker`);\n }\n\n const pos = String(styles['position'] ?? '');\n const isOutOfFlow = pos === 'fixed' || pos === 'absolute';\n\n const inner: Record<string, any> = {};\n const outer: Record<string, any> = {};\n for (const [k, v] of Object.entries(styles)) {\n if (k === '__markerStyles') continue;\n const wantsOuter = StyleRegistryService.OUTER_PROPS.has(k);\n // width goes to inner for fixed/absolute (the positioned element owns its own width)\n if (wantsOuter && !(isOutOfFlow && k === 'width')) {\n outer[k] = v;\n } else {\n inner[k] = v;\n }\n }\n // Ensure fixed/absolute elements stay visible when no explicit width is set\n if (isOutOfFlow && inner['width'] === undefined) {\n inner['width'] = '100%';\n }\n const innerCss = this.compile(`iox-node-${nodeId}`, inner);\n const outerCss = this.compile(`iox-outer-${nodeId}`, outer);\n const combined = [innerCss, outerCss].filter(Boolean).join('\\n');\n if (combined) {\n this.rules.set(nodeId, combined);\n } else {\n this.rules.delete(nodeId);\n }\n this.flush();\n }\n\n /**\n * Write the org-level design token variables as a `:root { … }` block.\n * Token names should be CSS custom property names without the `--` prefix\n * (e.g., `{ 'iox-primary-color': '#cb9090' }`).\n * Pass an empty object to clear all tokens.\n */\n upsertTokens(tokens: Record<string, string>): void {\n const entries = Object.entries(tokens)\n .filter(([, v]) => v !== undefined && v !== null && v !== '')\n .map(([k, v]) => ` --${k}: ${v};`);\n if (entries.length) {\n this.rules.set('__tokens__', `:root {\\n${entries.join('\\n')}\\n}`);\n } else {\n this.rules.delete('__tokens__');\n }\n this.flush();\n }\n\n remove(nodeId: string): void {\n if (!nodeId) return;\n // Remove base rule and all state rules for this node\n this.rules.delete(nodeId);\n for (const key of this.rules.keys()) {\n if (key.startsWith(`${nodeId}:`)) {\n this.rules.delete(key);\n }\n }\n this.flush();\n }\n\n destroy(): void {\n this.rules.clear();\n if (this.styleEl) {\n this.styleEl.remove();\n this.styleEl = null;\n }\n }\n\n private compile(className: string, styles: Record<string, any>): string {\n // Declaration compilation (kebab-case, viewport-unit rewrite, !important) lives in\n // the shared style-compiler so the SSR engine produces byte-identical output.\n // The inner/outer partition + selector emission stay here (builder-only concern).\n const decls = compileDeclarations(styles, StyleRegistryService.IMPORTANT_PROPS);\n if (!decls.length) return '';\n const body = decls.map(d => ` ${d};`).join('\\n');\n return `.${className} {\\n${body}\\n}`;\n }\n\n private _flushPending = false;\n\n private flush(): void {\n if (!this.styleEl || this._flushPending) return;\n this._flushPending = true;\n requestAnimationFrame(() => {\n this._flushPending = false;\n if (!this.styleEl) return;\n // __tokens__ always first so variables are available to all subsequent rules\n const tokenBlock = this.rules.get('__tokens__');\n const rest = Array.from(this.rules.entries())\n .filter(([k]) => k !== '__tokens__')\n .map(([, v]) => v);\n this.styleEl.textContent = [tokenBlock, ...rest].filter(Boolean).join('\\n');\n this.changes$.next();\n });\n }\n}\n","import { ChangeDetectorRef, Injectable } from '@angular/core';\nimport Moveable from 'moveable';\n\nimport { ComponentNode } from '../models/component.model';\nimport { DragEngineService, DragPayload } from './drag-engine.service';\nimport { StyleRegistryService } from './style-registry.service';\n\n/**\n * MoveableCanvasService — Phase 1 of the Moveable + Selecto migration\n * (see iox-ai-guidance/architecture/builder/moveable-migration.md).\n *\n * Drives DRAG for the SELECTED element via Moveable instead of interact.js, while REUSING the\n * proven reorder machinery (`DragEngineService.handleDrop`). It is a pure INPUT device: during a\n * drag it applies a TRANSIENT transform, and on drop it RESETS the transform to nothing and instead\n * reorders the layout tree (constraint C1 — a persisted transform on an in-flow canvas element\n * breaks Lenis scroll). Everything here runs ONLY when `moveableMode` is on; interact.js is\n * untouched, so the flag-off path is byte-identical to today.\n *\n * Scale: Moveable reads `getBoundingClientRect()` (already post-scale) and works in viewport\n * client coordinates, so drop hit-testing via `elementsFromPoint` / rects is scale-correct without\n * extra math. The control box is rendered into the same overlay container the selection overlay uses.\n */\n@Injectable({ providedIn: 'root' })\nexport class MoveableCanvasService {\n private moveable: Moveable | null = null;\n private container: HTMLElement | null = null;\n private scaleGetter: () => number = () => 1;\n\n private target: HTMLElement | null = null;\n private node: ComponentNode | null = null;\n private sourceId: string | null = null;\n /** A rubber-band multi-select group is active; `groupAt` guards the immediate follow-up click. */\n private groupActive = false;\n private groupAt = 0;\n\n /** Called after a successful reorder so the host can emit LAYOUT_CHANGED / refresh selection. */\n onReorder: (() => void) | null = null;\n /** Called after a geometry commit (resize) so the host can emit LAYOUT_CHANGED (undo/save). */\n onLayoutChanged: (() => void) | null = null;\n\n constructor(\n private dragEngine: DragEngineService,\n private styleRegistry: StyleRegistryService,\n ) {}\n\n /** Preview device viewport size (CSS px) — reference for vw/vh unit conversion on resize. */\n private viewportGetter: () => { width: number; height: number } = () => ({ width: 0, height: 0 });\n\n /** Wire the Moveable control box into `container`; `scaleGetter` returns the live canvas zoom;\n * `viewportGetter` returns the previewed device viewport size (for vw/vh resize conversion). */\n init(container: HTMLElement, scaleGetter: () => number, viewportGetter?: () => { width: number; height: number }): void {\n this.container = container;\n this.scaleGetter = scaleGetter;\n if (viewportGetter) this.viewportGetter = viewportGetter;\n }\n\n /** Point Moveable at the selected element (skips inline-edit + preview-clone targets). */\n select(element: HTMLElement | null, node: ComponentNode | null): void {\n // Swallow the deselect+click that fire on the SAME mouseup that just ended a rubber-band\n // group selection — otherwise the trailing clearSelect (→ destroyMoveable) or click would\n // instantly collapse the fresh group. Must run BEFORE the null-check below. A later,\n // deliberate click is well outside the ~250ms window and clears the group normally.\n if (this.groupActive && Date.now() - this.groupAt < 250) return;\n this.groupActive = false;\n\n this.target = null;\n this.node = null;\n this.sourceId = null;\n if (!element || !node || !this.container) { this.destroyMoveable(); return; }\n // Preview clones (repeater/slider rows) and hidden nodes are not editable.\n if (element.closest('[data-iox-hidden]') || (node as any).__previewClone) { this.destroyMoveable(); return; }\n\n this.target = element;\n this.node = node;\n this.sourceId = this.resolveDropzoneId(element);\n this.ensureMoveable();\n // Single selection: the OverlayService draws the outline, so Moveable stays line-less (a\n // group selection re-enables the lines in selectGroup).\n (this.moveable as any).hideDefaultLines = true;\n this.moveable!.target = element;\n // Snap against sibling/cousin nodes (not self, ancestors, or own descendants).\n (this.moveable as any).elementGuidelines = this.guidelines(element);\n // Drag is initiated by grabbing the ELEMENT itself (like interact.js) — not a Moveable\n // overlay area — so a plain click still passes through to selection/child-selection and only\n // a movement past the threshold starts a drag. Keeps Moveable visually silent (no hit-area box).\n (this.moveable as any).dragTarget = element;\n this.moveable!.updateRect();\n }\n\n /**\n * Multi-select group (Selecto rubber-band → group move). With 2+ targets Moveable shows its\n * bounding box + handles for the whole group; with ≤1 it defers to the normal single-select\n * path (select()), which keeps the OverlayService as the sole owner of single-selection visuals.\n * Returns true when a group is active so the host can skip the single-select wiring.\n */\n selectGroup(elements: HTMLElement[]): boolean {\n const visible = (elements || []).filter(el => {\n if (el.closest('[data-iox-hidden]')) return false;\n // Out-of-flow (fixed/absolute) nodes are positioned independently — grouping them with\n // in-flow siblings for a reflow-move is meaningless, and a fixed node's control-box\n // measurement is unreliable in the transformed canvas (see moveable-migration.md gap).\n const pos = getComputedStyle(el).position;\n return pos !== 'fixed' && pos !== 'absolute' && pos !== 'sticky';\n });\n // Keep only the TOP-MOST selected nodes — Moveable can't group an element with its own\n // descendant, and moving a parent already moves its children (the rubber band grabs both).\n const targets = visible.filter(el => !visible.some(other => other !== el && other.contains(el)));\n if (targets.length <= 1) { return false; }\n this.target = null;\n this.node = null;\n this.groupActive = true;\n this.groupAt = Date.now();\n this.ensureMoveable();\n // A GROUP box is a legitimate visual (nothing single-select in the overlay to duplicate).\n (this.moveable as any).hideDefaultLines = false;\n this.moveable!.target = targets as any;\n this.moveable!.updateRect();\n return true;\n }\n\n /** Recompute the control-box position (call on scroll/zoom/layout changes). */\n refresh(): void { this.moveable?.updateRect(); }\n\n /** Snap guideline elements for `target`: every node host except itself, its ancestors, and its\n * own descendants — i.e. siblings/cousins to align edges/centers against. */\n private guidelines(target: HTMLElement): HTMLElement[] {\n if (!this.container) return [];\n const all = Array.from(this.container.querySelectorAll<HTMLElement>('[class*=\"iox-node-\"]'));\n return all.filter(el => el !== target && !target.contains(el) && !el.contains(target));\n }\n\n destroy(): void { this.destroyMoveable(); this.container = null; }\n\n // ── internals ────────────────────────────────────────────────────────────\n\n private ensureMoveable(): void {\n if (this.moveable) return;\n this.moveable = new Moveable(this.container!, {\n target: undefined,\n draggable: true,\n resizable: true, // Phase 3 — corner handles → styleProps width/height (C2)\n rotatable: false, // (out-of-flow only — C1)\n origin: false,\n zoom: 1,\n // The OverlayService owns ALL selection visuals (pink outline, hover margin/padding rings,\n // toolbar, badges) — Moveable draws NO box/lines. It shows ONLY the 4 corner RESIZE handles\n // (renderDirections) and provides the drag hit-area. `iox-moveable-silent` + SCSS in\n // builder.component.scss hide the lines and style the handles to match, below the overlay.\n hideDefaultLines: true,\n renderDirections: ['nw', 'ne', 'sw', 'se'],\n className: 'iox-moveable-silent',\n // Snap-to-guides: align edges/centers to sibling elements while dragging/resizing, with\n // the distance readout. elementGuidelines are refreshed per selection (see select()).\n snappable: true,\n snapThreshold: 6,\n snapDirections: { top: true, left: true, bottom: true, right: true, center: true, middle: true },\n elementSnapDirections: { top: true, left: true, bottom: true, right: true, center: true, middle: true },\n snapGap: true,\n isDisplaySnapDigit: true,\n } as any);\n\n this.moveable.on('dragStart', (e) => {\n // Never start a drag from inside inline text editing.\n if ((e.inputEvent?.target as HTMLElement)?.closest?.('[contenteditable=\"true\"]')) {\n e.stop?.();\n }\n });\n // Transient transform only — visual feedback during the drag (C1: reset on drop).\n this.moveable.on('drag', (e) => { e.target.style.transform = e.transform; });\n this.moveable.on('dragEnd', (e) => this.commitDrag(e));\n\n // Resize: live inline width/height for feedback, then commit to styleProps on end (C2 — never\n // a transform:scale, so no Lenis-scroll break; the panel + save + SSR all see the real size).\n this.moveable.on('resize', (e) => {\n e.target.style.width = `${Math.round(e.width)}px`;\n e.target.style.height = `${Math.round(e.height)}px`;\n e.target.style.transform = e.drag.transform; // keeps the box anchored while resizing\n });\n this.moveable.on('resizeEnd', (e) => this.commitResize(e));\n }\n\n private destroyMoveable(): void {\n if (this.moveable) { this.moveable.destroy(); this.moveable = null; }\n }\n\n private commitDrag(e: any): void {\n const el = e.target as HTMLElement;\n // C1: never persist the transform — reset it; the result is a tree reorder, not a position.\n el.style.transform = '';\n if (!this.node) return;\n\n const pointer = this.lastPointer(e);\n if (!pointer) { this.onReorder?.(); return; }\n\n const targetId = this.dropzoneUnderPoint(pointer.x, pointer.y, el);\n if (!targetId) { this.onReorder?.(); return; }\n\n const children = this.dragEngine.getData(targetId) as ComponentNode[] | undefined;\n const cdr = this.dragEngine.getCdr(targetId) as ChangeDetectorRef | undefined;\n if (!children || !cdr) { this.onReorder?.(); return; }\n\n const insertIndex = this.calcInsertIndex(targetId, pointer.y);\n const srcChildren = this.sourceId ? (this.dragEngine.getData(this.sourceId) as ComponentNode[] | undefined) : undefined;\n const sourceIndex = srcChildren ? srcChildren.indexOf(this.node) : -1;\n const payload: DragPayload = { type: 'internal', data: this.node, sourceId: this.sourceId ?? null, sourceIndex };\n this.dragEngine.handleDrop(children, { payload, targetId, insertIndex }, targetId, cdr, () => {\n this.onReorder?.();\n // Re-point the control box at the moved element's (possibly new) host.\n setTimeout(() => this.moveable?.updateRect(), 0);\n });\n }\n\n private commitResize(e: any): void {\n const el = e.target as HTMLElement;\n el.style.transform = ''; // C1: never persist a transform on an in-flow canvas element\n if (!this.node) { return; }\n const last = e.lastEvent ?? e;\n const wPx = last.width ?? el.getBoundingClientRect().width;\n const hPx = last.height ?? el.getBoundingClientRect().height;\n // C2: geometry goes to styleProps (width/height) — never a transform:scale. Keep the unit the\n // user CONFIGURED (%, vw, em, …) instead of always forcing px.\n this.applyStyle(this.node, {\n width: this.toConfiguredUnit(wPx, this.currentStyleValue('width'), el, 'width'),\n height: this.toConfiguredUnit(hPx, this.currentStyleValue('height'), el, 'height'),\n });\n // Clear the transient inline size so the styleProps `.iox-node` rule drives it (single source).\n el.style.width = '';\n el.style.height = '';\n this.onLayoutChanged?.();\n setTimeout(() => this.moveable?.updateRect(), 0);\n }\n\n /** The node's currently-configured value for a style trait (e.g. '100%', '120px'). */\n private currentStyleValue(name: string): string | undefined {\n for (const group of ((this.node as any)?.styleTraits ?? [])) {\n for (const trait of (group.traits ?? [])) {\n if (trait.name === name) return trait.default;\n }\n }\n return undefined;\n }\n\n /** Convert a pixel measurement into the unit the user configured, so resizing from the canvas\n * preserves %, vw/vh, em/rem etc. instead of always writing px. */\n private toConfiguredUnit(px: number, current: string | undefined, el: HTMLElement, axis: 'width' | 'height'): string {\n const round = (n: number) => Math.round(n * 100) / 100;\n const m = String(current ?? '').trim().match(/(px|%|vw|vh|vmin|vmax|rem|em)\\s*$/);\n const unit = m ? m[1] : 'px';\n switch (unit) {\n case '%': {\n const ref = axis === 'width' ? (el.parentElement?.clientWidth ?? 0) : (el.parentElement?.clientHeight ?? 0);\n return ref > 0 ? `${round(px / ref * 100)}%` : `${Math.round(px)}px`;\n }\n case 'vw': { const vw = this.viewportGetter().width; return vw > 0 ? `${round(px / vw * 100)}vw` : `${Math.round(px)}px`; }\n case 'vh': { const vh = this.viewportGetter().height; return vh > 0 ? `${round(px / vh * 100)}vh` : `${Math.round(px)}px`; }\n case 'vmin': { const { width, height } = this.viewportGetter(); const base = Math.min(width, height); return base > 0 ? `${round(px / base * 100)}vmin` : `${Math.round(px)}px`; }\n case 'vmax': { const { width, height } = this.viewportGetter(); const base = Math.max(width, height); return base > 0 ? `${round(px / base * 100)}vmax` : `${Math.round(px)}px`; }\n case 'rem': { const fs = parseFloat(getComputedStyle(el.ownerDocument.documentElement).fontSize) || 16; return `${round(px / fs)}rem`; }\n case 'em': { const fs = parseFloat(getComputedStyle(el).fontSize) || 16; return `${round(px / fs)}em`; }\n default: return `${Math.round(px)}px`;\n }\n }\n\n /** Write geometry changes into the node's styleTraits (the serialized source of truth) and the\n * central stylesheet, so the style panel, save (self-describing), and SSR engine all agree. */\n private applyStyle(node: ComponentNode, changes: Record<string, string>): void {\n const styles: Record<string, any> = {};\n for (const group of ((node as any).styleTraits ?? [])) {\n for (const trait of (group.traits ?? [])) {\n if (trait.name in changes) trait.default = changes[trait.name];\n if (trait.name !== undefined && trait.default !== undefined) styles[trait.name] = trait.default;\n }\n }\n const cssId = (node as any).styleId ?? node.id;\n if (cssId) this.styleRegistry.upsert(cssId, styles);\n }\n\n /** Final pointer position from the Moveable end event (client/viewport px). */\n private lastPointer(e: any): { x: number; y: number } | null {\n const ie = e.inputEvent as MouseEvent | undefined;\n if (ie && typeof ie.clientX === 'number') return { x: ie.clientX, y: ie.clientY };\n if (Array.isArray(e.clientX)) return { x: e.clientX[0], y: e.clientY[0] };\n if (typeof e.clientX === 'number') return { x: e.clientX, y: e.clientY };\n return null;\n }\n\n /** Walk up from an element to the nearest registered dropzone id (el.id is stamped by DragEngine). */\n private resolveDropzoneId(el: HTMLElement | null): string | null {\n let e: HTMLElement | null = el;\n while (e) {\n if (e.id && this.dragEngine.getData(e.id) !== undefined) return e.id;\n e = e.parentElement;\n }\n return null;\n }\n\n /** Topmost registered dropzone under the pointer that is NOT inside the dragged element's subtree. */\n private dropzoneUnderPoint(x: number, y: number, draggedEl: HTMLElement): string | null {\n const stack = document.elementsFromPoint(x, y) as HTMLElement[];\n for (const el of stack) {\n const id = this.resolveDropzoneId(el);\n if (!id) continue;\n const zoneEl = document.getElementById(id);\n if (zoneEl && draggedEl.contains(zoneEl)) continue; // don't drop into own subtree\n return id;\n }\n return null;\n }\n\n /** Insertion index within a dropzone by comparing pointer Y to each child's vertical midpoint. */\n private calcInsertIndex(targetId: string, y: number): number {\n const zoneEl = document.getElementById(targetId);\n if (!zoneEl) return 0;\n const childWraps = Array.from(zoneEl.children).filter(\n (c) => (c as HTMLElement).matches('.container-child, .section-child, [data-iox-draggable]'),\n ) as HTMLElement[];\n let idx = 0;\n for (const w of childWraps) {\n const r = w.getBoundingClientRect();\n if (y > r.top + r.height / 2) idx++;\n }\n return idx;\n }\n}\n","import { Injectable } from '@angular/core';\nimport Selecto from 'selecto';\n\n/**\n * SelectoCanvasService — Phase 1 of the Moveable + Selecto migration\n * (see iox-ai-guidance/architecture/builder/moveable-migration.md).\n *\n * Rubber-band MULTI-select on the canvas. Runs ONLY when `moveableMode` is on; interact.js is\n * untouched, so the flag-off path is byte-identical to today.\n *\n * - `selectFromInside: false` — a drag that STARTS on a node moves it (Moveable); the rubber band\n * only starts from empty canvas space, so single-element drag/select is unaffected.\n * - `selectByClick: false` — a plain click still flows through the existing single-select path\n * (OverlayService), so nothing about clicking changes.\n * - `rootContainer` is the UNtransformed `.preview` (Selecto explicitly wants a non-transformed\n * root): the rubber band and the targets' client rects are then in the same viewport space, so\n * hit-testing is correct even though the canvas content is `transform: scale()`d.\n *\n * On a rubber-band release it emits the selected node host elements; the host maps them to nodes and\n * drives Moveable with the group (see MoveableCanvasService.selectGroup).\n */\n@Injectable({ providedIn: 'root' })\nexport class SelectoCanvasService {\n private selecto: Selecto | null = null;\n\n /** Called on rubber-band release with the selected `.iox-node-*` host elements (may be empty). */\n onSelect: ((elements: HTMLElement[]) => void) | null = null;\n\n /** Count from the last rubber-band release (state/telemetry). */\n lastSelectedCount = 0;\n\n /**\n * Wire Selecto onto the canvas.\n * @param container untransformed element the rubber band renders into (`.preview`).\n * @param dragContainer element the drag is listened on (the same `.preview`).\n * @param selectableRoot the node container whose `.iox-node-*` descendants are selectable.\n */\n init(container: HTMLElement, dragContainer: HTMLElement, selectableRoot: HTMLElement): void {\n this.destroy();\n this.selecto = new Selecto({\n container,\n rootContainer: container,\n dragContainer,\n // Only real node hosts inside the canvas — never overlay/toolbar chrome.\n selectableTargets: [`#${selectableRoot.id || 'canvas-preview'} [class*=\"iox-node-\"]`],\n selectByClick: false,\n selectFromInside: false,\n hitRate: 0, // any intersection selects — forgiving rubber band\n });\n this.selecto.on('selectEnd', (e: any) => {\n this.lastSelectedCount = (e.selected as HTMLElement[]).length;\n this.onSelect?.((e.selected as HTMLElement[]).filter(el => !!el));\n });\n }\n\n /** Keep Selecto's selectable set fresh after layout changes (nodes added/removed/reordered). */\n refresh(): void { /* selectableTargets is a live function — nothing to recompute */ }\n\n destroy(): void {\n this.selecto?.destroy();\n this.selecto = null;\n }\n}\n","// Virtual trait composition now lives in @vectoriox/iox-ui so the SSR engine (which does NOT depend\n// on iox-builder) can use the SAME logic — otherwise the engine emitted raw virtual keys\n// (translate-x, filter-blur…) as invalid CSS. This is a re-export passthrough to keep existing\n// iox-builder imports (`../style-compose`) working with no duplicated implementation.\nexport { composeVirtualTraits, VIRTUAL_TRAIT_KEYS } from '@vectoriox/iox-ui';\n","import { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectorRef,\n ComponentRef,\n Directive,\n EnvironmentInjector,\n EventEmitter,\n Inject,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewContainerRef,\n createComponent,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { safeSetInput } from '@vectoriox/iox-ui';\n\nimport { ComponentNode, ElementState, RELATIONAL_STATES, TARGETED_STATES } from '../models/component.model';\nimport { ComponentRegistryService } from '../services/component-registry.service';\nimport { DragEngineService } from '../services/drag-engine.service';\nimport { OverlayService } from '../overlay/overlay.service';\nimport { StyleRegistryService } from '../services/style-registry.service';\nimport { InteractionEngineService } from '../services/interaction-engine.service';\nimport { PanelEventService, PanelEventTypes } from '../panels/panel-event.service';\nimport { composeVirtualTraits } from '../style-compose';\n\n// Module-level counter — unique drop-list ID per Section instance across the whole app session.\nlet dropListCounter = 0;\n\n/**\n * Node types whose iox-ui component is a DIRECTIVE-HOST (element+attribute selector on the real\n * tag, e.g. `img[iox-img]`, `h1[iox-heading]`). The host IS the element, so we must NOT force an\n * inline `display:block` (it out-ranks both `:host` and the styleProps `.iox-node` rule — the same\n * bug the SSR engine hit). Mirrors the engine's DIRECTIVE_HOST_TYPES for the leaf/variable-tag set.\n * NOTE: Container/Section/List/ListItem render via iox-BUILDER wrapper components here (not\n * directive-hosts), so they are intentionally excluded.\n */\nconst DIRECTIVE_HOST_TYPES = new Set<string>([\n 'Image', 'Icon', 'Divider', 'Spacer', 'Button', 'Link', 'Heading', 'Text', 'ButtonBlock',\n // Phase 2 (9c): layout components converted to directive-hosts (host IS the real tag).\n 'Section', 'Container', 'List', 'ListItem',\n]);\n\nconst CONTAINER_TAGS = ['div', 'section', 'article', 'header', 'footer', 'main', 'nav', 'ul', 'ol', 'li'];\n\n/**\n * RenderDirective — applied to <ng-container> to dynamically instantiate a\n * builder component with zero wrapper elements in the DOM.\n *\n * A directive's ViewContainerRef inserts the created component's host element as\n * a sibling of the ng-container comment node — directly inside the parent element\n * — so the resulting DOM has no extra <app-renderer> wrapper.\n *\n * Usage:\n * <ng-container [ioxRender]=\"node\"\n * (onClick)=\"handleClick($event)\"\n * (onMouseEnter)=\"handleMouseEnter($event)\"\n * (onMouseLeave)=\"handleMouseLeave()\">\n * </ng-container>\n */\n@Directive({\n selector: '[ioxRender]',\n standalone: false,\n})\nexport class RenderDirective implements OnInit, OnDestroy {\n @Input() ioxRender: ComponentNode | null = null;\n /**\n * WRAPPER-COLLAPSE opt-in (task 9c). When a parent renders a child DIRECTLY (no `iox-outer`\n * wrapper div), it passes the parent dropzone id here. The RenderDirective then puts the\n * `iox-outer-{id}` class on the node HOST (so the host is the single flex/grid item carrying both\n * `iox-outer` + `iox-node`, like the SSR engine) and registers drag on the host. When unset\n * (`null`), the legacy path is byte-identical — the parent's wrapper owns `iox-outer` + drag.\n */\n @Input() ioxDragSourceId: string | null = null;\n @Output() onClick = new EventEmitter<any>();\n @Output() onMouseEnter = new EventEmitter<any>();\n @Output() onMouseLeave = new EventEmitter<any>();\n\n private childSubs: Subscription[] = [];\n /** Host element drag was registered on (collapsed path) — unregistered on destroy. */\n private hostDragEl: HTMLElement | null = null;\n\n constructor(\n private vcr: ViewContainerRef,\n private injector: Injector,\n private envInjector: EnvironmentInjector,\n @Inject(DOCUMENT) private doc: Document,\n private registryService: ComponentRegistryService,\n private overlayService: OverlayService,\n private styleRegistry: StyleRegistryService,\n private interactionEngine: InteractionEngineService,\n private cdr: ChangeDetectorRef,\n private panelEventService: PanelEventService,\n private dragEngine: DragEngineService,\n ) {}\n\n /**\n * Tag for a variable-tag directive-host (whose selector lists several tags, so\n * `vcr.createComponent` would always pick the first). Reads the value from the node's traits.\n * Returns null for fixed-tag hosts and non-directive-host components.\n */\n private variableTag(node: ComponentNode): string | null {\n const traitVal = (name: string): any =>\n (Object.values(node.traits || {}) as any[]).find(t => t?.name === name)?.default;\n switch (node.type) {\n case 'Heading': {\n const l = traitVal('level');\n return ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(l) ? l : 'h2';\n }\n case 'Text':\n return traitVal('tag') === 'span' ? 'span' : 'p';\n case 'ButtonBlock':\n return traitVal('tag') === 'a' ? 'a' : 'button';\n case 'Container':\n case 'List':\n case 'ListItem': {\n const t = traitVal('htmlTag');\n if (CONTAINER_TAGS.includes(t)) return t;\n return node.type === 'List' ? 'ul' : node.type === 'ListItem' ? 'li' : 'div';\n }\n default:\n return null;\n }\n }\n\n ngOnInit(): void {\n this.render(this.ioxRender);\n }\n\n ngOnDestroy(): void {\n this.childSubs.forEach(s => s.unsubscribe());\n if (this.hostDragEl) { this.dragEngine.unregisterDraggable(this.hostDragEl); this.hostDragEl = null; }\n if (this.ioxRender) {\n this.interactionEngine.detach(this.ioxRender);\n this.overlayService.unregisterNode(this.ioxRender);\n // Only remove the CSS rule if this node OWNS it (i.e. it is not a clone).\n // Clones set styleId to point at the template node's id — removing would\n // destroy the shared rule and break all other rows.\n const isClone = !!this.ioxRender.styleId;\n if (!isClone && this.ioxRender.id) {\n this.styleRegistry.remove(this.ioxRender.id);\n }\n }\n }\n\n /**\n * Walk up from `target` to find a registered parent component element.\n * Returns { element, node } if found, or null if the target is outside\n * all known builder components (e.g. the canvas background).\n */\n /**\n * The nearest ancestor node's cssId, read from the DOM `iox-node-{id}` classes (NOT the overlay\n * registry — at state-restore time the parent isn't registered yet, since it registers only\n * AFTER rendering its children). Used to key relational (parent-hover) rules. (issue #1)\n */\n private resolveParentNodeId(childEl: HTMLElement | null): string | undefined {\n let el = childEl?.parentElement ?? null;\n while (el) {\n for (let i = 0; i < el.classList.length; i++) {\n const c = el.classList[i];\n if (c.startsWith('iox-node-')) return c.slice('iox-node-'.length);\n }\n el = el.parentElement;\n }\n return undefined;\n }\n\n /** Nearest ANCESTOR of the styled element that is a registered iox-node AND contains the trigger\n * element — i.e. the DOM equivalent of `nearestCommonAncestorId`, resolved per rendered instance.\n * Used to re-emit a `trigger-hover` rule after a move/duplicate. Returns undefined if the trigger\n * isn't in the DOM yet (caller then skips rather than clobbering the existing rule). */\n private resolveTargetedScopeId(styledEl: HTMLElement | null, triggerCssId: string): string | undefined {\n let el = styledEl?.parentElement ?? null;\n while (el) {\n let cssId: string | undefined;\n for (let i = 0; i < el.classList.length; i++) {\n const c = el.classList[i];\n if (c.startsWith('iox-node-')) { cssId = c.slice('iox-node-'.length); break; }\n }\n if (cssId && el.querySelector(`.iox-node-${triggerCssId}`)) return cssId;\n el = el.parentElement;\n }\n return undefined;\n }\n\n private findParentNodeElement(target: HTMLElement): { element: HTMLElement; node: ComponentNode } | null {\n let el: HTMLElement | null = target;\n while (el) {\n const match = this.overlayService.findNodeByElement(el);\n if (match) {\n return { element: el, node: match.node };\n }\n el = el.parentElement;\n }\n return null;\n }\n\n private render(node: ComponentNode | null): void {\n if (!node) return;\n\n const componentClass = this.registryService.getComponent(node.type);\n if (!componentClass) return;\n\n // vcr.createComponent inserts the new component's host element after the ng-container\n // comment anchor — directly inside the parent element. No wrapper div is created.\n // Variable-tag directive-hosts (Heading/Text/ButtonBlock) list every allowed tag in their\n // selector, so vcr.createComponent would always pick the FIRST — create them on an explicit\n // hostElement of the right tag and insert that view instead (mirrors the SSR engine).\n const tag = this.variableTag(node);\n let componentRef: ComponentRef<any>;\n if (tag) {\n const hostElement = this.doc.createElement(tag);\n componentRef = createComponent(componentClass, {\n environmentInjector: this.envInjector,\n elementInjector: this.injector,\n hostElement,\n });\n this.vcr.insert(componentRef.hostView);\n } else {\n componentRef = this.vcr.createComponent(componentClass, { injector: this.injector });\n }\n\n // Apply regular trait defaults (title, image, description, etc.). safeSetInput() uses\n // setInput() for declared inputs (marks the view dirty, integrates with CD + signal inputs)\n // and falls back to direct assignment for anything the component doesn't declare — so a\n // trait that has no matching @Input (e.g. `sourcePath` on a SliderContainer) never emits the\n // NG0303 console error that a bare setInput() would. Skip SectionLabel traits — they are\n // UI-only panel headers with no matching input.\n Object.values(node.traits || {}).forEach((trait: any) => {\n if (trait.type === 'sectionLabel') return;\n safeSetInput(componentRef, trait.name, trait.default);\n });\n\n // Build initial style map from styleTraits defaults.\n const initialStyle: Record<string, any> = {};\n if (node.styleTraits?.length) {\n for (const group of node.styleTraits) {\n for (const trait of group.traits) {\n if (trait.default !== undefined) {\n initialStyle[trait.name] = trait.default;\n }\n }\n }\n }\n\n // Use styleId when present (clone nodes share the template node's CSS rule).\n const cssId = node.styleId ?? node.id;\n\n // Register CSS rules in the central stylesheet (inner + outer split).\n if (cssId) {\n const composedBase = composeVirtualTraits(initialStyle);\n this.styleRegistry.upsert(cssId, composedBase);\n // Restore per-state overrides saved from a previous session.\n if (node.stateStyles) {\n const childEl = componentRef.location?.nativeElement as HTMLElement | null;\n for (const state of Object.keys(node.stateStyles) as ElementState[]) {\n const stateMap = (node.stateStyles as Record<string, any>)[state];\n if (!stateMap || !Object.keys(stateMap).length) continue;\n if ((RELATIONAL_STATES as string[]).includes(state)) {\n // Relational states (parent-hover) compile to\n // `.iox-node-{parentId}:hover .iox-node-{childId}` — they need the CURRENT parent id.\n // Resolve it from the DOM so the rule re-resolves after a cross-container MOVE (which\n // re-renders the child). If it can't be resolved yet (initial load: the parent registers\n // its class only after rendering its children), SKIP — do NOT clobber the correct rule\n // that page-ui's applyStateEnhancements already produced from the node tree. (issue #1)\n const relativeToId = this.resolveParentNodeId(childEl);\n if (!relativeToId) continue;\n this.styleRegistry.upsert(cssId, composeVirtualTraits(stateMap, initialStyle), state, relativeToId);\n } else if ((TARGETED_STATES as string[]).includes(state)) {\n // Targeted states (trigger-hover) compile to a `:has()` scoped to the nearest\n // common ancestor of the styled node + the chosen trigger. On a re-render (move,\n // duplicate, drop) we must RE-EMIT with a freshly-resolved scope — otherwise the\n // rule is clobbered and the hover stops working. Resolve the scope from the live\n // DOM (works per-instance); SKIP if the trigger isn't rendered yet, so we don't\n // clobber the correct rule page-ui's applyStateEnhancements already produced.\n const triggerCssId = node.stateTriggers?.[state];\n if (!triggerCssId) continue;\n const scopeId = this.resolveTargetedScopeId(childEl, triggerCssId);\n if (!scopeId) continue;\n this.styleRegistry.upsert(cssId, composeVirtualTraits(stateMap, initialStyle), state, scopeId, triggerCssId);\n } else {\n this.styleRegistry.upsert(cssId, composeVirtualTraits(stateMap, initialStyle), state);\n }\n }\n }\n }\n\n // Set nodeId — declared as @Input() on every builder component.\n if (cssId) {\n componentRef.setInput('nodeId', cssId);\n }\n\n // Pass the node reference. 'node' is NOT declared as @Input on leaf\n // components (Card, Text, etc.) — always use direct assignment to avoid\n // Angular NG0303 warnings that setInput() would trigger.\n (componentRef.instance as any)['node'] = node;\n\n // Layout components (Section/Container) read this.style internally for\n // CDK drop list orientation. 'style' is not declared as @Input so use\n // direct assignment; children and dropListId ARE @Input on all layouts.\n // Guard with Array.isArray so leaf nodes whose serialized data happens\n // to have a stale/empty children key don't trigger NG0303.\n const instance = componentRef.instance as any;\n if (Array.isArray(node.children) && 'dropListId' in instance) {\n instance['style'] = { ...initialStyle };\n componentRef.setInput('children', node.children);\n componentRef.setInput('dropListId', `section-${++dropListCounter}`);\n }\n\n // Forward child events from layout components (Section → builder)\n const childClick: EventEmitter<any> = instance['childClick'];\n const childMouseEnter: EventEmitter<any> = instance['childMouseEnter'];\n const childMouseLeave: EventEmitter<any> = instance['childMouseLeave'];\n if (childClick) this.childSubs.push(childClick.subscribe((e: any) => this.onClick.emit(e)));\n if (childMouseEnter) this.childSubs.push(childMouseEnter.subscribe((e: any) => this.onMouseEnter.emit(e)));\n if (childMouseLeave) this.childSubs.push(childMouseLeave.subscribe(() => this.onMouseLeave.emit()));\n\n componentRef.changeDetectorRef.detectChanges();\n\n // Attach overlay-driven DOM event listeners directly on the component host element.\n // For layout components the host element is <app-section>; for leaf components\n // it is e.g. <app-card>. Either way this is the correct inspectable element.\n const nativeEl: HTMLElement | null = componentRef.location?.nativeElement ?? null;\n\n // Custom element host defaults to display:inline. Set it to block so it participates\n // properly in layout and CDK can capture its bounding rect. SKIP for directive-hosts: the\n // host is a real element with its own display, and an inline style here out-ranks both\n // `:host` and the styleProps `.iox-node` rule (it would e.g. force Link's <a> to block).\n if (nativeEl && !DIRECTIVE_HOST_TYPES.has(node.type)) {\n nativeEl.style.display = 'block';\n }\n // Preview clones (repeater/slider-generated rows) are display-only — only the\n // template node is selectable/editable. Skip overlay registration + interaction\n // wiring for them so they can't be hovered, selected, or edited on the canvas.\n const isPreviewClone = !!(node as any).__previewClone;\n if (nativeEl && !isPreviewClone) {\n // WRAPPER-COLLAPSE (opt-in via ioxDragSourceId): the HOST is the flex/grid item, so it\n // carries `iox-outer-{id}` (margin/width) IN ADDITION to `iox-node-{id}` (visual) — one\n // element, like the engine — and drag is registered on it (the wrapper is gone). The\n // StyleRegistry's split still works: both classes are on this one host.\n if (this.ioxDragSourceId != null && cssId) {\n nativeEl.classList.add(`iox-outer-${cssId}`);\n const sourceId = this.ioxDragSourceId;\n this.dragEngine.registerDraggable(nativeEl, () => ({\n type: 'internal' as const,\n data: node,\n sourceId,\n sourceIndex: this.dragEngine.getData(sourceId)?.indexOf(node) ?? -1,\n }));\n this.hostDragEl = nativeEl;\n }\n // Register node → element mapping for parent lookups\n this.overlayService.registerNode(node, nativeEl, componentRef);\n // Notify BindingsComponent so it re-applies bindings on the new\n // ComponentRef — needed after cross-container drag where Angular\n // creates a fresh instance that hasn't had bindings pushed to it yet.\n this.panelEventService.emit(PanelEventTypes.NODE_RENDERED, { node });\n\n nativeEl.addEventListener('mouseenter', (event: MouseEvent) => {\n if ((event as any)._fromClick) return;\n if (nativeEl.hasAttribute('data-iox-hidden')) return;\n this.onMouseEnter.emit({ element: nativeEl, node });\n });\n nativeEl.addEventListener('mouseleave', (event: MouseEvent) => {\n if (nativeEl.hasAttribute('data-iox-hidden')) return;\n // When leaving a child component, check if the mouse moved to a\n // parent component (e.g. card → section). If so, emit mouseenter\n // for that parent instead of clearing hover entirely.\n const related = event.relatedTarget as HTMLElement | null;\n if (related) {\n const parentEntry = this.findParentNodeElement(related);\n if (parentEntry) {\n this.onMouseEnter.emit(parentEntry);\n return;\n }\n }\n this.onMouseLeave.emit();\n });\n nativeEl.addEventListener('click', (event: MouseEvent) => {\n event.stopPropagation();\n if (nativeEl.hasAttribute('data-iox-hidden')) return;\n this.onClick.emit({ element: nativeEl, node, componentRef });\n });\n nativeEl.addEventListener('contextmenu', (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if (nativeEl.hasAttribute('data-iox-hidden')) return;\n this.onClick.emit({ element: nativeEl, node, componentRef });\n this.overlayService.triggerContextMenu(event.clientX, event.clientY);\n });\n }\n\n // Wire up interactions (animations) after the element is in the DOM. Preview clones are\n // non-selectable (not overlay-registered) but MUST still animate — parity with the SSR\n // runtime, which animates every repeated row — so attach by element (issue #2).\n if (!isPreviewClone) {\n this.interactionEngine.attach(node);\n } else if (nativeEl) {\n this.interactionEngine.attachTo(node, nativeEl);\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { StylePreset } from '../models/component.model';\n\n/**\n * PresetRegistryService — in-memory store for org-level style presets.\n *\n * Loaded once per page by PageUiComponent (alongside the page layout) and\n * injected into the overlay (for badge labels) and style panel (for apply /\n * create / edit / detach flows).\n *\n * Scoped to PageUiComponent.providers[] — one registry per builder instance.\n */\n@Injectable()\nexport class PresetRegistryService {\n private presets = new Map<string, StylePreset>();\n\n setPresets(presets: StylePreset[]): void {\n this.presets.clear();\n for (const p of presets) {\n this.presets.set(p.id, p);\n }\n }\n\n getPreset(id: string): StylePreset | undefined {\n return this.presets.get(id);\n }\n\n getAll(): StylePreset[] {\n return Array.from(this.presets.values());\n }\n\n upsert(preset: StylePreset): void {\n this.presets.set(preset.id, preset);\n }\n\n remove(id: string): void {\n this.presets.delete(id);\n }\n\n /**\n * Resolve the effective style map for a node that references a preset.\n * Merges preset base styles with the node's local overrides so that\n * element-level values always win.\n *\n * @param presetId ID of the applied preset.\n * @param overrides The node's `styleOverrides` record (may be empty).\n */\n resolveStyles(presetId: string, overrides: Record<string, any>): Record<string, any> {\n const preset = this.presets.get(presetId);\n if (!preset) return { ...overrides };\n return { ...preset.styleProps, ...overrides };\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { OverlayEntry, OverlayService, ToolbarAction } from './overlay.service';\nimport { IoxInteraction } from '../models/component.model';\nimport { ViewportService } from '../services/viewport.service';\nimport { PresetRegistryService } from '../services/preset-registry.service';\nimport { SymbolRegistryService } from '../services/symbol-registry.service';\nimport { InteractionPresetRegistryService } from '../services/interaction-preset-registry.service';\nimport { InteractionEngineService } from '../services/interaction-engine.service';\nimport { BuilderClipboardService } from '../services/builder-clipboard.service';\nimport { StyleRegistryService } from '../services/style-registry.service';\nimport { PanelEventService, PanelEventTypes } from '../panels/panel-event.service';\n\n@Component({\n selector: 'app-overlay',\n templateUrl: './overlay.component.html',\n styleUrls: ['./overlay.component.scss'],\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OverlayComponent implements OnInit, OnDestroy {\n @Output() toolbarAction = new EventEmitter<{ action: ToolbarAction; entry: OverlayEntry; position?: 'before' | 'after'; interaction?: IoxInteraction; wrapType?: string }>();\n\n /** Element types the selected node can be wrapped in (Wrap-in submenu). Phase 1: layout containers. */\n readonly wrapTargets: { type: string; label: string; icon: string }[] = [\n { type: 'Container', label: 'Container', icon: 'ph-thin ph-square' },\n { type: 'LinkedContainer', label: 'Linked Container', icon: 'ph-thin ph-link-simple' },\n ];\n\n /** Whether the Wrap-in flyout submenu is open (hover-driven). */\n public wrapSubmenuOpen = false;\n\n public hoverEntry: OverlayEntry | null = null;\n public selectEntry: OverlayEntry | null = null;\n\n // Hover: Chrome DevTools-style ring layers (clip-path punches out content area)\n public hiOutlineStyle: Record<string, string> = {};\n public hiMarginStyle: Record<string, string> = {};\n public hiPaddingStyle: Record<string, string> = {};\n\n // Select: simple IOX pink outline\n public selectOutlineStyle: Record<string, string> = {};\n\n // More dropdown — opened from the ⋯ button or from a right-click.\n // Position is set to fixed viewport coords so it appears at the cursor.\n public moreMenuVisible = false;\n public moreMenuStyle: Record<string, string> = {};\n\n // Badge context menu — opened by right-clicking a preset badge.\n public badgeMenuVisible = false;\n public badgeMenuType: 'style' | 'interaction' | null = null;\n public badgeMenuPos = { x: 0, y: 0 };\n // The specific IoxInteraction being right-clicked (interaction badges only).\n public badgeInteraction: IoxInteraction | null = null;\n\n // Tracks which badge was last clicked — used by Cmd+C in page-ui.\n public activeBadgeType: 'style' | 'interaction' | null = null;\n\n private subs: Subscription[] = [];\n private resizeObserver?: ResizeObserver;\n private containerResizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n // All overlay repositioning is funnelled through a single coalesced RAF.\n // Observer callbacks (Resize/Mutation) MUST NOT call updateAll()/markForCheck()\n // synchronously — during a live interaction animation they can fire while\n // Angular is inside ApplicationRef.synchronize(), re-dirtying the view within\n // the same loop and blowing past MAX_SYNC_RUNS → NG0103. scheduleUpdate() defers\n // the markForCheck to the next frame, outside the current synchronize() pass,\n // and collapses a burst of notifications into one update per frame.\n private _updateRaf = 0;\n private scheduleUpdate = (): void => {\n cancelAnimationFrame(this._updateRaf);\n this._updateRaf = requestAnimationFrame(() => this.updateAll());\n };\n private boundUpdate = () => this.scheduleUpdate();\n private boundScrollUpdate = () => this.scheduleUpdate();\n private activeScrollContainer: HTMLElement | null = null;\n\n constructor(\n private overlayService: OverlayService,\n private viewportService: ViewportService,\n private presetRegistry: PresetRegistryService,\n private symbolRegistry: SymbolRegistryService,\n private interactionPresetRegistry: InteractionPresetRegistryService,\n private interactionEngine: InteractionEngineService,\n private clipboard: BuilderClipboardService,\n private styleRegistry: StyleRegistryService,\n private panelEventService: PanelEventService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.subs.push(\n this.overlayService.hover$.subscribe(entry => {\n this.hoverEntry = entry;\n this.updateHover();\n this.cdr.markForCheck();\n }),\n this.overlayService.select$.subscribe(entry => {\n this.selectEntry = entry;\n if (!entry) this.activeBadgeType = null;\n this.observeSelectElement();\n this.updateSelect();\n this.cdr.markForCheck();\n })\n );\n\n window.addEventListener('resize', this.boundUpdate, { passive: true });\n\n // Re-calculate overlay positions whenever zoom / device changes.\n this.subs.push(\n this.viewportService.state$.subscribe(() => {\n // Delay one frame so the DOM has applied the new transform/width.\n this.scheduleUpdate();\n })\n );\n\n // Re-calculate when CSS rules change (margin/width applied via stylesheet).\n this.subs.push(\n this.styleRegistry.changes$.subscribe(() => this.scheduleUpdate())\n );\n\n // Watch the canvas container for size changes (e.g. right panel open/close\n // transition changes canvas width, shifting element positions).\n const container = this.overlayService.getContainer();\n if (container) {\n if (typeof ResizeObserver !== 'undefined') {\n this.containerResizeObserver = new ResizeObserver(this.scheduleUpdate);\n this.containerResizeObserver.observe(container);\n }\n }\n\n // iox-page-component's Lenis dispatches a synthetic 'scroll' event on\n // its wrapper element after each raf tick — listen to that to reposition\n // overlay boxes as the canvas scrolls.\n this.subs.push(\n this.overlayService.scrollContainer$.subscribe(el => {\n this.activeScrollContainer?.removeEventListener('scroll', this.boundScrollUpdate);\n this.activeScrollContainer = el;\n el.addEventListener('scroll', this.boundScrollUpdate, { passive: true });\n })\n );\n\n // Open the more menu when a canvas element is right-clicked.\n this.subs.push(\n this.overlayService.contextMenu$.subscribe(({ x, y }) => {\n this.moreMenuStyle = { top: `${y}px`, left: `${x}px` };\n this.moreMenuVisible = true;\n this.cdr.markForCheck();\n })\n );\n }\n\n ngOnDestroy(): void {\n this.subs.forEach(s => s.unsubscribe());\n this.resizeObserver?.disconnect();\n this.containerResizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n cancelAnimationFrame(this._updateRaf);\n window.removeEventListener('resize', this.boundUpdate);\n this.activeScrollContainer?.removeEventListener('scroll', this.boundScrollUpdate);\n this.activeScrollContainer = null;\n }\n\n // ── Toolbar actions ──────────────────────────────────────\n onSelectParent(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.SelectParent, entry: this.selectEntry });\n }\n\n onDuplicate(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Duplicate, entry: this.selectEntry });\n }\n\n onDelete(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Delete, entry: this.selectEntry });\n }\n\n onWrap(event: MouseEvent, wrapType: string): void {\n event.stopPropagation();\n this.wrapSubmenuOpen = false;\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Wrap, entry: this.selectEntry, wrapType });\n }\n\n /** Slider slides must stay direct children of the slider container — never wrap them. */\n get canWrap(): boolean {\n const type = this.selectEntry?.node?.type;\n return !!type && type !== 'SliderSlide';\n }\n\n onPlay(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Play, entry: this.selectEntry });\n }\n\n onSaveAsBlock(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.SaveAsBlock, entry: this.selectEntry });\n }\n\n onToggleMore(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n if (this.moreMenuVisible) {\n this.moreMenuVisible = false;\n } else {\n this.moreMenuStyle = { top: `${event.clientY}px`, left: `${event.clientX}px` };\n this.moreMenuVisible = true;\n }\n this.cdr.markForCheck();\n }\n\n closeMoreMenu(): void {\n this.moreMenuVisible = false;\n this.wrapSubmenuOpen = false;\n this.cdr.markForCheck();\n }\n\n onContextMenu(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.moreMenuStyle = { top: `${event.clientY}px`, left: `${event.clientX}px` };\n this.moreMenuVisible = true;\n this.cdr.markForCheck();\n }\n\n onMakeGlobal(event: MouseEvent, position: 'before' | 'after'): void {\n event.stopPropagation();\n this.closeMoreMenu();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.MakeGlobal, entry: this.selectEntry, position });\n }\n\n onRemoveGlobal(event: MouseEvent): void {\n event.stopPropagation();\n this.closeMoreMenu();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.RemoveGlobal, entry: this.selectEntry });\n }\n\n get hasInteractions(): boolean {\n return !!this.selectEntry?.node?.interactions?.length;\n }\n\n get selectedNodeIsGlobal(): boolean {\n return !!this.selectEntry?.node?.isGlobal;\n }\n\n get selectedPresetName(): string | null {\n const id = this.selectEntry?.node?.stylePresetId;\n if (!id) return null;\n return this.presetRegistry.getPreset(id)?.name ?? null;\n }\n\n get isLinkedSymbol(): boolean {\n return !!this.selectEntry?.node?.symbolId;\n }\n\n get isDetachedSymbol(): boolean {\n const node = this.selectEntry?.node;\n if (!node || node.symbolId || !node.detachedSymbolId) return false;\n // Only show the re-link button when the backing block still exists.\n return this.symbolRegistry.isBlockSymbol(node.detachedSymbolId);\n }\n\n get linkedSymbolName(): string | null {\n const id = this.selectEntry?.node?.symbolId;\n if (!id) return null;\n return this.symbolRegistry.getSymbol(id)?.name ?? null;\n }\n\n get interactions(): IoxInteraction[] {\n return this.selectEntry?.node?.interactions ?? [];\n }\n\n triggerLabel(trigger: string): string {\n const labels: Record<string, string> = {\n pageLoad: 'Load', viewportEnter: 'Scroll', click: 'Click',\n hover: 'Hover', scrollProgress: 'Progress',\n };\n return labels[trigger] ?? trigger;\n }\n\n triggerIcon(trigger: string): string {\n const icons: Record<string, string> = {\n pageLoad: 'ph-thin ph-rocket-launch', viewportEnter: 'ph-thin ph-eye',\n click: 'ph-thin ph-cursor-click', hover: 'ph-thin ph-hand-pointing',\n scrollProgress: 'ph-thin ph-arrows-down-up',\n };\n return icons[trigger] ?? 'ph-thin ph-lightning';\n }\n\n actionLabel(ix: IoxInteraction): string {\n const first = ix.actions[0];\n if (!first) return '';\n const labels: Record<string, string> = {\n fadeIn: 'Fade In', fadeOut: 'Fade Out',\n moveUp: 'Move Up', moveDown: 'Move Down',\n moveLeft: 'Move Left', moveRight: 'Move Right',\n scaleIn: 'Scale In', scaleOut: 'Scale Out',\n rotate: 'Rotate', show: 'Show', hide: 'Hide',\n toggleVisibility: 'Toggle',\n };\n const label = labels[first.type] ?? first.type;\n return ix.actions.length > 1 ? `${label} +${ix.actions.length - 1}` : label;\n }\n\n get hasPresetInClipboard(): boolean { return !!this.clipboard.getPresetId(); }\n get hasInteractionPresetInClipboard(): boolean { return !!this.clipboard.getInteractionPresetId(); }\n\n onEditPreset(event: MouseEvent): void {\n event.stopPropagation();\n this.activeBadgeType = 'style';\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.EditPreset, entry: this.selectEntry });\n }\n\n /**\n * Interaction badge clicked. It must ONLY open the Interactions panel with THIS interaction\n * active — it must NOT fire the element's (live) animation. `preventDefault` + `stopPropagation`\n * fully swallow the pointer event so it can never reach the node's live `click` interaction\n * listener. The specific `ix` is forwarded so the builder can expand it in the panel.\n */\n onEditInteractionPreset(event: MouseEvent, ix?: IoxInteraction): void {\n event.preventDefault();\n event.stopPropagation();\n this.activeBadgeType = 'interaction';\n if (this.selectEntry) {\n this.toolbarAction.emit({ action: ToolbarAction.EditInteractionPreset, entry: this.selectEntry, interaction: ix });\n }\n }\n\n /** Swallow the follow-up click on the badge so it can't reach the canvas / a live interaction. */\n onBadgeClickSwallow(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n }\n\n // ── Badge context menu ───────────────────────────────────\n\n onBadgeContextMenu(event: MouseEvent, type: 'style' | 'interaction', ix?: IoxInteraction): void {\n event.preventDefault();\n event.stopPropagation();\n this.badgeMenuType = type;\n this.badgeInteraction = ix ?? null;\n this.badgeMenuPos = { x: event.clientX, y: event.clientY };\n this.badgeMenuVisible = true;\n this.moreMenuVisible = false;\n this.cdr.markForCheck();\n }\n\n onBadgeCopy(): void {\n if (this.badgeMenuType === 'style') {\n const id = this.selectEntry?.node?.stylePresetId;\n if (id) this.clipboard.copyPreset(id);\n }\n this.closeBadgeMenu();\n }\n\n onBadgeEdit(): void {\n const type = this.badgeMenuType;\n this.closeBadgeMenu();\n if (type === 'style' && this.selectEntry) {\n this.activeBadgeType = 'style';\n this.toolbarAction.emit({ action: ToolbarAction.EditPreset, entry: this.selectEntry });\n } else if (type === 'interaction' && this.selectEntry) {\n this.activeBadgeType = 'interaction';\n this.toolbarAction.emit({ action: ToolbarAction.EditInteractionPreset, entry: this.selectEntry });\n }\n }\n\n onBadgeRemoveInteraction(): void {\n const node = this.selectEntry?.node;\n if (!node || !this.badgeInteraction) return;\n node.interactions = (node.interactions ?? []).filter(i => i.id !== this.badgeInteraction!.id);\n if (!node.interactions.length) node.interactionPresetId = undefined;\n this.interactionEngine.refresh(node);\n this.overlayService.refreshSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, node);\n this.closeBadgeMenu();\n }\n\n closeBadgeMenu(): void {\n this.badgeMenuVisible = false;\n this.cdr.markForCheck();\n }\n\n get hasCopiedNode(): boolean { return !!this.clipboard.getNode(); }\n\n onCopyNode(event: MouseEvent): void {\n event.stopPropagation();\n const node = this.selectEntry?.node;\n if (node) this.clipboard.copyNode(node);\n this.closeMoreMenu();\n }\n\n onPasteNode(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Paste, entry: this.selectEntry });\n this.closeMoreMenu();\n }\n\n onCopyPreset(event: MouseEvent): void {\n event.stopPropagation();\n const id = this.selectEntry?.node?.stylePresetId;\n if (id) this.clipboard.copyPreset(id);\n this.closeMoreMenu();\n }\n\n onPastePreset(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.PastePreset, entry: this.selectEntry });\n this.closeMoreMenu();\n }\n\n onCopyInteractionPreset(event: MouseEvent): void {\n event.stopPropagation();\n const id = this.selectEntry?.node?.interactionPresetId;\n if (id) this.clipboard.copyInteractionPreset(id);\n this.closeMoreMenu();\n }\n\n onPasteInteractionPreset(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.PasteInteractionPreset, entry: this.selectEntry });\n this.closeMoreMenu();\n }\n\n get isSliderContainer(): boolean {\n return this.selectEntry?.node?.type === 'SliderContainer';\n }\n\n onAddSlide(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.AddSlide, entry: this.selectEntry });\n }\n\n onDetachSymbol(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.DetachSymbol, entry: this.selectEntry });\n }\n\n onResyncSymbol(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.ResyncSymbol, entry: this.selectEntry });\n }\n\n private observeSelectElement(): void {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n // Scroll listener is on the container permanently (attached in ngOnInit).\n // No need to re-attach it here.\n\n if (!this.selectEntry?.element) return;\n\n // Observe the inner styled element — that's where [ngStyle] applies CSS.\n const styledEl = this.overlayService.getStyledElement(this.selectEntry.element);\n\n // ResizeObserver — catches size changes.\n // Skip the first callback: it fires synchronously on observe() in the same\n // microtask as the select$ subscription which already calls updateAll().\n // Painting twice in one frame causes a visible flicker.\n if (typeof ResizeObserver !== 'undefined') {\n let skipFirst = true;\n this.resizeObserver = new ResizeObserver(() => {\n if (skipFirst) { skipFirst = false; return; }\n this.scheduleUpdate();\n });\n this.resizeObserver.observe(styledEl);\n }\n\n // MutationObserver — catches style attribute changes (margin, padding etc.)\n this.mutationObserver = new MutationObserver(this.scheduleUpdate);\n this.mutationObserver.observe(styledEl, {\n attributes: true,\n attributeFilter: ['style', 'class'],\n });\n }\n\n private updateAll(): void {\n this.updateHover();\n this.updateSelect();\n this.cdr.markForCheck();\n }\n\n private updateHover(): void {\n if (!this.hoverEntry) {\n this.hiOutlineStyle = {};\n this.hiMarginStyle = {};\n this.hiPaddingStyle = {};\n return;\n }\n\n const styledEl = this.overlayService.getStyledElement(this.hoverEntry.element);\n const rect = styledEl.getBoundingClientRect();\n // Recalculate fresh — stored boxModel can be stale if CSS rules changed.\n const { margin, border, padding } = this.overlayService.buildBoxModel(this.hoverEntry.element);\n\n // All overlay boxes use position:fixed with raw viewport coords from\n // getBoundingClientRect() — no container offset subtraction.\n // This matches the approach used by the drop-target overlay and the drag\n // clone, both of which position correctly at any zoom level.\n // Using cRect subtraction + position:absolute inside .preview (which has\n // contain:layout paint) caused sub-pixel accumulation errors at zoom != 100%.\n const scale = this.viewportService.getScale();\n\n // Scale the spacing values: getComputedStyle returns unscaled CSS px,\n // getBoundingClientRect returns scaled viewport px. Both must match.\n const m = {\n top: margin.top * scale,\n right: margin.right * scale,\n bottom: margin.bottom * scale,\n left: margin.left * scale,\n };\n const mW = rect.width + m.left + m.right;\n const mH = rect.height + m.top + m.bottom;\n\n this.hiOutlineStyle = this.createBoxStyle(rect.top, rect.left, rect.width, rect.height);\n\n // Orange ring: margin-box with border-box punched out\n this.hiMarginStyle = {\n ...this.createBoxStyle(rect.top - m.top, rect.left - m.left, mW, mH),\n 'clip-path': this.createRingClipPath(mW, mH, m.top, m.right, m.bottom, m.left),\n };\n\n // Green ring: border-box with content-box punched out\n const bpTop = (border.top + padding.top) * scale;\n const bpRight = (border.right + padding.right) * scale;\n const bpBottom = (border.bottom + padding.bottom) * scale;\n const bpLeft = (border.left + padding.left) * scale;\n this.hiPaddingStyle = {\n ...this.createBoxStyle(rect.top, rect.left, rect.width, rect.height),\n 'clip-path': this.createRingClipPath(rect.width, rect.height, bpTop, bpRight, bpBottom, bpLeft),\n };\n }\n\n private updateSelect(): void {\n if (!this.selectEntry) {\n this.selectOutlineStyle = {};\n return;\n }\n\n const styledEl = this.overlayService.getStyledElement(this.selectEntry.element);\n const rect = styledEl.getBoundingClientRect();\n // position:fixed with raw viewport coords — same reasoning as updateHover.\n this.selectOutlineStyle = this.createBoxStyle(rect.top, rect.left, rect.width, rect.height);\n }\n\n /** Build position/size styles for a position:fixed overlay box. */\n private createBoxStyle(top: number, left: number, width: number, height: number): Record<string, string> {\n return {\n top: `${top}px`,\n left: `${left}px`,\n width: `${Math.max(width, 0)}px`,\n height: `${Math.max(height, 0)}px`,\n };\n }\n\n private createRingClipPath(w: number, h: number, inTop: number, inRight: number, inBottom: number, inLeft: number): string {\n const x1 = Math.max(inLeft, 0);\n const y1 = Math.max(inTop, 0);\n const x2 = Math.max(w - inRight, x1);\n const y2 = Math.max(h - inBottom, y1);\n // Each sub-rect must be explicitly closed so the bridge between them\n // is a zero-area line — prevents diagonal edge triangle artifacts.\n return `polygon(evenodd, 0px 0px, ${w}px 0px, ${w}px ${h}px, 0px ${h}px, 0px 0px, ${x1}px ${y1}px, ${x2}px ${y1}px, ${x2}px ${y2}px, ${x1}px ${y2}px, ${x1}px ${y1}px)`;\n }\n\n}\n","<div class=\"overlay-root\">\n\n <!-- HOVER — Chrome DevTools-style rings (content area stays transparent) -->\n <ng-container *ngIf=\"hoverEntry\">\n <div class=\"hi-outline\" [ngStyle]=\"hiOutlineStyle\"></div>\n <div class=\"hi-margin\" [ngStyle]=\"hiMarginStyle\"></div>\n <div class=\"hi-padding\" [ngStyle]=\"hiPaddingStyle\"></div>\n </ng-container>\n\n <!-- SELECT — IOX pink outline + toolbar -->\n <div class=\"select-outline\" *ngIf=\"selectEntry\" [ngStyle]=\"selectOutlineStyle\">\n\n <!-- Preset badges container — below the outline, start-aligned -->\n <div class=\"preset-badge\" *ngIf=\"selectedPresetName || interactions.length\">\n <div *ngIf=\"selectedPresetName\"\n class=\"preset-badge__item\"\n [class.preset-badge__item--active]=\"activeBadgeType === 'style'\"\n title=\"Style preset: {{ selectedPresetName }} — click to edit, right-click to copy\"\n (mousedown)=\"onEditPreset($event)\"\n (contextmenu)=\"onBadgeContextMenu($event, 'style')\">\n <i class=\"ph-fill ph-paint-bucket\"></i>\n <span>{{ selectedPresetName }}</span>\n </div>\n <div *ngFor=\"let ix of interactions\"\n class=\"preset-badge__item preset-badge__item--interaction\"\n [class.preset-badge__item--active]=\"activeBadgeType === 'interaction'\"\n [title]=\"triggerLabel(ix.trigger) + ': ' + actionLabel(ix) + ' — click to edit, right-click to remove'\"\n (mousedown)=\"onEditInteractionPreset($event, ix)\"\n (click)=\"onBadgeClickSwallow($event)\"\n (contextmenu)=\"onBadgeContextMenu($event, 'interaction', ix)\">\n <i [class]=\"triggerIcon(ix.trigger)\"></i>\n <span>{{ triggerLabel(ix.trigger) }}: {{ actionLabel(ix) }}</span>\n </div>\n </div>\n\n <div class=\"select-toolbar\" (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n\n <!-- Component name -->\n <span class=\"toolbar-name\">{{ selectEntry?.componentName }}</span>\n <span class=\"toolbar-sep\"></span>\n\n <!-- Quick actions -->\n <button *ngIf=\"isSliderContainer\" class=\"toolbar-btn toolbar-btn--add-slide\" title=\"Add slide\" (mousedown)=\"onAddSlide($event)\">\n <i class=\"ph-thin ph-plus\"></i>\n <span class=\"toolbar-btn__label\">Add slide</span>\n </button>\n <button class=\"toolbar-btn\" title=\"Duplicate\" (mousedown)=\"onDuplicate($event)\">\n <i class=\"ph-thin ph-copy\"></i>\n </button>\n <button *ngIf=\"hasInteractions\" class=\"toolbar-btn toolbar-btn--play\" title=\"Play animations\" (mousedown)=\"onPlay($event)\">\n <i class=\"ph-thin ph-play\"></i>\n </button>\n <button *ngIf=\"isLinkedSymbol\" class=\"toolbar-btn toolbar-btn--symbol\"\n [title]=\"(linkedSymbolName ? linkedSymbolName : 'Symbol') + ' — click to detach'\"\n (mousedown)=\"onDetachSymbol($event)\">\n <i class=\"ph-thin ph-link\"></i>\n <span class=\"toolbar-btn__label\">{{ linkedSymbolName || 'Symbol' }}</span>\n </button>\n <button *ngIf=\"isDetachedSymbol\" class=\"toolbar-btn toolbar-btn--resync\"\n title=\"Detached — click to re-link\"\n (mousedown)=\"onResyncSymbol($event)\">\n <i class=\"ph-thin ph-link-break\"></i>\n <span class=\"toolbar-btn__label\">Detached</span>\n </button>\n <button class=\"toolbar-btn toolbar-btn--danger\" title=\"Delete\" (mousedown)=\"onDelete($event)\">\n <i class=\"ph-thin ph-trash\"></i>\n </button>\n <span class=\"toolbar-sep\"></span>\n <button class=\"toolbar-btn\" title=\"Select parent\" (mousedown)=\"onSelectParent($event)\">\n <i class=\"ph-thin ph-arrow-up\"></i>\n </button>\n\n <!-- More menu trigger — opens a fixed-position dropdown at the cursor -->\n <button class=\"toolbar-btn toolbar-btn--more\" title=\"More actions\" (mousedown)=\"onToggleMore($event)\">\n <i class=\"ph-thin ph-dots-three\"></i>\n </button>\n </div>\n </div>\n\n <!-- Shared more/context menu — fixed-position, opened by ⋯ button or right-click -->\n <div *ngIf=\"moreMenuVisible\" class=\"toolbar-more-dropdown\" [ngStyle]=\"moreMenuStyle\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n <button class=\"more-item\" (mousedown)=\"onSelectParent($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-arrow-up\"></i>\n Select parent\n </button>\n <button class=\"more-item\" (mousedown)=\"onDuplicate($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-copy\"></i>\n Duplicate\n </button>\n <div *ngIf=\"canWrap\" class=\"more-item-submenu\"\n (mouseenter)=\"wrapSubmenuOpen = true\" (mouseleave)=\"wrapSubmenuOpen = false\">\n <button class=\"more-item\" (mousedown)=\"$event.stopPropagation()\">\n <i class=\"ph-thin ph-selection-plus\"></i>\n Wrap in\n <i class=\"ph-thin ph-caret-right more-item__chevron\"></i>\n </button>\n <div *ngIf=\"wrapSubmenuOpen\" class=\"more-submenu-flyout\">\n <button *ngFor=\"let target of wrapTargets\" class=\"more-item\"\n (mousedown)=\"onWrap($event, target.type); closeMoreMenu()\">\n <i [class]=\"target.icon\"></i>\n {{ target.label }}\n </button>\n </div>\n </div>\n <button class=\"more-item more-item--danger\" (mousedown)=\"onDelete($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-trash\"></i>\n Delete\n </button>\n <div class=\"more-divider\"></div>\n <button class=\"more-item\" (mousedown)=\"onCopyNode($event)\">\n <i class=\"ph-thin ph-scissors\"></i>\n Copy element\n </button>\n <button *ngIf=\"hasCopiedNode\" class=\"more-item\" (mousedown)=\"onPasteNode($event)\">\n <i class=\"ph-thin ph-clipboard\"></i>\n Paste element\n </button>\n <div class=\"more-divider\"></div>\n <button *ngIf=\"selectEntry?.node?.stylePresetId\" class=\"more-item\" (mousedown)=\"onCopyPreset($event)\">\n <i class=\"ph-thin ph-paint-bucket\"></i>\n Copy style preset\n </button>\n <button *ngIf=\"hasPresetInClipboard\" class=\"more-item\" (mousedown)=\"onPastePreset($event)\">\n <i class=\"ph-thin ph-paint-bucket\"></i>\n Paste style preset\n </button>\n <button *ngIf=\"selectEntry?.node?.interactionPresetId\" class=\"more-item\" (mousedown)=\"onCopyInteractionPreset($event)\">\n <i class=\"ph-thin ph-lightning\"></i>\n Copy interaction preset\n </button>\n <button *ngIf=\"hasInteractionPresetInClipboard\" class=\"more-item\" (mousedown)=\"onPasteInteractionPreset($event)\">\n <i class=\"ph-thin ph-lightning\"></i>\n Paste interaction preset\n </button>\n <div class=\"more-divider\"></div>\n <button *ngIf=\"isLinkedSymbol\" class=\"more-item\" (mousedown)=\"onDetachSymbol($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-link-break\"></i>\n Detach from symbol<ng-container *ngIf=\"linkedSymbolName\"> ({{ linkedSymbolName }})</ng-container>\n </button>\n <button *ngIf=\"isDetachedSymbol\" class=\"more-item more-item--resync\" (mousedown)=\"onResyncSymbol($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-link\"></i>\n Re-link to symbol\n </button>\n <button class=\"more-item\" (mousedown)=\"onSaveAsBlock($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-bookmark\"></i>\n Save as reusable block\n </button>\n <button *ngIf=\"hasInteractions\" class=\"more-item more-item--play\" (mousedown)=\"onPlay($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-play\"></i>\n Play animations\n </button>\n <div class=\"more-divider\"></div>\n <ng-container *ngIf=\"!selectedNodeIsGlobal; else removeGlobalItem\">\n <button class=\"more-item\" (mousedown)=\"onMakeGlobal($event, 'before')\">\n <i class=\"ph-thin ph-globe\"></i>\n Make Global (Before Content)\n </button>\n <button class=\"more-item\" (mousedown)=\"onMakeGlobal($event, 'after')\">\n <i class=\"ph-thin ph-globe\"></i>\n Make Global (After Content)\n </button>\n </ng-container>\n <ng-template #removeGlobalItem>\n <button class=\"more-item\" (mousedown)=\"onRemoveGlobal($event)\">\n <i class=\"ph-thin ph-globe\"></i>\n Remove from Global\n </button>\n </ng-template>\n </div>\n\n <!-- Backdrop to close the more menu -->\n <div *ngIf=\"moreMenuVisible\" class=\"overlay-context-backdrop\"\n (mousedown)=\"closeMoreMenu()\">\n </div>\n\n <!-- Badge context menu — options differ by badge type -->\n <div *ngIf=\"badgeMenuVisible\" class=\"badge-context-menu\"\n [ngStyle]=\"{ top: badgeMenuPos.y + 'px', left: badgeMenuPos.x + 'px' }\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n <ng-container *ngIf=\"badgeMenuType === 'style'\">\n <button class=\"more-item\" (mousedown)=\"onBadgeCopy()\">\n <i class=\"ph-thin ph-copy\"></i>\n Copy preset\n </button>\n <button class=\"more-item\" (mousedown)=\"onBadgeEdit()\">\n <i class=\"ph-thin ph-pencil-simple\"></i>\n Edit preset\n </button>\n </ng-container>\n <ng-container *ngIf=\"badgeMenuType === 'interaction'\">\n <button class=\"more-item\" (mousedown)=\"onBadgeEdit()\">\n <i class=\"ph-thin ph-pencil-simple\"></i>\n Edit in panel\n </button>\n <button class=\"more-item more-item--danger\" (mousedown)=\"onBadgeRemoveInteraction()\">\n <i class=\"ph-thin ph-trash\"></i>\n Remove interaction\n </button>\n </ng-container>\n </div>\n <div *ngIf=\"badgeMenuVisible\" class=\"overlay-context-backdrop\"\n (mousedown)=\"closeBadgeMenu()\">\n </div>\n\n</div>\n","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { Popover } from 'primeng/popover';\n\nimport {\n BuilderMode,\n DeviceMode,\n DeviceOption,\n DEVICE_OPTIONS,\n ZOOM_OPTIONS,\n ScreenWidthOption,\n SCREEN_WIDTH_OPTIONS,\n} from '../panels/panel.model';\n\n@Component({\n selector: 'app-toolbar',\n templateUrl: './toolbar.component.html',\n styleUrls: ['./toolbar.component.scss'],\n standalone: false,\n})\nexport class ToolbarComponent {\n @Input() activeMode: BuilderMode = BuilderMode.Select;\n @Input() activeDevice: DeviceMode = DeviceMode.Desktop;\n @Input() activeZoom: number = 100;\n @Input() activeScreenWidth: number = 1440;\n @Input() canUndo = false;\n @Input() canRedo = false;\n @Input() isSaving = false;\n @Input() pageStatus: string = 'draft';\n\n @Output() modeChange = new EventEmitter<BuilderMode>();\n @Output() deviceChange = new EventEmitter<DeviceMode>();\n @Output() zoomChange = new EventEmitter<number | 'fit'>();\n @Output() screenWidthChange = new EventEmitter<number>();\n @Output() undo = new EventEmitter<void>();\n @Output() redo = new EventEmitter<void>();\n @Output() save = new EventEmitter<void>();\n @Output() preview = new EventEmitter<void>();\n @Output() publishToggle = new EventEmitter<void>();\n\n get isPublished(): boolean {\n return this.pageStatus === 'published';\n }\n\n @ViewChild('modePopover') modePopover!: Popover;\n @ViewChild('devicePopover') devicePopover!: Popover;\n @ViewChild('zoomPopover') zoomPopover!: Popover;\n @ViewChild('widthPopover') widthPopover!: Popover;\n\n public modes = BuilderMode;\n public deviceModes = DeviceMode;\n public deviceOptions = DEVICE_OPTIONS;\n public zoomOptions = ZOOM_OPTIONS;\n public screenWidthOptions: ScreenWidthOption[] = SCREEN_WIDTH_OPTIONS;\n\n get activeModeIcon(): string {\n switch (this.activeMode) {\n case BuilderMode.Select: return 'ph-thin ph-cursor';\n case BuilderMode.Style: return 'ph-thin ph-paint-brush-broad';\n case BuilderMode.Pan: return 'ph-thin ph-hand';\n default: return 'ph-thin ph-cursor';\n }\n }\n\n get activeModeLabel(): string {\n switch (this.activeMode) {\n case BuilderMode.Select: return 'Select';\n case BuilderMode.Style: return 'Style';\n case BuilderMode.Pan: return 'Pan';\n default: return 'Select';\n }\n }\n\n get activeDeviceOption(): DeviceOption {\n return this.deviceOptions.find(d => d.mode === this.activeDevice) || this.deviceOptions[0];\n }\n\n get zoomLabel(): string {\n return `${this.activeZoom}%`;\n }\n\n get sliderZoom(): number {\n return Math.min(100, Math.max(20, this.activeZoom));\n }\n\n // ── Mode ────────────────────────────────────────────────\n toggleModePopover(event: Event): void {\n this.modePopover.toggle(event);\n }\n\n selectMode(mode: BuilderMode): void {\n if (this.activeMode !== mode) {\n this.modeChange.emit(mode);\n }\n this.modePopover.hide();\n }\n\n // ── Device ──────────────────────────────────────────────\n toggleDevicePopover(event: Event): void {\n this.devicePopover.toggle(event);\n }\n\n selectDevice(mode: DeviceMode): void {\n if (this.activeDevice !== mode) {\n this.deviceChange.emit(mode);\n }\n this.devicePopover.hide();\n }\n\n // ── Zoom slider ──────────────────────────────────────────\n onSliderChange(event: Event): void {\n const value = +(event.target as HTMLInputElement).value;\n this.zoomChange.emit(value);\n }\n\n // ── Screen width ─────────────────────────────────────────\n toggleWidthPopover(event: Event): void {\n this.widthPopover.toggle(event);\n }\n\n selectScreenWidth(width: number): void {\n if (this.activeScreenWidth !== width) {\n this.screenWidthChange.emit(width);\n }\n this.widthPopover.hide();\n }\n\n // ── Zoom ────────────────────────────────────────────────\n toggleZoomPopover(event: Event): void {\n this.zoomPopover.toggle(event);\n }\n\n selectZoom(value: number | 'fit'): void {\n this.zoomChange.emit(value);\n this.zoomPopover.hide();\n }\n}\n","<div class=\"builder-toolbar\">\n <!-- ── Mode switcher (stateful) ─────────────────────── -->\n <button class=\"tool-btn stateful\"\n (click)=\"toggleModePopover($event)\"\n [title]=\"activeModeLabel\">\n <i [class]=\"activeModeIcon\"></i>\n </button>\n\n <p-popover #modePopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n [class.is-active]=\"activeMode === modes.Select\"\n (click)=\"selectMode(modes.Select)\">\n <i class=\"ph-thin ph-cursor\"></i>\n <span>Select</span>\n </button>\n <button class=\"popover-option\"\n [class.is-active]=\"activeMode === modes.Pan\"\n (click)=\"selectMode(modes.Pan)\">\n <i class=\"ph-thin ph-hand\"></i>\n <span>Pan</span>\n </button>\n <button class=\"popover-option\"\n [class.is-active]=\"activeMode === modes.Style\"\n (click)=\"selectMode(modes.Style)\">\n <i class=\"ph-thin ph-paint-brush-broad\"></i>\n <span>Style</span>\n </button>\n </div>\n </p-popover>\n\n <span class=\"divider\"></span>\n\n <!-- ── Undo / Redo (action) ─────────────────────────── -->\n <button class=\"tool-btn\" title=\"Undo\" [disabled]=\"!canUndo\" (click)=\"undo.emit()\">\n <i class=\"ph-thin ph-arrow-counter-clockwise\"></i>\n </button>\n <button class=\"tool-btn\" title=\"Redo\" [disabled]=\"!canRedo\" (click)=\"redo.emit()\">\n <i class=\"ph-thin ph-arrow-clockwise\"></i>\n </button>\n\n <span class=\"divider\"></span>\n\n <!-- ── Device switcher (stateful) ───────────────────── -->\n <button class=\"tool-btn stateful\"\n (click)=\"toggleDevicePopover($event)\"\n [title]=\"activeDeviceOption.label\">\n <i [class]=\"activeDeviceOption.icon\"></i>\n </button>\n\n <p-popover #devicePopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n *ngFor=\"let d of deviceOptions\"\n [class.is-active]=\"activeDevice === d.mode\"\n (click)=\"selectDevice(d.mode)\">\n <i [class]=\"d.icon\"></i>\n <span>{{ d.label }}</span>\n </button>\n </div>\n </p-popover>\n\n <!-- ── Screen width — Desktop only ─────────────────── -->\n @if (activeDevice === deviceModes.Desktop) {\n <button class=\"tool-btn stateful width-btn\"\n (click)=\"toggleWidthPopover($event)\"\n title=\"Screen width\">\n <span class=\"width-label\">{{ activeScreenWidth }}</span>\n </button>\n }\n\n <p-popover #widthPopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n *ngFor=\"let w of screenWidthOptions\"\n [class.is-active]=\"activeScreenWidth === w.width\"\n (click)=\"selectScreenWidth(w.width)\">\n <span>{{ w.label }}</span>\n </button>\n </div>\n </p-popover>\n\n <!-- ── Zoom (stateful) ──────────────────────────────── -->\n <button class=\"tool-btn stateful zoom-btn\"\n (click)=\"toggleZoomPopover($event)\"\n title=\"Zoom\">\n <span class=\"zoom-label\">{{ zoomLabel }}</span>\n </button>\n\n <p-popover #zoomPopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"zoom-popover\">\n <div class=\"zoom-slider-row\">\n <input class=\"zoom-slider\"\n type=\"range\"\n min=\"20\" max=\"100\" step=\"1\"\n [value]=\"sliderZoom\"\n (input)=\"onSliderChange($event)\">\n <span class=\"zoom-slider-value\">{{ zoomLabel }}</span>\n </div>\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n *ngFor=\"let z of zoomOptions\"\n [class.is-active]=\"z.value === activeZoom\"\n (click)=\"selectZoom(z.value)\">\n <span>{{ z.label }}</span>\n </button>\n </div>\n </div>\n </p-popover>\n\n <span class=\"divider\"></span>\n\n <!-- ── Save ────────────────────────────────────────────── -->\n <button class=\"tool-btn save-btn\"\n [class.is-saving]=\"isSaving\"\n [disabled]=\"isSaving\"\n title=\"Save\"\n (click)=\"save.emit()\">\n <i class=\"ph-thin ph-floppy-disk\"></i>\n </button>\n\n <!-- ── Preview ──────────────────────────────────────────── -->\n <button class=\"tool-btn preview-btn\"\n title=\"Preview\"\n (click)=\"preview.emit()\">\n <i class=\"ph-thin ph-eye\"></i>\n </button>\n\n <span class=\"divider\"></span>\n\n <!-- ── Publish / Unpublish ──────────────────────────────── -->\n <button class=\"tool-btn publish-btn\"\n [class.is-published]=\"isPublished\"\n [title]=\"isPublished ? 'Unpublish' : 'Publish'\"\n (click)=\"publishToggle.emit()\">\n <i [class]=\"isPublished ? 'ph-thin ph-cloud-slash' : 'ph-thin ph-cloud-arrow-up'\"></i>\n <span class=\"publish-label\">{{ isPublished ? 'Unpublish' : 'Publish' }}</span>\n </button>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { ComponentRegistryService } from '../../services/component-registry.service';\nimport { OverlayService } from '../../overlay/overlay.service';\nimport { BuilderMode, NodeAction } from '../panel.model';\n\ninterface TreeNode {\n node: ComponentNode;\n icon: string;\n label: string;\n depth: number;\n expanded: boolean;\n hasChildren: boolean;\n /** Reference to the parent's children array that contains this node. */\n parentArray: ComponentNode[];\n /** Index of this node inside parentArray. */\n indexInParent: number;\n}\n\n@Component({\n selector: 'app-layer-tree',\n templateUrl: './layer-tree.component.html',\n styleUrls: ['./layer-tree.component.scss'],\n standalone: false,\n})\nexport class LayerTreeComponent implements OnInit, OnDestroy {\n @Input() layout: ComponentNode[] = [];\n @Input() globalElements: ComponentNode[] = [];\n @Output() nodeSelect = new EventEmitter<ComponentNode>();\n @Output() nodeAction = new EventEmitter<{ action: NodeAction; node: ComponentNode }>();\n @Output() nodeMove = new EventEmitter<void>();\n\n public flatTree: TreeNode[] = [];\n public flatGlobalTree: TreeNode[] = [];\n public selectedNodeId: string | null = null;\n public hoveredNodeId: string | null = null;\n\n public editingNodeId: string | null = null;\n public editingValue = '';\n\n public activeSection: 'page' | 'global' = 'page';\n\n /** Cache: component type → icon class */\n private iconMap = new Map<string, string>();\n private selectSub?: Subscription;\n /** Last-seen structural signature — used by ngDoCheck to skip no-op rebuilds. */\n private _layoutSig = '';\n private _globalSig = '';\n\n constructor(\n private registry: ComponentRegistryService,\n private overlayService: OverlayService,\n ) {}\n\n ngOnInit(): void {\n this.buildIconMap();\n this.rebuild();\n this.selectSub = this.overlayService.select$.subscribe(entry => {\n this.selectedNodeId = entry?.node?.id ?? null;\n });\n }\n\n ngOnDestroy(): void {\n this.selectSub?.unsubscribe();\n }\n\n // Runs on every CD cycle — exit immediately if structure hasn't changed.\n ngDoCheck(): void {\n const sig = this.sig(this.layout);\n const globalSig = this.sig(this.globalElements);\n if (sig !== this._layoutSig || globalSig !== this._globalSig) {\n this._layoutSig = sig;\n this._globalSig = globalSig;\n this.rebuild();\n }\n }\n\n /** Cheap structural signature: node IDs + nesting depth only. */\n private sig(nodes: ComponentNode[]): string {\n return nodes.map(n =>\n (n.id ?? n.type) + (n.children?.length ? '{' + this.sig(n.children) + '}' : '')\n ).join(',');\n }\n\n onNodeClick(treeNode: TreeNode): void {\n const node = treeNode.node;\n this.selectedNodeId = node.id ?? null;\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n this.overlayService.setSelect(\n ref.element,\n node.type,\n BuilderMode.Select,\n node,\n ref.componentRef,\n );\n // Scroll the element into view on the canvas\n ref.element.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n this.nodeSelect.emit(node);\n }\n\n onNodeMouseEnter(treeNode: TreeNode): void {\n this.hoveredNodeId = treeNode.node.id ?? null;\n const ref = this.overlayService.getNodeRef(treeNode.node);\n if (ref) {\n this.overlayService.setHover(ref.element, treeNode.node.type, BuilderMode.Select);\n }\n }\n\n onNodeMouseLeave(): void {\n this.hoveredNodeId = null;\n this.overlayService.clearHover();\n }\n\n toggleExpand(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n treeNode.expanded = !treeNode.expanded;\n this.rebuild();\n }\n\n onDeleteNode(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n this.nodeAction.emit({ action: NodeAction.Delete, node: treeNode.node });\n }\n\n onDuplicateNode(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n this.nodeAction.emit({ action: NodeAction.Duplicate, node: treeNode.node });\n }\n\n startRename(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n this.editingNodeId = treeNode.node.id ?? null;\n this.editingValue = treeNode.node.label ?? '';\n }\n\n saveRename(treeNode: TreeNode): void {\n const val = this.editingValue.trim();\n treeNode.node.label = val || undefined;\n treeNode.label = treeNode.node.label ?? treeNode.node.type;\n this.editingNodeId = null;\n this.editingValue = '';\n }\n\n cancelRename(): void {\n this.editingNodeId = null;\n this.editingValue = '';\n }\n\n /**\n * CDK drop handler for tree reorder.\n * Works on the flat tree indices — maps back to parent arrays to do the move.\n */\n onTreeDrop(event: CdkDragDrop<TreeNode[]>): void {\n if (event.previousIndex === event.currentIndex) return;\n\n const draggedTreeNode = this.flatTree[event.previousIndex];\n if (!draggedTreeNode) return;\n\n const targetTreeNode = this.flatTree[event.currentIndex];\n if (!targetTreeNode) return;\n\n // Remove from source parent\n const srcArray = draggedTreeNode.parentArray;\n const srcIdx = draggedTreeNode.indexInParent;\n srcArray.splice(srcIdx, 1);\n\n // Determine destination: insert at the same position as the target node in its parent.\n // If dropping after the target, adjust index.\n const destArray = targetTreeNode.parentArray;\n let destIdx = targetTreeNode.indexInParent;\n\n // If dragging downward (previousIndex < currentIndex), the target index\n // may have shifted because we already removed the item from source.\n // If source and destination are the same array and srcIdx < destIdx, adjust.\n if (srcArray === destArray && srcIdx < destIdx) {\n destIdx--;\n }\n\n destArray.splice(destIdx, 0, draggedTreeNode.node);\n\n // Rebuild tree and notify builder\n this.rebuild();\n this.nodeMove.emit();\n }\n\n // ── Internals ────────────────────────────────────────────\n\n /** Build a type→icon lookup from the registry so we don't instantiate configs per node. */\n private buildIconMap(): void {\n for (const entry of this.registry.getAll()) {\n const instance = new entry.config();\n this.iconMap.set(entry.type, instance.icon || 'ph-thin ph-cube');\n }\n }\n\n private expandedState = new Map<string, boolean>();\n\n private rebuild(): void {\n // Save expanded state\n for (const tn of [...this.flatTree, ...this.flatGlobalTree]) {\n if (tn.node.id) {\n this.expandedState.set(tn.node.id, tn.expanded);\n }\n }\n const next: TreeNode[] = [];\n this.flattenTree(this.layout, 0, next);\n this.flatTree = next;\n\n const nextGlobal: TreeNode[] = [];\n this.flattenTree(this.globalElements, 0, nextGlobal);\n this.flatGlobalTree = nextGlobal;\n }\n\n private flattenTree(nodes: ComponentNode[], depth: number, out: TreeNode[], parentArr?: ComponentNode[]): void {\n const arr = parentArr ?? nodes;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n const hasChildren = !!(node.children && node.children.length);\n const expanded = node.id ? (this.expandedState.get(node.id) ?? true) : true;\n const treeNode: TreeNode = {\n node,\n icon: this.iconMap.get(node.type) || 'ph-thin ph-cube',\n label: node.label ?? node.type,\n depth,\n expanded,\n hasChildren,\n parentArray: arr,\n indexInParent: i,\n };\n out.push(treeNode);\n if (node.children && expanded) {\n this.flattenTree(node.children, depth + 1, out, node.children);\n }\n }\n }\n}\n","<div class=\"layer-tree\">\n <div class=\"tree-header\">\n <button class=\"section-tab\" [class.section-tab--active]=\"activeSection === 'page'\" (click)=\"activeSection = 'page'\">\n <i class=\"ph-thin ph-stack\"></i> Page\n </button>\n <button class=\"section-tab\" [class.section-tab--active]=\"activeSection === 'global'\" (click)=\"activeSection = 'global'\">\n <i class=\"ph-thin ph-globe\"></i> Global\n <span *ngIf=\"flatGlobalTree.length\" class=\"section-tab-badge\">{{ flatGlobalTree.length }}</span>\n </button>\n </div>\n\n <!-- ── Page elements tree ───────────────────── -->\n <div *ngIf=\"activeSection === 'page'\"\n class=\"tree-body\"\n cdkDropList\n [cdkDropListData]=\"flatTree\"\n (cdkDropListDropped)=\"onTreeDrop($event)\">\n <div *ngIf=\"!flatTree.length\" class=\"tree-empty\">\n <i class=\"ph-thin ph-tree-structure\"></i>\n <span>No layers yet</span>\n </div>\n\n <div *ngFor=\"let tn of flatTree\"\n class=\"tree-row\"\n cdkDrag\n [cdkDragData]=\"tn\"\n [class.is-selected]=\"tn.node.id === selectedNodeId\"\n [class.is-hovered]=\"tn.node.id === hoveredNodeId\"\n [style.padding-inline-start.px]=\"12 + tn.depth * 16\"\n (click)=\"onNodeClick(tn)\"\n (mouseenter)=\"onNodeMouseEnter(tn)\"\n (mouseleave)=\"onNodeMouseLeave()\">\n\n <i class=\"ph-thin ph-dots-six-vertical drag-handle\" cdkDragHandle></i>\n\n <button *ngIf=\"tn.hasChildren\" class=\"expand-btn\" (click)=\"toggleExpand(tn, $event)\">\n <i class=\"ph-thin\" [ngClass]=\"tn.expanded ? 'ph-caret-down' : 'ph-caret-right'\"></i>\n </button>\n <span *ngIf=\"!tn.hasChildren\" class=\"expand-spacer\"></span>\n\n <i [class]=\"tn.icon\" class=\"node-icon\"></i>\n <ng-container *ngIf=\"editingNodeId === tn.node.id; else staticLabel\">\n <input class=\"node-rename-input\"\n [value]=\"editingValue\"\n (input)=\"editingValue = $any($event.target).value\"\n (keydown.enter)=\"saveRename(tn)\"\n (keydown.escape)=\"cancelRename()\"\n (blur)=\"saveRename(tn)\"\n (click)=\"$event.stopPropagation()\"\n autofocus>\n </ng-container>\n <ng-template #staticLabel>\n <span class=\"node-label\" [class.node-label--named]=\"tn.node.label\">{{ tn.label }}</span>\n </ng-template>\n\n <span class=\"node-actions\">\n <button class=\"action-btn\" title=\"Rename\" (click)=\"startRename(tn, $event)\">\n <i class=\"ph-thin ph-pencil-simple\"></i>\n </button>\n <button class=\"action-btn\" title=\"Duplicate\" (click)=\"onDuplicateNode(tn, $event)\">\n <i class=\"ph-thin ph-copy\"></i>\n </button>\n <button class=\"action-btn action-btn--delete\" title=\"Delete\" (click)=\"onDeleteNode(tn, $event)\">\n <i class=\"ph-thin ph-trash\"></i>\n </button>\n </span>\n </div>\n </div>\n\n <!-- ── Global elements tree ─────────────────── -->\n <div *ngIf=\"activeSection === 'global'\" class=\"tree-body\">\n <div *ngIf=\"!flatGlobalTree.length\" class=\"tree-empty\">\n <i class=\"ph-thin ph-globe\"></i>\n <span>No global elements</span>\n </div>\n\n <div *ngFor=\"let tn of flatGlobalTree\"\n class=\"tree-row tree-row--global\"\n [class.is-selected]=\"tn.node.id === selectedNodeId\"\n [class.is-hovered]=\"tn.node.id === hoveredNodeId\"\n [style.padding-inline-start.px]=\"12 + tn.depth * 16\"\n (click)=\"onNodeClick(tn)\"\n (mouseenter)=\"onNodeMouseEnter(tn)\"\n (mouseleave)=\"onNodeMouseLeave()\">\n\n <button *ngIf=\"tn.hasChildren\" class=\"expand-btn\" (click)=\"toggleExpand(tn, $event)\">\n <i class=\"ph-thin\" [ngClass]=\"tn.expanded ? 'ph-caret-down' : 'ph-caret-right'\"></i>\n </button>\n <span *ngIf=\"!tn.hasChildren\" class=\"expand-spacer\"></span>\n\n <i [class]=\"tn.icon\" class=\"node-icon\"></i>\n <span class=\"node-label\">{{ tn.label }}</span>\n <span class=\"node-position-badge\">{{ tn.node.globalPosition }}</span>\n\n <span class=\"node-actions\">\n <button class=\"action-btn action-btn--delete\" title=\"Delete\" (click)=\"onDeleteNode(tn, $event)\">\n <i class=\"ph-thin ph-trash\"></i>\n </button>\n </span>\n </div>\n </div>\n</div>\n","\n\nimport { AfterViewInit, ApplicationRef, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild, effect, inject } from '@angular/core';\nimport Lenis from 'lenis';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode, IoxDataSource, IoxInteraction, StyleCategory } from './models/component.model';\nimport { regenerateNodeIds } from './utils/clone-ids.util';\nimport { wrapNode } from './models/wrap-node';\nimport { OverlayEntry, OverlayService } from './overlay/overlay.service';\nimport { PanelEvent, PanelEventService, PanelEventTypes } from './panels/panel-event.service';\nimport { BuilderMode, DeviceMode, DEVICE_OPTIONS, NodeAction, PageRouteAnimationSettings, PageSettings, PanelTypes, ToolbarAction } from './panels/panel.model';\nimport { ComponentRegistryService } from './services/component-registry.service';\nimport { DragEngineService, IoxDropEvent } from './services/drag-engine.service';\nimport { MoveableCanvasService } from './services/moveable-canvas.service';\nimport { SelectoCanvasService } from './services/selecto-canvas.service';\nimport { DataSourceRegistryService } from './services/data-source-registry.service';\nimport { InteractionEngineService } from './services/interaction-engine.service';\nimport { ViewportService } from './services/viewport.service';\nimport { BuilderClipboardService } from './services/builder-clipboard.service';\nimport { InteractionPresetRegistryService } from './services/interaction-preset-registry.service';\nimport { SymbolRegistryService } from './services/symbol-registry.service';\nimport { ContextStore, applyBindingPipes, collectContextSlotKeys, nodeUsesContext, resolvePath, safeSetInput, withContextSlots } from '@vectoriox/iox-ui';\n\n@Component({\n selector: 'app-builder',\n templateUrl: './builder.component.html',\n styleUrls: ['./builder.component.scss'],\n standalone: false,\n})\nexport class BuilderComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n private contextStore = inject(ContextStore);\n\n /**\n * Re-apply context-bound inputs on the CANVAS when a slot changes — the builder twin of the\n * engine's effect. The canvas is a live runtime, so hovering a repeater row while editing must\n * swap the bound element just as it does on the published site.\n *\n * Only nodes that read a slot are touched; nothing else re-renders (trap T2).\n */\n private readonly contextEffect = effect(() => {\n const slotValues = this.contextStore.values();\n if (!Object.keys(slotValues).length) return;\n const slotKeys = collectContextSlotKeys(this.layout);\n if (!slotKeys.size) return;\n this.applyContextBindings(this.layout, withContextSlots({}, slotValues), slotKeys);\n });\n\n @Input() layout: ComponentNode[] = [];\n @Input() dataSources: IoxDataSource[] = [];\n @Input() orgId = 'default';\n @Input() routeParams: any[] = [];\n @Input() pageName = '';\n @Input() isSaving = false;\n @Input() pageStatus: string = 'draft';\n @Input() pageSettings: PageSettings | null = null;\n @Input() globalElements: ComponentNode[] = [];\n @Input() canUndo = false;\n @Input() canRedo = false;\n /** Feature flag: drive drag/select/resize via Moveable + Selecto instead of interact.js.\n * Default OFF — the proven interact.js path is unchanged until cutover. See\n * iox-ai-guidance/architecture/builder/moveable-migration.md. */\n @Input() moveableMode = false;\n @Output() save = new EventEmitter<void>();\n @Output() undo = new EventEmitter<void>();\n @Output() redo = new EventEmitter<void>();\n @Output() back = new EventEmitter<void>();\n @Output() preview = new EventEmitter<void>();\n @Output() publishToggle = new EventEmitter<void>();\n @Output() pageSettingsChange = new EventEmitter<PageSettings>();\n @Output() applyAnimationToAll = new EventEmitter<PageRouteAnimationSettings>();\n @Output() saveBlock = new EventEmitter<{ name: string; node: ComponentNode }>();\n @Output() globalElementsChange = new EventEmitter<ComponentNode[]>();\n @ViewChild('previewCanvas') previewCanvas?: ElementRef<HTMLElement>;\n @ViewChild('previewScroll') previewScrollRef?: ElementRef<HTMLElement>;\n @ViewChild('lenisContent') lenisContentRef?: ElementRef<HTMLElement>;\n @ViewChild('globalOverlay') globalOverlayRef?: ElementRef<HTMLElement>;\n\n public components: any[] = [];\n public activePanel: string = PanelTypes.STYLES;\n public isPanelOpen = false;\n public panelTypes = PanelTypes;\n public activeMode: BuilderMode = BuilderMode.Select;\n public builderModes = BuilderMode;\n public activeDevice: DeviceMode = DeviceMode.Desktop;\n public activeZoom: number = 100;\n public activeScreenWidth: number = 1440;\n public selectedItem: ComponentNode | null = null;\n public isDragging = false;\n public scrollThumbTop = 0; // px from top of track\n public scrollThumbHeight = 0; // px height of thumb\n public isScrollbarVisible = false;\n public scrollbarTranslate = 0; // counteracts Lenis wrapper scrollTop shifting position:absolute children\n public activeSidebar: 'components' | 'tree' | 'tokens' | 'pages' = 'components';\n public showSaveBlockDialog = false;\n public saveBlockName = '';\n private pendingBlockNode: ComponentNode | null = null;\n public isPanning = false;\n public panX = 0;\n public panY = 0;\n /** Canvas frame height in canvas-space pixels (= previewScroll.clientHeight / scale).\n * Used as iox-page-component's height so position:fixed top:0;bottom:0 fills the\n * same area as height:100vh (both resolve to this value). */\n public canvasFrameHeight = 0;\n private panStartX = 0;\n private panStartY = 0;\n private panOriginX = 0;\n private panOriginY = 0;\n private hoverHideRaf = 0;\n private viewportSub?: Subscription;\n private lenis?: Lenis;\n private lenisRafId?: number;\n private canvasRo?: ResizeObserver;\n private previewFrameRo?: ResizeObserver;\n private canvasContentHeight = 0;\n\n // Type-safe event forwarding for toolbar outputs\n handleToolbarModeChange(mode: BuilderMode): void {\n this.onModeChange(mode);\n }\n handleToolbarDeviceChange(device: DeviceMode): void {\n this.onDeviceChange(device);\n }\n handleToolbarZoomChange(value: number | 'fit'): void {\n this.onZoomChange(value);\n }\n\n handleToolbarScreenWidthChange(width: number): void {\n this.viewportService.setWidth(width);\n this.panX = 0;\n this.panY = 0;\n this.autoFitViewport();\n }\n\n get globalElementsBefore(): ComponentNode[] {\n return this.globalElements.filter(n => n.globalPosition === 'before');\n }\n\n get globalElementsAfter(): ComponentNode[] {\n return this.globalElements.filter(n => n.globalPosition === 'after');\n }\n\n /** Canvas width in CSS pixels (driven by ViewportService). */\n get viewportWidth(): number {\n return this.viewportService.getState().width;\n }\n\n /** Canvas viewport height in CSS pixels (driven by ViewportService). */\n get viewportHeight(): number {\n return this.viewportService.getState().height;\n }\n\n /** Visual (scaled) canvas width — used to size the scroll container so the\n * scrollbar aligns with the right edge of the canvas, not the CMS shell. */\n get viewportScaledWidth(): number {\n const s = this.viewportService.getState().scale;\n return Math.round(this.viewportWidth * s);\n }\n\n /** CSS transform for the visual canvas.\n * Includes translateX(-50%) for centering because iox-page-component is\n * position:absolute; left:50% inside .preview-lenis-content. */\n get viewportTransform(): string {\n const s = this.viewportService.getState().scale;\n const parts: string[] = ['translateX(-50%)'];\n if (this.panX !== 0 || this.panY !== 0) parts.push(`translate(${this.panX}px, ${this.panY}px)`);\n if (s !== 1) parts.push(`scale(${s})`);\n return parts.join(' ');\n }\n\n /**\n * Height of the Lenis content proxy div (realContentHeight × scale).\n * Lenis scrolls against this value so scroll range is always in visual px,\n * not unscaled CSS px — correct at any zoom level.\n */\n get scaledContentHeight(): number {\n const s = this.viewportService.getState().scale;\n return Math.round(this.canvasContentHeight * s);\n }\n\n /** The canvas starts at the simulated viewport height, just like a real empty browser page. */\n get canvasMinHeight(): number {\n return this.viewportService.getState().height;\n }\n\n private sub?: Subscription;\n private registrySub?: Subscription;\n\n constructor(\n private registry: ComponentRegistryService,\n private overlayService: OverlayService,\n private panelEventService: PanelEventService,\n private dragEngine: DragEngineService,\n private dsRegistry: DataSourceRegistryService,\n private viewportService: ViewportService,\n private interactionEngine: InteractionEngineService,\n private interactionPresetRegistry: InteractionPresetRegistryService,\n private clipboard: BuilderClipboardService,\n private symbolRegistry: SymbolRegistryService,\n private cdr: ChangeDetectorRef,\n private appRef: ApplicationRef,\n private moveableCanvas: MoveableCanvasService,\n private selectoCanvas: SelectoCanvasService,\n ) {}\n\n ngOnInit(): void {\n this.components = this.registry.getAll();\n this.dsRegistry.setDataSources(this.dataSources);\n this.dragEngine.setScale(this.viewportService.getScale());\n this.sub = this.panelEventService.subscribe((panelEvent: PanelEvent) => this.handlePanelEvents(panelEvent));\n this.sub.add(this.dragEngine.isDragging$.subscribe((v: boolean) => {\n this.isDragging = v;\n this.cdr.markForCheck();\n }));\n this.sub.add(this.dragEngine.dropComplete$.subscribe((node: ComponentNode) => {\n this._selectAfterDrop(node);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }));\n this.panelEventService.emit(PanelEventTypes.PANEL_OPEN, PanelTypes.STYLES);\n this.viewportSub = this.viewportService.state$.subscribe(state => {\n this.activeDevice = state.device;\n this.activeZoom = Math.round(state.scale * 100);\n this.activeScreenWidth = state.width;\n this.dragEngine.setScale(state.scale);\n this.updatePreviewVh();\n // scaledContentHeight changes with scale — flush DOM first so\n // .preview-lenis-content has its new height before Lenis reads it.\n this.cdr.detectChanges();\n this.lenis?.resize();\n // iox-page-component has transition:0.25s — overlay positions are stale\n // until the transform animation completes. Re-fire after the transition.\n setTimeout(() => { this.overlayService.refreshSelect(); this.moveableCanvas.refresh(); }, 270);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['pageSettings']) {\n // Reinit Lenis with updated scroll options (lerp, wheelMultiplier, etc.)\n // so the builder preview reflects the live-page scroll feel in real time.\n this.initLenis();\n }\n if (changes['globalElements']) {\n // The *ngIf on the global overlay renders after this hook — defer so\n // globalOverlayRef is in the DOM before we try to set CSS vars on it.\n setTimeout(() => this.updatePreviewVh());\n }\n }\n\n ngAfterViewInit(): void {\n this.updatePreviewVh();\n // Re-compute --preview-vh whenever the canvas frame resizes (panel open/close,\n // window resize, etc.) so 100vh always fills the visible area.\n if (this.previewScrollRef?.nativeElement) {\n this.previewFrameRo = new ResizeObserver(() => this.updatePreviewVh());\n this.previewFrameRo.observe(this.previewScrollRef.nativeElement);\n }\n this.overlayService.setContainer(this.previewCanvas?.nativeElement || null);\n // Builder dispatches synthetic 'scroll' events on .preview-lenis-content from\n // the Lenis callback — point the overlay scroll listener at that element.\n // (Not previewScrollRef which is the Lenis eventsTarget — dispatching there\n // would cause Lenis to re-fire its scroll handler → infinite loop.)\n this.overlayService.setScrollContainer(this.lenisContentRef?.nativeElement || null);\n // .preview-scroll is the Lenis clipping container (overflow:hidden, scrollTop changes).\n // Used as IntersectionObserver root so viewportEnter triggers fire correctly on canvas scroll.\n this.overlayService.setIntersectionRoot(this.previewScrollRef?.nativeElement || null);\n\n // Register the root canvas as a dropzone.\n const canvasEl = document.getElementById('canvas-preview')!;\n if (canvasEl) {\n this.dragEngine.registerDropzone(\n 'canvas-preview',\n canvasEl,\n this.layout,\n this.cdr,\n (evt) => this.onDrop(evt),\n );\n // Track canvas content height so scaledContentHeight (= height × scale)\n // keeps the Lenis content proxy correctly sized at any zoom level.\n this.canvasRo = new ResizeObserver(entries => {\n const h = entries[0]?.contentRect.height ?? 0;\n if (h !== this.canvasContentHeight) {\n this.canvasContentHeight = h;\n this.cdr.detectChanges();\n this.lenis?.resize();\n }\n });\n this.canvasRo.observe(canvasEl);\n }\n\n // The canvas is an EDITING surface: clicking a Link / LinkedContainer / Button (anything\n // rendering an <a href>) must select it, never navigate — a redirect unloads the builder and\n // loses unsaved work. Bound to `.preview` (NOT #canvas-preview) so it also covers the\n // GLOBAL-elements overlay, which is a SIBLING layer outside the page canvas — a linked\n // container in a global header used to slip past the old canvas-only guard and navigate.\n // Capture phase so it runs before the node's own click handler; it covers EVERY anchor,\n // including repeater/slider preview clones (RenderDirective skips their per-node listeners)\n // and any future link component. preventDefault only cancels default navigation — the click\n // still propagates, so selection/overlay behaviour is unchanged. `auxclick` covers\n // middle-click, which opens a tab without firing `click`.\n const previewEl = this.previewCanvas?.nativeElement;\n if (previewEl) {\n previewEl.addEventListener('click', this.blockCanvasNavigation, true);\n previewEl.addEventListener('auxclick', this.blockCanvasNavigation, true);\n }\n\n this.initLenis();\n\n // Moveable path (flag-gated — interact.js is untouched when off). Drive drag for the selected\n // element via Moveable, reusing DragEngineService.handleDrop for the reorder. See\n // iox-ai-guidance/architecture/builder/moveable-migration.md.\n if (this.moveableMode && this.previewCanvas?.nativeElement) {\n this.moveableCanvas.init(\n this.previewCanvas.nativeElement,\n () => this.viewportService.getScale(),\n () => ({ width: this.viewportWidth, height: this.viewportHeight }),\n );\n // Resize commits geometry to styleProps → emit LAYOUT_CHANGED so undo/save pick it up.\n this.moveableCanvas.onLayoutChanged = () => this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n this.sub?.add(this.overlayService.select$.subscribe(entry => {\n this.moveableCanvas.select(entry?.element ?? null, entry?.node ?? null);\n }));\n\n // Selecto rubber-band MULTI-select (Phase 1). Only starts from empty canvas space\n // (selectFromInside:false), so single-element drag/click are untouched. 2+ → Moveable\n // group; exactly 1 → the existing single-select (via a click); 0 → clear.\n const canvasEl = document.getElementById('canvas-preview');\n const previewEl = this.previewCanvas.nativeElement;\n if (canvasEl) {\n this.selectoCanvas.init(previewEl, previewEl, canvasEl);\n this.selectoCanvas.onSelect = (elements) => {\n if (this.moveableCanvas.selectGroup(elements)) return; // 2+ → group box\n if (elements.length === 1) {\n elements[0].dispatchEvent(new MouseEvent('click', { bubbles: true }));\n } else {\n this.overlayService.clearSelect();\n this.moveableCanvas.select(null, null);\n }\n };\n }\n }\n\n setTimeout(() => this.appRef.tick());\n }\n\n /**\n * Walk the tree and push freshly-resolved values into the live component instances of every node\n * that reads a context slot. Uses the overlay's node→ComponentRef registry, and the shared\n * `safeSetInput` so an undeclared input can never trigger NG0303.\n */\n private applyContextBindings(nodes: ComponentNode[], data: Record<string, any>, slotKeys: ReadonlySet<string>): void {\n for (const node of nodes ?? []) {\n if (nodeUsesContext(node, slotKeys)) {\n const ref = this.overlayService.getNodeRef(node)?.componentRef;\n if (ref) {\n for (const binding of node.bindings ?? []) {\n if (!slotKeys.has(binding.source)) continue;\n const sourceData = data[binding.source];\n if (sourceData == null) continue;\n const raw = binding.path ? resolvePath(sourceData, binding.path) : sourceData;\n const value = applyBindingPipes(raw, (binding as any).pipes);\n if (value !== undefined && value !== null) safeSetInput(ref, binding.prop, value);\n }\n }\n }\n if (node.children?.length) this.applyContextBindings(node.children, data, slotKeys);\n }\n }\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n this.registrySub?.unsubscribe();\n this.viewportSub?.unsubscribe();\n this.moveableCanvas.destroy();\n this.selectoCanvas.destroy();\n this.destroyLenis();\n this.canvasRo?.disconnect();\n this.previewFrameRo?.disconnect();\n this.overlayService.setContainer(null);\n this.overlayService.setScrollContainer(null);\n this.overlayService.setIntersectionRoot(null);\n const canvasEl = document.getElementById('canvas-preview');\n if (canvasEl) {\n this.dragEngine.unregisterDropzone('canvas-preview', canvasEl);\n }\n const previewEl = this.previewCanvas?.nativeElement;\n if (previewEl) {\n previewEl.removeEventListener('click', this.blockCanvasNavigation, true);\n previewEl.removeEventListener('auxclick', this.blockCanvasNavigation, true);\n }\n }\n\n /**\n * Cancel the browser's default navigation for any link clicked on the editing canvas.\n *\n * Bound property (not a method) so add/removeEventListener share one reference. Matches the\n * clicked target's nearest `a[href]`, so it covers a Link/Button host as well as a click on\n * anything nested inside a LinkedContainer. Only the DEFAULT action is cancelled — propagation\n * is untouched, so node selection, the overlay and the context menu all behave normally.\n */\n private readonly blockCanvasNavigation = (event: MouseEvent): void => {\n const target = event.target as HTMLElement | null;\n if (target?.closest?.('a[href]')) event.preventDefault();\n };\n\n /**\n * Set --preview-vh / --preview-vw on .preview-scroll so that viewport-relative\n * units (vh, vw) inside the canvas resolve to the simulated canvas dimensions\n * rather than the real browser viewport.\n *\n * --preview-vh = canvas frame height (unscaled) / 100\n * --preview-vw = canvas width from viewport state / 100\n *\n * Both fall back to their native unit in production (no variables defined).\n */\n private updatePreviewVh(): void {\n const el = this.previewScrollRef?.nativeElement;\n if (!el) return;\n const state = this.viewportService.getState();\n const frameH = el.clientHeight / state.scale;\n const vhVal = `${frameH / 100}px`;\n const vwVal = `${state.width / 100}px`;\n el.style.setProperty('--preview-vh', vhVal);\n el.style.setProperty('--preview-vw', vwVal);\n // Mirror on global overlay so vh/vw units resolve identically there\n this.globalOverlayRef?.nativeElement?.style.setProperty('--preview-vh', vhVal);\n this.globalOverlayRef?.nativeElement?.style.setProperty('--preview-vw', vwVal);\n this.canvasFrameHeight = Math.round(frameH);\n }\n\n private initLenis(): void {\n this.destroyLenis();\n if (!this.previewScrollRef?.nativeElement || !this.lenisContentRef?.nativeElement) return;\n\n const s = this.pageSettings?.scroll;\n this.lenis = new Lenis({\n wrapper: this.previewScrollRef.nativeElement,\n content: this.lenisContentRef.nativeElement,\n eventsTarget: this.previewScrollRef.nativeElement,\n lerp: s?.lerp ?? 0.1,\n wheelMultiplier: s?.wheelMultiplier ?? 1,\n touchMultiplier: s?.touchMultiplier ?? 1,\n orientation: s?.direction ?? 'vertical',\n infinite: s?.infinite ?? false,\n autoResize: false, // we drive resize() manually via canvasRo + viewportSub\n });\n\n this.lenis.on('scroll', (instance: Lenis) => {\n const clientH = this.previewScrollRef!.nativeElement.clientHeight;\n this.onPageScroll({\n scrollTop: instance.scroll,\n scrollHeight: instance.limit + clientH,\n clientHeight: clientH,\n scrollPercentage: instance.progress * 100,\n });\n // Notify overlay to reposition boxes on each scroll tick.\n // Dispatch on lenisContent (not previewScrollRef/eventsTarget) to avoid\n // Lenis re-consuming the event and causing infinite recursion.\n this.lenisContentRef!.nativeElement.dispatchEvent(new Event('scroll'));\n // Keep the fixed-position drop-target overlay aligned when canvas scrolls\n // during an active drag (pointer doesn't move, so _onDragMove never fires).\n this.dragEngine.refreshDragOverlays();\n // Reposition the Moveable control box (resize handles) on each scroll tick — otherwise\n // the handles drift away from the element as the canvas scrolls (the overlay outline\n // already repositions via the synthetic 'scroll' above).\n this.moveableCanvas.refresh();\n });\n\n const raf = (time: number) => {\n this.lenis?.raf(time);\n this.lenisRafId = requestAnimationFrame(raf);\n };\n this.lenisRafId = requestAnimationFrame(raf);\n }\n\n private destroyLenis(): void {\n if (this.lenisRafId != null) cancelAnimationFrame(this.lenisRafId);\n this.lenis?.destroy();\n this.lenis = undefined;\n this.lenisRafId = undefined;\n }\n\n addComponent(name: string): void {\n const config = this.registry.createConfig(name);\n if (!config) {\n return;\n }\n this.layout.push(config);\n }\n\n onDrop(event: IoxDropEvent): void {\n const { payload, insertIndex } = event;\n\n if (payload.type === 'external') {\n if (typeof payload.data === 'string') {\n const config = this.registry.createConfig(payload.data);\n if (!config) return;\n this.layout.splice(insertIndex, 0, config);\n this.cdr.markForCheck();\n this._selectAfterDrop(config);\n } else {\n const clone = this.deepCloneWithNewIds(payload.data as ComponentNode);\n this.layout.splice(insertIndex, 0, clone);\n this.cdr.markForCheck();\n this._selectAfterDrop(clone);\n }\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n return;\n }\n\n const item = payload.data as ComponentNode;\n\n if (payload.sourceId === 'blocks-panel') {\n // Reusable block from the palette — may be a bare ComponentNode or a\n // block wrapper { name, node, syncInstances, symbolId }. Extract the node.\n // Prefer symbol.node (always up-to-date) over block.node (original snapshot).\n const data = item as any;\n const symbolNode = data.symbolId ? this.symbolRegistry.getSymbol(data.symbolId)?.node : null;\n const nodeData: ComponentNode = (symbolNode ?? data.node ?? data) as ComponentNode;\n const clone = this.deepCloneWithNewIds(nodeData);\n if (data.syncInstances && data.symbolId) {\n clone.symbolId = data.symbolId;\n }\n this.layout.splice(insertIndex, 0, clone);\n this.cdr.markForCheck();\n this._selectAfterDrop(clone);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n return;\n }\n\n if (payload.sourceId && payload.sourceId !== 'canvas-preview') {\n // Cross-list move from a nested container into canvas root.\n const sourceData = this.dragEngine.getData(payload.sourceId);\n if (sourceData) {\n const srcIdx = sourceData.indexOf(item);\n if (srcIdx !== -1) {\n sourceData.splice(srcIdx, 1);\n this.dragEngine.getCdr(payload.sourceId)?.detectChanges();\n }\n }\n this.layout.splice(insertIndex, 0, item);\n this.cdr.markForCheck();\n this._selectAfterDrop(item);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n return;\n }\n\n // Same-container reorder (canvas root).\n const currentIdx = this.layout.indexOf(item);\n if (currentIdx !== -1) {\n const adjustedIdx = insertIndex > currentIdx ? insertIndex - 1 : insertIndex;\n this.layout.splice(currentIdx, 1);\n this.layout.splice(adjustedIdx, 0, item);\n this.cdr.markForCheck();\n this._selectAfterDrop(item);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n }\n\n onModeChange(mode: BuilderMode): void {\n this.activeMode = mode;\n if (mode === BuilderMode.Pan) {\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.overlayService.clearHover();\n } else {\n // Returning to Select/Style — reset pan offset so canvas re-centers\n this.panX = 0;\n this.panY = 0;\n }\n }\n\n onDeviceChange(device: DeviceMode): void {\n this.viewportService.setDevice(device);\n this.panX = 0;\n this.panY = 0;\n this.autoFitViewport();\n }\n\n onZoomChange(value: number | 'fit'): void {\n if (value === 'fit') {\n this.panX = 0;\n this.panY = 0;\n this.autoFitViewport();\n } else {\n this.viewportService.setScale(value / 100);\n }\n }\n\n // ── Board pan ────────────────────────────────────────────\n\n onBoardMouseDown(event: MouseEvent): void {\n if (this.activeMode !== BuilderMode.Pan) return;\n if (event.button !== 0) return;\n this.isPanning = true;\n this.panStartX = event.clientX;\n this.panStartY = event.clientY;\n this.panOriginX = this.panX;\n this.panOriginY = this.panY;\n event.preventDefault();\n }\n\n onBoardMouseMove(event: MouseEvent): void {\n if (!this.isPanning) return;\n this.panX = this.panOriginX + (event.clientX - this.panStartX);\n this.panY = this.panOriginY + (event.clientY - this.panStartY);\n }\n\n onBoardMouseUp(): void {\n this.isPanning = false;\n }\n\n private autoFitViewport(): void {\n const container = this.previewCanvas?.nativeElement;\n if (!container) return;\n // Available width = container width minus horizontal padding (10px × 2)\n this.viewportService.fitToWidth(container.clientWidth, 20);\n }\n\n selectPanel(panel: string): void {\n this.activePanel = panel;\n this.panelEventService.emit(this.isPanelOpen ? PanelEventTypes.PANEL_SELECTED : PanelEventTypes.PANEL_OPEN, panel);\n }\n\n handleClick(event: any): void {\n if (this.activeMode === BuilderMode.Pan) return;\n this.selectedItem = event.node;\n this.overlayService.setSelect(event.element, event.node.type, this.activeMode, event.node, event.componentRef);\n this.selectPanel(PanelTypes.STYLES);\n this._emitElementSelect(event.node, event.componentRef);\n }\n\n private _selectAfterDrop(node: ComponentNode): void {\n // Wait one tick for Angular to render the new component and register it\n // in the overlay before attempting to select it.\n setTimeout(() => {\n const ref = this.overlayService.getNodeRef(node);\n if (!ref) return;\n this.selectedItem = node;\n this.overlayService.setSelect(ref.element, node.type, this.activeMode, node, ref.componentRef);\n this.selectPanel(PanelTypes.STYLES);\n this._emitElementSelect(node, ref.componentRef);\n });\n }\n\n handleMouseEnter(event: any): void {\n if (this.isDragging || this.activeMode === BuilderMode.Pan) return;\n cancelAnimationFrame(this.hoverHideRaf);\n this.overlayService.setHover(event.element, event.node.type, this.activeMode);\n }\n\n handleMouseLeave(): void {\n if (this.isDragging || this.activeMode === BuilderMode.Pan) return;\n cancelAnimationFrame(this.hoverHideRaf);\n this.hoverHideRaf = requestAnimationFrame(() => this.overlayService.clearHover());\n }\n\n handleCanvasClick(): void {\n // Only fires when clicking empty canvas space (renderers call stopPropagation)\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n\n onTreeNodeSelect(node: ComponentNode): void {\n this.selectedItem = node;\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n this._emitElementSelect(node, ref.componentRef);\n }\n this.selectPanel(PanelTypes.STYLES);\n }\n\n onTreeNodeAction(event: { action: NodeAction; node: ComponentNode }): void {\n const { action, node } = event;\n\n // Check global elements first\n const globalIdx = this.globalElements.findIndex(n => n === node);\n if (globalIdx !== -1) {\n if (action === NodeAction.Delete) {\n this.globalElements.splice(globalIdx, 1);\n this.globalElementsChange.emit([...this.globalElements]);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n return;\n }\n\n const result = this.findNodeInTree(node, this.layout);\n if (!result) return;\n\n if (action === NodeAction.Delete) {\n result.parent.splice(result.index, 1);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n } else if (action === NodeAction.Duplicate) {\n const clone = this.deepCloneWithNewIds(node);\n result.parent.splice(result.index + 1, 0, clone);\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n }\n\n onTreeNodeMove(): void {\n // Tree drag moved a node — canvas will re-render via change detection.\n // Clear selection since the moved node's DOM element may be recreated.\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n\n // ── Toolbar actions ──────────────────────────────────────\n onToolbarAction(event: { action: ToolbarAction; entry: OverlayEntry; position?: 'before' | 'after'; interaction?: IoxInteraction; wrapType?: string }): void {\n const { action, entry } = event;\n const node = entry.node;\n if (!node) return;\n\n switch (action) {\n case ToolbarAction.Delete: {\n const result = this.findNodeInTree(node, this.layout) ?? this.findNodeInTree(node, this.globalElements);\n if (result) {\n result.parent.splice(result.index, 1);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.Duplicate: {\n const result = this.findNodeInTree(node, this.layout) ?? this.findNodeInTree(node, this.globalElements);\n if (result) {\n const clone = this.deepCloneWithNewIds(node);\n result.parent.splice(result.index + 1, 0, clone);\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.Wrap: {\n const wrapType = event.wrapType;\n if (!wrapType) break;\n const wrapper = this.registry.createConfig(wrapType) as ComponentNode | null;\n if (!wrapper) break;\n // Wrap in place within whichever tree the node lives in — page\n // layout first, then global elements. Context is never crossed.\n let wrapped = wrapNode(this.layout, node, wrapper);\n let inGlobal = false;\n if (!wrapped) {\n wrapped = wrapNode(this.globalElements, node, wrapper);\n inGlobal = !!wrapped;\n }\n if (wrapped) {\n if (inGlobal) this.globalElementsChange.emit([...this.globalElements]);\n this.cdr.detectChanges();\n // If the wrapped node lives in a Repeater template, rebuild its repeated rows so\n // every clone picks up the new wrapper (and re-resolves the now-nested bindings).\n this._refreshRepeaterFor(node);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n this._selectAfterDrop(wrapped);\n }\n break;\n }\n case ToolbarAction.Play: {\n this.interactionEngine.replay(node);\n break;\n }\n case ToolbarAction.SaveAsBlock: {\n const blockClone: ComponentNode = JSON.parse(JSON.stringify(node));\n this._stripGlobalFlags(blockClone);\n this.pendingBlockNode = blockClone;\n this.saveBlockName = '';\n this.showSaveBlockDialog = true;\n break;\n }\n case ToolbarAction.SelectParent: {\n const parentNode = this.findParentNode(node, this.layout) ?? this.findParentNode(node, this.globalElements);\n if (parentNode) {\n const ref = this.overlayService.getNodeRef(parentNode);\n if (ref) {\n this.selectedItem = parentNode;\n this.overlayService.setSelect(ref.element, parentNode.type, this.activeMode, parentNode, ref.componentRef);\n this._emitElementSelect(parentNode, ref.componentRef);\n }\n } else {\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n break;\n }\n case ToolbarAction.MakeGlobal: {\n const result = this.findNodeInTree(node, this.layout);\n if (result) {\n result.parent.splice(result.index, 1);\n node.isGlobal = true;\n node.globalPosition = event.position ?? 'before';\n this.globalElements.push(node);\n this.globalElementsChange.emit([...this.globalElements]);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.cdr.markForCheck();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.RemoveGlobal: {\n const idx = this.globalElements.findIndex(n => n.id === node.id);\n if (idx !== -1) {\n this.globalElements.splice(idx, 1);\n node.isGlobal = false;\n node.globalPosition = undefined;\n this.layout.push(node);\n this.globalElementsChange.emit([...this.globalElements]);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.cdr.markForCheck();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.EditPreset: {\n this.panelEventService.emit(PanelEventTypes.PRESET_EDIT, node.stylePresetId);\n this.panelEventService.emit(\n this.isPanelOpen ? PanelEventTypes.PANEL_SELECTED : PanelEventTypes.PANEL_OPEN,\n PanelTypes.STYLES,\n );\n break;\n }\n case ToolbarAction.EditInteractionPreset: {\n // Preset-linked node → open preset-edit mode. Plain interaction → just open the panel.\n if (node.interactionPresetId) {\n this.panelEventService.emit(PanelEventTypes.INTERACTION_PRESET_EDIT, node.interactionPresetId);\n }\n this.panelEventService.emit(\n this.isPanelOpen ? PanelEventTypes.PANEL_SELECTED : PanelEventTypes.PANEL_OPEN,\n PanelTypes.INTERACTIONS,\n );\n // Expand the specific interaction the badge represents so the panel opens \"on the right\n // interaction active\". Emitted AFTER PANEL_OPEN so the panel is showing this node.\n if (event.interaction?.id) {\n this.panelEventService.emit(PanelEventTypes.INTERACTION_EDIT, event.interaction.id);\n }\n break;\n }\n case ToolbarAction.PastePreset: {\n const presetId = this.clipboard.getPresetId();\n if (presetId) {\n node.stylePresetId = presetId;\n node.styleOverrides = {};\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef: null });\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.PasteInteractionPreset: {\n const interactionPresetId = this.clipboard.getInteractionPresetId();\n if (interactionPresetId) {\n node.interactionPresetId = interactionPresetId;\n const preset = this.interactionPresetRegistry.getPreset(interactionPresetId);\n if (preset) node.interactions = JSON.parse(JSON.stringify(preset.interactions));\n this.interactionEngine.refresh(node);\n this.overlayService.refreshSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.DetachSymbol: {\n node.detachedSymbolId = node.symbolId;\n node.symbolId = undefined;\n this.overlayService.refreshSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n break;\n }\n case ToolbarAction.ResyncSymbol: {\n node.symbolId = node.detachedSymbolId;\n node.detachedSymbolId = undefined;\n const symbol = this.symbolRegistry.getSymbol(node.symbolId!);\n if (symbol) {\n this.panelEventService.emit(PanelEventTypes.SYMBOLS_CHANGED, symbol);\n }\n this.overlayService.refreshSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n break;\n }\n case ToolbarAction.Copy: {\n this.clipboard.copyNode(node);\n break;\n }\n case ToolbarAction.Paste: {\n const pastedNode = this.clipboard.getNode();\n if (!pastedNode) break;\n const clone = this.deepCloneWithNewIds(pastedNode);\n const result = this.findNodeInTree(node, this.layout) ?? this.findNodeInTree(node, this.globalElements);\n if (result) {\n result.parent.splice(result.index + 1, 0, clone);\n } else {\n this.layout.push(clone);\n }\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n break;\n }\n case ToolbarAction.AddSlide: {\n if (!Array.isArray(node.children)) break;\n const slide = this.registry.createConfig('SliderSlide');\n if (!slide) break;\n node.children = [...node.children, slide];\n const ref = this.overlayService.getNodeRef(node);\n if (ref?.componentRef) {\n ref.componentRef.setInput('children', node.children);\n ref.componentRef.changeDetectorRef.detectChanges();\n }\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n break;\n }\n }\n }\n\n confirmSaveBlock(): void {\n if (!this.saveBlockName.trim() || !this.pendingBlockNode) return;\n this.saveBlock.emit({ name: this.saveBlockName.trim(), node: this.pendingBlockNode });\n this.showSaveBlockDialog = false;\n this.pendingBlockNode = null;\n }\n\n cancelSaveBlock(): void {\n this.showSaveBlockDialog = false;\n this.pendingBlockNode = null;\n }\n\n private deepCloneWithNewIds(node: ComponentNode): ComponentNode {\n const clone: ComponentNode = JSON.parse(JSON.stringify(node));\n // Fresh ids + remap intra-subtree references (stateTriggers, interaction targets) so a\n // duplicated/pasted structure stays self-consistent (trigger-hover keeps its own trigger).\n regenerateNodeIds(clone, { styleId: 'regenerate' });\n return clone;\n }\n\n private _stripGlobalFlags(node: ComponentNode): void {\n node.isGlobal = false;\n node.globalPosition = undefined;\n node.children?.forEach(c => this._stripGlobalFlags(c));\n }\n\n private _scrollbarTimer: ReturnType<typeof setTimeout> | null = null;\n\n onPageScroll(event: { scrollTop: number; scrollHeight: number; clientHeight: number; scrollPercentage?: number }): void {\n const contentH = event.scrollHeight;\n const wrapperH = event.clientHeight;\n if (contentH <= wrapperH) {\n this.isScrollbarVisible = false;\n return;\n }\n // .canvas-scrollbar has top:20px; bottom:20px — visible track is 40px shorter.\n const trackH = wrapperH - 40;\n const thumbH = Math.max((trackH / contentH) * trackH, 32);\n // Use Lenis progress (0–1) when available — more accurate than recomputing from scroll/limit.\n const progress = event.scrollPercentage != null ? event.scrollPercentage / 100\n : event.scrollTop / (contentH - wrapperH);\n const thumbTop = progress * (trackH - thumbH);\n this.scrollThumbHeight = thumbH;\n this.scrollThumbTop = thumbTop;\n this.isScrollbarVisible = true;\n // .canvas-scrollbar is position:absolute inside the Lenis wrapper.\n // When Lenis calls wrapper.scrollTo(), scrollTop shifts all absolute children.\n // Counteract with translateY(scrollTop) so the track stays visually anchored.\n this.scrollbarTranslate = event.scrollTop;\n this.cdr.markForCheck();\n\n if (this._scrollbarTimer) clearTimeout(this._scrollbarTimer);\n this._scrollbarTimer = setTimeout(() => {\n this.isScrollbarVisible = false;\n this.cdr.markForCheck();\n }, 1200);\n }\n\n private findNodeInTree(target: ComponentNode, children: ComponentNode[]): { parent: ComponentNode[]; index: number } | null {\n for (let i = 0; i < children.length; i++) {\n if (children[i] === target) {\n return { parent: children, index: i };\n }\n if (children[i].children) {\n const found = this.findNodeInTree(target, children[i].children!);\n if (found) return found;\n }\n }\n return null;\n }\n\n private findParentNode(target: ComponentNode, children: ComponentNode[], parent?: ComponentNode): ComponentNode | null {\n for (const child of children) {\n if (child === target) return parent || null;\n if (child.children) {\n const found = this.findParentNode(target, child.children, child);\n if (found) return found;\n }\n }\n return null;\n }\n\n /** Returns the closest ancestor (or self) of `target` that has a `symbolId`. */\n private findSymbolAncestorOf(target: ComponentNode, nodes: ComponentNode[]): ComponentNode | null {\n for (const node of nodes) {\n if (node === target) return node.symbolId ? node : null;\n if (node.children?.length && this.findNodeInTree(target, node.children)) {\n if (node.symbolId) return node;\n return this.findSymbolAncestorOf(target, node.children);\n }\n }\n return null;\n }\n\n /** Nearest Repeater ancestor of `target` (or null). A node inside a repeater renders in ITEM\n * scope, so the bindings panel needs the repeater to sample its current item (e.g. bind an\n * Image to a `gallery` string item). Prefers the innermost repeater when nested. */\n private findRepeaterAncestorOf(target: ComponentNode, nodes: ComponentNode[]): ComponentNode | null {\n for (const node of nodes) {\n if (node === target) return null;\n if (node.children?.length && this.findNodeInTree(target, node.children)) {\n return this.findRepeaterAncestorOf(target, node.children)\n ?? (node.type === 'Repeater' ? node : null);\n }\n }\n return null;\n }\n\n /** If `node` lives inside a Repeater template, tell that repeater to rebuild its preview rows so\n * a structural change (e.g. wrapping a template child) propagates to every repeated row. No-op\n * when the node is not inside a repeater. */\n private _refreshRepeaterFor(node: ComponentNode): void {\n const repeater = this.findRepeaterAncestorOf(node, this.layout)\n ?? this.findRepeaterAncestorOf(node, this.globalElements);\n if (!repeater) return;\n const ref = this.overlayService.getNodeRef(repeater);\n (ref?.componentRef?.instance as { refreshTemplate?: () => void })?.refreshTemplate?.();\n }\n\n /** Emit ELEMENT_SELECT with the ancestors the panels need (symbol + repeater item scope). */\n private _emitElementSelect(node: ComponentNode, componentRef: any): void {\n const symbolAncestor = this.findSymbolAncestorOf(node, this.layout)\n ?? this.findSymbolAncestorOf(node, this.globalElements);\n const repeaterAncestor = this.findRepeaterAncestorOf(node, this.layout)\n ?? this.findRepeaterAncestorOf(node, this.globalElements);\n // Parent's live `display` — drives the Child Layout group's parent-scoped visibility so\n // flex-child vs grid-child controls only surface when the parent actually lays them out.\n const parent = this.findParentNode(node, this.layout) ?? this.findParentNode(node, this.globalElements);\n const parentDisplay = parent ? this.readNodeDisplay(parent) : null;\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef, symbolAncestor, repeaterAncestor, parentDisplay });\n }\n\n /** Read a node's current `display` value. The style panel mutates `styleTraits` in place at edit\n * time, so that is the live source of truth; fall back to a preset's `styleOverrides` map, then\n * the CSS initial value. */\n private readNodeDisplay(node: ComponentNode): string {\n const layoutGroup = node.styleTraits?.find(g => g.category === StyleCategory.Layout);\n const displayTrait = layoutGroup?.traits.find(t => t.name === 'display');\n if (displayTrait?.default != null) return displayTrait.default;\n return node.styleOverrides?.['display'] ?? 'block';\n }\n\n private handlePanelEvents(panelEvent: PanelEvent): void {\n if (panelEvent.type === PanelEventTypes.PANEL_CLOSE) {\n this.isPanelOpen = false;\n return;\n }\n\n if (panelEvent.type === PanelEventTypes.PANEL_OPEN) {\n this.isPanelOpen = true;\n }\n }\n}","<div class=\"builder\">\n <header class=\"builder-header\">\n <div class=\"sidebar-switcher\">\n <button (click)=\"activeSidebar = 'pages'\" [class.active]=\"activeSidebar === 'pages'\" title=\"Pages\" aria-label=\"Pages\">\n <i class=\"ph-thin ph-browsers\"></i>\n </button>\n <button (click)=\"activeSidebar = 'components'\" [class.active]=\"activeSidebar === 'components'\" title=\"Components\" aria-label=\"Components\">\n <i class=\"ph-thin ph-cube\"></i>\n </button>\n <button (click)=\"activeSidebar = 'tree'\" [class.active]=\"activeSidebar === 'tree'\" title=\"Layers\" aria-label=\"Layers\">\n <i class=\"ph-thin ph-tree-structure\"></i>\n </button>\n <button (click)=\"activeSidebar = 'tokens'\" [class.active]=\"activeSidebar === 'tokens'\" title=\"Design Tokens\" aria-label=\"Design Tokens\">\n <i class=\"ph-thin ph-circles-three\"></i>\n </button>\n </div>\n\n <app-toolbar\n [activeMode]=\"activeMode\"\n [activeDevice]=\"activeDevice\"\n [activeZoom]=\"activeZoom\"\n [activeScreenWidth]=\"activeScreenWidth\"\n [isSaving]=\"isSaving\"\n [pageStatus]=\"pageStatus\"\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (modeChange)=\"handleToolbarModeChange($event)\"\n (deviceChange)=\"handleToolbarDeviceChange($event)\"\n (zoomChange)=\"handleToolbarZoomChange($event)\"\n (screenWidthChange)=\"handleToolbarScreenWidthChange($event)\"\n (save)=\"save.emit()\"\n (preview)=\"preview.emit()\"\n (publishToggle)=\"publishToggle.emit()\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\">\n </app-toolbar>\n\n <div class=\"panel-switcher\">\n <button (click)=\"selectPanel(panelTypes.BINDINGS)\" [class.active]=\"activePanel === panelTypes.BINDINGS\" title=\"Bindings\">\n <i class=\"ph-thin ph-plugs-connected\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.STYLES)\" [class.active]=\"activePanel === panelTypes.STYLES\" title=\"Styles\">\n <i class=\"ph-thin ph-paint-brush\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.PAGE)\" [class.active]=\"activePanel === panelTypes.PAGE\" title=\"Page settings\" aria-label=\"Page settings\">\n <i class=\"ph-thin ph-gear-six\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.INTERACTIONS)\" [class.active]=\"activePanel === panelTypes.INTERACTIONS\" title=\"Interactions\">\n <i class=\"ph-thin ph-lightning\"></i>\n </button>\n </div> \n </header>\n\n <div class=\"builder-main\" [class.panel-open]=\"isPanelOpen\">\n <aside class=\"sidebar\">\n <div *ngIf=\"activeSidebar === 'pages'\" class=\"sidebar-slot\">\n <ng-content select=\"[builderPages]\"></ng-content>\n </div>\n <div *ngIf=\"activeSidebar === 'components'\" class=\"sidebar-slot\">\n <ng-content select=\"[builderComponents]\"></ng-content>\n </div>\n <div *ngIf=\"activeSidebar === 'tokens'\" class=\"sidebar-slot\">\n <ng-content select=\"[builderTokens]\"></ng-content>\n </div>\n <app-layer-tree *ngIf=\"activeSidebar === 'tree'\"\n [layout]=\"layout\"\n [globalElements]=\"globalElements\"\n (nodeSelect)=\"onTreeNodeSelect($event)\"\n (nodeAction)=\"onTreeNodeAction($event)\"\n (nodeMove)=\"onTreeNodeMove()\"></app-layer-tree>\n </aside>\n\n <main #previewCanvas class=\"preview\"\n [class.grab-mode]=\"activeMode === builderModes.Pan\"\n [class.grabbing]=\"isPanning\"\n (click)=\"handleCanvasClick()\"\n (mousedown)=\"onBoardMouseDown($event)\"\n (mousemove)=\"onBoardMouseMove($event)\"\n (mouseup)=\"onBoardMouseUp()\"\n (mouseleave)=\"onBoardMouseUp()\">\n <app-overlay (toolbarAction)=\"onToolbarAction($event)\"></app-overlay>\n\n <!-- Custom Lenis scrollbar — lives in .preview (not .preview-scroll) so it\n stays in the right gutter and never overlaps the canvas at large widths.\n No translateY counteract needed since it isn't inside the Lenis wrapper. -->\n <div class=\"canvas-scrollbar\"\n [class.visible]=\"isScrollbarVisible\">\n <div class=\"canvas-scrollbar-thumb\"\n [style.height.px]=\"scrollThumbHeight\"\n [style.top.px]=\"scrollThumbTop\">\n </div>\n </div>\n\n <!-- Global elements overlay — outside Lenis so position:fixed children\n stay pinned to the canvas viewport rather than scrolling with content.\n Shares viewportTransform so elements scale correctly at any zoom level.\n Height matches viewportHeight so position:fixed + inset:0 fills the\n simulated viewport correctly (CSS calc(100%) would give the wrong\n containing-block height and break full-screen fixed overlays). -->\n <div *ngIf=\"globalElements.length\"\n #globalOverlay\n class=\"global-elements-overlay\"\n [style.width.px]=\"viewportWidth\"\n [style.height.px]=\"canvasFrameHeight || viewportHeight\"\n [style.transform]=\"viewportTransform\">\n <ng-container *ngFor=\"let item of globalElementsBefore\">\n <ng-container [ioxRender]=\"item\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let item of globalElementsAfter\">\n <ng-container [ioxRender]=\"item\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"preview-scroll\"\n #previewScroll\n [style.width.px]=\"viewportScaledWidth\"\n [class.pan-mode]=\"activeMode === builderModes.Pan\">\n\n <!-- Lenis content proxy: height = realContentHeight × scale.\n Lenis scrolls against this value so scroll range is always in\n visual px — correct at any zoom level. -->\n <div class=\"preview-lenis-content\" #lenisContent\n [style.height.px]=\"scaledContentHeight\">\n\n <iox-page-component\n [style.width.px]=\"viewportWidth\"\n [style.height.px]=\"canvasFrameHeight || viewportHeight\"\n [style.transform]=\"viewportTransform\">\n\n <div class=\"canvas-viewport\"\n id=\"canvas-preview\"\n [style.min-height.px]=\"canvasMinHeight\">\n\n <!-- WRAPPER COLLAPSE (task 9c): top-level nodes render DIRECTLY into the\n canvas viewport — no .preview-node wrapper; iox-outer + drag move to the\n host (RenderDirective, via ioxDragSourceId). -->\n <ng-container *ngFor=\"let item of layout\"\n [ioxRender]=\"item\"\n [ioxDragSourceId]=\"'canvas-preview'\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </div>\n </iox-page-component>\n </div>\n </div>\n </main>\n\n <ng-content select=\"[builderPanel]\"></ng-content>\n </div>\n\n <!-- Save as Reusable Block dialog -->\n @if (showSaveBlockDialog) {\n <div class=\"save-block-backdrop\" (click)=\"cancelSaveBlock()\"></div>\n <div class=\"save-block-dialog\" (click)=\"$event.stopPropagation()\">\n <h4 class=\"save-block-title\">Save as Reusable Block</h4>\n <input class=\"save-block-input\"\n type=\"text\"\n placeholder=\"Block name...\"\n [(ngModel)]=\"saveBlockName\"\n (keydown.enter)=\"confirmSaveBlock()\"\n (keydown.escape)=\"cancelSaveBlock()\"\n autofocus>\n <div class=\"save-block-actions\">\n <p-button size=\"small\" severity=\"secondary\" label=\"Cancel\" (click)=\"cancelSaveBlock()\"></p-button>\n <p-button size=\"small\" label=\"Save\" [disabled]=\"!saveBlockName.trim()\" (click)=\"confirmSaveBlock()\"></p-button>\n </div>\n </div>\n }\n</div>","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n/**\n * Directive-host Section (Phase 2 of the Moveable migration = task 9c). The `<section>` IS the host\n * (no `<app-section>` wrapper, no separate `.section-root`) — matching the SSR engine's\n * `section[iox-section]`. The dropzone is registered on the host element itself (was the ioxDropzone\n * directive on `.section-root`); the `.section-child` draggable wrappers are UNCHANGED, so interact.js\n * (flag-off) keeps working exactly as before. See moveable-migration.md.\n */\n@Component({\n selector: 'section[iox-section]',\n template: `\n <div *ngIf=\"!children.length\" class=\"section-placeholder\">\n <i class=\"ph-thin ph-rows\"></i>\n <span>Drop components here</span>\n </div>\n\n <!-- WRAPPER COLLAPSE (task 9c): render children directly; iox-outer + drag move to the host. -->\n <ng-container *ngFor=\"let child of children\"\n [ioxRender]=\"child\"\n [ioxDragSourceId]=\"dropListId\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n `,\n host: {\n '[class]': \"'section-root iox-node-' + nodeId + (listOrientation === 'horizontal' ? ' is-horizontal' : '')\",\n },\n styles: [`\n :host {\n position: relative;\n box-sizing: border-box;\n }\n .section-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n z-index: 0;\n opacity: 0;\n transition: opacity 0.15s;\n }\n :host(:hover) .section-placeholder,\n :host(.iox-drag-over) .section-placeholder {\n opacity: 1;\n }\n .section-placeholder i { font-size: 22px; }\n /* Flex/grid-child sizing on the collapsed direct-child hosts (was .section-child). ::ng-deep\n because the hosts are inserted dynamically by RenderDirective. */\n :host ::ng-deep > [class*=\"iox-outer-\"] { min-width: 0; }\n `],\n standalone: false,\n})\nexport class SectionComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private elRef: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n // Register the HOST as the dropzone (was the ioxDropzone directive on `.section-root`).\n this.dragEngine.registerDropzone(\n this.dropListId,\n this.elRef.nativeElement,\n this.children,\n this.cdr,\n (evt) => this.onDrop(evt),\n );\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDropzone(this.dropListId, this.elRef.nativeElement);\n }\n\n get listOrientation(): 'horizontal' | 'vertical' {\n const d = this.style?.['display'];\n if (d === 'flex' || d === 'inline-flex') {\n const dir = this.style?.['flexDirection'];\n if (!dir || dir === 'row' || dir === 'row-reverse') return 'horizontal';\n }\n return 'vertical';\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n/**\n * Directive-host Container (Phase 2 of the Moveable migration = task 9c). The real tag (div/section/\n * ul/ol/li/…, chosen from the `htmlTag` trait by RenderDirective via `hostElement`) IS the host — no\n * `<app-builder-container>` wrapper, no separate `.container-root` — matching the SSR engine. The\n * dropzone is registered on the host itself; the `.container-child` draggable wrappers are UNCHANGED,\n * so interact.js (flag-off) keeps working. Also backs the List (`ul`/`ol`) and ListItem (`li`) types.\n * See moveable-migration.md.\n */\n@Component({\n selector: 'div[iox-container],section[iox-container],article[iox-container],header[iox-container],footer[iox-container],main[iox-container],nav[iox-container],ul[iox-container],ol[iox-container],li[iox-container]',\n template: `\n <div *ngIf=\"!children.length\" class=\"container-placeholder\">\n <i class=\"ph-thin ph-square\"></i>\n <span>Drop components here</span>\n </div>\n\n <!-- WRAPPER COLLAPSE (task 9c): render each child DIRECTLY — no .container-child wrapper. The\n RenderDirective puts iox-outer + iox-node on the child's HOST (the flex item) and registers\n drag there (via ioxDragSourceId), so the builder DOM matches the SSR engine's single\n element per node. Flex-child sizing (min-width:0) moves to \\`.container-root > *\\` below. -->\n <ng-container *ngFor=\"let child of children\"\n [ioxRender]=\"child\"\n [ioxDragSourceId]=\"dropListId\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n `,\n host: {\n '[class]': \"'container-root iox-node-' + nodeId + (listOrientation === 'horizontal' ? ' is-horizontal' : '')\",\n '[attr.start]': \"htmlTag === 'ol' && start !== 1 ? start : null\",\n '[attr.reversed]': \"htmlTag === 'ol' && reversed ? '' : null\",\n },\n styles: [`\n :host {\n position: relative;\n box-sizing: border-box;\n }\n .container-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n z-index: 0;\n opacity: 0;\n transition: opacity 0.15s;\n }\n :host(:hover) .container-placeholder,\n :host(.iox-drag-over) .container-placeholder {\n opacity: 1;\n }\n .container-placeholder i { font-size: 18px; }\n /* Flex/grid-child sizing on the DIRECT children (the collapsed node hosts) — was on the\n removed .container-child wrapper. min-width:0 lets flex items shrink below content so the\n equal-split works. ::ng-deep because the hosts are inserted dynamically (RenderDirective),\n so they don't carry this component's encapsulation attribute. */\n :host ::ng-deep > [class*=\"iox-outer-\"] { min-width: 0; }\n `],\n standalone: false,\n})\nexport class BuilderContainerComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n @Input() htmlTag: string = 'div';\n @Input() start: number = 1;\n @Input() reversed: boolean = false;\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private elRef: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n // Register the HOST as the dropzone (was the ioxDropzone directive on `.container-root`).\n this.dragEngine.registerDropzone(\n this.dropListId,\n this.elRef.nativeElement,\n this.children,\n this.cdr,\n (evt) => this.onDrop(evt),\n );\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDropzone(this.dropListId, this.elRef.nativeElement);\n }\n\n get listOrientation(): 'horizontal' | 'vertical' {\n const d = this.style?.['display'];\n if (d === 'flex' || d === 'inline-flex') {\n const dir = this.style?.['flexDirection'];\n if (!dir || dir === 'row' || dir === 'row-reverse') return 'horizontal';\n }\n return 'vertical';\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../services/drag-engine.service';\n\n@Directive({\n selector: '[ioxDropzone]',\n standalone: false,\n})\nexport class IoxDropzoneDirective implements OnInit, OnDestroy {\n @Input() ioxDropzoneId = '';\n @Input() ioxDropzoneData: ComponentNode[] = [];\n /** Optional callback invoked after a drop lands in this zone (e.g. repeater preview refresh). */\n @Input() ioxDropzonePostDrop?: () => void;\n @Output() ioxDrop = new EventEmitter<IoxDropEvent>();\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.dragEngine.registerDropzone(\n this.ioxDropzoneId,\n this.el.nativeElement,\n this.ioxDropzoneData,\n this.cdr,\n (evt) => this.ioxDrop.emit(evt),\n this.ioxDropzonePostDrop,\n );\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDropzone(this.ioxDropzoneId, this.el.nativeElement);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n} from '@angular/core';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { IS_PREVIEW } from '@vectoriox/iox-ui';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n@Component({\n selector: 'app-builder-linked-container',\n template: `\n <a [href]=\"resolvedHref\"\n [target]=\"target\"\n [ngStyle]=\"style\"\n [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\"\n class=\"linked-container-root\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\n <div *ngIf=\"!children.length\" class=\"linked-container-placeholder\">\n <i class=\"ph-thin ph-link\"></i>\n <span>Drop components here</span>\n </div>\n\n <!-- WRAPPER COLLAPSE (task 9c): render children directly into the <a>; iox-outer + drag\n move to the host. -->\n <ng-container *ngFor=\"let child of children\"\n [ioxRender]=\"child\"\n [ioxDragSourceId]=\"dropListId\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </a>\n `,\n styles: [`\n .linked-container-root {\n display: block;\n position: relative;\n box-sizing: border-box;\n text-decoration: none;\n color: inherit;\n cursor: pointer;\n }\n .linked-container-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n opacity: 0;\n transition: opacity 0.15s;\n }\n .linked-container-root:hover .linked-container-placeholder,\n .linked-container-root.iox-drag-over .linked-container-placeholder {\n opacity: 1;\n }\n .linked-container-placeholder i { font-size: 18px; }\n /* Flex/grid-child sizing on the collapsed direct-child hosts (was .linked-container-child).\n ::ng-deep because the hosts are inserted dynamically by RenderDirective. */\n :host ::ng-deep .linked-container-root > [class*=\"iox-outer-\"] { min-width: 0; }\n `],\n standalone: false,\n})\nexport class BuilderLinkedContainerComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Input() linkType: 'external' | 'page' = 'external';\n @Input() url = 'https://';\n @Input() pageRoute = '';\n @Input() target: '_self' | '_blank' | '_parent' | '_top' = '_self';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n private capturePreventDefault = (e: MouseEvent) => e.preventDefault();\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n private elRef: ElementRef<HTMLElement>,\n @Optional() @Inject(IS_PREVIEW) private isPreview: boolean,\n ) {}\n\n ngOnInit(): void {\n if (!this.isPreview) {\n this.elRef.nativeElement.addEventListener('click', this.capturePreventDefault, true);\n }\n }\n\n ngOnDestroy(): void {\n if (!this.isPreview) {\n this.elRef.nativeElement.removeEventListener('click', this.capturePreventDefault, true);\n }\n }\n\n get resolvedHref(): string {\n if (this.linkType !== 'page') return this.url || '#';\n return this.pageRoute || '#';\n }\n\n get listOrientation(): 'horizontal' | 'vertical' {\n const d = this.style?.['display'];\n if (d === 'flex' || d === 'inline-flex') {\n const dir = this.style?.['flexDirection'];\n if (!dir || dir === 'row' || dir === 'row-reverse') return 'horizontal';\n }\n return 'vertical';\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import { resolvePath } from '@vectoriox/iox-ui';\n\nimport { ComponentNode, IoxBinding } from '../models/component.model';\n\n/**\n * `resolvePath` now lives in @vectoriox/iox-ui so the builder canvas and BOTH engine renderers\n * share one implementation — it had already drifted while forked. Re-exported here as a passthrough\n * so existing import sites keep working. See render-parity.md.\n */\nexport { resolvePath };\n\n/**\n * Deep-clones a ComponentNode tree and overrides trait defaults\n * according to each node's bindings resolved against `item`.\n *\n * Each clone gets a new `id` (for Angular tracking / overlay registration)\n * but shares the original node's CSS class by setting `styleId = originalId`.\n * This means all repeated preview rows point to the same CSS rule block as the\n * template node — the style engine only needs one rule per logical slot.\n */\nexport function cloneNodesForItem(nodes: ComponentNode[], item: any): ComponentNode[] {\n return nodes.map(node => {\n // Capture the CSS-owning id before clone\n const cssId = node.styleId ?? node.id;\n\n const clone: ComponentNode = JSON.parse(JSON.stringify(node));\n clone.id = Math.random().toString(36).substr(2, 9);\n // Point this clone and all its descendants at the original CSS rule.\n clone.styleId = cssId;\n // Mark as a preview clone: display-only, not selectable/editable on the canvas.\n // (Distinct from styleId, which duplication/paste also uses.) The render directive\n // skips overlay registration for nodes carrying this flag.\n (clone as any).__previewClone = true;\n\n if (clone.bindings?.length && item) {\n for (const binding of clone.bindings as IoxBinding[]) {\n const value = resolvePath(item, binding.path);\n if (value !== undefined) {\n for (const trait of clone.traits || []) {\n if (trait.name === binding.prop) {\n trait.default = value;\n }\n }\n }\n }\n }\n\n if (clone.children?.length) {\n clone.children = cloneNodesForItem(clone.children, item);\n }\n\n return clone;\n });\n}\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport {\n computeRelative,\n DataSourceEndpoints,\n dataSourcePlanToRequest,\n getByPath,\n normalizeCollectionResult,\n planDataSource,\n resolveRepeaterItems,\n} from '@vectoriox/iox-ui';\n\nimport { IoxDataSource } from '../models/component.model';\n\n/**\n * Public content bases the builder canvas resolves data against — the SAME `@Public()` controllers\n * the live storefront (SSR engine) hits, so the canvas preview shows what the published page shows.\n * Provide from the host app, e.g. `{ cmsBase: config.host + 'api/', shopBase: config.host + 'api/shop/' }`.\n */\nexport const IOX_DATA_SOURCE_ENDPOINTS = new InjectionToken<DataSourceEndpoints>('IOX_DATA_SOURCE_ENDPOINTS');\n\n/**\n * THE data fetch for every canvas component that renders a data source (Repeater, SliderContainer)\n * and for the bindings preview.\n *\n * Before this existed, each of those fetched by itself through an injected admin content service\n * (`getContent(contentType, orgId)` → `api/org/:orgId/resources/:type`), which takes NO filters:\n * the data source's `filterByQueryParams` / `filterByRouteParam` were silently ignored, so the\n * canvas always showed the whole unfiltered collection, and the live SSR site — which does apply\n * them — rendered something different. Every caller now runs the SHARED `planDataSource` from\n * `@vectoriox/iox-ui` against the public controllers, exactly like the SSR engine.\n */\n@Injectable()\nexport class BuilderDataSourceService {\n\n constructor(\n private http: HttpClient,\n @Optional() @Inject(IOX_DATA_SOURCE_ENDPOINTS) private endpoints: DataSourceEndpoints | null,\n ) {}\n\n /** True when the host app wired the public endpoints — without them nothing can be fetched. */\n get isConfigured(): boolean { return !!this.endpoints; }\n\n /**\n * Resolve a data source to the value its MODE describes: the item for a `single` source, the\n * array for a `list`. The builder is design time — there are no live route or query params — so\n * a route filter falls back to `defaultId` and a query filter to its `defaultValue`, which is\n * exactly what `planDataSource` does with empty params.\n *\n * Callers pass the source itself (resolved from their own page-scoped\n * `DataSourceRegistryService`) rather than an alias: this service is module-scoped and must not\n * capture a registry from the wrong injector. Emits `null` when the source resolves to no\n * request or the fetch fails — the canvas degrades to an empty preview, it never throws.\n */\n fetch(ds: IoxDataSource | undefined): Observable<any> {\n if (!ds) return of(null);\n\n const plan = planDataSource(ds as any);\n if (plan.kind === 'static') return of(plan.data);\n if (plan.kind === 'none' || !this.endpoints) return of(null);\n\n const request = dataSourcePlanToRequest(plan, this.endpoints);\n if (!request) return of(null);\n\n const { kind, mode } = plan;\n return this.http.get(request.url, { params: request.params }).pipe(\n // A by-id response is already the item; anything else goes through the shared\n // unwrap-and-pick so `single` yields one item and `list` the whole array.\n map((data: any) => kind === 'by-id'\n ? (Array.isArray(data) ? (data[0] ?? null) : data)\n : normalizeCollectionResult(mode, data)),\n catchError(() => of(null)),\n );\n }\n\n /** Same fetch, always as an array — for the canvas components that repeat over the source. */\n fetchItems(ds: IoxDataSource | undefined): Observable<any[]> {\n return this.fetchRepeaterItems(ds);\n }\n\n /**\n * Items a Repeater/Slider iterates over. With `sourcePath` it repeats over an array PROPERTY of a\n * SINGLE-resource source (e.g. `product.gallery`); without it the source itself is the list.\n * Uses the SHARED `resolveRepeaterItems` so the canvas preview matches the SSR engine.\n */\n fetchRepeaterItems(ds: IoxDataSource | undefined, sourcePath?: string): Observable<any[]> {\n return this.fetch(ds).pipe(map(value => resolveRepeaterItems(value, sourcePath)));\n }\n\n /**\n * Resolve a data source BY ALIAS, following `derived` aliases (a VIEW into another variable:\n * resolve the parent, then getByPath) and `relative` aliases (route-context — `$current`/\n * `$siblings`/`$related`). `findByAlias` is injected so this module stays registry-free (the caller\n * passes its own page-scoped registry). Recurses for chained aliases.\n *\n * The builder is design time: `relative` sources resolve their dependency aliases (subject +\n * collection) — a single source falls back to its `defaultId`, a list to the whole collection —\n * then run the SHARED `computeRelative`, so the canvas shows the SAME neighbours the SSR engine\n * bakes into the live page. `$route` has no live params at design time → `{}`.\n */\n fetchByAlias(alias: string, findByAlias: (a: string) => IoxDataSource | undefined): Observable<any> {\n const ds = findByAlias(alias);\n if (!ds) return of(null);\n if (ds.type === 'derived') {\n const d = ds.request?.derived;\n if (!d?.from) return of(null);\n return this.fetchByAlias(d.from, findByAlias).pipe(map(parent => getByPath(parent, d.path ?? '')));\n }\n if (ds.type === 'relative') {\n const spec = ds.request?.relative;\n if (!spec) return of(null);\n if (spec.kind === 'route') return of({});\n const subjectAlias = spec.kind === 'current' ? spec.from : (spec.subjectFrom ?? spec.from);\n const needsCollection = spec.kind === 'siblings' || spec.kind === 'related';\n return forkJoin({\n subject: subjectAlias ? this.fetchByAlias(subjectAlias, findByAlias) : of(undefined),\n collection: needsCollection && spec.from ? this.fetchByAlias(spec.from, findByAlias) : of(undefined),\n }).pipe(map(({ subject, collection }) => computeRelative(spec, { subject, collection, routeParams: {} })));\n }\n return this.fetch(ds);\n }\n\n /** Repeater items for an alias (follows derived aliases + applies an optional sourcePath). */\n fetchRepeaterItemsByAlias(\n alias: string,\n findByAlias: (a: string) => IoxDataSource | undefined,\n sourcePath?: string,\n ): Observable<any[]> {\n return this.fetchByAlias(alias, findByAlias).pipe(map(value => resolveRepeaterItems(value, sourcePath)));\n }\n}\n","import { Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\nimport { DragEngineService } from '../services/drag-engine.service';\n\n@Directive({\n selector: '[ioxDraggable]',\n standalone: false,\n})\nexport class IoxDraggableDirective implements OnInit, OnDestroy {\n /** The node (for canvas items) or component type string (for sidebar items). */\n @Input() ioxDragData: ComponentNode | string = '';\n /** Drop-zone id the item lives in. Null for sidebar items. */\n @Input() ioxDragSourceId: string | null = null;\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n ) {}\n\n ngOnInit(): void {\n this.dragEngine.registerDraggable(this.el.nativeElement, () => {\n const data = this.ioxDragData;\n const type: 'internal' | 'external' = typeof data === 'string' ? 'external' : 'internal';\n const sourceIndex = type === 'internal' && this.ioxDragSourceId\n ? (this.dragEngine.getData(this.ioxDragSourceId)?.indexOf(data as ComponentNode) ?? -1)\n : -1;\n return { type, data, sourceId: this.ioxDragSourceId, sourceIndex };\n });\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDraggable(this.el.nativeElement);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode, IoxBinding } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\nimport { OverlayService } from '../../overlay/overlay.service';\nimport { BuilderDataSourceService } from '../../services/builder-data-source.service';\nimport { DataSourceRegistryService } from '../../services/data-source-registry.service';\nimport { PanelEventService, PanelEventTypes } from '../../panels/panel-event.service';\nimport { cloneNodesForItem, resolvePath } from '../../utils/binding-path.util';\nimport { InteractionEngineService } from '../../services/interaction-engine.service';\n\n@Component({\n selector: 'app-builder-repeater',\n template: `\n <ng-template #badgeContent>\n <i class=\"ph-thin ph-repeat\"></i>\n <span *ngIf=\"source\">{{ source }}</span>\n <span *ngIf=\"!source\" class=\"repeater-badge-empty\">No source</span>\n <span *ngIf=\"items.length\" class=\"repeater-badge-count\">&times; {{ items.length }}</span>\n <span *ngIf=\"isLoading\" class=\"repeater-badge-loading\"><i class=\"ph-thin ph-circle-notch\"></i></span>\n </ng-template>\n\n <!--\n .repeater-wrapper is the layout root.\n In has-children state, .repeater-badge lives here as a direct child\n (position:absolute, hover-only) so it is NOT a child of .repeater-root\n and does NOT shift the :nth-child index of the item wrappers.\n\n In empty state, .repeater-badge lives inside .repeater-root (no items\n to count, so :nth-child is irrelevant there).\n -->\n <div class=\"repeater-wrapper\" [class.has-children]=\"children.length > 0\">\n\n <!-- HAS-CHILDREN: badge outside root, absolute over wrapper -->\n <div *ngIf=\"children.length > 0\" class=\"repeater-badge\">\n <ng-container *ngTemplateOutlet=\"badgeContent\"></ng-container>\n </div>\n\n <div class=\"repeater-root\"\n [ngClass]=\"['iox-node-' + nodeId]\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n [ioxDropzonePostDrop]=\"refreshPreviewsBound\"\n (ioxDrop)=\"onDrop($event)\">\n\n <!-- EMPTY STATE: badge + placeholder inside root -->\n <ng-container *ngIf=\"!children.length\">\n <div class=\"repeater-badge\">\n <ng-container *ngTemplateOutlet=\"badgeContent\"></ng-container>\n </div>\n <div class=\"repeater-placeholder\">\n <i class=\"ph-thin ph-rows\"></i>\n <span>Drop a component here as the item template</span>\n </div>\n </ng-container>\n\n <!-- Template items — DIRECT children of repeater-root.\n :first-child / :nth-child(odd) etc. now correctly target these\n as siblings of the preview items below. -->\n <div *ngFor=\"let child of children\"\n [ngClass]=\"['repeater-item-template', 'iox-outer-' + (child.styleId ?? child.id)]\"\n [attr.data-iox-row-src]=\"source || null\"\n [attr.data-iox-row-idx]=\"source ? 0 : null\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n\n <!-- Preview items — also DIRECT children of repeater-root. -->\n <ng-container *ngFor=\"let row of previewRows; let ri = index\">\n <div *ngFor=\"let child of row\"\n [ngClass]=\"['repeater-preview-child', 'iox-outer-' + (child.styleId ?? child.id)]\"\n [attr.data-iox-row-src]=\"source || null\"\n [attr.data-iox-row-idx]=\"ri + 1\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"$event\"\n (onMouseEnter)=\"$event\"\n (onMouseLeave)=\"undefined\">\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n `,\n styles: [`\n /* ── Outer wrapper: anchors the absolute badge in has-children state ── */\n .repeater-wrapper {\n position: relative;\n box-sizing: border-box;\n }\n\n /* ── Badge base (used in both empty and has-children contexts) ── */\n .repeater-badge {\n display: flex;\n align-items: center;\n gap: 0.4rem;\n padding: 4px 8px;\n font-size: 11px;\n color: #cb9090;\n background: rgba(203, 144, 144, 0.08);\n border: 1px dashed rgba(203, 144, 144, 0.4);\n border-bottom: none;\n border-radius: 4px 4px 0 0;\n user-select: none;\n }\n\n /* ── Has-children: badge is absolute over the wrapper, hover-only ── */\n .repeater-wrapper.has-children > .repeater-badge {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 10;\n border-radius: 0 0 4px 0;\n border: 1px solid rgba(203, 144, 144, 0.5);\n opacity: 0;\n cursor: pointer;\n transition: opacity 0.15s;\n }\n .repeater-wrapper.has-children:hover > .repeater-badge {\n opacity: 1;\n }\n\n .repeater-badge i { font-size: 13px; }\n .repeater-badge-empty { opacity: 0.55; }\n .repeater-badge-count { margin-left: auto; font-weight: 600; }\n .repeater-badge-loading i { animation: spin 1s linear infinite; }\n @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\n\n /* ── Root ── */\n .repeater-root {\n box-sizing: border-box;\n }\n\n /* ── Empty state: dashed border on root (connected with badge above) ── */\n .repeater-wrapper:not(.has-children) .repeater-root {\n border: 1px dashed rgba(203, 144, 144, 0.4);\n border-top: none;\n border-radius: 0 0 4px 4px;\n min-height: 40px;\n }\n\n .repeater-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n padding: 1.5rem 1rem;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n }\n .repeater-placeholder i { font-size: 20px; }\n\n /* ── Template item: direct child, draggable, full opacity ── */\n .repeater-item-template {\n min-width: 0;\n }\n\n /* ── Preview items: direct children, dimmed, non-interactive ── */\n .repeater-preview-child {\n opacity: 0.55;\n pointer-events: none;\n min-width: 0;\n }\n `],\n standalone: false,\n})\nexport class BuilderRepeaterComponent implements OnInit, OnDestroy {\n private _children: ComponentNode[] = [];\n get children(): ComponentNode[] { return this._children; }\n /** RenderDirective sets `source` (→ fetchData) BEFORE `children`. With an async source the response\n * lands after children are set, so previews build fine; but a SYNC source (static, or a fast\n * cache) resolves before children exist, leaving previewRows empty. Rebuild when children arrive\n * (or change) so both orderings — and loaded pages with sync sources — render their rows. */\n @Input() set children(value: ComponentNode[]) {\n this._children = value ?? [];\n // Defer to the next tick: RenderDirective sets `children` before the template child's\n // component is instantiated/registered, so applyFirstItemToTemplate needs the ref to exist\n // first (otherwise the FIRST row shows its default instead of item[0]'s value).\n if (this.items.length) setTimeout(() => this.refreshPreviews());\n }\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n public items: any[] = [];\n public previewRows: ComponentNode[][] = [];\n public isLoading = false;\n\n /** Bound reference passed to [ioxDropzonePostDrop] so the directive can call it. */\n readonly refreshPreviewsBound = () => { setTimeout(() => this.refreshPreviews()); };\n\n private _source = '';\n private _sourcePath = '';\n private _limit = 10;\n private bindingSub?: Subscription;\n\n get source(): string { return this._source; }\n @Input() set source(value: string) {\n if (value === this._source) return;\n this._source = value;\n if (value) { this.fetchData(); }\n else { this.items = []; this.previewRows = []; }\n }\n\n /** Optional array PROPERTY inside a single-resource source to repeat over (e.g. `gallery`). */\n get sourcePath(): string { return this._sourcePath; }\n @Input() set sourcePath(value: string) {\n const next = value ?? '';\n if (next === this._sourcePath) return;\n this._sourcePath = next;\n if (this._source) { this.fetchData(); }\n }\n\n get limit(): number { return this._limit; }\n @Input() set limit(value: number) {\n if (value === this._limit) return;\n this._limit = value;\n if (this._source) { this.fetchData(); }\n }\n\n constructor(\n private dragEngine: DragEngineService,\n private overlayService: OverlayService,\n private dataSourceService: BuilderDataSourceService,\n private dsRegistry: DataSourceRegistryService,\n private panelEventService: PanelEventService,\n private cdr: ChangeDetectorRef,\n private interactionEngine: InteractionEngineService,\n ) {}\n\n ngOnInit(): void {\n this.bindingSub = this.panelEventService.subscribe(event => {\n // A binding OR an interaction change on a template node must re-clone the preview rows.\n // Interactions matter because clones are attached by ELEMENT at render time, so a newly\n // added interaction never reaches an existing clone — it would appear to work only after\n // a save + reload. See element-context-state-plan.md.\n if (event.type !== PanelEventTypes.BINDING_CHANGED\n && event.type !== PanelEventTypes.INTERACTION_CHANGED) return;\n const changedNode: ComponentNode = event.data?.node;\n if (!changedNode || !this.items.length) return;\n if (this.isInTemplate(changedNode)) {\n this.refreshPreviews();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.bindingSub?.unsubscribe();\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr,\n () => { if (this.items.length > 0) setTimeout(() => this.refreshPreviews()); });\n }\n\n /** Monotonic fetch token — editing a binding sets `source` and `sourcePath` as two separate inputs,\n * each firing a fetch; the transient mismatched one (old source + new path, or vice-versa) must not\n * clobber the correct result if it resolves last. Only the newest fetch's response is applied. */\n private _fetchSeq = 0;\n\n /** Data comes from the SHARED resolver (public controllers + the source's own filters) — the\n * same decision the SSR engine runs, so the canvas preview matches the published page. */\n private fetchData(): void {\n if (!this._source) return;\n\n const seq = ++this._fetchSeq;\n this.isLoading = true;\n this.cdr.markForCheck();\n // Resolve BY ALIAS so `derived` sources (e.g. galleryImages = product.gallery) follow their\n // parent. `sourcePath` (legacy/back-compat) still repeats over an array property inline.\n this.dataSourceService.fetchRepeaterItemsByAlias(\n this._source, (a) => this.dsRegistry.findByAlias(a), this._sourcePath,\n ).subscribe(items => {\n if (seq !== this._fetchSeq) return; // a newer fetch superseded this one — ignore stale items\n this.items = items.slice(0, this._limit);\n // Row markers store a REFERENCE (source + index); the engine needs the array to resolve\n // it back to an item, exactly as the SSR runtime uses resolvedData.\n this.interactionEngine.setContextData({ [this._source]: this.items });\n this.refreshPreviews();\n this.isLoading = false;\n this.cdr.markForCheck();\n });\n }\n\n private isInTemplate(target: ComponentNode): boolean {\n const search = (nodes: ComponentNode[]): boolean =>\n nodes.some(c =>\n c === target || c.id === target.id ||\n (c.children?.length ? search(c.children) : false)\n );\n return search(this.children);\n }\n\n private refreshPreviews(): void {\n if (!this.items.length || !this.children.length) {\n this.previewRows = [];\n this.cdr.markForCheck();\n return;\n }\n this.applyFirstItemToTemplate();\n this.previewRows = this.items.slice(1).map(item =>\n cloneNodesForItem(this.children, item)\n );\n this.cdr.markForCheck();\n }\n\n private applyFirstItemToTemplate(): void {\n const item = this.items[0];\n if (!item || !this.children.length) return;\n this.applyBindingsToNodes(this.children, item);\n }\n\n /** Apply item[0]'s bound values to the live template row, walking the WHOLE subtree — not just\n * direct children. A bound node can sit any level deep once a template child is wrapped in a\n * container (or otherwise nested), so recursion is required or the first row shows defaults. */\n private applyBindingsToNodes(nodes: ComponentNode[], item: any): void {\n for (const child of nodes) {\n if (child.bindings?.length) {\n const ref = this.overlayService.getNodeRef(child);\n if (ref?.componentRef) {\n for (const binding of child.bindings as IoxBinding[]) {\n const value = resolvePath(item, binding.path);\n if (value !== undefined) {\n ref.componentRef.instance[binding.prop] = value;\n }\n }\n ref.componentRef.changeDetectorRef.detectChanges();\n }\n }\n if (child.children?.length) {\n this.applyBindingsToNodes(child.children, item);\n }\n }\n }\n\n /** Rebuild preview rows after the template STRUCTURE changed (e.g. a child was wrapped, deleted,\n * or moved). Deferred so the new DOM + overlay refs exist before bindings are re-applied. */\n refreshTemplate(): void {\n if (this.items.length) setTimeout(() => this.refreshPreviews());\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n/**\n * Directive-host ButtonBlock (wrapper collapse, task 9c). The real `<button>`/`<a>` IS the host —\n * chosen by RenderDirective via `hostElement` from the `tag` trait (`variableTag`), NOT an internal\n * `<button>` in the template. This matches the SSR engine's `button[iox-button-block]` component and\n * every other collapsed builder component (Container/Section/List/…): ONE element per node carrying\n * BOTH `iox-outer-{id}` (margin/width) + `iox-node-{id}` (visual props). Previously this component\n * kept the OLD pattern — a custom-element selector plus a template that rendered its own\n * `<button class=\"button-block-root\">` — so RenderDirective's host `<button>` (iox-outer) wrapped a\n * second `<button>` (iox-node): button-in-button, and width (outer) + aspect-ratio (inner) split\n * across two elements so aspect-ratio never resolved. Collapsing to the single host fixes both.\n *\n * The `button`/`a` UA resets (border, background, text-decoration) live in the builder app's global\n * styles.scss, kept OFF `:host` so styleProps (`.iox-node-{id}`) can override them.\n */\n@Component({\n selector: 'button[iox-button-block],a[iox-button-block]',\n template: `\n <span *ngIf=\"!children.length\" class=\"button-block-placeholder\">Button</span>\n\n <!-- WRAPPER COLLAPSE (task 9c): render children directly into the host; iox-outer + drag land\n on each child's host (via ioxDragSourceId), matching the SSR engine. -->\n <ng-container *ngFor=\"let child of children\"\n [ioxRender]=\"child\"\n [ioxDragSourceId]=\"dropListId\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n `,\n host: {\n '[class]': \"'button-block-root iox-node-' + nodeId\",\n '[attr.href]': \"tag === 'a' ? (href || null) : null\",\n '[attr.target]': \"tag === 'a' ? (target || null) : null\",\n '[attr.type]': \"tag === 'a' ? null : type\",\n },\n styles: [`\n :host { box-sizing: border-box; }\n .button-block-placeholder {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: rgba(100, 116, 139, 0.4);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n }\n /* Flex/grid-child sizing on the collapsed direct-child hosts; ::ng-deep for dynamic hosts. */\n :host ::ng-deep > [class*=\"iox-outer-\"] { min-width: 0; }\n `],\n standalone: false,\n})\nexport class BuilderButtonBlockComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() tag: 'button' | 'a' = 'button';\n @Input() href = '';\n @Input() target: '_self' | '_blank' = '_self';\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Input() nodeId = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private elRef: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n // Register the HOST as the dropzone (was the ioxDropzone directive on the inner button).\n this.dragEngine.registerDropzone(\n this.dropListId,\n this.elRef.nativeElement,\n this.children,\n this.cdr,\n (evt) => this.onDrop(evt),\n );\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDropzone(this.dropListId, this.elRef.nativeElement);\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { IS_PREVIEW } from '@vectoriox/iox-ui';\nimport { ComponentNode, IoxBinding } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\nimport { ComponentInstanceRegistryService } from '../../services/component-instance-registry.service';\nimport { InteractionEngineService } from '../../services/interaction-engine.service';\nimport { OverlayService } from '../../overlay/overlay.service';\nimport { BuilderDataSourceService } from '../../services/builder-data-source.service';\nimport { DataSourceRegistryService } from '../../services/data-source-registry.service';\nimport { PanelEventService, PanelEventTypes } from '../../panels/panel-event.service';\nimport { cloneNodesForItem, resolvePath } from '../../utils/binding-path.util';\n\n@Component({\n selector: 'app-slider-container',\n template: `\n <!-- EDIT MODE: shell wraps swiper + nav buttons so arrows position relative to slide area -->\n <div *ngIf=\"!isPreview\"\n class=\"slider-edit-shell\"\n [ngClass]=\"['iox-node-' + nodeId]\"\n [ngStyle]=\"editShellStyle\"\n ioxDropzone\n [ioxDropzoneId]=\"source ? '' : dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\n <!-- Repeat badge: hover-only, anchored top-left of shell -->\n <div *ngIf=\"source\" class=\"slider-repeat-badge\">\n <i class=\"ph-thin ph-repeat\"></i>\n <span>{{ source }}</span>\n <span *ngIf=\"items.length\" class=\"slider-repeat-badge-count\">&times; {{ items.length }}</span>\n <i *ngIf=\"isLoading\" class=\"ph-thin ph-circle-notch slider-badge-spin\"></i>\n </div>\n\n <div #editSwiperEl class=\"swiper swiper-edit\" [attr.dir]=\"dir\" [style.direction]=\"dir\">\n <div class=\"swiper-wrapper\">\n\n <!-- NORMAL MODE: all children as draggable slides -->\n <ng-container *ngIf=\"!source\">\n <div *ngFor=\"let child of children\"\n class=\"swiper-slide\"\n [ngClass]=\"['iox-outer-' + (child.styleId ?? child.id)]\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </ng-container>\n\n <!-- REPEAT MODE: template slide (item 0) + dimmed preview slides (items 1..N) -->\n <ng-container *ngIf=\"source\">\n <!-- Template slide — draggable/editable, receives item[0] data -->\n <div *ngIf=\"children.length\"\n class=\"swiper-slide\"\n [ngClass]=\"['iox-outer-' + (children[0].styleId ?? children[0].id)]\"\n ioxDraggable\n [ioxDragData]=\"children[0]\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"children[0]\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n <!-- Preview slides — dimmed, non-interactive, data resolved from items 1..N -->\n <div *ngFor=\"let slide of previewSlides; trackBy: trackByNodeId\"\n class=\"swiper-slide slider-preview-slide\"\n [ngClass]=\"['iox-outer-' + (slide.styleId ?? slide.id)]\">\n <ng-container\n [ioxRender]=\"slide\"\n (onClick)=\"$event\"\n (onMouseEnter)=\"$event\"\n (onMouseLeave)=\"undefined\">\n </ng-container>\n </div>\n </ng-container>\n\n </div>\n\n <div *ngIf=\"!source && !children.length\" class=\"slider-edit-placeholder\">\n <i class=\"ph-thin ph-sliders-horizontal\"></i>\n <span>Click + in toolbar to add a slide</span>\n </div>\n\n <div *ngIf=\"enablePagination\" class=\"swiper-pagination\"></div>\n <div *ngIf=\"enableScrollbar\" class=\"swiper-scrollbar\"></div>\n </div>\n\n <!-- Nav buttons live on the shell, not inside .swiper, so overflow:hidden never clips them\n and top:50%+transform always centers on the real slide height -->\n <button *ngIf=\"enableNavigation\" class=\"slider-edit-nav slider-edit-nav--prev\"\n (click)=\"_swiper?.slidePrev()\" type=\"button\" title=\"Previous slide\">\n <i class=\"ph-thin ph-caret-left\"></i>\n </button>\n <button *ngIf=\"enableNavigation\" class=\"slider-edit-nav slider-edit-nav--next\"\n (click)=\"_swiper?.slideNext()\" type=\"button\" title=\"Next slide\">\n <i class=\"ph-thin ph-caret-right\"></i>\n </button>\n </div>\n\n <!-- PREVIEW MODE: real Swiper with all interactions enabled -->\n <div *ngIf=\"isPreview\"\n #swiperEl\n class=\"swiper\"\n [ngClass]=\"['iox-node-' + nodeId]\"\n [ngStyle]=\"previewStyle\"\n [attr.dir]=\"dir\"\n [style.direction]=\"dir\"\n [style.--swiper-navigation-color]=\"navigationColor || null\"\n [style.--swiper-navigation-size.px]=\"navigationSize || null\"\n [style.--swiper-pagination-color]=\"paginationColor || null\">\n <div class=\"swiper-wrapper\">\n <!-- Swiper requires .swiper-slide as a DIRECT child of .swiper-wrapper.\n Wrap each rendered slide in one (same structure as edit mode) so the\n app-slider-slide host sits INSIDE the slide, not between it and the wrapper. -->\n <ng-container *ngIf=\"!source\">\n <div *ngFor=\"let child of children\"\n class=\"swiper-slide\"\n [ngClass]=\"['iox-outer-' + (child.styleId ?? child.id)]\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </ng-container>\n <!-- REPEAT: template slide + preview slides -->\n <ng-container *ngIf=\"source\">\n <div *ngIf=\"children.length\"\n class=\"swiper-slide\"\n [ngClass]=\"['iox-outer-' + (children[0].styleId ?? children[0].id)]\">\n <ng-container\n [ioxRender]=\"children[0]\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n <div *ngFor=\"let slide of previewSlides; trackBy: trackByNodeId\"\n class=\"swiper-slide\"\n [ngClass]=\"['iox-outer-' + (slide.styleId ?? slide.id)]\">\n <ng-container\n [ioxRender]=\"slide\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div *ngIf=\"enableNavigation\" class=\"swiper-button-prev\"></div>\n <div *ngIf=\"enableNavigation\" class=\"swiper-button-next\"></div>\n <div *ngIf=\"enablePagination\" class=\"swiper-pagination\"></div>\n <div *ngIf=\"enableScrollbar\" class=\"swiper-scrollbar\"></div>\n </div>\n `,\n styles: [`\n :host {\n display: block;\n }\n /* swiper.css sets .swiper-wrapper { height: 100% } which inflates the container\n to parent height. Override to auto so the slider sizes to slide content. */\n .swiper-wrapper {\n height: auto;\n }\n /* ── Edit-mode shell ─────────────────────────────────────────────────────\n Shell is the IOX-styled container ([ngStyle]=\"style\" lives here).\n position:relative anchors the absolutely-positioned nav buttons + badge.\n The .swiper inside fills the shell width and auto-heights to slides. */\n .slider-edit-shell {\n position: relative;\n display: block;\n }\n .swiper-edit {\n width: 100%;\n }\n /* Edit-mode slides need position:relative for the overlay hit-test */\n .swiper-edit .swiper-slide {\n position: relative;\n }\n /* Nav buttons: siblings to .swiper, positioned on the shell.\n top:50% + transform are purely CSS → auto-recenter on any height change. */\n .slider-edit-nav {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 32px;\n height: 32px;\n border-radius: 50%;\n border: 1px solid rgba(255,255,255,0.5);\n background: rgba(0,0,0,0.22);\n color: white;\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 10;\n transition: background 0.15s;\n }\n .slider-edit-nav:hover { background: rgba(0,0,0,0.45); }\n .slider-edit-nav--prev { left: 8px; }\n .slider-edit-nav--next { right: 8px; }\n .slider-edit-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n }\n .slider-edit-placeholder i { font-size: 22px; }\n /* ── Repeat badge ───────────────────────────────────────────────────────\n Hover-only, anchored top-left of shell. Same visual language as Repeater badge. */\n .slider-repeat-badge {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 10;\n display: flex;\n align-items: center;\n gap: 0.4rem;\n padding: 4px 8px;\n font-size: 11px;\n color: #cb9090;\n background: rgba(203, 144, 144, 0.08);\n border: 1px solid rgba(203, 144, 144, 0.5);\n border-radius: 0 0 4px 0;\n opacity: 0;\n transition: opacity 0.15s;\n user-select: none;\n pointer-events: none;\n }\n .slider-edit-shell:hover .slider-repeat-badge {\n opacity: 1;\n }\n .slider-repeat-badge-count { font-weight: 600; }\n .slider-badge-spin { animation: slider-badge-spin 1s linear infinite; }\n @keyframes slider-badge-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n /* ── Preview slides (repeat mode): dimmed, non-interactive ─────────── */\n .slider-preview-slide {\n opacity: 0.55;\n pointer-events: none;\n }\n `],\n standalone: false,\n})\nexport class SliderContainerComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n @Input() children: ComponentNode[] = [];\n\n private _style: Record<string, any> = {};\n private _previewStyle: Record<string, any> = {};\n private _editShellStyle: Record<string, any> = { position: 'relative' };\n @Input() set style(v: Record<string, any>) {\n if (v === this._style) return;\n this._style = v;\n // `direction` is driven by the `dir` (Language direction) trait via [style.direction].\n // Strip it from the ngStyle map: NgStyle writes the inline style last and would otherwise\n // override the dir-driven direction with the generic Layout default → RTL wouldn't apply.\n // Rebuild cached objects so ngStyle only re-applies on real input changes (avoids MO spam).\n const { direction: _dropDirection, ...rest } = v || {};\n this._previewStyle = rest;\n this._editShellStyle = { ...rest, position: 'relative' };\n }\n get style(): Record<string, any> { return this._style; }\n\n get previewStyle(): Record<string, any> { return this._previewStyle; }\n get editShellStyle(): Record<string, any> { return this._editShellStyle; }\n\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n // ── Parameters ─────────────────────────────────────────────────────────────\n @Input() dir: 'ltr' | 'rtl' = 'ltr';\n @Input() direction: 'horizontal' | 'vertical' = 'horizontal';\n @Input() slidesPerView: number | 'auto' = 'auto';\n @Input() slidesPerGroup: number = 1;\n /** 'off' | 'loop' | 'rewind' */\n @Input() loop: string = 'off';\n @Input() centeredSlides: boolean = false;\n @Input() spaceBetween: number = 0;\n @Input() initialSlide: number = 0;\n @Input() autoHeight: boolean = false;\n @Input() grabCursor: boolean = true;\n @Input() slideToClickedSlide: boolean = false;\n\n // ── Effects ────────────────────────────────────────────────────────────────\n @Input() effect: 'slide' | 'fade' | 'cube' | 'coverflow' | 'flip' | 'cards' | 'creative' = 'slide';\n @Input() speed: number = 300;\n\n // ── Navigation ─────────────────────────────────────────────────────────────\n @Input() enableNavigation: boolean = false;\n @Input() navigationColor: string = '';\n @Input() navigationSize: number = 44;\n\n // ── Pagination ─────────────────────────────────────────────────────────────\n @Input() enablePagination: boolean = false;\n @Input() paginationColor: string = '';\n @Input() paginationType: 'bullets' | 'fraction' | 'progressbar' = 'bullets';\n @Input() paginationClickable: boolean = true;\n @Input() paginationDynamicBullets: boolean = false;\n\n // ── Autoplay ───────────────────────────────────────────────────────────────\n @Input() enableAutoplay: boolean = false;\n @Input() autoplayDelay: number = 3000;\n @Input() autoplayPauseOnMouseEnter: boolean = true;\n @Input() autoplayDisableOnInteraction: boolean = false;\n\n // ── Modules ────────────────────────────────────────────────────────────────\n @Input() enableScrollbar: boolean = false;\n @Input() freeMode: boolean = false;\n @Input() enableKeyboard: boolean = false;\n @Input() enableMousewheel: boolean = false;\n @Input() enableZoom: boolean = false;\n @Input() enableParallax: boolean = false;\n\n // ── Grid ───────────────────────────────────────────────────────────────────\n @Input() enableGrid: boolean = false;\n @Input() gridRows: number = 2;\n\n // ── Responsive ─────────────────────────────────────────────────────────────\n @Input() breakpoints: string = '';\n\n // ── Data binding ───────────────────────────────────────────────────────────\n private _source = '';\n private _limit = 10;\n\n get source(): string { return this._source; }\n @Input() set source(value: string) {\n if (value === this._source) return;\n this._source = value;\n if (value) {\n this.fetchData();\n } else {\n this.items = [];\n this.previewSlides = [];\n this._scheduleReinit();\n }\n }\n\n get limit(): number { return this._limit; }\n @Input() set limit(value: number) {\n if (value === this._limit) return;\n this._limit = value;\n if (this._source) { this.fetchData(); }\n }\n\n public items: any[] = [];\n public previewSlides: ComponentNode[] = [];\n public isLoading = false;\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n @ViewChild('swiperEl', { static: false }) swiperEl?: ElementRef<HTMLElement>;\n @ViewChild('editSwiperEl', { static: false }) editSwiperEl?: ElementRef<HTMLElement>;\n\n _swiper: any = null;\n private _initRafId = 0;\n private _bindingSub?: Subscription;\n private instanceRegistry = inject(ComponentInstanceRegistryService);\n private interactionEngine = inject(InteractionEngineService);\n private ngZone = inject(NgZone);\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n @Optional() @Inject(IS_PREVIEW) public isPreview: boolean,\n @Optional() private overlayService: OverlayService,\n @Optional() private dataSourceService: BuilderDataSourceService | null,\n @Optional() private dsRegistry: DataSourceRegistryService,\n @Optional() private panelEventService: PanelEventService,\n ) {\n this.isPreview = !!isPreview;\n }\n\n ngOnInit(): void {\n if (this.panelEventService) {\n this._bindingSub = this.panelEventService.subscribe(event => {\n if (event.type !== PanelEventTypes.BINDING_CHANGED) return;\n const changedNode: ComponentNode = event.data?.node;\n if (!changedNode || !this.items.length || !this._source) return;\n if (this._isInTemplate(changedNode)) {\n this.refreshPreviews();\n }\n });\n }\n }\n\n ngAfterViewInit(): void {\n // Run outside Angular's zone so Swiper's internal ResizeObserver, MutationObserver,\n // and RAF-based animation loops don't trigger unnecessary CD ticks.\n this.ngZone.runOutsideAngular(() => {\n this._initRafId = requestAnimationFrame(() => this._initSwiper());\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._swiper) return;\n\n // dir-only change: use changeLanguageDirection() — avoids full reinit\n // which races against Angular re-rendering slides in the DOM.\n if (changes['dir'] && Object.keys(changes).length === 1) {\n this._swiper.changeLanguageDirection(this.dir);\n return;\n }\n\n const previewKeys = new Set([\n 'direction', 'loop', 'slidesPerView', 'slidesPerGroup', 'spaceBetween', 'speed',\n 'effect', 'grabCursor', 'centeredSlides', 'initialSlide', 'autoHeight',\n 'slideToClickedSlide', 'freeMode', 'breakpoints',\n 'enableNavigation', 'navigationColor', 'navigationSize',\n 'enablePagination', 'paginationColor', 'paginationType', 'paginationClickable', 'paginationDynamicBullets',\n 'enableScrollbar', 'enableAutoplay',\n 'enableKeyboard', 'enableMousewheel', 'enableZoom', 'enableGrid', 'enableParallax',\n 'autoplayDelay', 'autoplayPauseOnMouseEnter', 'autoplayDisableOnInteraction',\n 'gridRows',\n ]);\n\n // Edit mode also reinits when children change (new slide added or removed)\n const editKeys = new Set([...previewKeys, 'children']);\n const relevantKeys = this.isPreview ? previewKeys : editKeys;\n\n const hasConfigChange = Object.keys(changes).some(k => relevantKeys.has(k));\n if (hasConfigChange) {\n this._destroySwiper();\n this.ngZone.runOutsideAngular(() => {\n this._initRafId = requestAnimationFrame(() => this._initSwiper());\n });\n }\n }\n\n ngOnDestroy(): void {\n cancelAnimationFrame(this._initRafId);\n this._destroySwiper();\n this._bindingSub?.unsubscribe();\n }\n\n trackByNodeId(_index: number, node: ComponentNode): string {\n return node.id ?? String(_index);\n }\n\n onDrop(event: IoxDropEvent): void {\n if (this._source) return; // repeat mode: drops disabled, slides come from data source\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n if (this._swiper) {\n this.ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => this._swiper?.update());\n });\n }\n }\n\n // ── Data fetching ───────────────────────────────────────────────────────────\n\n /** Slides come from the SHARED resolver (public controllers + the source's own filters) — the\n * same decision the SSR engine runs, so the canvas preview matches the published page. */\n private fetchData(): void {\n if (!this._source || !this.dataSourceService || !this.dsRegistry) return;\n\n this.isLoading = true;\n this.cdr.markForCheck();\n this.dataSourceService.fetchItems(this.dsRegistry.findByAlias(this._source)).subscribe(items => {\n this.items = items.slice(0, this._limit);\n this.refreshPreviews();\n this.isLoading = false;\n this.cdr.markForCheck();\n });\n }\n\n private refreshPreviews(): void {\n if (!this.items.length || !this.children.length) {\n this.previewSlides = [];\n this.cdr.markForCheck();\n this._scheduleReinit();\n return;\n }\n this.applyFirstItemToTemplate();\n // Each preview slide = one cloned SliderSlide node with item data resolved\n this.previewSlides = this.items.slice(1).map(item =>\n cloneNodesForItem([this.children[0]], item)[0]\n );\n this.cdr.markForCheck();\n this._scheduleReinit();\n }\n\n private applyFirstItemToTemplate(): void {\n const item = this.items[0];\n if (!item || !this.children.length || !this.overlayService) return;\n // Bindings live on leaf nodes inside the template slide, so recurse into the tree\n this.applyItemToNodes([this.children[0]], item);\n }\n\n private applyItemToNodes(nodes: ComponentNode[], item: any): void {\n for (const node of nodes) {\n if (node.bindings?.length) {\n const ref = this.overlayService.getNodeRef(node);\n if (ref?.componentRef) {\n for (const binding of node.bindings as IoxBinding[]) {\n const value = resolvePath(item, binding.path);\n if (value !== undefined) {\n ref.componentRef.instance[binding.prop] = value;\n }\n }\n ref.componentRef.changeDetectorRef.detectChanges();\n }\n }\n if (node.children?.length) {\n this.applyItemToNodes(node.children, item);\n }\n }\n }\n\n private _isInTemplate(target: ComponentNode): boolean {\n const search = (nodes: ComponentNode[]): boolean =>\n nodes.some(c =>\n c === target || c.id === target.id ||\n (c.children?.length ? search(c.children) : false)\n );\n return this.children.length > 0 && search([this.children[0]]);\n }\n\n private _scheduleReinit(): void {\n this._destroySwiper();\n this.ngZone.runOutsideAngular(() => {\n this._initRafId = requestAnimationFrame(() => this._initSwiper());\n });\n }\n\n // ── Swiper lifecycle ────────────────────────────────────────────────────────\n\n private async _initSwiper(): Promise<void> {\n const el = this.isPreview ? this.swiperEl?.nativeElement : this.editSwiperEl?.nativeElement;\n if (!el) return;\n\n const [{ default: Swiper }, swiperModules] = await Promise.all([\n import('swiper'),\n import('swiper/modules'),\n ]);\n\n const {\n Navigation, Pagination, Scrollbar, Autoplay,\n Keyboard, Mousewheel, Zoom, Grid, Parallax, FreeMode,\n EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCards, EffectCreative,\n } = swiperModules as any;\n\n const modules: any[] = [];\n if (this.enableNavigation) modules.push(Navigation);\n if (this.enablePagination) modules.push(Pagination);\n if (this.enableScrollbar) modules.push(Scrollbar);\n\n const config: Record<string, any> = {\n modules,\n direction: this.direction,\n slidesPerView: this.slidesPerView,\n slidesPerGroup: this.slidesPerGroup > 1 ? this.slidesPerGroup : 1,\n spaceBetween: this.spaceBetween,\n speed: this.isPreview ? this.speed : 300,\n // Always slide effect in edit mode — fade/cube etc. hide all but active slide\n effect: this.isPreview ? this.effect : 'slide',\n centeredSlides: this.centeredSlides,\n initialSlide: this.initialSlide,\n autoHeight: this.autoHeight,\n };\n\n if (this.isPreview) {\n // Full interactive config for preview\n config['grabCursor'] = this.grabCursor;\n config['slideToClickedSlide'] = this.slideToClickedSlide;\n config['loop'] = this.loop === 'loop';\n config['rewind'] = this.loop === 'rewind';\n\n if (this.freeMode) { modules.push(FreeMode); config['freeMode'] = true; }\n if (this.enableAutoplay) { modules.push(Autoplay); }\n if (this.enableKeyboard) { modules.push(Keyboard); }\n if (this.enableMousewheel){ modules.push(Mousewheel);}\n if (this.enableZoom) { modules.push(Zoom); }\n if (this.enableGrid) { modules.push(Grid); }\n if (this.enableParallax) { modules.push(Parallax); }\n\n const effectMap: Record<string, any> = {\n fade: EffectFade, cube: EffectCube, flip: EffectFlip,\n coverflow: EffectCoverflow, cards: EffectCards, creative: EffectCreative,\n };\n if (this.effect !== 'slide' && effectMap[this.effect]) {\n modules.push(effectMap[this.effect]);\n }\n\n if (this.enableNavigation) {\n config['navigation'] = { prevEl: '.swiper-button-prev', nextEl: '.swiper-button-next' };\n }\n if (this.enablePagination) {\n config['pagination'] = {\n el: '.swiper-pagination',\n type: this.paginationType,\n clickable: this.paginationClickable,\n dynamicBullets: this.paginationDynamicBullets,\n };\n }\n if (this.enableScrollbar) config['scrollbar'] = { el: '.swiper-scrollbar', draggable: true };\n if (this.enableAutoplay) {\n config['autoplay'] = {\n delay: this.autoplayDelay,\n pauseOnMouseEnter: this.autoplayPauseOnMouseEnter,\n disableOnInteraction: this.autoplayDisableOnInteraction,\n };\n }\n if (this.enableGrid && this.gridRows > 1) config['grid'] = { rows: this.gridRows };\n if (this.breakpoints) {\n try { config['breakpoints'] = JSON.parse(this.breakpoints); } catch { /* ignore */ }\n }\n\n config['on'] = {\n slideChange: (swiper: any) => this._onSwiperEvent('swiperSlideChange', swiper),\n reachBeginning: (swiper: any) => this._onSwiperEvent('swiperReachBeginning', swiper),\n reachEnd: (swiper: any) => this._onSwiperEvent('swiperReachEnd', swiper),\n autoplayStart: (swiper: any) => this._onSwiperEvent('swiperAutoplayStart', swiper),\n autoplayStop: (swiper: any) => this._onSwiperEvent('swiperAutoplayStop', swiper),\n };\n } else {\n // Edit mode: disable touch/swipe so builder click handlers work normally\n config['allowTouchMove'] = false;\n config['simulateTouch'] = false;\n\n if (this.enableNavigation) {\n config['navigation'] = { prevEl: '.swiper-button-prev', nextEl: '.swiper-button-next' };\n }\n if (this.enablePagination) {\n config['pagination'] = {\n el: '.swiper-pagination',\n type: this.paginationType,\n clickable: this.paginationClickable,\n dynamicBullets: this.paginationDynamicBullets,\n };\n }\n if (this.enableScrollbar) config['scrollbar'] = { el: '.swiper-scrollbar', draggable: false };\n }\n\n this._swiper = new Swiper(el, config);\n this.instanceRegistry.register(this.nodeId, this._swiper);\n }\n\n private _destroySwiper(): void {\n if (this._swiper) {\n this._swiper.destroy(true, true);\n this._swiper = null;\n this.instanceRegistry.unregister(this.nodeId);\n }\n }\n\n private _onSwiperEvent(eventName: string, swiper: any): void {\n this.interactionEngine.replayTrigger(this.nodeId, eventName as any);\n\n if (eventName === 'swiperSlideChange') {\n const prevIdx: number = swiper.previousIndex;\n const activeIdx: number = swiper.activeIndex;\n const allSlides = this._source ? [this.children[0], ...this.previewSlides] : this.children;\n if (prevIdx !== undefined && allSlides[prevIdx]) {\n this.interactionEngine.replayTrigger(allSlides[prevIdx].id!, 'swiperSlideInactive');\n }\n if (allSlides[activeIdx]) {\n this.interactionEngine.replayTrigger(allSlides[activeIdx].id!, 'swiperSlideActive');\n }\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n} from '@angular/core';\n\nimport { IS_PREVIEW } from '@vectoriox/iox-ui';\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n@Component({\n selector: 'app-slider-slide',\n template: `\n <!-- The .swiper-slide wrapper (with the iox-outer-* class) is provided by SliderContainer —\n Swiper needs it as a direct child of .swiper-wrapper — and the SLIDE'S size lands there\n via StyleRegistryService. This is only the styled INNER block, so width/min-width/\n max-width MUST be stripped (slideEditStyle): the slide is already sized on the outer\n wrapper, and re-applying width here would size the content to 71% OF the 71% slide (the\n engine's iox-slider-slide is a single host, so it never had this trap). Preview and edit\n behave identically — the earlier preview branch used the un-stripped style input and\n shrank the content inside its own slide. -->\n <div class=\"slide-edit-block\"\n [ngClass]=\"['iox-node-' + nodeId]\"\n [ngStyle]=\"slideEditStyle\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\n <div *ngIf=\"!children.length\" class=\"slide-placeholder\">\n <i class=\"ph-thin ph-image\"></i>\n <span>Drop components here</span>\n </div>\n\n <div *ngFor=\"let child of children\"\n [ngClass]=\"['iox-outer-' + (child.styleId ?? child.id)]\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </div>\n `,\n styles: [`\n .slide-edit-block {\n position: relative;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n /* default card bg — overridden by inline [ngStyle] when user sets a background */\n background-color: var(--p-surface-300);\n }\n .slide-edit-block {\n width: 100%;\n }\n .slide-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n opacity: 0;\n transition: opacity 0.15s;\n }\n :host:hover .slide-placeholder,\n :host.iox-drag-over .slide-placeholder {\n opacity: 1;\n }\n .slide-placeholder i { font-size: 22px; }\n `],\n standalone: false,\n})\nexport class SliderSlideComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n\n private _style: Record<string, any> = {};\n private _slideEditStyle: Record<string, any> = {};\n @Input() set style(v: Record<string, any>) {\n if (v === this._style) return;\n this._style = v;\n // Strip width constraints; rebuild cached object so ngStyle only updates DOM\n // when the input actually changed — prevents spurious MutationObserver triggers.\n const { width, minWidth, maxWidth, ...rest } = v || {};\n this._slideEditStyle = rest;\n }\n get style(): Record<string, any> { return this._style; }\n\n get slideEditStyle(): Record<string, any> { return this._slideEditStyle; }\n\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n @Optional() @Inject(IS_PREVIEW) public isPreview: boolean,\n ) {\n this.isPreview = !!isPreview;\n }\n\n ngOnInit(): void {}\n ngOnDestroy(): void {}\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import { Component, Input, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'panel-child',\n template: '<ng-template #tpl><ng-content></ng-content></ng-template>',\n standalone: false,\n})\nexport class PanelChildComponent {\n @Input() name!: string;\n @ViewChild('tpl', { static: true }) template!: TemplateRef<any>;\n}","import { AfterContentInit, Component, ContentChildren, OnDestroy, QueryList } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { PanelEvent, PanelEventService, PanelEventTypes } from '../panel-event.service';\nimport { PanelChildComponent } from './panel-child.component';\n\n@Component({\n selector: 'app-panel',\n templateUrl: './panel.component.html',\n styleUrls: ['./panel.component.scss'],\n standalone: false,\n})\nexport class PanelComponent implements AfterContentInit, OnDestroy {\n public isPanelOpen = false;\n public activePanel: string | null = null;\n\n @ContentChildren(PanelChildComponent) panelChildren!: QueryList<PanelChildComponent>;\n\n private sub?: Subscription;\n\n constructor(private panelEventService: PanelEventService) {\n this.sub = this.panelEventService.subscribe((panelEvent: PanelEvent) => {\n if (panelEvent.type === PanelEventTypes.PANEL_CLOSE) {\n this.isPanelOpen = false;\n this.activePanel = null;\n return;\n }\n\n if (panelEvent.type === PanelEventTypes.PANEL_SELECTED || panelEvent.type === PanelEventTypes.PANEL_OPEN) {\n this.isPanelOpen = true;\n this.activePanel = panelEvent.data;\n }\n });\n }\n\n ngAfterContentInit(): void {}\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n }\n}","<div class=\"panel\">\n <ng-container *ngFor=\"let child of panelChildren\">\n <div class=\"panel-body\" [ngClass]=\"{ active: activePanel === child.name }\">\n <ng-container *ngTemplateOutlet=\"child.template\"></ng-container>\n </div>\n </ng-container>\n</div>","import { Injectable } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\n\nexport interface HistoryEntry {\n layout: ComponentNode[];\n timestamp: number;\n}\n\nconst MAX_HISTORY = 50;\n\n/**\n * BuilderHistoryService — snapshot-based undo/redo for the page builder.\n *\n * Snapshots are JSON deep-clones of the full layout array.\n * Session-only — not persisted to the backend.\n * Scoped to PageUiComponent.providers[] — one history stack per builder instance.\n */\n@Injectable()\nexport class BuilderHistoryService {\n private _past: HistoryEntry[] = [];\n private _future: HistoryEntry[] = [];\n\n get canUndo(): boolean { return this._past.length > 1; }\n get canRedo(): boolean { return this._future.length > 0; }\n\n push(layout: ComponentNode[]): void {\n this._past.push({ layout: JSON.parse(JSON.stringify(layout)), timestamp: Date.now() });\n if (this._past.length > MAX_HISTORY) {\n this._past.shift();\n }\n this._future = [];\n }\n\n undo(): ComponentNode[] | null {\n if (!this.canUndo) return null;\n const current = this._past.pop()!;\n this._future.unshift(current);\n return JSON.parse(JSON.stringify(this._past[this._past.length - 1].layout));\n }\n\n redo(): ComponentNode[] | null {\n if (!this.canRedo) return null;\n const next = this._future.shift()!;\n this._past.push(next);\n return JSON.parse(JSON.stringify(next.layout));\n }\n\n clear(): void {\n this._past = [];\n this._future = [];\n }\n}\n","import { NO_ERRORS_SCHEMA, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { AccordionModule } from 'primeng/accordion';\nimport { ButtonModule } from 'primeng/button';\nimport { PopoverModule } from 'primeng/popover';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DialogModule } from 'primeng/dialog';\n\nimport { IoxPageModule } from '@vectoriox/iox-ui';\n\nimport { BuilderComponent } from './builder.component';\nimport { SectionComponent } from './components/section/section.component';\nimport { BuilderContainerComponent } from './components/container/container.component';\nimport { BuilderLinkedContainerComponent } from './components/linked-container/linked-container.component';\nimport { BuilderRepeaterComponent } from './components/repeater/repeater.component';\nimport { BuilderButtonBlockComponent } from './components/button-block/button-block.component';\nimport { SliderContainerComponent } from './components/slider-container/slider-container.component';\nimport { SliderSlideComponent } from './components/slider-slide/slider-slide.component';\nimport { OverlayComponent } from './overlay/overlay.component';\nimport { ToolbarComponent } from './toolbar/toolbar.component';\nimport { RenderDirective } from './render/render.directive';\nimport { IoxDraggableDirective } from './directives/iox-draggable.directive';\nimport { IoxDropzoneDirective } from './directives/iox-dropzone.directive';\nimport { PanelComponent } from './panels/panel/panel.component';\nimport { PanelChildComponent } from './panels/panel/panel-child.component';\nimport { LayerTreeComponent } from './panels/layer-tree/layer-tree.component';\n\nimport { DragEngineService } from './services/drag-engine.service';\nimport { OverlayService } from './overlay/overlay.service';\nimport { ComponentRegistryService } from './services/component-registry.service';\nimport { DataSourceRegistryService } from './services/data-source-registry.service';\nimport { InteractionEngineService } from './services/interaction-engine.service';\nimport { ViewportService } from './services/viewport.service';\nimport { StyleRegistryService } from './services/style-registry.service';\nimport { PanelEventService } from './panels/panel-event.service';\nimport { PresetRegistryService } from './services/preset-registry.service';\nimport { SymbolRegistryService } from './services/symbol-registry.service';\nimport { InteractionPresetRegistryService } from './services/interaction-preset-registry.service';\nimport { BuilderHistoryService } from './services/builder-history.service';\nimport { BuilderClipboardService } from './services/builder-clipboard.service';\nimport { BuilderDataSourceService } from './services/builder-data-source.service';\n\n// StylePanelComponent and PagePanelComponent use <dynamic-input> which must be\n// provided by the consuming app (InputsModule). Declare them there, not here.\nconst DECLARATIONS = [\n BuilderComponent,\n RenderDirective,\n IoxDraggableDirective,\n IoxDropzoneDirective,\n OverlayComponent,\n ToolbarComponent,\n SectionComponent,\n BuilderContainerComponent,\n BuilderLinkedContainerComponent,\n BuilderRepeaterComponent,\n BuilderButtonBlockComponent,\n SliderContainerComponent,\n SliderSlideComponent,\n PanelComponent,\n PanelChildComponent,\n LayerTreeComponent,\n];\n\n@NgModule({\n declarations: DECLARATIONS,\n imports: [\n CommonModule,\n FormsModule,\n DragDropModule,\n AccordionModule,\n ButtonModule,\n PopoverModule,\n InputTextModule,\n SelectModule,\n TooltipModule,\n DialogModule,\n IoxPageModule,\n ],\n providers: [\n DragEngineService,\n OverlayService,\n ComponentRegistryService,\n DataSourceRegistryService,\n InteractionEngineService,\n ViewportService,\n StyleRegistryService,\n PanelEventService,\n PresetRegistryService,\n SymbolRegistryService,\n InteractionPresetRegistryService,\n BuilderHistoryService,\n BuilderClipboardService,\n BuilderDataSourceService,\n ],\n exports: [\n // Angular/PrimeNG modules re-exported so consumers can use them\n CommonModule,\n FormsModule,\n DragDropModule,\n AccordionModule,\n ButtonModule,\n PopoverModule,\n InputTextModule,\n SelectModule,\n TooltipModule,\n DialogModule,\n IoxPageModule,\n // Builder declarations\n BuilderComponent,\n RenderDirective,\n IoxDraggableDirective,\n IoxDropzoneDirective,\n OverlayComponent,\n ToolbarComponent,\n SectionComponent,\n BuilderContainerComponent,\n BuilderLinkedContainerComponent,\n BuilderRepeaterComponent,\n BuilderButtonBlockComponent,\n SliderContainerComponent,\n SliderSlideComponent,\n PanelComponent,\n PanelChildComponent,\n LayerTreeComponent,\n ],\n schemas: [NO_ERRORS_SCHEMA],\n})\nexport class IoxBuilderModule {}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Canvas data preview used to come from host-provided content services (IOX_CONTENT_SERVICE /\n * IOX_SHOP_SERVICE), whose `getContent(contentType, orgId)` hit the ADMIN resources endpoint and\n * accepted no filters — so the Repeater/Slider ignored every data-source filter. Data now flows\n * through BuilderDataSourceService + the shared planDataSource, configured with\n * IOX_DATA_SOURCE_ENDPOINTS. Those tokens are gone; do not reintroduce a fetch that bypasses it.\n */\n\n/** Optional font manager. Provide from the host app to populate the fontFamily dropdown. */\nexport const IOX_FONT_MANAGER = new InjectionToken<IoxFontManager>('IOX_FONT_MANAGER');\n\nexport interface IoxFontManager {\n loadFonts(orgId: string): void;\n uploadedFonts$: import('rxjs').Observable<any>;\n getAllFontOptions(): { label: string; value: string }[];\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderButtonComponentConfig extends ComponentConfig {\n constructor() {\n super('Button', 'app-builder-button', 'ph-thin ph-cursor-click', 'Basic');\n this.inputs = {\n label: 'text',\n link: 'text',\n variant: 'select'\n };\n this.traits = [\n new TraitConfig('label', 'Label', TraitInputType.Text, undefined, 'Click me'),\n new TraitConfig('link', 'Link', TraitInputType.Text, undefined, '#'),\n new TraitConfig('variant', 'Variant', TraitInputType.Select, ['primary', 'outlined', 'text'], 'primary'),\n ];\n this.styleTraits = buildFullStyleTraits();\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class ButtonBlockComponentConfig extends ComponentConfig {\n constructor() {\n super('ButtonBlock', 'app-builder-button-block', 'ph-thin ph-cursor-click', 'Basic');\n this.children = [];\n this.inputs = {\n tag: 'select',\n href: 'text',\n target: 'select',\n type: 'select',\n };\n this.traits = [\n new TraitConfig('tag', 'Tag', TraitInputType.Select, ['button', 'a'], 'button'),\n new TraitConfig('href', 'URL', TraitInputType.Text, undefined, '', false, { trait: 'tag', values: 'a' }),\n new TraitConfig('target', 'Target', TraitInputType.Select, ['_self', '_blank'], '_self', false, { trait: 'tag', values: 'a' }),\n new TraitConfig('type', 'Type', TraitInputType.Select, ['button', 'submit', 'reset'], 'button', false, { trait: 'tag', values: 'button' }),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n width: 'auto',\n height: 'auto',\n padding: '10px 20px',\n borderRadius: '6px',\n cursor: 'pointer',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class CardComponentConfig extends ComponentConfig {\n constructor() {\n super('Card', 'app-card', 'ph-thin ph-cards', 'Content');\n this.inputs = {\n title: 'text',\n image: 'image',\n description: 'text'\n };\n this.traits = [\n new TraitConfig('title', 'Title', TraitInputType.Text, undefined, 'Default Title'),\n new TraitConfig('image', 'Image URL', TraitInputType.Media, { mode: 'compact' }, 'https://via.placeholder.com/150'),\n new TraitConfig('description', 'Description', TraitInputType.Text, undefined, 'This is a default card description.')\n ];\n this.styleTraits = buildFullStyleTraits();\n\n this.applyStyleDefaults({\n width: '200px',\n height: 'auto',\n padding: '16px 16px 16px 16px',\n borderWidth: '1px 1px 1px 1px',\n borderStyle: 'solid',\n borderColor: '#cccccc',\n borderRadius: '8px',\n backgroundColor: '#ffffff',\n });\n }\n}","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderContainerComponentConfig extends ComponentConfig {\n constructor() {\n super('Container', 'app-builder-container', 'ph-thin ph-square', 'Layout');\n this.children = [];\n this.traits = [\n new TraitConfig('htmlTag', 'HTML Tag', TraitInputType.Select,\n ['div', 'section', 'article', 'header', 'footer', 'main', 'nav', 'ul', 'ol', 'li'],\n 'div'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n height: 'auto',\n minHeight: '200px',\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import { ComponentConfig, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderDividerComponentConfig extends ComponentConfig {\n constructor() {\n super('Divider', 'app-builder-divider', 'ph-thin ph-minus', 'Layout');\n this.traits = [];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n height: '1px',\n backgroundColor: '#cccccc',\n margin: '8px 0px 8px 0px',\n });\n }\n}\n","import {\n ComponentConfig,\n TraitConfig,\n TraitInputType,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n BorderGroupStyleConfig,\n BackgroundGroupStyleConfig,\n} from '../../models/component.model';\n\n/**\n * Gallery — crossfade image gallery (working name; \"fade\" is the first effect, not the component).\n *\n * The RENDER component is the shared engine twin `ClientGalleryComponent` (`iox-gallery`) from\n * `@vectoriox/iox-ui` — reused directly in the builder (like Image reuses BuilderImageComponent), so\n * there is ONE implementation of the crossfade for both canvas and live site. This config only\n * declares the editable traits + the minimal style groups (size + spacing, per product decision).\n *\n * Population (v1): the `images` MediaList trait (URL / one-by-one / filebox / paste). Data-source\n * binding (`source`/`sourcePath`) is a later phase. See gallery-component-plan.md.\n */\nexport class GalleryConfig extends ComponentConfig {\n constructor() {\n super('Gallery', 'iox-gallery', 'ph-thin ph-images', 'Media');\n\n this.traits = [\n // ── Images ────────────────────────────────────────────────────────\n new TraitConfig('__imagesLabel', 'Images', TraitInputType.SectionLabel),\n new TraitConfig('images', 'Images', TraitInputType.MediaList, undefined, []),\n\n // ── Playback ──────────────────────────────────────────────────────\n new TraitConfig('__playbackLabel', 'Playback', TraitInputType.SectionLabel),\n // Effect is a Select scaffolded for future effects; v1 lists only Fade.\n new TraitConfig('effect', 'Effect', TraitInputType.Select,\n [{ label: 'Fade', value: 'fade' }], 'fade'),\n // Durations are milliseconds — use a plain Number field (Scrub renders a px unit label).\n new TraitConfig('showDuration', 'Show duration (ms)', TraitInputType.Number, undefined, 4000),\n new TraitConfig('fadeDuration', 'Fade duration (ms)', TraitInputType.Number, undefined, 1000),\n new TraitConfig('autoStart', 'Auto start', TraitInputType.Checkbox, undefined, true),\n ];\n\n // Styling: size + spacing + border + background (letterbox). No typography (not text-bearing).\n this.styleTraits = [\n new PositionGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n ];\n\n // Size traits stay at their group default (auto) so a gallery starts unconstrained. The one\n // exception is `minHeight: 200px` — the image layers are absolutely positioned (no intrinsic\n // height), so without a floor a freshly-dropped, unsized gallery would collapse to 0px and be\n // invisible. min-height is a style-engine default on `.iox-node` (not scoped component CSS),\n // so the user can freely override it.\n this.applyStyleDefaults({\n minHeight: '200px',\n backgroundColor: '#000000',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderHeadingComponentConfig extends ComponentConfig {\n constructor() {\n super('Heading', 'app-builder-heading', 'ph-thin ph-text-h', 'Basic');\n this.traits = [\n new TraitConfig('content', 'Content', TraitInputType.Text, undefined, 'Heading'),\n new TraitConfig('level', 'Level', TraitInputType.Select,\n ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'], 'h2'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n fontSize: '32px',\n fontWeight: '700',\n width: 'auto',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderIconComponentConfig extends ComponentConfig {\n constructor() {\n super('Icon', 'app-builder-icon', 'ph-thin ph-star', 'Basic');\n this.traits = [\n new TraitConfig('iconClass', 'Icon', TraitInputType.Icon, undefined, 'ph-thin ph-star'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n fontSize: '24px',\n color: '#374151',\n // An icon is a glyph, not a paragraph — the Typography group's default line-height of\n // 1.5 adds phantom vertical space and misaligns it. Default to 0 so the line box is fully\n // collapsed and the icon contributes no extra vertical space (spacing comes from\n // padding/margin instead). Serialized into styleProps (self-describing node).\n lineHeight: '0',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderImageComponentConfig extends ComponentConfig {\n constructor() {\n super('Image', 'app-builder-image', 'ph-thin ph-image', 'Basic');\n this.inputs = {\n src: 'text',\n alt: 'text',\n };\n this.traits = [\n new TraitConfig('src', 'Image URL', TraitInputType.Media, { mode: 'compact' }, 'https://placehold.co/600x400?text=Image'),\n new TraitConfig('alt', 'Alt Text', TraitInputType.Text, undefined, 'Image'),\n // objectFit moved to the Size style group (flows through the CSS engine as a style trait).\n ];\n this.styleTraits = buildFullStyleTraits();\n\n this.applyStyleDefaults({\n width: '300px',\n aspectRatio: '1/1',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderLinkComponentConfig extends ComponentConfig {\n constructor() {\n super('Link', 'app-builder-link', 'ph-thin ph-link', 'Basic');\n this.inputs = {\n label: 'text',\n linkType: 'select',\n url: 'text',\n pageRoute: 'text',\n target: 'select',\n };\n this.traits = [\n new TraitConfig('label', 'Label', TraitInputType.Text, undefined, 'Click here'),\n new TraitConfig(\n 'linkType', 'Link Type', TraitInputType.Select,\n [{ label: 'External URL', value: 'external' }, { label: 'Website Page', value: 'page' }],\n 'external'\n ),\n new TraitConfig('url', 'URL', TraitInputType.Text, undefined, 'https://', false,\n { trait: 'linkType', values: 'external' }),\n new TraitConfig('pageRoute', 'Page Route', TraitInputType.Text, undefined, '', false,\n { trait: 'linkType', values: 'page' }),\n new TraitConfig(\n 'target', 'Target', TraitInputType.Select,\n [\n { label: 'Same tab', value: '_self' },\n { label: 'New tab', value: '_blank' },\n { label: 'Parent frame', value: '_parent' },\n { label: 'Full window', value: '_top' },\n ],\n '_self'\n ),\n ];\n this.styleTraits = buildFullStyleTraits();\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderLinkedContainerConfig extends ComponentConfig {\n constructor() {\n super('LinkedContainer', 'app-builder-linked-container', 'ph-thin ph-link-simple', 'Layout');\n this.children = [];\n this.inputs = {\n linkType: 'select',\n url: 'text',\n pageRoute: 'text',\n target: 'select',\n };\n this.traits = [\n new TraitConfig(\n 'linkType', 'Link Type', TraitInputType.Select,\n [{ label: 'External URL', value: 'external' }, { label: 'Website Page', value: 'page' }],\n 'external'\n ),\n new TraitConfig('url', 'URL', TraitInputType.Text, undefined, 'https://', false,\n { trait: 'linkType', values: 'external' }),\n new TraitConfig('pageRoute', 'Page Route', TraitInputType.Text, undefined, '', false,\n { trait: 'linkType', values: 'page' }),\n new TraitConfig(\n 'target', 'Target', TraitInputType.Select,\n [\n { label: 'Same tab', value: '_self' },\n { label: 'New tab', value: '_blank' },\n { label: 'Parent frame', value: '_parent' },\n { label: 'Full window', value: '_top' },\n ],\n '_self'\n ),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: 'auto',\n height: 'auto',\n minHeight: '80px',\n display: 'block',\n });\n }\n}\n","import {\n ComponentConfig,\n TraitConfig,\n TraitInputType,\n buildFullStyleTraits,\n} from '../../models/component.model';\n\nexport class BuilderListItemComponentConfig extends ComponentConfig {\n constructor() {\n super('ListItem', 'app-builder-container', 'ph-thin ph-list-dashes', 'Layout');\n this.traits = [\n new TraitConfig('htmlTag', 'Tag', TraitInputType.Select, ['li'], 'li'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.children = [];\n this.applyStyleDefaults({\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class TextBlockComponentConfig extends ComponentConfig {\n constructor() {\n super('Text', 'app-text-block', 'ph-thin ph-text-aa', 'Basic');\n this.inputs = {\n content: 'text',\n tag: 'select',\n };\n this.traits = [\n new TraitConfig('content', 'Content', TraitInputType.Text, undefined, 'Enter text here'),\n new TraitConfig('tag', 'Tag', TraitInputType.Select, ['p', 'span'], 'p'),\n ];\n this.styleTraits = buildFullStyleTraits();\n\n this.applyStyleDefaults({\n display: 'block',\n height: 'auto',\n minHeight: '20px',\n padding: '10px',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n ComponentNode,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n ListGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n TypographyGroupStyleConfig,\n} from '../../models/component.model';\nimport { BuilderListItemComponentConfig } from '../list-item/list-item.config';\nimport { TextBlockComponentConfig } from '../text/text.config';\n\nexport class BuilderListComponentConfig extends ComponentConfig {\n constructor() {\n super('List', 'app-builder-container', 'ph-thin ph-list', 'Layout');\n this.traits = [\n new TraitConfig('htmlTag', 'Tag', TraitInputType.Select, ['ul', 'ol'], 'ul'),\n new TraitConfig('start', 'Start At', TraitInputType.Number, undefined, 1, false,\n { trait: 'htmlTag', values: 'ol' }),\n new TraitConfig('reversed', 'Reversed', TraitInputType.Checkbox, undefined, false, false,\n { trait: 'htmlTag', values: 'ol' }),\n ];\n this.styleTraits = [\n new ListGroupStyleConfig(),\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.children = [\n this.makeListItem(),\n this.makeListItem(),\n this.makeListItem(),\n ];\n this.applyStyleDefaults({\n display: 'block',\n backgroundColor: 'transparent',\n padding: '0px 0px 0px 24px',\n });\n }\n\n private makeListItem(): ComponentNode {\n const item = new BuilderListItemComponentConfig();\n const textCfg = new TextBlockComponentConfig();\n const contentTrait = textCfg.traits.find(t => t.name === 'content');\n if (contentTrait) contentTrait.default = 'List item';\n item.children = [textCfg];\n return item;\n }\n}\n","import { ComponentConfig, ComponentTrait, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class RepeaterComponentConfig extends ComponentConfig {\n constructor() {\n super('Repeater', 'app-builder-repeater', 'ph-thin ph-repeat', 'Data');\n this.children = [];\n this.traits = [\n {\n name: 'source',\n label: 'Source',\n type: TraitInputType.Select,\n options: [], // populated at runtime from DataSourceRegistryService aliases\n default: '',\n } as ComponentTrait,\n {\n name: 'limit',\n label: 'Limit',\n type: TraitInputType.Number,\n default: 10,\n } as ComponentTrait,\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n height: 'auto',\n });\n }\n}\n","import { ComponentConfig, buildFullStyleTraits } from '../../models/component.model';\n\nexport class SectionComponentConfig extends ComponentConfig {\n constructor() {\n super('Section', 'app-section', 'ph-thin ph-rows', 'Layout');\n this.children = [];\n this.traits = [];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: 'auto',\n height: 'auto',\n minHeight: '200px',\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import {\n ComponentConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n BorderGroupStyleConfig,\n BackgroundGroupStyleConfig,\n PositionGroupStyleConfig,\n LayoutGroupStyleConfig,\n TypographyGroupStyleConfig,\n} from '../../models/component.model';\n\nexport class SliderSlideConfig extends ComponentConfig {\n constructor() {\n super('SliderSlide', 'app-slider-slide', 'ph-thin ph-rectangle', 'Media');\n\n this.children = [];\n // Hidden: SliderSlide is created only via the \"Add Slide\" toolbar button,\n // not by dragging from the Components panel.\n this.hidden = true;\n\n this.componentEvents = [\n { value: 'swiperSlideActive', label: 'This Slide Becomes Active', icon: 'ph-thin ph-eye' },\n { value: 'swiperSlideInactive', label: 'This Slide Becomes Inactive', icon: 'ph-thin ph-eye-slash' },\n ];\n\n this.traits = [];\n\n this.styleTraits = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n ];\n\n this.applyStyleDefaults({\n width: '33%',\n aspectRatio: '1 / 1',\n });\n }\n}\n","import {\n ComponentConfig,\n ComponentTrait,\n TraitConfig,\n TraitInputType,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n LayoutGroupStyleConfig,\n SpacingGroupStyleConfig,\n BorderGroupStyleConfig,\n BackgroundGroupStyleConfig,\n EffectsGroupStyleConfig,\n} from '../../models/component.model';\nimport { SliderSlideConfig } from '../slider-slide/slider-slide.config';\n\nexport class SliderContainerConfig extends ComponentConfig {\n constructor() {\n super('SliderContainer', 'app-slider-container', 'ph-thin ph-slideshow', 'Media');\n\n this.children = [\n new SliderSlideConfig(),\n new SliderSlideConfig(),\n new SliderSlideConfig(),\n new SliderSlideConfig(),\n ];\n\n this.componentEvents = [\n { value: 'swiperSlideChange', label: 'Slide Changes', icon: 'ph-thin ph-arrows-left-right' },\n { value: 'swiperReachBeginning', label: 'Reaches First Slide', icon: 'ph-thin ph-skip-back' },\n { value: 'swiperReachEnd', label: 'Reaches Last Slide', icon: 'ph-thin ph-skip-forward' },\n { value: 'swiperAutoplayStart', label: 'Autoplay Starts', icon: 'ph-thin ph-play' },\n { value: 'swiperAutoplayStop', label: 'Autoplay Stops', icon: 'ph-thin ph-stop' },\n ];\n\n this.componentMethods = [\n { value: 'swiperNext', label: 'Next Slide' },\n { value: 'swiperPrev', label: 'Previous Slide' },\n { value: 'swiperGoToSlide', label: 'Go to Slide', params: [{ name: 'index', type: 'number', label: 'Slide Index (0-based)' }] },\n { value: 'swiperAutoplayStart', label: 'Start Autoplay' },\n { value: 'swiperAutoplayStop', label: 'Stop Autoplay' },\n { value: 'swiperAutoplayPause', label: 'Pause Autoplay' },\n ];\n\n this.traits = [\n // ── Data binding ──────────────────────────────────────────────────\n new TraitConfig('__dataLabel', 'Data', TraitInputType.SectionLabel),\n\n {\n name: 'source',\n label: 'Source',\n type: TraitInputType.Select,\n options: [], // populated at runtime from DataSourceRegistryService aliases\n default: '',\n } as ComponentTrait,\n\n new TraitConfig('limit', 'Limit', TraitInputType.Number, undefined, 10),\n\n // ── Parameters ────────────────────────────────────────────────────\n new TraitConfig('__paramsLabel', 'Parameters', TraitInputType.SectionLabel),\n\n new TraitConfig('dir', 'Language direction', TraitInputType.SelectButton,\n [{ label: 'LTR', value: 'ltr' }, { label: 'RTL', value: 'rtl' }],\n 'ltr'),\n\n new TraitConfig('direction', 'Slide direction', TraitInputType.Select,\n [{ label: 'Horizontal', value: 'horizontal' }, { label: 'Vertical', value: 'vertical' }],\n 'horizontal'),\n\n new TraitConfig('slidesPerView', 'Slides per view', TraitInputType.Select,\n [\n { label: 'Auto (slide width)', value: 'auto' },\n { label: '1', value: 1 },\n { label: '2', value: 2 },\n { label: '3', value: 3 },\n { label: '4', value: 4 },\n { label: '5', value: 5 },\n { label: '6', value: 6 },\n ],\n 'auto'),\n\n new TraitConfig('slidesPerGroup', 'Slides per group', TraitInputType.Scrub, undefined, 1),\n\n new TraitConfig('loop', 'Loop', TraitInputType.SelectButton,\n [\n { label: 'Off', value: 'off' },\n { label: 'Loop', value: 'loop' },\n { label: 'Rewind', value: 'rewind' },\n ],\n 'off'),\n\n new TraitConfig('centeredSlides', 'Centered slides', TraitInputType.Checkbox, undefined, false),\n\n new TraitConfig('spaceBetween', 'Space between (px)', TraitInputType.Scrub, undefined, 0),\n\n new TraitConfig('initialSlide', 'Initial slide', TraitInputType.Scrub, undefined, 0),\n\n new TraitConfig('autoHeight', 'Auto height', TraitInputType.Checkbox, undefined, false),\n\n new TraitConfig('grabCursor', 'Grab cursor', TraitInputType.Checkbox, undefined, true),\n\n new TraitConfig('slideToClickedSlide', 'Slide to clicked slide', TraitInputType.Checkbox, undefined, false),\n\n // ── Effects ───────────────────────────────────────────────────────\n new TraitConfig('__effectsLabel', 'Effects', TraitInputType.SectionLabel),\n\n new TraitConfig('effect', 'Effect', TraitInputType.Select,\n [\n { label: 'Slide', value: 'slide' },\n { label: 'Fade', value: 'fade' },\n { label: 'Cube', value: 'cube' },\n { label: 'Coverflow', value: 'coverflow' },\n { label: 'Flip', value: 'flip' },\n { label: 'Cards', value: 'cards' },\n { label: 'Creative', value: 'creative' },\n ],\n 'slide'),\n\n new TraitConfig('speed', 'Transition duration (ms)', TraitInputType.Scrub, undefined, 300),\n\n // ── Navigation ────────────────────────────────────────────────────\n new TraitConfig('__navLabel', 'Navigation', TraitInputType.SectionLabel),\n\n new TraitConfig('enableNavigation', 'Navigation arrows', TraitInputType.Checkbox, undefined, false),\n\n new TraitConfig('navigationColor', 'Color', TraitInputType.Color, undefined, '#ffffff',\n undefined, { trait: 'enableNavigation', values: 'true' }),\n\n new TraitConfig('navigationSize', 'Size (px)', TraitInputType.Scrub, undefined, 44,\n undefined, { trait: 'enableNavigation', values: 'true' }),\n\n // ── Pagination ────────────────────────────────────────────────────\n new TraitConfig('__paginationLabel', 'Pagination', TraitInputType.SectionLabel),\n\n new TraitConfig('enablePagination', 'Pagination', TraitInputType.Checkbox, undefined, false),\n\n new TraitConfig('paginationColor', 'Color', TraitInputType.Color, undefined, '#ffffff',\n undefined, { trait: 'enablePagination', values: 'true' }),\n\n new TraitConfig('paginationType', 'Type', TraitInputType.SelectButton,\n [\n { label: '•••', value: 'bullets' },\n { label: '—', value: 'progressbar' },\n { label: '1/5', value: 'fraction' },\n ],\n 'bullets', undefined, { trait: 'enablePagination', values: 'true' }),\n\n new TraitConfig('paginationClickable', 'Clickable', TraitInputType.Checkbox, undefined, true,\n undefined, { trait: 'enablePagination', values: 'true' }),\n\n new TraitConfig('paginationDynamicBullets', 'Dynamic bullets', TraitInputType.Checkbox, undefined, false,\n undefined, { trait: 'enablePagination', values: 'true' }),\n\n // ── Autoplay ──────────────────────────────────────────────────────\n new TraitConfig('__autoplayLabel', 'Autoplay', TraitInputType.SectionLabel),\n\n new TraitConfig('enableAutoplay', 'Autoplay', TraitInputType.Checkbox, undefined, false),\n\n new TraitConfig('autoplayDelay', 'Delay (ms)', TraitInputType.Scrub, undefined, 3000,\n undefined, { trait: 'enableAutoplay', values: 'true' }),\n\n new TraitConfig('autoplayPauseOnMouseEnter', 'Pause on hover', TraitInputType.Checkbox, undefined, true,\n undefined, { trait: 'enableAutoplay', values: 'true' }),\n\n new TraitConfig('autoplayDisableOnInteraction', 'Disable on interact', TraitInputType.Checkbox, undefined, false,\n undefined, { trait: 'enableAutoplay', values: 'true' }),\n\n // ── Modules ───────────────────────────────────────────────────────\n new TraitConfig('__modulesLabel', 'Modules', TraitInputType.SectionLabel),\n\n new TraitConfig('enableScrollbar', 'Scrollbar', TraitInputType.Checkbox, undefined, false),\n new TraitConfig('freeMode', 'Free mode', TraitInputType.Checkbox, undefined, false),\n new TraitConfig('enableKeyboard', 'Keyboard control', TraitInputType.Checkbox, undefined, false),\n new TraitConfig('enableMousewheel','Mousewheel', TraitInputType.Checkbox, undefined, false),\n new TraitConfig('enableZoom', 'Zoom', TraitInputType.Checkbox, undefined, false),\n new TraitConfig('enableParallax', 'Parallax', TraitInputType.Checkbox, undefined, false),\n\n // ── Grid ──────────────────────────────────────────────────────────\n new TraitConfig('__gridLabel', 'Grid', TraitInputType.SectionLabel),\n\n new TraitConfig('enableGrid', 'Grid (multi-row)', TraitInputType.Checkbox, undefined, false),\n\n new TraitConfig('gridRows', 'Rows', TraitInputType.Scrub, undefined, 2,\n undefined, { trait: 'enableGrid', values: 'true' }),\n\n // ── Responsive ────────────────────────────────────────────────────\n new TraitConfig('__responsiveLabel', 'Responsive', TraitInputType.SectionLabel),\n\n new TraitConfig('breakpoints', 'Breakpoints (JSON)', TraitInputType.Textarea, undefined, ''),\n ];\n\n this.styleTraits = [\n new PositionGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n\n this.applyStyleDefaults({\n });\n }\n}\n","import { ComponentConfig, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderSpacerComponentConfig extends ComponentConfig {\n constructor() {\n super('Spacer', 'app-builder-spacer', 'ph-thin ph-arrows-vertical', 'Layout');\n this.traits = [];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n height: '40px',\n });\n }\n}\n","/*\n * Public API Surface of @vectoriox/iox-builder\n */\n\nexport * from './lib/iox-builder.module';\nexport * from './lib/builder.component';\nexport * from './lib/render/render.directive';\nexport { StyleCategory, IoxBinding, IoxContextSlot, SetContextParams, DsFilterByRouteParam, DsFilterByQueryParam, DataSourceType, IoxDataSource, InteractionTrigger, InteractionActionType, InteractionAction, IoxInteraction, TRIGGER_OPTIONS, ACTION_TYPE_OPTIONS, INVERSE_ACTION, EASING_OPTIONS, ElementState, SUPPORTED_STATES, INTERACTION_STATES, STRUCTURAL_STATES, RELATIONAL_STATES, RELATIONAL_STATE_BASE, TARGETED_STATES, TARGETED_STATE_BASE, ComponentNode, TraitInputType, TraitOptionMap, TraitSelectOption, QuadSizeSegment, TraitShowCondition, ComponentTrait, StyleTrait, StyleTraitGroup, generateNodeId, ComponentConfig, TraitConfig, StyleTraitConfig, GroupStyleConfig, UNITS_ALL, UNITS_NO_VW, UNITS_FIXED, UNITS_DEG, resolveTraitControllerType, resolveTraitOptions, StylePreset, buildPresetStyleTraits, buildFullStyleTraits, ListGroupStyleConfig, IoxSymbol, InteractionPreset, ComponentEventDef, ComponentMethodDef, flattenSchemaFields, arraySchemaFields, arrayItemSchemaFields, PositionGroupStyleConfig, LayoutGroupStyleConfig, ChildLayoutGroupStyleConfig, SizeGroupStyleConfig, DimensionsGroupStyleConfig, BackgroundGroupStyleConfig, SpacingGroupStyleConfig, BorderGroupStyleConfig, TypographyGroupStyleConfig, EffectsGroupStyleConfig } from './lib/models/component.model';\nexport { wrapNode, findNodeLocation } from './lib/models/wrap-node';\nexport * from './lib/services/component-instance-registry.service';\nexport * from './lib/services/symbol-registry.service';\nexport * from './lib/services/interaction-preset-registry.service';\nexport * from './lib/services/builder-history.service';\nexport * from './lib/services/builder-clipboard.service';\nexport * from './lib/services/builder-data-source.service';\nexport * from './lib/services/builder-data-source.service';\nexport * from './lib/panels/panel.model';\nexport * from './lib/panels/panel-event.service';\nexport * from './lib/tokens/builder.tokens';\nexport * from './lib/services/component-registry.service';\nexport * from './lib/services/data-source-registry.service';\nexport * from './lib/services/drag-engine.service';\nexport * from './lib/services/style-registry.service';\nexport * from './lib/services/viewport.service';\nexport * from './lib/services/preset-registry.service';\nexport * from './lib/overlay/overlay.service';\nexport * from './lib/overlay/overlay.component';\nexport * from './lib/toolbar/toolbar.component';\nexport * from './lib/directives/iox-draggable.directive';\nexport * from './lib/directives/iox-dropzone.directive';\nexport * from './lib/panels/panel/panel.component';\nexport * from './lib/panels/panel/panel-child.component';\nexport * from './lib/panels/layer-tree/layer-tree.component';\nexport * from './lib/services/interaction-engine.service';\nexport { composeVirtualTraits, VIRTUAL_TRAIT_KEYS } from './lib/style-compose';\n\n// Component classes (builder variants with drag/drop)\nexport * from './lib/components/section/section.component';\nexport * from './lib/components/container/container.component';\nexport * from './lib/components/linked-container/linked-container.component';\nexport * from './lib/components/repeater/repeater.component';\nexport * from './lib/components/button-block/button-block.component';\nexport * from './lib/components/slider-container/slider-container.component';\nexport * from './lib/components/slider-slide/slider-slide.component';\n\n// Component configs\nexport * from './lib/components/button/button.config';\nexport * from './lib/components/button-block/button-block.config';\nexport * from './lib/components/card/card.config';\nexport * from './lib/components/container/container.config';\nexport * from './lib/components/divider/divider.config';\nexport * from './lib/components/gallery/gallery.config';\nexport * from './lib/components/heading/heading.config';\nexport * from './lib/components/icon/icon.config';\nexport * from './lib/components/image/image.config';\nexport * from './lib/components/link/link.config';\nexport * from './lib/components/linked-container/linked-container.config';\nexport * from './lib/components/list/list.config';\nexport * from './lib/components/list-item/list-item.config';\nexport * from './lib/components/repeater/repeater.config';\nexport * from './lib/components/section/section.config';\nexport * from './lib/components/slider-container/slider-container.config';\nexport * from './lib/components/slider-slide/slider-slide.config';\nexport * from './lib/components/spacer/spacer.config';\nexport * from './lib/components/text/text.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EASING_OPTIONS","i1.ComponentRegistryService","i2.SymbolRegistryService","i1.OverlayService","i1.DragEngineService","i2.StyleRegistryService","i2.OverlayService","i3.StyleRegistryService","i4.InteractionEngineService","i5.PanelEventService","i6.DragEngineService","i2.ViewportService","i3.PresetRegistryService","i4.SymbolRegistryService","i5.InteractionPresetRegistryService","i6.InteractionEngineService","i7.BuilderClipboardService","i8.StyleRegistryService","i9.PanelEventService","i10","i1","i2","i3","i3.PanelEventService","i4.DragEngineService","i5.DataSourceRegistryService","i6.ViewportService","i7.InteractionEngineService","i8.InteractionPresetRegistryService","i9.BuilderClipboardService","i10.SymbolRegistryService","i11.MoveableCanvasService","i12.SelectoCanvasService","i13","i17.RenderDirective","i18.OverlayComponent","i19.ToolbarComponent","i20.LayerTreeComponent","i3.RenderDirective","i4.IoxDropzoneDirective","i3.BuilderDataSourceService","i4.DataSourceRegistryService","i7","i8.RenderDirective","i9.IoxDraggableDirective","i10.IoxDropzoneDirective","i6","i7.RenderDirective","i8.IoxDraggableDirective","i9.IoxDropzoneDirective","i4.IoxDraggableDirective","i5.IoxDropzoneDirective","i1.PanelEventService"],"mappings":"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"}
1
+ {"version":3,"file":"vectoriox-iox-builder.mjs","sources":["../../../projects/iox-builder/src/lib/models/component.model.ts","../../../projects/iox-builder/src/lib/utils/clone-ids.util.ts","../../../projects/iox-builder/src/lib/models/wrap-node.ts","../../../projects/iox-builder/src/lib/panels/panel-event.service.ts","../../../projects/iox-builder/src/lib/panels/panel.model.ts","../../../projects/iox-builder/src/lib/services/component-registry.service.ts","../../../projects/iox-builder/src/lib/overlay/overlay.service.ts","../../../projects/iox-builder/src/lib/services/symbol-registry.service.ts","../../../projects/iox-builder/src/lib/services/drag-engine.service.ts","../../../projects/iox-builder/src/lib/services/data-source-registry.service.ts","../../../projects/iox-builder/src/lib/services/viewport.service.ts","../../../projects/iox-builder/src/lib/services/component-instance-registry.service.ts","../../../projects/iox-builder/src/lib/services/interaction-engine.service.ts","../../../projects/iox-builder/src/lib/services/interaction-preset-registry.service.ts","../../../projects/iox-builder/src/lib/services/builder-clipboard.service.ts","../../../projects/iox-builder/src/lib/services/style-registry.service.ts","../../../projects/iox-builder/src/lib/services/moveable-canvas.service.ts","../../../projects/iox-builder/src/lib/services/selecto-canvas.service.ts","../../../projects/iox-builder/src/lib/style-compose.ts","../../../projects/iox-builder/src/lib/render/render.directive.ts","../../../projects/iox-builder/src/lib/services/preset-registry.service.ts","../../../projects/iox-builder/src/lib/overlay/overlay.component.ts","../../../projects/iox-builder/src/lib/overlay/overlay.component.html","../../../projects/iox-builder/src/lib/toolbar/toolbar.component.ts","../../../projects/iox-builder/src/lib/toolbar/toolbar.component.html","../../../projects/iox-builder/src/lib/panels/layer-tree/layer-tree.component.ts","../../../projects/iox-builder/src/lib/panels/layer-tree/layer-tree.component.html","../../../projects/iox-builder/src/lib/builder.component.ts","../../../projects/iox-builder/src/lib/builder.component.html","../../../projects/iox-builder/src/lib/components/section/section.component.ts","../../../projects/iox-builder/src/lib/components/container/container.component.ts","../../../projects/iox-builder/src/lib/directives/iox-dropzone.directive.ts","../../../projects/iox-builder/src/lib/components/linked-container/linked-container.component.ts","../../../projects/iox-builder/src/lib/utils/binding-path.util.ts","../../../projects/iox-builder/src/lib/services/builder-data-source.service.ts","../../../projects/iox-builder/src/lib/directives/iox-draggable.directive.ts","../../../projects/iox-builder/src/lib/components/repeater/repeater.component.ts","../../../projects/iox-builder/src/lib/components/button-block/button-block.component.ts","../../../projects/iox-builder/src/lib/components/slider-container/slider-container.component.ts","../../../projects/iox-builder/src/lib/components/slider-slide/slider-slide.component.ts","../../../projects/iox-builder/src/lib/panels/panel/panel-child.component.ts","../../../projects/iox-builder/src/lib/panels/panel/panel.component.ts","../../../projects/iox-builder/src/lib/panels/panel/panel.component.html","../../../projects/iox-builder/src/lib/services/builder-history.service.ts","../../../projects/iox-builder/src/lib/iox-builder.module.ts","../../../projects/iox-builder/src/lib/tokens/builder.tokens.ts","../../../projects/iox-builder/src/lib/components/button/button.config.ts","../../../projects/iox-builder/src/lib/components/button-block/button-block.config.ts","../../../projects/iox-builder/src/lib/components/card/card.config.ts","../../../projects/iox-builder/src/lib/components/container/container.config.ts","../../../projects/iox-builder/src/lib/components/divider/divider.config.ts","../../../projects/iox-builder/src/lib/components/gallery/gallery.config.ts","../../../projects/iox-builder/src/lib/components/heading/heading.config.ts","../../../projects/iox-builder/src/lib/components/icon/icon.config.ts","../../../projects/iox-builder/src/lib/components/image/image.config.ts","../../../projects/iox-builder/src/lib/components/link/link.config.ts","../../../projects/iox-builder/src/lib/components/linked-container/linked-container.config.ts","../../../projects/iox-builder/src/lib/components/list-item/list-item.config.ts","../../../projects/iox-builder/src/lib/components/text/text.config.ts","../../../projects/iox-builder/src/lib/components/list/list.config.ts","../../../projects/iox-builder/src/lib/components/repeater/repeater.config.ts","../../../projects/iox-builder/src/lib/components/section/section.config.ts","../../../projects/iox-builder/src/lib/components/slider-slide/slider-slide.config.ts","../../../projects/iox-builder/src/lib/components/slider-container/slider-container.config.ts","../../../projects/iox-builder/src/lib/components/spacer/spacer.config.ts","../../../projects/iox-builder/src/public-api.ts","../../../projects/iox-builder/src/vectoriox-iox-builder.ts"],"sourcesContent":["import { DEFAULT_WIDTH_BY_TYPE, IoxContextSlot, RelativeSourceSpec, SetContextParams } from '@vectoriox/iox-ui';\n\nexport enum StyleCategory {\n Layout = 'Layout',\n /** How THIS node participates in its parent's flex/grid flow (align-self, flex-grow, grid-column…).\n * Distinct from Layout, which configures the node as a container for its OWN children. */\n ChildLayout = 'Child Layout',\n Size = 'Size',\n Typography = 'Typography',\n Spacing = 'Spacing',\n Border = 'Border',\n Position = 'Position',\n Background = 'Background',\n Effects = 'Effects',\n List = 'List',\n // Legacy — kept for backward compat; prefer Size\n Dimensions = 'Dimensions',\n}\n\nexport interface IoxBinding {\n prop: string;\n source: string;\n path: string;\n fallback?: any;\n /** Render-time transform chain (UI: \"Filters\"), applied LEFT→RIGHT after resolvePath by the shared\n * `applyBindingPipes` from `@vectoriox/iox-ui` — same on the builder canvas and the SSR engine.\n * Shape mirrors iox-ui's `IoxPipe` (kept inline so this model needs no cross-package import). */\n pipes?: { name: string; args?: any[] }[];\n}\n\n/**\n * When mode=single: looks up a single CMS item by matching a schema field\n * against a URL path param (e.g. /project/:projectId → field _id).\n * `defaultId` is used as a fallback value in the builder preview when no\n * live route is active.\n */\nexport interface DsFilterByRouteParam {\n field: string;\n routeParam: string;\n defaultId?: string;\n}\n\n/**\n * When mode=query: each entry filters a schema field, either from a URL query string key\n * (e.g. ?status=active → field \"status\") or by a constant.\n * `queryParam` OMITTED → constant filter: `defaultValue` is always the value.\n * `queryParam` present → the URL value wins and `defaultValue` is the fallback (which is what the\n * builder preview always uses — design time has no live query params).\n */\nexport interface DsFilterByQueryParam {\n field: string;\n queryParam?: string;\n defaultValue?: string;\n}\n\nexport enum DataSourceType {\n Cms = 'cms',\n Shop = 'shop',\n ExternalApi = 'external-api',\n InternalApi = 'internal-api',\n Static = 'static',\n /** A VIEW into another variable: `{ from: <alias>, path }` (e.g. galleryImages = product.gallery).\n * Resolves to the value one (or more) level(s) into a parent variable — page-scoped. */\n Derived = 'derived',\n /** A ROUTE-CONTEXT value derived from the current route item — `$route`/`$current`/`$siblings`/\n * `$related`. Not fetched: computed by the shared `computeRelative` from other resolved sources.\n * See relative-data-sources-plan.md. */\n Relative = 'relative',\n /** A page-local VARIABLE: a named resource whose value is WRITTEN at runtime by an interaction\n * (`setContext`), never fetched. Starts empty; elements bind to it like any other alias.\n * `request.variable.itemsFrom` names the source whose items it holds, for field suggestions.\n * See element-context-state-plan.md. */\n Variable = 'variable',\n}\n\nexport interface IoxDataSource {\n id: string;\n type: 'cms' | 'shop' | 'internal-api' | 'external-api' | 'static' | 'derived' | 'relative' | 'variable';\n mode: 'single' | 'query';\n alias: string;\n request: {\n method?: 'GET' | 'POST';\n endpoint?: string;\n /** `derived` alias: resolve `from` (another alias) then getByPath(value, path). */\n derived?: { from: string; path: string };\n /** `relative` alias: a route-context computation (kind + from/subjectFrom/sortBy/matchFields…),\n * resolved by the shared `computeRelative`. */\n relative?: RelativeSourceSpec;\n /** `variable` alias: written at runtime by an interaction. `itemsFrom` names the source whose\n * items it holds — optional, and used only to suggest fields in the bind picker. */\n variable?: { itemsFrom?: string };\n cms?: {\n contentType: string;\n filter?: any;\n limit?: number;\n sort?: any;\n /** Single-result lookup: match field against a route path param */\n filterByRouteParam?: DsFilterByRouteParam;\n /** Array-result filtering: match fields against URL query params */\n filterByQueryParams?: DsFilterByQueryParam[];\n };\n shop?: {\n contentType: 'products' | 'categories' | 'subCategories';\n filterByRouteParam?: DsFilterByRouteParam;\n filterByQueryParams?: DsFilterByQueryParam[];\n };\n params?: Record<string, any>;\n };\n}\n\n// ── Interactions / Animations ────────────────────────────────\n\n/**\n * Element context state — the shared types live in @vectoriox/iox-ui (the engine cannot import\n * iox-builder), and are re-exported here so builder code has one import site. See\n * element-context-state-plan.md.\n */\nexport type { IoxContextSlot, SetContextParams };\n\nexport type InteractionTrigger =\n | 'pageLoad' | 'click' | 'hover' | 'viewportEnter' | 'scrollProgress'\n // Page-transition choreography (see page-transitions.md). pageLeave plays on navigate-AWAY and\n // the route swap waits for all of them; pageEnter plays after the page transition completes.\n | 'pageLeave' | 'pageEnter'\n // Swiper container-level events (used as triggers on a SliderContainer node)\n | 'swiperSlideChange' | 'swiperReachBeginning' | 'swiperReachEnd'\n | 'swiperAutoplayStart' | 'swiperAutoplayStop'\n // Swiper slide-level events (used as triggers on a SliderSlide node)\n | 'swiperSlideActive' | 'swiperSlideInactive';\n\nexport type InteractionActionType =\n | 'fadeIn' | 'fadeOut'\n | 'moveUp' | 'moveDown' | 'moveLeft' | 'moveRight'\n | 'scaleIn' | 'scaleOut'\n | 'rotate'\n | 'show' | 'hide' | 'toggleVisibility'\n // Element context state — write/clear a named runtime slot other elements bind to. Not an\n // animation: these carry `SetContextParams` in `params`. See element-context-state-plan.md.\n | 'setContext' | 'clearContext'\n // Swiper imperative method actions (target must be a labeled SliderContainer node)\n | 'swiperNext' | 'swiperPrev' | 'swiperGoToSlide'\n | 'swiperAutoplayStart' | 'swiperAutoplayStop' | 'swiperAutoplayPause';\n\nexport interface InteractionAction {\n type: InteractionActionType;\n /** 'self' targets the node that owns the interaction; otherwise a node ID. */\n target: 'self' | string;\n /** Duration in milliseconds. */\n duration: number;\n /** Delay in milliseconds before the action starts. */\n delay: number;\n easing: 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out';\n /**\n * Extra parameters — `{ distance: 20 }` for move actions. For `setContext`/`clearContext` this\n * holds a `SetContextParams` (`{ slot, value, noReverse? }`), read structurally by the shared\n * `contextActionEffect` in @vectoriox/iox-ui. Kept as an index signature because animation\n * actions access it by key (`params?.['degrees']`).\n */\n params?: Record<string, any>;\n /** If true, the action only plays once (relevant for viewport/scroll triggers). */\n once?: boolean;\n /**\n * Switched OFF by the author without deleting it — useful while tuning a multi-action sequence.\n * Absent means enabled. Honoured by BOTH runtimes via the shared `isActionEnabled`: a disabled\n * action does not animate, does not write context, and receives no pre-state.\n */\n disabled?: boolean;\n}\n\nexport interface IoxInteraction {\n id: string;\n trigger: InteractionTrigger;\n actions: InteractionAction[];\n /**\n * Optional second set of actions for click-toggle behaviour.\n * When set, the first click runs `actions` and the second click runs\n * `reverseActions`, alternating on every subsequent click.\n * Only meaningful for trigger === 'click'.\n */\n reverseActions?: InteractionAction[];\n}\n\n/**\n * Maps each action type to its logical inverse for auto-populating toggle\n * reverse actions. Types without a natural inverse are omitted.\n */\nexport const INVERSE_ACTION: Partial<Record<InteractionActionType, InteractionActionType>> = {\n fadeIn: 'fadeOut',\n fadeOut: 'fadeIn',\n show: 'hide',\n hide: 'show',\n scaleIn: 'scaleOut',\n scaleOut: 'scaleIn',\n moveUp: 'moveDown',\n moveDown: 'moveUp',\n moveLeft: 'moveRight',\n moveRight: 'moveLeft',\n // Click-toggle only: click sets the slot, click again clears it. This map does NOT drive\n // hover-leave — that runs the same actions on a reverse pass, whose context semantics live in\n // `contextActionEffect` (@vectoriox/iox-ui).\n setContext: 'clearContext',\n clearContext: 'setContext',\n};\n\n// ── Component capability declarations ─────────────────────────────────────────\n\n/** An event that a component can emit, usable as an interaction trigger. */\nexport interface ComponentEventDef {\n /** Value stored on IoxInteraction.trigger (e.g. 'swiperSlideChange'). */\n value: string;\n label: string;\n icon?: string;\n}\n\n/** An imperative method a component exposes, usable as an interaction action. */\nexport interface ComponentMethodDef {\n /** Value stored on InteractionAction.type (e.g. 'swiperNext'). */\n value: string;\n label: string;\n /** Optional parameters the user can configure when this action is selected. */\n params?: { name: string; type: 'number' | 'string' | 'boolean'; label: string }[];\n}\n\nexport const TRIGGER_OPTIONS: { value: InteractionTrigger; label: string; icon: string }[] = [\n { value: 'pageLoad', label: 'Page load', icon: 'ph-thin ph-play' },\n { value: 'pageEnter', label: 'Page enter', icon: 'ph-thin ph-sign-in' },\n { value: 'pageLeave', label: 'Page leave', icon: 'ph-thin ph-sign-out' },\n { value: 'viewportEnter', label: 'Enter viewport', icon: 'ph-thin ph-eye' },\n { value: 'click', label: 'Click', icon: 'ph-thin ph-cursor-click' },\n { value: 'hover', label: 'Hover', icon: 'ph-thin ph-hand-pointing' },\n { value: 'scrollProgress', label: 'Scroll progress', icon: 'ph-thin ph-arrow-fat-lines-down' },\n];\n\nexport const ACTION_TYPE_OPTIONS: { value: InteractionActionType; label: string }[] = [\n { value: 'fadeIn', label: 'Fade in' },\n { value: 'fadeOut', label: 'Fade out' },\n { value: 'moveUp', label: 'Move up' },\n { value: 'moveDown', label: 'Move down' },\n { value: 'moveLeft', label: 'Move left' },\n { value: 'moveRight', label: 'Move right' },\n { value: 'scaleIn', label: 'Scale in' },\n { value: 'scaleOut', label: 'Scale out' },\n { value: 'rotate', label: 'Rotate' },\n { value: 'show', label: 'Show' },\n { value: 'hide', label: 'Hide' },\n { value: 'toggleVisibility', label: 'Toggle visibility' },\n { value: 'setContext', label: 'Set context' },\n { value: 'clearContext', label: 'Clear context' },\n];\n\nexport const EASING_OPTIONS = ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out'];\n\n// ── Style Presets ─────────────────────────────────────────────────────────────\n\n/**\n * A named, reusable collection of CSS style properties stored at the org level.\n * Elements reference a preset by `stylePresetId`. At render time the engine\n * merges `preset.styleProps → element.styleOverrides` so local overrides win.\n */\nexport interface StylePreset {\n id: string;\n name: string;\n /** Flat CSS property map — same shape as IoxLayoutNode.styleProps. */\n styleProps: Record<string, any>;\n /** Per-state style overrides stored alongside the preset (e.g. hover, active, focus). */\n stateStyles?: Partial<Record<ElementState, Record<string, any>>>;\n}\n\n/** A reusable element definition whose instances all stay in sync.\n * Stored in the `symbols` backend collection; referenced by ComponentNode.symbolId. */\nexport interface IoxSymbol {\n id: string;\n name: string;\n /** Full serialised node tree — same shape as a page layout node. */\n node: Record<string, any>;\n}\n\n/**\n * A named, reusable collection of IoxInteraction[] stored at the org level.\n * Elements reference a preset by `interactionPresetId`. Editing the preset\n * propagates updated interactions to all linked elements immediately.\n */\nexport interface InteractionPreset {\n id: string;\n name: string;\n interactions: IoxInteraction[];\n}\n\nexport type ElementState =\n | 'hover' | 'active' | 'focus'\n | 'first-child' | 'last-child' | 'nth-child(odd)' | 'nth-child(even)'\n | 'parent-hover'\n | 'trigger-hover';\n\n/** Interaction pseudo-classes — compiled to .iox-node-{id}:state */\nexport const INTERACTION_STATES: ElementState[] = ['hover', 'active', 'focus'];\n\n/** Structural pseudo-classes — compiled to .iox-outer-{id}:state */\nexport const STRUCTURAL_STATES: ElementState[] = ['first-child', 'last-child', 'nth-child(odd)', 'nth-child(even)'];\n\n/**\n * Relational pseudo-classes — the styled element is a descendant, the pseudo-class\n * lives on an ANCESTOR. Compiled to `.iox-node-{parentId}:{base} .iox-node-{id} { … }`,\n * so they require the ancestor's css id (`relativeToId`) at compile time.\n * `RELATIONAL_STATE_BASE` maps each relational state to the ancestor pseudo-class.\n */\nexport const RELATIONAL_STATES: ElementState[] = ['parent-hover'];\n\nexport const RELATIONAL_STATE_BASE: Partial<Record<ElementState, string>> = {\n 'parent-hover': 'hover',\n};\n\n/**\n * Targeted relational pseudo-classes — the styled element restyles when an ARBITRARY\n * chosen element (the `trigger`, not the DOM parent) matches a pseudo-class. Compiled to\n * `.iox-node-{scopeId}:has(.iox-node-{triggerId}:{base}) .iox-node-{id} { … }`, where\n * `scopeId` is the NEAREST COMMON ANCESTOR of the styled node and the trigger. Scoping the\n * `:has()` to that ancestor keeps the rule repetition-safe (each cloned subtree matches\n * independently) with a single shared CSS rule.\n *\n * The trigger node id per state is stored on `ComponentNode.stateTriggers`.\n * `TARGETED_STATE_BASE` maps each targeted state to the trigger's pseudo-class.\n */\nexport const TARGETED_STATES: ElementState[] = ['trigger-hover'];\n\nexport const TARGETED_STATE_BASE: Partial<Record<ElementState, string>> = {\n 'trigger-hover': 'hover',\n};\n\nexport const SUPPORTED_STATES: ElementState[] = [...INTERACTION_STATES, ...STRUCTURAL_STATES, ...RELATIONAL_STATES, ...TARGETED_STATES];\n\nexport interface ComponentNode {\n id?: string;\n /**\n * The CSS class key (`iox-node-{styleId}`) used by the style engine.\n * Set on clone nodes to point back to the original template node's id,\n * so all repeated rows share a single CSS rule.\n * Absent on original (non-clone) nodes — they use `id` directly.\n */\n styleId?: string;\n type: string;\n inputs?: Record<string, any>;\n traits?: ComponentTrait[];\n styleTraits?: StyleTraitGroup[];\n bindings?: IoxBinding[];\n interactions?: IoxInteraction[];\n children?: ComponentNode[];\n isGlobal?: boolean;\n globalPosition?: 'before' | 'after';\n /** ID of the org-level StylePreset applied to this node. */\n stylePresetId?: string;\n /**\n * CSS properties explicitly overridden by the user after a preset was applied.\n * Serialized to `styleProps` in the page layout JSON when a preset is active.\n * Absent when no preset is applied (full styles stored in styleTraits instead).\n */\n styleOverrides?: Record<string, any>;\n /**\n * Per-state style overrides. Only stores properties that differ from the base\n * style — same sparse pattern as styleOverrides. Each key maps to a flat CSS\n * property map that is compiled to `.iox-node-{id}:hover { … }` etc.\n */\n stateStyles?: Partial<Record<ElementState, Record<string, any>>>;\n /**\n * For TARGETED_STATES (e.g. `trigger-hover`): the node id whose pseudo-class drives\n * that state. Keyed by state so future targeted states (trigger-active/focus) slot in.\n * The styled node restyles when this trigger node is hovered; the compiler scopes the\n * `:has()` selector to the nearest common ancestor of the two. Only nodes with a `label`\n * appear in the trigger picker.\n */\n stateTriggers?: Partial<Record<ElementState, string>>;\n /** User-defined display name for this node. Used in the layer tree and as an\n * interaction target identifier. Only nodes with a label appear in the\n * interaction target picker. */\n label?: string;\n /** ID of the org-level IoxSymbol this node is linked to.\n * Absent on stamps (independent copies). When present, any style change\n * on this node propagates to all other instances of the same symbol. */\n symbolId?: string;\n /** Set when the user detaches an instance from its symbol. Remembers the\n * origin symbol ID so the instance can be re-linked (resynced) later. */\n detachedSymbolId?: string;\n /** ID of the org-level InteractionPreset applied to this node.\n * When set, node.interactions reflects the preset's interactions. */\n interactionPresetId?: string;\n}\n\n/**\n * Build a full StyleTraitGroup[] schema populated with values from a flat\n * styleProps map. Used when editing a preset in the Style panel — the panel\n * receives the same `StyleTraitGroup[]` shape regardless of context.\n */\nexport function buildPresetStyleTraits(styleProps: Record<string, any>): StyleTraitGroup[] {\n const allGroups: GroupStyleConfig[] = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n new PositionGroupStyleConfig(),\n ];\n return allGroups.map(group => ({\n ...group,\n traits: group.traits.map(trait => ({\n ...trait,\n default: styleProps[trait.name] !== undefined ? styleProps[trait.name] : trait.default,\n })),\n }));\n}\n\nexport enum TraitInputType {\n Text = 'text',\n Number = 'number',\n Select = 'select',\n Checkbox = 'checkbox',\n Color = 'colorPicker',\n DirectionalSize = 'directionalSize',\n SelectButton = 'selectButton',\n Scrub = 'scrub',\n Range = 'range',\n Icon = 'icon',\n Media = 'media',\n /** Ordered list of images (URL / one-by-one / filebox; per-item binding in a later phase).\n * Controller registered in the consumer (iox-cms-client) as `mediaList`. Value: GalleryImage[]. */\n MediaList = 'mediaList',\n FontFamily = 'fontFamily',\n GridTemplate = 'gridTemplate',\n SectionLabel = 'sectionLabel',\n Textarea = 'textarea',\n}\n\nexport interface TraitOptionMap {\n [key: string]: any;\n}\n\n/** Named label/value pair for select options where the display label differs from the CSS value. */\nexport interface TraitSelectOption {\n label: string;\n value: string;\n}\n\nexport interface QuadSizeSegment {\n key: string;\n icon: string;\n ariaLabel?: string;\n}\n\n/** Conditional visibility: this trait only shows when a controlling trait matches one of the given values.\n * `scope` selects whose trait is inspected:\n * - `'self'` (default): a sibling trait on the SAME node/group (e.g. grid tracks show when this node's display=grid).\n * - `'parent'`: the same-named trait on the node's PARENT (e.g. flex-child props show when the PARENT's display=flex).\n * Parent-scoped conditions are resolved by the style panel, which threads the parent's live value in. */\nexport interface TraitShowCondition {\n /** name of the controlling trait (a sibling when scope='self'; read off the parent when scope='parent') */\n trait: string;\n /** one value or an array of values that make this trait visible */\n values: string | string[];\n /** whose trait to inspect — defaults to 'self' (a sibling in the same group). */\n scope?: 'self' | 'parent';\n}\n\nexport interface ComponentTrait {\n name: string;\n label: string;\n type: TraitInputType;\n options?: string[] | TraitSelectOption[] | TraitOptionMap;\n default?: any;\n inline?: boolean;\n /** When set, this trait is hidden unless the named sibling trait has one of the specified values. */\n showWhen?: TraitShowCondition;\n}\n\n// StyleTrait is the same shape as ComponentTrait — unified type\nexport type StyleTrait = ComponentTrait;\n\nexport interface StyleTraitGroup {\n category: string;\n traits: ComponentTrait[];\n}\n\nexport function generateNodeId(): string {\n return Math.random().toString(36).substr(2, 9);\n}\n\nexport class ComponentConfig {\n public id: string;\n public type: string;\n public selector: string;\n public icon: string;\n public category: string;\n public inputs: Record<string, any>;\n public traits: ComponentTrait[];\n public styleTraits: StyleTraitGroup[];\n /** Layout components (e.g. Section) set this to []. Leaf components leave it undefined.\n * RenderDirective uses `node.children !== undefined` to detect layout components. */\n public children?: ComponentNode[];\n /** When true, the component is excluded from the Components panel drag list.\n * Use for internal-only types (e.g. SliderSlide) that are created programmatically. */\n public hidden?: boolean;\n /** Events this component emits that can be used as interaction triggers.\n * The Interactions panel appends these to the trigger dropdown for nodes of this type. */\n public componentEvents?: ComponentEventDef[];\n /** Imperative methods this component exposes that can be used as interaction actions.\n * The Interactions panel appends these to the action dropdown when targeting this component. */\n public componentMethods?: ComponentMethodDef[];\n\n constructor(type: string, selector: string, icon = 'ph-thin ph-cube', category = 'General') {\n this.id = generateNodeId();\n this.type = type;\n this.selector = selector;\n this.icon = icon;\n this.category = category;\n this.inputs = {};\n this.traits = [];\n this.styleTraits = [];\n }\n\n /** Override specific trait defaults after styleTraits are set.\n * Call this at the end of each subclass constructor. */\n protected applyStyleDefaults(defaults: Record<string, any>): void {\n // Single source of truth for container-type width defaults: when a subclass does\n // not set width explicitly, fill it from the shared DEFAULT_WIDTH_BY_TYPE map — the\n // same map the SSR engine resolves from. See render-parity.md.\n if (defaults['width'] === undefined && DEFAULT_WIDTH_BY_TYPE[this.type] !== undefined) {\n defaults = { ...defaults, width: DEFAULT_WIDTH_BY_TYPE[this.type] };\n }\n for (const group of this.styleTraits) {\n for (const trait of group.traits) {\n if (defaults[trait.name] !== undefined) {\n trait.default = defaults[trait.name];\n }\n }\n }\n }\n}\n\nexport class TraitConfig {\n public name: string;\n public label: string;\n public type: TraitInputType;\n public options?: string[] | TraitSelectOption[] | TraitOptionMap;\n public default?: any;\n public inline?: boolean;\n public showWhen?: TraitShowCondition;\n\n constructor(\n name: string,\n label: string,\n type: TraitInputType,\n options?: string[] | TraitSelectOption[] | TraitOptionMap,\n defaultValue?: any,\n inline?: boolean,\n showWhen?: TraitShowCondition\n ) {\n this.name = name;\n this.label = label;\n this.type = type;\n this.options = options;\n this.default = defaultValue;\n this.inline = inline;\n this.showWhen = showWhen;\n }\n}\n\n// StyleTraitConfig is unified with TraitConfig — single class for both traits and style traits\nexport { TraitConfig as StyleTraitConfig };\n\nexport class GroupStyleConfig {\n public category: string;\n public traits: TraitConfig[];\n\n constructor(category: string, traits: TraitConfig[]) {\n this.category = category;\n this.traits = traits;\n }\n}\n\n// ─── Unit constants ───────────────────────────────────────────────────────────\n\nexport const UNITS_ALL: string[] = ['px', '%', 'rem', 'em', 'vw', 'vh'];\nexport const UNITS_NO_VW: string[] = ['px', '%', 'rem', 'em', 'vh'];\nexport const UNITS_FIXED: string[] = ['px', '%', 'rem', 'em'];\nexport const UNITS_DEG: string[] = ['deg'];\n\n// ─── Shared panel utilities ──────────────────────────────────────────────────\n\nexport function resolveTraitControllerType(type: TraitInputType): string {\n switch (type) {\n case TraitInputType.Number: return 'number';\n case TraitInputType.Select: return 'select';\n case TraitInputType.Checkbox: return 'switch';\n case TraitInputType.Color: return 'colorPicker';\n case TraitInputType.DirectionalSize: return 'directionalSize';\n case TraitInputType.SelectButton: return 'selectButton';\n case TraitInputType.Scrub: return 'scrub';\n case TraitInputType.Range: return 'range';\n case TraitInputType.SectionLabel: return 'sectionLabel';\n case TraitInputType.Icon: return 'icon';\n case TraitInputType.Media: return 'media';\n case TraitInputType.MediaList: return 'mediaList';\n case TraitInputType.FontFamily: return 'select';\n case TraitInputType.GridTemplate: return 'gridTemplate';\n case TraitInputType.Textarea: return 'textarea';\n default: return 'text';\n }\n}\n\nexport function resolveTraitOptions(trait: ComponentTrait): any {\n if (\n trait.type === TraitInputType.Color ||\n trait.type === TraitInputType.DirectionalSize ||\n trait.type === TraitInputType.SelectButton ||\n trait.type === TraitInputType.Scrub ||\n trait.type === TraitInputType.Range ||\n trait.type === TraitInputType.Media\n ) {\n return trait.options;\n }\n if (trait.type === TraitInputType.FontFamily) {\n // FontFamily options are injected dynamically by the style panel via FontManagerService.\n // Return empty array here; the panel overrides this in resolveOptions().\n return [];\n }\n if (trait.type !== TraitInputType.Select) {\n return undefined;\n }\n const opts = (trait.options as any[]) ?? [];\n // Already formatted as {label, value}[]\n if (opts.length > 0 && typeof opts[0] === 'object' && 'label' in opts[0]) {\n return opts;\n }\n return opts.map((option: string) => ({ label: option, value: option }));\n}\n\n// ─── Style Groups ─────────────────────────────────────────────────────────────\n\nconst NON_STATIC_POSITIONS = ['relative', 'absolute', 'fixed', 'sticky'];\n\nexport class PositionGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Position, [\n new TraitConfig('position', 'Position', TraitInputType.Select,\n ['static', 'relative', 'absolute', 'fixed', 'sticky'], 'static'),\n new TraitConfig('top', 'T', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('right', 'R', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('bottom', 'B', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('left', 'L', TraitInputType.Scrub, { min: -9999, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n new TraitConfig('zIndex', 'Z', TraitInputType.Scrub, { min: -99, max: 9999, step: 1, units: [''] }, '0', false,\n { trait: 'position', values: NON_STATIC_POSITIONS }),\n ]);\n }\n}\n\n// ─── Layout ───────────────────────────────────────────────────────────────────\n\nexport class LayoutGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Layout, [\n new TraitConfig('display', 'Display', TraitInputType.Select,\n ['block', 'inline', 'inline-block', 'flex', 'grid'], 'block'),\n\n // ── Flex-only ─────────────────────────────────────────────────────\n new TraitConfig('flexDirection', 'Direction', TraitInputType.SelectButton, [\n { value: 'row', label: 'Horizontal', icon: 'ph-thin ph-arrow-right' },\n { value: 'row-reverse', label: 'Horizontal Reversed', icon: 'ph-thin ph-arrow-left' },\n { value: 'column', label: 'Vertical', icon: 'ph-thin ph-arrow-down' },\n { value: 'column-reverse', label: 'Vertical Reversed', icon: 'ph-thin ph-arrow-up' },\n ], 'row', false, { trait: 'display', values: 'flex' }),\n new TraitConfig('flexWrap', 'Flex Wrap', TraitInputType.SelectButton, [\n { value: 'nowrap', label: 'No Wrap', icon: 'ph-thin ph-minus' },\n { value: 'wrap', label: 'Wrap', icon: 'ph-thin ph-arrow-elbow-down-right' },\n { value: 'wrap-reverse', label: 'Wrap Reversed', icon: 'ph-thin ph-arrow-elbow-up-right' },\n ], 'nowrap', false, { trait: 'display', values: 'flex' }),\n\n // ── Shared flex + grid ────────────────────────────────────────────\n new TraitConfig('justifyContent', 'Justify', TraitInputType.SelectButton, [\n { value: 'flex-start', label: 'Start', icon: 'ph-thin ph-align-left' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-horizontal' },\n { value: 'flex-end', label: 'End', icon: 'ph-thin ph-align-right' },\n { value: 'space-between', label: 'Space Between', icon: 'ph-thin ph-distribute-horizontal' },\n { value: 'space-around', label: 'Space Around', icon: 'ph-thin ph-dots-three' },\n { value: 'space-evenly', label: 'Space Evenly', icon: 'ph-thin ph-dots-six' },\n ], 'flex-start', false, { trait: 'display', values: ['flex', 'grid'] }),\n new TraitConfig('alignItems', 'Align Items', TraitInputType.SelectButton, [\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-vertical' },\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-top' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-vertical' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-bottom' },\n ], 'stretch', false, { trait: 'display', values: ['flex', 'grid'] }),\n new TraitConfig('gap', 'Gap', TraitInputType.Scrub,\n { min: 0, max: 200, step: 1, units: UNITS_FIXED }, '0px', false,\n { trait: 'display', values: ['flex', 'grid'] }),\n\n // ── Grid-only ─────────────────────────────────────────────────────\n new TraitConfig('gridTemplateColumns', 'Columns', TraitInputType.GridTemplate,\n undefined, '1fr', false, { trait: 'display', values: 'grid' }),\n new TraitConfig('gridTemplateRows', 'Rows', TraitInputType.GridTemplate,\n undefined, 'auto', false, { trait: 'display', values: 'grid' }),\n new TraitConfig('justifyItems', 'Justify Items', TraitInputType.SelectButton, [\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-horizontal' },\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-left' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-horizontal' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-right' },\n ], 'stretch', false, { trait: 'display', values: 'grid' }),\n new TraitConfig('alignContent', 'Align Content', TraitInputType.SelectButton, [\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-top' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-vertical' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-bottom' },\n { value: 'space-between', label: 'Space Between', icon: 'ph-thin ph-distribute-vertical' },\n { value: 'space-around', label: 'Space Around', icon: 'ph-thin ph-dots-three' },\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-vertical' },\n ], 'stretch', false, { trait: 'display', values: 'grid' }),\n\n // ── Direction (always visible) ────────────────────────────────────\n new TraitConfig('direction', 'Text Direction', TraitInputType.SelectButton, [\n { value: 'ltr', label: 'LTR' },\n { value: 'rtl', label: 'RTL' },\n ], 'ltr'),\n ]);\n }\n}\n\n// ─── Child Layout ───────────────────────────────────────────────────────────\n//\n// How THIS node sits inside its PARENT's flex/grid container. Every trait here is a\n// child-flow property that the style engine routes to the OUTER host element (see\n// StyleRegistryService.OUTER_PROPS) so it acts on the flex/grid item, not the inner div.\n//\n// Visibility is PARENT-scoped (`scope: 'parent'`): the trait shows based on the PARENT's\n// `display`, not this node's own. When the parent is neither flex nor grid, every trait\n// is hidden and the style panel drops the whole (now-empty) group. `align-self`/`order`\n// apply to both flex and grid items; `justify-self`/`grid-column`/`grid-row` are grid-only;\n// `flex-grow`/`flex-shrink`/`flex-basis` are flex-only.\nconst PARENT_FLEX_OR_GRID: TraitShowCondition = { trait: 'display', values: ['flex', 'grid'], scope: 'parent' };\nconst PARENT_FLEX: TraitShowCondition = { trait: 'display', values: 'flex', scope: 'parent' };\nconst PARENT_GRID: TraitShowCondition = { trait: 'display', values: 'grid', scope: 'parent' };\n\nexport class ChildLayoutGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.ChildLayout, [\n // ── Shared flex + grid child ──────────────────────────────────────\n new TraitConfig('alignSelf', 'Align Self', TraitInputType.SelectButton, [\n { value: 'auto', label: 'Auto', icon: 'ph-thin ph-minus' },\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-vertical' },\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-top' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-vertical' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-bottom' },\n ], 'auto', false, PARENT_FLEX_OR_GRID),\n new TraitConfig('order', 'Order', TraitInputType.Scrub,\n { min: -99, max: 99, step: 1, units: [''] }, '0', false, PARENT_FLEX_OR_GRID),\n\n // ── Flex-only child ───────────────────────────────────────────────\n new TraitConfig('flexGrow', 'Grow', TraitInputType.Scrub,\n { min: 0, max: 10, step: 1, units: [''] }, '0', false, PARENT_FLEX),\n new TraitConfig('flexShrink', 'Shrink', TraitInputType.Scrub,\n { min: 0, max: 10, step: 1, units: [''] }, '1', false, PARENT_FLEX),\n new TraitConfig('flexBasis', 'Basis', TraitInputType.Scrub,\n { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', false, PARENT_FLEX),\n\n // ── Grid-only child ───────────────────────────────────────────────\n // Free-text so users can express `auto`, `span 2`, or explicit lines `1 / 3`.\n new TraitConfig('justifySelf', 'Justify Self', TraitInputType.SelectButton, [\n { value: 'auto', label: 'Auto', icon: 'ph-thin ph-minus' },\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-horizontal' },\n { value: 'start', label: 'Start', icon: 'ph-thin ph-align-left' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-horizontal' },\n { value: 'end', label: 'End', icon: 'ph-thin ph-align-right' },\n ], 'auto', false, PARENT_GRID),\n new TraitConfig('gridColumn', 'Column', TraitInputType.Text, undefined, 'auto', false, PARENT_GRID),\n new TraitConfig('gridRow', 'Row', TraitInputType.Text, undefined, 'auto', false, PARENT_GRID),\n ]);\n }\n}\n\n// ─── Size (replaces Dimensions) ───────────────────────────────────────────────\n\nexport class SizeGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Size, [\n new TraitConfig('width', 'W', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('height', 'H', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('minWidth', 'Min W', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('minHeight', 'Min H', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('maxWidth', 'Max W', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n new TraitConfig('maxHeight', 'Max H', TraitInputType.Scrub, { min: 0, max: 9999, step: 1, units: UNITS_ALL, allowAuto: true }, 'auto', true),\n // aspect-ratio is a preset ratio (or 'auto') — a Select popup of standard ratios, no units.\n new TraitConfig('aspectRatio', 'Aspect Ratio', TraitInputType.Select,\n ['auto', '1/1', '4/3', '3/2', '16/9', '9/16', '3/4', '2/3', '21/9'], 'auto'),\n // object-fit is a style trait (applies to replaced elements, e.g. images). Lives here so\n // it flows through the CSS engine (styleProps) instead of a per-component inline binding.\n new TraitConfig('objectFit', 'Object Fit', TraitInputType.Select,\n ['cover', 'contain', 'fill', 'none', 'scale-down'], 'cover'),\n // overflow — how content that exceeds the box is handled. `visible` is the CSS initial\n // (dropped as a no-op by the compiler); other values emit. Applies to the node's own box\n // (inner element), so it is NOT an OUTER_PROP.\n new TraitConfig('overflow', 'Overflow', TraitInputType.Select, [\n { label: 'Visible', value: 'visible' },\n { label: 'Hidden', value: 'hidden' },\n { label: 'Scroll', value: 'scroll' },\n { label: 'Auto', value: 'auto' },\n { label: 'Clip', value: 'clip' },\n ], 'visible'),\n ]);\n }\n}\n\n/** @deprecated Use SizeGroupStyleConfig instead. */\nexport class DimensionsGroupStyleConfig extends SizeGroupStyleConfig {}\n\n// ─── Background ───────────────────────────────────────────────────────────────\n\nexport class BackgroundGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Background, [\n new TraitConfig('backgroundColor', 'Background', TraitInputType.Color,\n { allowGradient: true, allowTransparent: true, formats: ['hex', 'rgb', 'hsl', 'transparent'] }, 'transparent'),\n ]);\n }\n}\n\nexport class SpacingGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Spacing, [\n new TraitConfig('margin', 'Margin', TraitInputType.DirectionalSize, {\n allowNegative: true,\n allowLinkedSlider: true,\n slider: { min: 0, max: 200, step: 1 }\n }, '0px 0px 0px 0px'),\n new TraitConfig('padding', 'Padding', TraitInputType.DirectionalSize, {\n allowNegative: false,\n allowLinkedSlider: true,\n slider: { min: 0, max: 200, step: 1 }\n }, '0px 0px 0px 0px')\n ]);\n }\n}\n\nexport class BorderGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Border, [\n new TraitConfig('borderWidth', 'Border Width', TraitInputType.DirectionalSize, {\n units: UNITS_FIXED,\n allowNegative: false,\n allowLinkedSlider: true,\n slider: { min: 0, max: 32, step: 1 }\n }, '0px'),\n new TraitConfig('borderStyle', 'Border Style', TraitInputType.SelectButton, [\n { value: 'solid', icon: 'ph-thin ph-line-segment' },\n { value: 'dashed', icon: 'ph-thin ph-dots-three' },\n { value: 'dotted', icon: 'ph-thin ph-dots-six' },\n ], 'solid'),\n new TraitConfig('borderColor', 'Border Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: false, formats: ['hex', 'rgb', 'hsl'] }, '#CCCCCC'),\n new TraitConfig('borderRadius', 'Border Radius', TraitInputType.DirectionalSize, {\n units: UNITS_FIXED,\n allowNegative: false,\n allowLinkedSlider: true,\n linkByDefault: true,\n slider: { min: 0, max: 120, step: 1 },\n segments: [\n { key: 'top-left', icon: 'ph-arrow-bend-up-left', ariaLabel: 'top left radius' },\n { key: 'top-right', icon: 'ph-arrow-bend-up-right', ariaLabel: 'top right radius' },\n { key: 'bottom-right', icon: 'ph-arrow-bend-down-right', ariaLabel: 'bottom right radius' },\n { key: 'bottom-left', icon: 'ph-arrow-bend-down-left', ariaLabel: 'bottom left radius' }\n ]\n }, '0px')\n ]);\n }\n}\n\nexport class TypographyGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Typography, [\n new TraitConfig('fontFamily', 'Font Family', TraitInputType.FontFamily, [],\n 'Poppins, sans-serif'),\n new TraitConfig('fontSize', 'Font Size', TraitInputType.Scrub,\n { min: 8, max: 200, step: 1, units: UNITS_ALL }, '16px'),\n new TraitConfig('fontWeight', 'Weight', TraitInputType.Scrub,\n { min: 100, max: 900, step: 100, units: [''] }, '400'),\n new TraitConfig('color', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: false, formats: ['hex', 'rgb', 'hsl'] }, '#000000'),\n // Unitless on purpose (`units: ['']`): a unitless line-height inherits as a RATIO — each\n // descendant multiplies it by its OWN font-size — whereas `1.5em`/`24px` inherits a fixed\n // computed length that ignores the child's font-size. min:0 so a line box can be collapsed\n // completely (icons/glyph-only elements), which `0.5` used to block.\n new TraitConfig('lineHeight', 'Line Height', TraitInputType.Scrub,\n { min: 0, max: 5, step: 0.05, units: [''] }, '1.5'),\n new TraitConfig('letterSpacing', 'Spacing', TraitInputType.Scrub,\n { min: -5, max: 50, step: 0.5, units: UNITS_FIXED }, '0px'),\n new TraitConfig('textAlign', '', TraitInputType.SelectButton, [\n { value: 'left', icon: 'ph-thin ph-text-align-left' },\n { value: 'center', icon: 'ph-thin ph-text-align-center' },\n { value: 'right', icon: 'ph-thin ph-text-align-right' },\n { value: 'justify', icon: 'ph-thin ph-text-align-justify' },\n ], 'left'),\n new TraitConfig('fontStyle', '', TraitInputType.SelectButton,\n { items: [{ value: 'italic', icon: 'ph-thin ph-text-italic', label: 'Italic' }], allowEmpty: true, noneValue: 'normal' },\n 'normal', true),\n new TraitConfig('textDecoration', '', TraitInputType.SelectButton,\n { items: [{ value: 'underline', icon: 'ph-thin ph-text-underline', label: 'Underline' }], allowEmpty: true, noneValue: 'none' },\n 'none', true),\n new TraitConfig('_sep_stroke', 'Stroke', TraitInputType.SectionLabel),\n new TraitConfig('WebkitTextStrokeWidth', 'Width', TraitInputType.Scrub,\n { min: 0, max: 10, step: 0.5, units: ['px'] }, '0px', true),\n new TraitConfig('WebkitTextStrokeColor', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: true, formats: ['hex', 'rgb', 'hsl'] }, 'transparent', true),\n ]);\n }\n}\n\nexport class EffectsGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Effects, [\n // ── Visibility ────────────────────────────────────────\n new TraitConfig('opacity', 'Opacity', TraitInputType.Scrub,\n { min: 0, max: 1, step: 0.01, units: [''] }, '1'),\n new TraitConfig('mixBlendMode', 'Blend Mode', TraitInputType.Select, [\n 'normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten',\n 'color-dodge', 'color-burn', 'hard-light', 'soft-light',\n 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity',\n ], 'normal'),\n new TraitConfig('cursor', 'Cursor', TraitInputType.Select, [\n 'auto', 'default', 'pointer', 'text', 'move', 'not-allowed',\n 'grab', 'grabbing', 'crosshair', 'zoom-in', 'zoom-out', 'none',\n ], 'auto'),\n\n // ── Shadow ────────────────────────────────────────────\n new TraitConfig('_sep_shadow', 'Shadow', TraitInputType.SectionLabel),\n new TraitConfig('boxShadow', 'Box Shadow', TraitInputType.Text, undefined, ''),\n new TraitConfig('textShadow', 'Text Shadow', TraitInputType.Text, undefined, ''),\n\n // ── Transform (virtual — composed to CSS transform: …) ─\n new TraitConfig('_sep_transform', 'Transform', TraitInputType.SectionLabel),\n new TraitConfig('translateX', 'TX', TraitInputType.Scrub,\n { min: -2000, max: 2000, step: 1, units: UNITS_ALL }, '0px', true),\n new TraitConfig('translateY', 'TY', TraitInputType.Scrub,\n { min: -2000, max: 2000, step: 1, units: UNITS_ALL }, '0px', true),\n new TraitConfig('scaleX', 'Scale X', TraitInputType.Range,\n { min: 0, max: 3, step: 0.01, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('scaleY', 'Scale Y', TraitInputType.Range,\n { min: 0, max: 3, step: 0.01, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('rotate', 'Rotate', TraitInputType.Scrub,\n { min: -360, max: 360, step: 1, units: UNITS_DEG }, '0deg', true),\n new TraitConfig('skewX', 'Skew X', TraitInputType.Scrub,\n { min: -180, max: 180, step: 1, units: UNITS_DEG }, '0deg', true),\n new TraitConfig('skewY', 'Skew Y', TraitInputType.Scrub,\n { min: -180, max: 180, step: 1, units: UNITS_DEG }, '0deg', true),\n\n // ── Filter (virtual — composed to CSS filter: …) ──────\n new TraitConfig('_sep_filter', 'Filter', TraitInputType.SectionLabel),\n new TraitConfig('filterBlur', 'Blur', TraitInputType.Scrub,\n { min: 0, max: 50, step: 1, units: ['px'] }, '0px', true),\n new TraitConfig('filterHueRotate', 'Hue Rotate', TraitInputType.Scrub,\n { min: 0, max: 360, step: 1, units: UNITS_DEG }, '0deg', true),\n new TraitConfig('filterBrightness', 'Brightness', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('filterContrast', 'Contrast', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('filterSaturate', 'Saturate', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1'),\n new TraitConfig('filterGrayscale', 'Grayscale', TraitInputType.Range,\n { min: 0, max: 1, step: 0.05, showExtremes: false, showValue: true, compact: true }, '0'),\n new TraitConfig('filterSepia', 'Sepia', TraitInputType.Range,\n { min: 0, max: 1, step: 0.05, showExtremes: false, showValue: true, compact: true }, '0'),\n new TraitConfig('filterInvert', 'Invert', TraitInputType.Range,\n { min: 0, max: 1, step: 0.05, showExtremes: false, showValue: true, compact: true }, '0'),\n\n // ── Backdrop filter (virtual — composed to CSS backdrop-filter: …)\n new TraitConfig('_sep_backdrop', 'Backdrop', TraitInputType.SectionLabel),\n new TraitConfig('backdropBlur', 'Blur', TraitInputType.Scrub,\n { min: 0, max: 50, step: 1, units: ['px'] }, '0px', true),\n new TraitConfig('backdropBrightness', 'Brightness', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1', true),\n new TraitConfig('backdropContrast', 'Contrast', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1', true),\n new TraitConfig('backdropSaturate', 'Saturate', TraitInputType.Range,\n { min: 0, max: 3, step: 0.05, showExtremes: false, showValue: true, compact: true }, '1', true),\n\n // ── Clip (clip-path — mask the node to a shape) ───────────\n new TraitConfig('_sep_clip', 'Clip', TraitInputType.SectionLabel),\n new TraitConfig('clipPath', 'Shape', TraitInputType.Select, [\n { label: 'None', value: 'none' },\n { label: 'Circle', value: 'circle(50%)' },\n { label: 'Ellipse', value: 'ellipse(50% 40%)' },\n { label: 'Inset', value: 'inset(10%)' },\n { label: 'Rounded inset', value: 'inset(10% round 16px)' },\n { label: 'Triangle', value: 'polygon(50% 0%, 0% 100%, 100% 100%)' },\n { label: 'Diamond', value: 'polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)' },\n { label: 'Hexagon', value: 'polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%)' },\n { label: 'Chevron', value: 'polygon(0 0, 75% 0, 100% 50%, 75% 100%, 0 100%, 25% 50%)' },\n ], 'none'),\n\n // ── Transition (virtual — composed to CSS transition: all …) ──\n new TraitConfig('_sep_transition', 'Transition', TraitInputType.SectionLabel),\n new TraitConfig('transitionDuration', 'Duration', TraitInputType.Scrub,\n { min: 0, max: 3000, step: 50, units: ['ms'] }, '0ms', true),\n new TraitConfig('transitionDelay', 'Delay', TraitInputType.Scrub,\n { min: 0, max: 2000, step: 50, units: ['ms'] }, '0ms', true),\n new TraitConfig('transitionTimingFunction', 'Easing', TraitInputType.Select, [\n 'ease', 'linear', 'ease-in', 'ease-out', 'ease-in-out',\n ], 'ease'),\n ]);\n }\n}\n\nexport class ListGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.List, [\n new TraitConfig('listStyleType', 'Marker Style', TraitInputType.Select, [\n { label: 'None', value: 'none' },\n { label: 'Disc', value: 'disc' },\n { label: 'Circle', value: 'circle' },\n { label: 'Square', value: 'square' },\n { label: 'Decimal', value: 'decimal' },\n { label: 'Lower Alpha', value: 'lower-alpha' },\n { label: 'Upper Alpha', value: 'upper-alpha' },\n { label: 'Lower Roman', value: 'lower-roman' },\n { label: 'Upper Roman', value: 'upper-roman' },\n ], 'disc'),\n new TraitConfig('listStylePosition', 'Marker Position', TraitInputType.SelectButton, [\n { value: 'outside', label: 'Outside' },\n { value: 'inside', label: 'Inside' },\n ], 'outside'),\n new TraitConfig('columnCount', 'Columns', TraitInputType.Scrub,\n { min: 1, max: 6, step: 1, units: [''] }, '1'),\n new TraitConfig('columnGap', 'Column Gap', TraitInputType.Scrub,\n { min: 0, max: 200, step: 1, units: UNITS_FIXED }, '0px'),\n new TraitConfig('_sep_marker', 'Marker', TraitInputType.SectionLabel),\n new TraitConfig('markerColor', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: true, formats: ['hex', 'rgb', 'hsl', 'transparent'] }, ''),\n new TraitConfig('markerFontSize', 'Size', TraitInputType.Scrub,\n { min: 4, max: 100, step: 1, units: UNITS_FIXED }, ''),\n ]);\n }\n}\n\n/**\n * Returns a fresh set of all 8 style-group configs in canonical display order.\n * Every call produces new TraitConfig instances so different component nodes\n * never share mutable state.\n */\nexport function buildFullStyleTraits(): GroupStyleConfig[] {\n return [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new ChildLayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n}\n\nexport function flattenSchemaFields(\n properties: Record<string, any>,\n prefix = ''\n): { label: string; value: string }[] {\n const result: { label: string; value: string }[] = [];\n\n for (const [key, field] of Object.entries(properties)) {\n const fullPath = prefix ? `${prefix}.${key}` : key;\n\n if (field.type === 'object' && field.properties) {\n result.push(...flattenSchemaFields(field.properties, fullPath));\n } else {\n result.push({ label: fullPath, value: fullPath });\n }\n }\n\n return result;\n}\n\n/**\n * The ARRAY (repeatable) properties of a schema — used by the Bindings panel to auto-suggest which\n * property of a SINGLE resource a Repeater can iterate over (e.g. `product.gallery`). A field is\n * repeatable when its schema `type` is `embedded`/`array` (an embedded list) or it is a MANY\n * relation (`rel.type` contains \"many\", case-insensitive). Top-level only — the repeat target is a\n * property of the resource, not a deep leaf.\n */\nexport function arraySchemaFields(properties: Record<string, any>): { label: string; value: string }[] {\n const out: { label: string; value: string }[] = [];\n for (const [key, field] of Object.entries(properties ?? {})) {\n const type = (field?.type ?? '').toString().toLowerCase();\n const relType = (field?.rel?.type ?? '').toString().toLowerCase();\n if (type === 'embedded' || type === 'array' || (type === 'rel' && relType.includes('many'))) {\n out.push({ label: key, value: key });\n }\n }\n return out;\n}\n\n/**\n * Describe the ITEM shape of an array PROPERTY, straight from the schema — the authoritative source\n * (a resolved sample may be missing, or ambiguous). Given a resource's schema `properties` and the\n * dot-path to an array field (e.g. `gallery` or `info.items`):\n * - **object item** → its primitive leaf fields (flattened): `[{label:'url',value:'url'}, …]`.\n * - **primitive item** (`string[]`/`number[]`) → `isPrimitive:true` (caller offers \"(the item value)\").\n * - **can't tell** (many-relation whose items are related docs, or path not found) → both empty, so\n * the caller falls back to a resolved sample.\n * JSON-schema arrays store the item schema under `.items`; embedded objects under `.properties`.\n */\nexport function arrayItemSchemaFields(\n properties: Record<string, any>,\n arrayPath: string,\n): { fields: { label: string; value: string }[]; isPrimitive: boolean } {\n const parts = (arrayPath ?? '').split('.').filter(Boolean);\n let field: any = undefined;\n let cursor: any = properties ?? {};\n for (const part of parts) {\n field = cursor?.[part];\n if (!field) return { fields: [], isPrimitive: false };\n cursor = field.properties ?? field.items?.properties ?? {};\n }\n if (!field) return { fields: [], isPrimitive: false };\n\n const itemProps = field.items?.properties ?? (field.type === 'embedded' ? field.properties : undefined);\n if (itemProps && Object.keys(itemProps).length) {\n return { fields: flattenSchemaFields(itemProps), isPrimitive: false };\n }\n // Many-relation: items are related documents — needs the related schema, so let the caller sample.\n const relType = (field.rel?.type ?? '').toString().toLowerCase();\n if (field.type === 'rel' || relType.includes('many')) return { fields: [], isPrimitive: false };\n // Otherwise a primitive-item array (string[]/number[]/…): the item is bound as its own value.\n return { fields: [], isPrimitive: true };\n}","import { ComponentNode } from '../models/component.model';\n\nconst freshId = () => Math.random().toString(36).substr(2, 9);\n\n/**\n * Assign fresh ids to a cloned ComponentNode subtree AND remap intra-subtree references to the\n * new ids. Used by every author-time clone path (duplicate, paste, block/external drop) so a copied\n * structure stays self-consistent.\n *\n * Absolute node-id references that break under duplication if left unmapped:\n * - `stateTriggers[state]` — the trigger-hover target (see style-engine.md → Targeted states)\n * - interaction `action.target` / `reverseActions.target`\n * A reference pointing OUTSIDE the cloned subtree (id not in the map) is left untouched — the copy\n * intentionally still points at the external node.\n *\n * `styleId` strategy:\n * - `'clear'` (default) — drop styleId so the clone OWNS its own CSS rule (independent copy).\n * - `'regenerate'` — keep a styleId but give it a fresh value (legacy builder.component path).\n */\nexport function regenerateNodeIds(root: ComponentNode, opts: { styleId?: 'clear' | 'regenerate' } = {}): void {\n const idMap = new Map<string, string>();\n const assign = (node: ComponentNode): void => {\n const oldId = node.id;\n node.id = freshId();\n if (opts.styleId === 'regenerate') {\n if (node.styleId) node.styleId = freshId();\n } else {\n node.styleId = undefined;\n }\n if (oldId) idMap.set(oldId, node.id);\n (node.children || []).forEach(assign);\n };\n assign(root);\n remapNodeReferences(root, idMap);\n}\n\n/** Remap absolute node-id references inside a subtree to their new ids (per `idMap`). Ids not in\n * the map (references to nodes outside the cloned subtree) are preserved. */\nexport function remapNodeReferences(node: ComponentNode, idMap: Map<string, string>): void {\n const triggers = node.stateTriggers as Record<string, string> | undefined;\n if (triggers) {\n for (const state of Object.keys(triggers)) {\n const mapped = idMap.get(triggers[state]);\n if (mapped) triggers[state] = mapped;\n }\n }\n for (const interaction of node.interactions || []) {\n const actions = [...(interaction.actions || []), ...((interaction as any).reverseActions || [])];\n for (const action of actions) {\n if (action?.target && action.target !== 'self') {\n const mapped = idMap.get(action.target);\n if (mapped) action.target = mapped;\n }\n }\n }\n (node.children || []).forEach(child => remapNodeReferences(child, idMap));\n}\n","import { ComponentNode } from './component.model';\n\n/**\n * Locate a node within a forest (array of root nodes + their descendants) by\n * reference identity. Returns the parent array holding the node and its index,\n * or `null` if the node is not present.\n *\n * Reference-based to match the rest of the builder tree operations, which pass\n * the live `ComponentNode` object around (see `findNodeInTree`).\n */\nexport function findNodeLocation(\n roots: ComponentNode[],\n target: ComponentNode,\n): { parent: ComponentNode[]; index: number } | null {\n for (let i = 0; i < roots.length; i++) {\n if (roots[i] === target) {\n return { parent: roots, index: i };\n }\n const kids = roots[i].children;\n if (kids) {\n const found = findNodeLocation(kids, target);\n if (found) return found;\n }\n }\n return null;\n}\n\n/**\n * Wrap `target` inside `wrapper`, in place, within the forest it already lives in.\n *\n * The wrapper replaces the target at its original position and takes the target\n * as its only child. **Context is preserved** — the operation never moves the\n * node between the page and global trees; the caller passes the forest the node\n * lives in (page layout OR global elements), and the surgery stays inside it.\n *\n * Global flags (`isGlobal`/`globalPosition`) are carried ONLY by the top-level\n * node of the global forest. When wrapping such a node, those flags transfer to\n * the wrapper — which becomes the new top-level global node — and are cleared on\n * the now-inner node, so the element keeps rendering in its global slot. Wrapping\n * anything else (a page node, or a child nested inside a global element) leaves\n * all global flags untouched.\n *\n * @returns the wrapper on success, or `null` if the target was not found (in\n * which case nothing is mutated).\n */\nexport function wrapNode(\n roots: ComponentNode[],\n target: ComponentNode,\n wrapper: ComponentNode,\n): ComponentNode | null {\n const loc = findNodeLocation(roots, target);\n if (!loc) return null;\n\n if (target.isGlobal) {\n wrapper.isGlobal = true;\n wrapper.globalPosition = target.globalPosition;\n target.isGlobal = false;\n target.globalPosition = undefined;\n }\n\n wrapper.children = [target];\n loc.parent.splice(loc.index, 1, wrapper);\n return wrapper;\n}\n","import { Injectable } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\n\nexport enum PanelEventTypes {\n ELEMENT_SELECT = 'elementselect',\n ELEMENT_DESELECT = 'elementdeselect',\n PANEL_SELECTED = 'panelselect',\n PANEL_OPEN = 'panelopen',\n PANEL_CLOSE = 'panelclose',\n BINDING_CHANGED = 'bindingchanged',\n NODE_RENDERED = 'noderendered',\n /** Open the Style panel in preset-edit mode for the given preset ID. */\n PRESET_EDIT = 'presetedit',\n /** Fired after a preset is created, updated, or deleted so panels refresh their list. */\n PRESETS_CHANGED = 'presetschanged',\n /** Fired when a linked symbol instance's styles change — propagates to all instances. */\n SYMBOLS_CHANGED = 'symbolschanged',\n /** Fired on every structural or style mutation — used by BuilderHistoryService to snapshot. */\n LAYOUT_CHANGED = 'layoutchanged',\n /** Open the Interactions panel in preset-edit mode for the given preset ID. */\n INTERACTION_PRESET_EDIT = 'interactionpresetedit',\n /** Fired after an interaction preset is created, updated, or deleted so panels refresh. */\n INTERACTION_PRESETS_CHANGED = 'interactionpresetschanged',\n /** Open the Interactions panel and EXPAND a specific interaction for editing (data = interaction\n * id). Emitted when the overlay interaction badge is clicked so that badge → \"edit THIS\n * interaction\", without firing the element's (live) animation. */\n INTERACTION_EDIT = 'interactionedit',\n /** A node's `interactions` were added/removed/edited. Carries `{ node }`.\n * Repeater/Slider listen so their PREVIEW CLONES are re-cloned with the new interactions —\n * clones are attached by ELEMENT at render time, so without this a new interaction only starts\n * working after a save + reload. */\n INTERACTION_CHANGED = 'interactionchanged',\n}\n\nexport interface PanelEvent {\n type: PanelEventTypes;\n data: any;\n}\n\n@Injectable()\nexport class PanelEventService {\n private panelEventSubject = new Subject<PanelEvent>();\n\n subscribe(next: (panelEvent: PanelEvent) => void): Subscription {\n return this.panelEventSubject.asObservable().subscribe(next);\n }\n\n emit(type: PanelEventTypes, data?: any): void {\n this.panelEventSubject.next({ type, data });\n }\n}","export enum PanelTypes {\n BINDINGS = 'Bindings',\n STYLES = 'Styles',\n TRAITS = 'Traits',\n PAGE = 'Page',\n INTERACTIONS = 'Interactions',\n}\n\n// ── Route animation presets ──────────────────────────────\nexport type RouteAnimationPreset =\n | 'none'\n | 'fade'\n | 'slideUp'\n | 'slideDown'\n | 'zoomIn'\n | 'zoomOut'\n | 'blurIn'\n | 'flip';\n\nexport const ROUTE_ANIMATION_OPTIONS: { label: string; value: RouteAnimationPreset; description: string }[] = [\n { value: 'none', label: 'None', description: 'No animation' },\n { value: 'fade', label: 'Fade', description: 'Opacity cross-dissolve' },\n { value: 'slideUp', label: 'Slide Up', description: 'Rise from below + fade' },\n { value: 'slideDown', label: 'Slide Down', description: 'Drop from above + fade' },\n { value: 'zoomIn', label: 'Zoom In', description: 'Scale up from 96% + fade' },\n { value: 'zoomOut', label: 'Zoom Out', description: 'Scale down from 104% + fade' },\n { value: 'blurIn', label: 'Blur', description: 'Unblur + fade' },\n { value: 'flip', label: 'Flip', description: 'Perspective tilt + fade' },\n];\n\nexport const EASING_OPTIONS: { label: string; value: string }[] = [\n // Strong symmetric in-out — the default. Slow to leave, quick through the middle, gentle to\n // settle; this is what makes a long page transition read as smooth rather than sluggish.\n { label: 'Smooth (default)', value: 'cubic-bezier(0.76, 0, 0.24, 1)' },\n { label: 'Expo Out', value: 'cubic-bezier(0.16, 1, 0.3, 1)' },\n { label: 'Ease', value: 'ease' },\n { label: 'Ease In', value: 'ease-in' },\n { label: 'Ease Out', value: 'ease-out' },\n { label: 'Ease In Out', value: 'ease-in-out' },\n { label: 'Linear', value: 'linear' },\n { label: 'Spring', value: 'cubic-bezier(0.34, 1.56, 0.64, 1)' },\n];\n\n// ── Page-level settings ──────────────────────────────────\nexport interface PageStyleSettings {\n backgroundColor: string;\n backgroundType: 'solid' | 'gradient' | 'image';\n backgroundGradient: string;\n backgroundImage: string;\n fontFamily: string;\n textColor: string;\n maxWidth: string;\n}\n\nexport interface PageScrollSettings {\n enabled: boolean;\n lerp: number;\n wheelMultiplier: number;\n touchMultiplier: number;\n direction: 'vertical' | 'horizontal';\n infinite: boolean;\n}\n\nexport interface PageRouteAnimationSettings {\n /** @deprecated legacy single-page enter preset — kept for back-compat migration to `transition`. */\n enter: RouteAnimationPreset;\n /** @deprecated legacy single-page leave preset — kept for back-compat migration to `transition`. */\n leave: RouteAnimationPreset;\n duration: number;\n easing: string;\n /**\n * Cinematic paired out/in transition preset id (see PAGE_TRANSITION_PRESETS in @vectoriox/iox-ui).\n * When set it supersedes the legacy `enter`/`leave` fields.\n */\n transition?: string;\n /** Container perspective (px) for 3D transitions. Falls back to the preset / global default. */\n perspective?: number;\n /** Panel colour for the curtain-* (overlay) presets. Defaults to the page's own background. */\n curtainColor?: string;\n}\n\n// Legacy → cinematic transition migration lives in @vectoriox/iox-ui alongside the preset catalog:\n// import { legacyEnterToTransition, effectiveTransitionId } from '@vectoriox/iox-ui';\n\nexport interface PageSettings {\n style: PageStyleSettings;\n scroll: PageScrollSettings;\n routeAnimation: PageRouteAnimationSettings;\n}\n\nexport function defaultPageSettings(): PageSettings {\n return {\n style: {\n backgroundColor: '#ffffff',\n backgroundType: 'solid',\n backgroundGradient: 'linear-gradient(135deg, #ffffff 0%, #f0f0f0 100%)',\n backgroundImage: '',\n fontFamily: 'Poppins, sans-serif',\n textColor: '#000000',\n maxWidth: '1440px',\n },\n scroll: {\n enabled: true,\n lerp: 0.1,\n wheelMultiplier: 1,\n touchMultiplier: 1,\n direction: 'vertical',\n infinite: false,\n },\n routeAnimation: {\n enter: 'fade',\n leave: 'fade',\n // Defaults mirror DEFAULT_PAGE_TRANSITION* in @vectoriox/iox-ui: the parallax look at a\n // long duration with the smooth in-out curve.\n transition: 'parallax-up',\n duration: 1500,\n easing: 'cubic-bezier(0.76, 0, 0.24, 1)',\n },\n };\n}\n\nexport enum ToolbarAction {\n SelectParent = 'select-parent',\n Duplicate = 'duplicate',\n Delete = 'delete',\n Play = 'play',\n SaveAsBlock = 'save-as-block',\n MakeGlobal = 'make-global',\n RemoveGlobal = 'remove-global',\n EditPreset = 'edit-preset',\n DetachSymbol = 'detach-symbol',\n ResyncSymbol = 'resync-symbol',\n EditInteractionPreset = 'edit-interaction-preset',\n CopyPreset = 'copy-preset',\n PastePreset = 'paste-preset',\n CopyInteractionPreset = 'copy-interaction-preset',\n PasteInteractionPreset = 'paste-interaction-preset',\n Copy = 'copy',\n Paste = 'paste',\n AddSlide = 'add-slide',\n Wrap = 'wrap',\n}\n\nexport enum NodeAction {\n Delete = 'delete',\n Duplicate = 'duplicate',\n}\n\nexport enum BuilderMode {\n Select = 'select',\n Style = 'style',\n Pan = 'pan'\n}\n\nexport enum DeviceMode {\n Desktop = 'desktop',\n Tablet = 'tablet',\n Mobile = 'mobile',\n}\n\nexport interface DeviceOption {\n mode: DeviceMode;\n label: string;\n icon: string;\n width: number;\n /** Simulated browser viewport height in CSS px. */\n height: number;\n}\n\nexport const DEVICE_OPTIONS: DeviceOption[] = [\n { mode: DeviceMode.Desktop, label: 'Desktop', icon: 'ph-thin ph-desktop', width: 1440, height: 900 },\n { mode: DeviceMode.Tablet, label: 'Tablet', icon: 'ph-thin ph-device-tablet', width: 768, height: 1024 },\n { mode: DeviceMode.Mobile, label: 'Mobile', icon: 'ph-thin ph-device-mobile', width: 375, height: 812 },\n];\n\nexport interface ZoomOption {\n label: string;\n value: number | 'fit';\n}\n\nexport const ZOOM_OPTIONS: ZoomOption[] = [\n { label: '25%', value: 25 },\n { label: '50%', value: 50 },\n { label: '75%', value: 75 },\n { label: '100%', value: 100 },\n { label: 'Fit', value: 'fit' },\n];\n\nexport interface ScreenWidthOption {\n label: string;\n width: number;\n}\n\nexport const SCREEN_WIDTH_OPTIONS: ScreenWidthOption[] = [\n { label: '1280', width: 1280 },\n { label: '1440', width: 1440 },\n { label: '1920', width: 1920 },\n { label: '2560', width: 2560 },\n];","import { Injectable, Type } from '@angular/core';\n\n@Injectable()\nexport class ComponentRegistryService {\n private components: Record<string, { type: string; component: Type<any>; config: any }> = {};\n\n getComponent(type: string): Type<any> | null {\n return this.components[type]?.component ?? null;\n }\n\n hasComponent(type: string): boolean {\n return !!this.components[type];\n }\n\n createConfig(type: string): any | null {\n const configType = this.components[type]?.config;\n return configType ? new configType() : null;\n }\n\n register(type: string, component: Type<any>, config: any): void {\n this.components[type] = { type, component, config };\n }\n\n getAll() {\n return Object.values(this.components);\n }\n}","import { ComponentRef, Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nimport { ComponentNode } from '../models/component.model';\nimport { BuilderMode, ToolbarAction } from '../panels/panel.model';\n\nexport interface OverlayBoxSpacing {\n top: number; right: number; bottom: number; left: number;\n}\n\nexport interface OverlayBoxModel {\n margin: OverlayBoxSpacing;\n padding: OverlayBoxSpacing;\n border: OverlayBoxSpacing;\n}\n\nexport interface OverlayEntry {\n element: HTMLElement;\n componentName: string;\n boxModel?: OverlayBoxModel; // populated for hover only\n mode: BuilderMode;\n node?: ComponentNode;\n componentRef?: ComponentRef<any>;\n}\n\nexport { ToolbarAction } from '../panels/panel.model';\n\nexport interface NodeRef {\n element: HTMLElement;\n componentRef: ComponentRef<any>;\n}\n\n@Injectable()\nexport class OverlayService {\n private hoverSubject = new BehaviorSubject<OverlayEntry | null>(null);\n private selectSubject = new BehaviorSubject<OverlayEntry | null>(null);\n private nodeMap = new Map<ComponentNode, NodeRef>();\n\n public hover$ = this.hoverSubject.asObservable();\n public select$ = this.selectSubject.asObservable();\n\n private containerElement: HTMLElement | null = null;\n private scrollContainerElement: HTMLElement | null = null;\n private intersectionRootElement: HTMLElement | null = null;\n\n /** Emits the scroll container element whenever it is registered. */\n public scrollContainer$ = new Subject<HTMLElement>();\n\n /** Emits cursor coords when a canvas element is right-clicked. */\n public contextMenu$ = new Subject<{ x: number; y: number }>();\n\n triggerContextMenu(x: number, y: number): void {\n this.contextMenu$.next({ x, y });\n }\n\n setContainer(container: HTMLElement | null): void {\n this.containerElement = container;\n }\n\n getContainer(): HTMLElement | null {\n return this.containerElement;\n }\n\n setScrollContainer(el: HTMLElement | null): void {\n this.scrollContainerElement = el;\n if (el) { this.scrollContainer$.next(el); }\n }\n\n getScrollContainer(): HTMLElement | null {\n return this.scrollContainerElement;\n }\n\n /** The clipping container used as IntersectionObserver root in builder mode (.preview-scroll). */\n setIntersectionRoot(el: HTMLElement | null): void {\n this.intersectionRootElement = el;\n }\n\n getIntersectionRoot(): HTMLElement | null {\n return this.intersectionRootElement;\n }\n\n /**\n * Resolve the styled element (the one carrying `.iox-node-{id}` — where padding/margin/size live).\n * Directive-host components (Image/Heading/Container/Section/…) put `iox-node-{id}` on the HOST\n * itself, so the host IS the styled element. Legacy wrapper components (Card/Repeater/Slider) put\n * it on the first child. Prefer the host when it's the styled element; fall back to the first\n * child otherwise. (Before this, directive-host containers outlined their first child — e.g. a\n * container's outline landed on the image inside it, desyncing from Moveable's resize handles.)\n */\n getStyledElement(host: HTMLElement): HTMLElement {\n for (let i = 0; i < host.classList.length; i++) {\n if (host.classList[i].startsWith('iox-node-')) return host;\n }\n return (host.firstElementChild as HTMLElement) || host;\n }\n\n // ── Node → Element registry ──────────────────────────────\n registerNode(node: ComponentNode, element: HTMLElement, componentRef: ComponentRef<any>): void {\n this.nodeMap.set(node, { element, componentRef });\n }\n\n unregisterNode(node: ComponentNode): void {\n this.nodeMap.delete(node);\n }\n\n getNodeRef(node: ComponentNode): NodeRef | undefined {\n return this.nodeMap.get(node);\n }\n\n /** Return all registered node → ref entries. */\n getAllNodeEntries(): IterableIterator<[ComponentNode, NodeRef]> {\n return this.nodeMap.entries();\n }\n\n /** Find a registered node whose host element matches the given DOM element. */\n findNodeByElement(element: HTMLElement): { node: ComponentNode; ref: NodeRef } | undefined {\n for (const [node, ref] of this.nodeMap) {\n if (ref.element === element) {\n return { node, ref };\n }\n }\n return undefined;\n }\n\n /**\n * Walk up the DOM from a node's registered host element to the nearest ANCESTOR\n * element that is itself a registered node. Used to resolve the immediate parent\n * for relational style states (e.g. parent-hover). Returns undefined for root nodes.\n */\n getParentEntry(node: ComponentNode): { node: ComponentNode; ref: NodeRef } | undefined {\n const ref = this.nodeMap.get(node);\n if (!ref) return undefined;\n let el = ref.element.parentElement;\n while (el) {\n const match = this.findNodeByElement(el);\n if (match) return match;\n el = el.parentElement;\n }\n return undefined;\n }\n\n setHover(element: HTMLElement, componentName: string, mode: BuilderMode): void {\n if (this.selectSubject.getValue()?.element === element) return;\n this.hoverSubject.next({ element, componentName, boxModel: this.buildBoxModel(element), mode });\n }\n\n clearHover(): void {\n this.hoverSubject.next(null);\n }\n\n setSelect(element: HTMLElement, componentName: string, mode: BuilderMode, node?: ComponentNode, componentRef?: ComponentRef<any>): void {\n this.hoverSubject.next(null);\n this.selectSubject.next({ element, componentName, mode, node, componentRef });\n }\n\n clearSelect(): void {\n this.selectSubject.next(null);\n }\n\n refreshSelect(): void {\n const current = this.selectSubject.getValue();\n if (!current) return;\n this.selectSubject.next({ ...current });\n }\n\n /** Lightweight swap for drag-preview tracking. */\n updateSelectElement(element: HTMLElement): void {\n const current = this.selectSubject.getValue();\n if (!current) return;\n this.selectSubject.next({ ...current, element });\n }\n\n buildBoxModel(host: HTMLElement): OverlayBoxModel {\n const inner = this.getStyledElement(host);\n // Margin lives on the wrapper div (host.parentElement) — iox-outer-{id} is\n // applied there so it participates in the parent flex layout.\n const wrapper = (host.parentElement as HTMLElement) || host;\n const si = window.getComputedStyle(inner);\n const sw = window.getComputedStyle(wrapper);\n const px = (v: string) => { const n = Number.parseFloat(v); return Number.isFinite(n) ? n : 0; };\n return {\n margin: { top: px(sw.marginTop), right: px(sw.marginRight), bottom: px(sw.marginBottom), left: px(sw.marginLeft) },\n padding: { top: px(si.paddingTop), right: px(si.paddingRight), bottom: px(si.paddingBottom), left: px(si.paddingLeft) },\n border: { top: px(si.borderTopWidth), right: px(si.borderRightWidth), bottom: px(si.borderBottomWidth), left: px(si.borderLeftWidth) },\n };\n }\n\n}","import { Injectable } from '@angular/core';\n\nimport { IoxSymbol } from '../models/component.model';\n\n/**\n * SymbolRegistryService — in-memory store for org-level symbols.\n *\n * Loaded once per page by PageUiComponent alongside the page layout.\n * Scoped to PageUiComponent.providers[] via IoxBuilderModule — one registry per builder instance.\n */\n@Injectable()\nexport class SymbolRegistryService {\n private symbols = new Map<string, IoxSymbol>();\n /** symbolIds that have a live reusable block in the DB — used to guard isDetachedSymbol. */\n private blockSymbolIds = new Set<string>();\n\n setSymbols(symbols: IoxSymbol[]): void {\n this.symbols.clear();\n for (const s of symbols) {\n this.symbols.set(s.id, s);\n }\n }\n\n getSymbol(id: string): IoxSymbol | undefined {\n return this.symbols.get(id);\n }\n\n getAll(): IoxSymbol[] {\n return Array.from(this.symbols.values());\n }\n\n upsert(symbol: IoxSymbol): void {\n this.symbols.set(symbol.id, symbol);\n }\n\n remove(id: string): void {\n this.symbols.delete(id);\n }\n\n /** Set the symbolIds that have a live reusable block. Called on page load. */\n setBlockSymbolIds(ids: Set<string>): void {\n this.blockSymbolIds = new Set(ids);\n }\n\n /** Returns true only when the symbol has a live backing reusable block. */\n isBlockSymbol(id: string): boolean {\n return this.blockSymbolIds.has(id);\n }\n\n /** Remove a symbolId from the block-backed set (called when a block is deleted). */\n removeBlockSymbolId(id: string): void {\n this.blockSymbolIds.delete(id);\n }\n}\n","import { ChangeDetectorRef, Injectable } from '@angular/core';\nimport interact from 'interactjs';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nimport { ComponentNode } from '../models/component.model';\nimport { regenerateNodeIds } from '../utils/clone-ids.util';\nimport { ComponentRegistryService } from './component-registry.service';\nimport { SymbolRegistryService } from './symbol-registry.service';\n\nexport interface DragPayload {\n type: 'internal' | 'external';\n data: ComponentNode | string;\n sourceId: string | null;\n sourceIndex: number;\n}\n\nexport interface IoxDropEvent {\n payload: DragPayload;\n targetId: string;\n insertIndex: number;\n}\n\nfunction deepCloneNode(node: ComponentNode): ComponentNode {\n const clone: ComponentNode = JSON.parse(JSON.stringify(node));\n // Fresh ids + remap intra-subtree references (stateTriggers, interaction targets) so a cloned\n // structure stays self-consistent — e.g. trigger-hover keeps pointing at the clone's own trigger.\n regenerateNodeIds(clone);\n return clone;\n}\n\n@Injectable()\nexport class DragEngineService {\n\n constructor(\n private registry: ComponentRegistryService,\n private symbolRegistry: SymbolRegistryService,\n ) {}\n\n // ── Shared drop handler — used by all layout components ───────────────────\n\n handleDrop(\n children: ComponentNode[],\n event: IoxDropEvent,\n dropListId: string,\n cdr: ChangeDetectorRef,\n afterDrop?: () => void,\n ): void {\n const { payload, insertIndex } = event;\n\n if (payload.type === 'external') {\n const data = payload.data as any;\n if (typeof data === 'string') {\n // Built-in component type — create from registry.\n const config = this.registry.createConfig(data);\n if (config) {\n children.splice(insertIndex, 0, config);\n cdr.detectChanges();\n this.dropComplete$.next(config);\n }\n } else {\n // Full block object { node, symbolId, syncInstances } or bare ComponentNode.\n // Prefer symbol.node (always up-to-date) over block.node (original snapshot).\n const symbolNode = data.symbolId ? this.symbolRegistry.getSymbol(data.symbolId)?.node : null;\n const nodeData: ComponentNode = (symbolNode ?? data.node ?? data) as ComponentNode;\n const cloned = deepCloneNode(nodeData);\n if (data.syncInstances && data.symbolId) {\n (cloned as any).symbolId = data.symbolId;\n }\n children.splice(insertIndex, 0, cloned);\n cdr.detectChanges();\n this.dropComplete$.next(cloned);\n }\n afterDrop?.();\n return;\n }\n\n const item = payload.data as ComponentNode;\n\n if (payload.sourceId !== dropListId) {\n const sourceData = payload.sourceId ? this.getData(payload.sourceId) : null;\n if (sourceData) {\n const srcIdx = sourceData.indexOf(item);\n if (srcIdx !== -1) {\n sourceData.splice(srcIdx, 1);\n this.getCdr(payload.sourceId!)?.detectChanges();\n }\n children.splice(insertIndex, 0, item);\n cdr.detectChanges();\n this.dropComplete$.next(item);\n } else {\n // Source not in the drop-zone registry → came from an external panel\n // (e.g. the built-in blocks panel stores one pre-built node object and\n // reuses it across drags). Deep-clone with fresh IDs so each drop\n // produces a fully independent node, preventing shared CSS rules.\n // The panel may supply a bare ComponentNode OR a block wrapper object\n // { node, symbolId, syncInstances } — extract the node first.\n // Prefer symbol.node (always up-to-date) over block.node (original snapshot).\n const blk = item as any;\n const symbolNode2 = blk.symbolId ? this.symbolRegistry.getSymbol(blk.symbolId)?.node : null;\n const nodeData: ComponentNode = (symbolNode2 ?? blk.node ?? item) as ComponentNode;\n const cloned = deepCloneNode(nodeData);\n if (blk.syncInstances && blk.symbolId) {\n (cloned as any).symbolId = blk.symbolId;\n }\n children.splice(insertIndex, 0, cloned);\n cdr.detectChanges();\n this.dropComplete$.next(cloned);\n }\n afterDrop?.();\n return;\n }\n\n const currentIdx = children.indexOf(item);\n if (currentIdx !== -1) {\n const adjustedIdx = insertIndex > currentIdx ? insertIndex - 1 : insertIndex;\n children.splice(currentIdx, 1);\n children.splice(adjustedIdx, 0, item);\n cdr.detectChanges();\n this.dropComplete$.next(item);\n }\n afterDrop?.();\n }\n\n // ── Drop-zone registry ────────────────────────────────────\n\n private ids: string[] = [];\n private elMap = new Map<string, HTMLElement>();\n private dataMap = new Map<string, any[]>();\n private cdrMap = new Map<string, ChangeDetectorRef>();\n private dropCbMap = new Map<string, (e: IoxDropEvent) => void>();\n private postDropMap = new Map<string, () => void>();\n\n public readonly ids$ = new BehaviorSubject<string[]>([]);\n public readonly isDragging$ = new BehaviorSubject<boolean>(false);\n public readonly deepTarget$ = new BehaviorSubject<string | null>(null);\n /** Emits the dropped/inserted ComponentNode after every successful drop. */\n public readonly dropComplete$ = new Subject<ComponentNode>();\n\n // ── Active drag state ─────────────────────────────────────\n\n private _isDragging = false;\n private _payload: DragPayload | null = null;\n private _sourceEl: HTMLElement | null = null;\n\n /**\n * For internal drags: a DOM clone of the dragged element appended to <body>.\n * Lives outside any CSS transform, so position:fixed works in viewport coords.\n * For external drags: the label chip overlay.\n */\n private _overlay: HTMLElement | null = null;\n /** Where on the element the user grabbed it (for accurate ghost positioning). */\n private _grabOffsetX = 0;\n private _grabOffsetY = 0;\n\n // ── Pointer tracking ──────────────────────────────────────\n\n private _lastPointerX = 0;\n private _lastPointerY = 0;\n\n // ── Deep-target tracking ──────────────────────────────────\n\n private _deepTargetId: string | null = null;\n\n /** Injected overlay div marking the active drop target. */\n private _targetOverlay: HTMLElement | null = null;\n\n // ── Insertion indicator ───────────────────────────────────\n\n private _indicator: HTMLElement | null = null;\n private _indicatorContainerId: string | null = null;\n private _indicatorIndex = -1;\n private _indicatorRaf = 0;\n\n /** Elements that have temporary FLIP inline styles — cleared on drag end. */\n private _flipEls = new Set<HTMLElement>();\n\n // ── Viewport scale ────────────────────────────────────────\n\n private _scale = 1;\n\n /** Called by BuilderComponent whenever the viewport scale changes. */\n setScale(scale: number): void { this._scale = scale; }\n\n // ── Dropzone rect cache — snapshotted at drag start and on scroll ─────────\n\n private _dropzoneRectCache = new Map<string, DOMRect>();\n\n private _snapshotRects(): void {\n this._dropzoneRectCache.clear();\n for (const id of this.ids) {\n const el = this._getEl(id);\n if (el) this._dropzoneRectCache.set(id, el.getBoundingClientRect());\n }\n }\n\n // ── Root-escape ───────────────────────────────────────────\n\n private readonly ROOT_ESCAPE_PX = 14;\n private _rootEscapeActiveFor: string | null = null;\n\n // ─────────────────────────────────────────────────────────\n // Element lookup — elMap first, DOM id fallback\n // ─────────────────────────────────────────────────────────\n\n private _getEl(id: string): HTMLElement | null {\n return this.elMap.get(id) ?? document.getElementById(id);\n }\n\n // ─────────────────────────────────────────────────────────\n // Drop-zone registration\n // ─────────────────────────────────────────────────────────\n\n registerDropzone(\n id: string,\n el: HTMLElement,\n data: any[],\n cdr: ChangeDetectorRef,\n dropCb: (e: IoxDropEvent) => void,\n postDrop?: () => void,\n ): void {\n if (!id) return;\n\n // Stamp id on element so DOM-walk helpers (_isRootContainer) find it.\n el.id = id;\n\n if (!this.ids.includes(id)) {\n this.ids = [...this.ids, id];\n this.ids$.next(this.ids);\n }\n this.elMap.set(id, el);\n this.dataMap.set(id, data);\n this.cdrMap.set(id, cdr);\n this.dropCbMap.set(id, dropCb);\n if (postDrop) this.postDropMap.set(id, postDrop);\n\n interact(el).dropzone({\n accept: '[data-iox-draggable]',\n overlap: 'pointer',\n });\n }\n\n unregisterDropzone(id: string, el: HTMLElement): void {\n this.ids = this.ids.filter(i => i !== id);\n this.elMap.delete(id);\n this.dataMap.delete(id);\n this.cdrMap.delete(id);\n this.dropCbMap.delete(id);\n this.postDropMap.delete(id);\n this.ids$.next(this.ids);\n try { interact(el).unset(); } catch { /* already unset */ }\n }\n\n // ─────────────────────────────────────────────────────────\n // Draggable registration\n // ─────────────────────────────────────────────────────────\n\n registerDraggable(el: HTMLElement, getPayload: () => DragPayload): void {\n el.setAttribute('data-iox-draggable', '');\n\n interact(el).draggable({\n // Don't start a drag when the pointer goes down inside a contenteditable\n // element (e.g. a text block in inline-edit mode).\n ignoreFrom: '[contenteditable=\"true\"]',\n listeners: {\n start: (event) => this._onDragStart(event, el, getPayload),\n move: (event) => this._onDragMove(event),\n end: (event) => this._onDragEnd(event),\n },\n modifiers: [],\n });\n }\n\n unregisterDraggable(el: HTMLElement): void {\n el.removeAttribute('data-iox-draggable');\n try { interact(el).unset(); } catch { /* already unset */ }\n }\n\n getData(id: string): any[] | undefined { return this.dataMap.get(id); }\n getCdr(id: string): ChangeDetectorRef | undefined { return this.cdrMap.get(id); }\n invokePostDrop(id: string): void { this.postDropMap.get(id)?.(); }\n\n consumeDeepTarget(): string | null {\n const v = this._deepTargetId;\n this._deepTargetId = null;\n return v;\n }\n\n // ─────────────────────────────────────────────────────────\n // Drag lifecycle\n // ─────────────────────────────────────────────────────────\n\n private _onDragStart(event: any, el: HTMLElement, getPayload: () => DragPayload): void {\n if (el.hasAttribute('data-editing')) {\n event.interaction.stop();\n return;\n }\n this._payload = getPayload();\n this._sourceEl = el;\n this._isDragging = true;\n this._rootEscapeActiveFor = null;\n this._lastPointerX = event.client.x;\n this._lastPointerY = event.client.y;\n this.isDragging$.next(true);\n\n if (this._payload.type === 'internal') {\n // ── Clone the element and append to <body> ────────────────────────────\n //\n // DOM structure for a canvas item:\n // div[ioxDraggable] (el — the drag wrapper, may be wider than content)\n // └─ <app-card> / <app-section> … (Angular component host)\n // └─ div.card-root / div.section-root … (visual root with styles)\n //\n // el.getBoundingClientRect() gives the wrapper's rect, which can be\n // wider than the visual element when the wrapper is in a flex container\n // that stretches it. This causes the ghost to have wrong dimensions\n // and the grab offset to be calculated from the wrong origin.\n //\n // Fix: use the Angular component host (el.firstElementChild) for both\n // the rect measurement and as the clone source.\n // - Rect from host → correct visual dimensions and true grab offset.\n // - Clone from host → carries _ngcontent-* attrs so encapsulated CSS works.\n //\n // The wrapper el still gets iox-drag-active-source (visibility:hidden)\n // to keep its layout space stable while dragging.\n const hostEl = (el.firstElementChild as HTMLElement) ?? el;\n const rect = hostEl.getBoundingClientRect();\n this._grabOffsetX = event.client.x - rect.left;\n this._grabOffsetY = event.client.y - rect.top;\n\n // Scale factor: getBoundingClientRect() returns scaled viewport px,\n // but the clone renders at natural CSS px (no transform parent on body).\n // Apply the same scale transform so the clone matches the visual size\n // exactly — no explicit width/height, no overflow clipping.\n const scale = this._scale;\n\n // Cancel fill:forwards animations before cloning so the ghost shows\n // the element at its natural (un-animated) state, and so the original\n // element is clean after a same-position drop (where Angular won't\n // destroy/recreate the DOM node and InteractionEngine.detach() won't fire).\n hostEl.getAnimations().forEach(a => a.cancel());\n\n const clone = hostEl.cloneNode(true) as HTMLElement;\n // getBoundingClientRect() returns scaled viewport px. Divide by scale\n // to get the natural CSS px — this constrains the clone to match the\n // original's width when it's reparented to <body> (no canvas parent).\n // overflow:hidden suppresses scrollbars that can appear when the clone's\n // children lose their layout context (e.g. percentage-width children).\n const cssWidth = Math.round(rect.width / scale);\n const cssHeight = Math.round(rect.height / scale);\n clone.style.cssText = [\n 'position:fixed',\n `left:${rect.left}px`,\n `top:${rect.top}px`,\n `width:${cssWidth}px`,\n `height:${cssHeight}px`,\n `transform:scale(${scale})`,\n 'transform-origin:top left',\n 'pointer-events:none',\n 'overflow:hidden',\n 'z-index:9999',\n 'margin:0',\n ].join(';');\n clone.classList.add('iox-drag-moving');\n document.body.appendChild(clone);\n this._overlay = clone;\n\n // Hide original wrapper in-place (keeps layout space so container size is stable).\n el.classList.add('iox-drag-active-source');\n } else {\n // ── Sidebar external drag — show a label chip ─────────────────────────\n this._createExternalChip(this._payload, event.client.x, event.client.y);\n el.classList.add('iox-drag-source');\n }\n\n this._snapshotRects();\n }\n\n private _onDragMove(event: any): void {\n this._lastPointerX = event.client.x;\n this._lastPointerY = event.client.y;\n\n // Move the clone (or chip) under the cursor.\n if (this._overlay) {\n this._overlay.style.left = (event.client.x - this._grabOffsetX) + 'px';\n this._overlay.style.top = (event.client.y - this._grabOffsetY) + 'px';\n }\n\n this._updateDeepTarget();\n this._updateIndicator();\n }\n\n private _onDragEnd(event: any): void {\n // Restore original element visibility BEFORE Angular re-renders on drop.\n if (this._sourceEl) {\n this._sourceEl.classList.remove('iox-drag-active-source');\n this._sourceEl.classList.remove('iox-drag-source');\n }\n document.querySelectorAll('.iox-drag-active-source')\n .forEach(el => el.classList.remove('iox-drag-active-source'));\n\n // Remove clone/chip overlay.\n this._removeOverlay();\n\n // Remove indicator BEFORE committing so calcInsertIndex sees a clean DOM.\n this._removeIndicator();\n document.body.classList.remove('iox-drag-has-indicator');\n\n // Clean up any FLIP transform/transition inline styles left on container children.\n for (const el of this._flipEls) {\n el.style.transform = '';\n el.style.transition = '';\n }\n this._flipEls.clear();\n\n this._commitDrop();\n\n this._removeTargetOverlay();\n document.querySelectorAll('.iox-drag-over').forEach(el => el.classList.remove('iox-drag-over'));\n this._rootEscapeActiveFor = null;\n this._isDragging = false;\n this._payload = null;\n this._sourceEl = null;\n this.isDragging$.next(false);\n this.deepTarget$.next(null);\n setTimeout(() => { this._deepTargetId = null; });\n }\n\n // ─────────────────────────────────────────────────────────\n // Drop commit\n // ─────────────────────────────────────────────────────────\n\n private _commitDrop(): void {\n if (!this._payload) return;\n\n const targetId = this._deepTargetId ?? 'canvas-preview';\n const insertIndex = this.calcInsertIndex(targetId);\n\n const dropCb = this.dropCbMap.get(targetId);\n if (!dropCb) return;\n\n dropCb({ payload: this._payload, targetId, insertIndex });\n }\n\n // ─────────────────────────────────────────────────────────\n // External-drag chip (sidebar items only)\n // ─────────────────────────────────────────────────────────\n\n private _createExternalChip(payload: DragPayload, pointerX: number, pointerY: number): void {\n this._removeOverlay();\n const label = typeof payload.data === 'string' ? payload.data : 'Component';\n const chip = document.createElement('div');\n chip.className = 'iox-drag-overlay iox-drag-overlay-chip';\n chip.textContent = label;\n // Chip follows 14px below-right of cursor.\n this._grabOffsetX = -14;\n this._grabOffsetY = -14;\n chip.style.left = (pointerX + 14) + 'px';\n chip.style.top = (pointerY + 14) + 'px';\n document.body.appendChild(chip);\n this._overlay = chip;\n }\n\n private _removeOverlay(): void {\n this._overlay?.remove();\n this._overlay = null;\n this._grabOffsetX = 0;\n this._grabOffsetY = 0;\n }\n\n // ─────────────────────────────────────────────────────────\n // Deep-target detection (smallest bounding-rect area)\n // ─────────────────────────────────────────────────────────\n\n private _updateDeepTarget(): void {\n const px = this._lastPointerX;\n const py = this._lastPointerY;\n\n let bestId: string | null = null;\n let bestArea = Infinity;\n\n for (const id of this.ids) {\n const el = this._getEl(id);\n if (!el) continue;\n // Never drop an element into its own subtree: skip any dropzone\n // whose DOM element lives inside the dragged source wrapper.\n if (this._sourceEl?.contains(el)) continue;\n // Skip elements hidden by interaction pre-state, and any of their children.\n if (el.closest('[data-iox-hidden]')) continue;\n const rect = this._dropzoneRectCache.get(id) ?? el.getBoundingClientRect();\n if (px >= rect.left && px <= rect.right && py >= rect.top && py <= rect.bottom) {\n const area = rect.width * rect.height;\n if (area < bestArea) { bestArea = area; bestId = id; }\n }\n }\n\n // Root-escape with hysteresis.\n // Purpose: when the cursor is near the top/bottom edge of a root-level\n // section, treat the target as canvas-preview so the user can insert\n // between root sections.\n //\n // IMPORTANT: only activate if the cursor was ALREADY inside this section\n // (i.e. deepTarget is the section itself or a nested child of it).\n // Without this guard, crossing from Section A into the top 14px of\n // Section C immediately locks the target to canvas-preview and prevents\n // the user from ever reaching Section C's nested containers.\n if (this._rootEscapeActiveFor) {\n const escEl = this._getEl(this._rootEscapeActiveFor);\n if (escEl) {\n const r = this._dropzoneRectCache.get(this._rootEscapeActiveFor) ?? escEl.getBoundingClientRect();\n const inside = px >= r.left && px <= r.right && py >= r.top && py <= r.bottom;\n if (inside) { bestId = 'canvas-preview'; }\n else { this._rootEscapeActiveFor = null; }\n } else {\n this._rootEscapeActiveFor = null;\n }\n }\n\n if (!this._rootEscapeActiveFor &&\n bestId && bestId !== 'canvas-preview' && this._isRootContainer(bestId)) {\n const el = this._getEl(bestId);\n if (el) {\n const rect = this._dropzoneRectCache.get(bestId) ?? el.getBoundingClientRect();\n const nearEdge =\n py <= rect.top + this.ROOT_ESCAPE_PX ||\n py >= rect.bottom - this.ROOT_ESCAPE_PX;\n // Only escape if we were already targeting this section or\n // something nested inside it — not when crossing into it fresh.\n const wasInsideThisSection =\n this._deepTargetId === bestId ||\n this._isDescendantDropzone(this._deepTargetId, bestId);\n if (nearEdge && wasInsideThisSection) {\n this._rootEscapeActiveFor = bestId;\n bestId = 'canvas-preview';\n }\n }\n }\n\n if (bestId !== this._deepTargetId) {\n if (this._deepTargetId) {\n const old = this._getEl(this._deepTargetId);\n old?.classList.remove('iox-drag-over');\n }\n this._deepTargetId = bestId;\n if (bestId) {\n this._getEl(bestId)?.classList.add('iox-drag-over');\n }\n // Move injected overlay to the new target container.\n this._moveTargetOverlay(bestId);\n this.deepTarget$.next(bestId);\n\n // Reset indicator position state when container changes.\n this._indicatorIndex = -1;\n this._indicatorContainerId = null;\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Target overlay — fixed to <body>, sized from getBoundingClientRect\n // so it is always above all canvas content regardless of stacking\n // contexts or background colors inside the target container.\n // ─────────────────────────────────────────────────────────\n\n /** Call on every canvas scroll tick to keep the fixed-position drop-target\n * overlay aligned with the container element that moved in the viewport. */\n refreshDragOverlays(): void {\n if (!this._isDragging) return;\n this._snapshotRects();\n this._moveTargetOverlay(this._deepTargetId);\n }\n\n private _moveTargetOverlay(targetId: string | null): void {\n if (!targetId || targetId === 'canvas-preview') {\n this._removeTargetOverlay();\n return;\n }\n\n const el = this._getEl(targetId);\n if (!el) { this._removeTargetOverlay(); return; }\n\n if (!this._targetOverlay) {\n this._targetOverlay = document.createElement('div');\n this._targetOverlay.className = 'iox-drop-target-overlay';\n document.body.appendChild(this._targetOverlay);\n }\n\n const rect = el.getBoundingClientRect();\n this._targetOverlay.style.cssText = [\n 'position:fixed',\n `left:${rect.left}px`,\n `top:${rect.top}px`,\n `width:${rect.width}px`,\n `height:${rect.height}px`,\n 'pointer-events:none',\n 'z-index:9998',\n 'box-sizing:border-box',\n ].join(';');\n }\n\n private _removeTargetOverlay(): void {\n this._targetOverlay?.remove();\n this._targetOverlay = null;\n }\n\n private _isRootContainer(id: string): boolean {\n const el = this._getEl(id);\n if (!el) return false;\n let parent = el.parentElement;\n while (parent) {\n if (parent.id === 'canvas-preview') return true;\n if (parent.id && this.ids.includes(parent.id)) return false;\n parent = parent.parentElement;\n }\n return false;\n }\n\n /**\n * Returns true if the dropzone with `childId` is a DOM descendant of the\n * dropzone with `parentId`. Used to decide whether the cursor was already\n * \"inside\" a root section before triggering root-escape.\n */\n private _isDescendantDropzone(childId: string | null, parentId: string): boolean {\n if (!childId) return false;\n const childEl = this._getEl(childId);\n const parentEl = this._getEl(parentId);\n if (!childEl || !parentEl) return false;\n return parentEl.contains(childEl);\n }\n\n // ─────────────────────────────────────────────────────────\n // Insertion indicator (animates open so siblings shift smoothly)\n // ─────────────────────────────────────────────────────────\n\n private _updateIndicator(): void {\n const targetId = this._deepTargetId ?? 'canvas-preview';\n document.body.classList.add('iox-drag-has-indicator');\n const idx = this.calcInsertIndex(targetId);\n if (idx !== this._indicatorIndex || targetId !== this._indicatorContainerId) {\n this._indicatorIndex = idx;\n this._positionIndicator(targetId, idx);\n }\n }\n\n private _positionIndicator(containerId: string, index: number): void {\n const container = this._getEl(containerId);\n if (!container) return;\n\n const cs = window.getComputedStyle(container);\n const isRow =\n (cs.display === 'flex' || cs.display === 'inline-flex') &&\n (!cs.flexDirection || cs.flexDirection === 'row' || cs.flexDirection === 'row-reverse');\n\n const containerChanged = this._indicatorContainerId !== containerId;\n\n if (containerChanged) {\n cancelAnimationFrame(this._indicatorRaf);\n this._indicator?.remove();\n this._indicator = null;\n }\n\n const needsCreate = !this._indicator;\n if (needsCreate) {\n this._indicator = document.createElement('div');\n this._indicator.className = 'iox-insert-indicator';\n\n if (isRow) {\n // Start at width:0 with align-self:stretch so it spans the full\n // container height once visible. overflow:hidden keeps it invisible\n // at width:0 — no painted pixels, no phantom height like min-height\n // would cause. Animates width 0→3px on first appearance.\n this._indicator.style.cssText =\n 'flex-shrink:0;width:0;align-self:stretch;' +\n 'background:#6366f1;border-radius:2px;pointer-events:none;margin:0;' +\n 'transition:width 140ms ease,margin 140ms ease;overflow:hidden;';\n } else {\n this._indicator.style.cssText =\n 'height:0;width:100%;background:#6366f1;border-radius:2px;' +\n 'pointer-events:none;margin:0;display:block;' +\n 'transition:height 140ms ease,margin 140ms ease;overflow:hidden;';\n }\n }\n\n this._indicatorContainerId = containerId;\n\n const skipClasses = [\n 'section-placeholder', 'container-placeholder', 'repeater-placeholder',\n 'repeater-badge', 'repeater-preview-row', 'iox-insert-indicator',\n 'iox-drag-active-source',\n ];\n const children = Array.from(container.children).filter(\n el => !skipClasses.some(cls => el.classList.contains(cls))\n );\n\n // ── FLIP: snapshot sibling rects BEFORE DOM change (reposition case only) ──\n let beforeRects: Map<Element, DOMRect> | null = null;\n if (!needsCreate) {\n beforeRects = new Map<Element, DOMRect>();\n Array.from(container.children).forEach(child => {\n if (child !== this._indicator) {\n beforeRects!.set(child, child.getBoundingClientRect());\n }\n });\n }\n\n // Reposition indicator in DOM.\n if (!this._indicator) return;\n if (index >= children.length) {\n container.appendChild(this._indicator);\n } else {\n container.insertBefore(this._indicator, children[index]);\n }\n\n // ── FLIP: animate siblings from their old positions to their new positions ──\n if (beforeRects) {\n Array.from(container.children).forEach(child => {\n const before = beforeRects!.get(child);\n if (!before) return;\n const after = child.getBoundingClientRect();\n const dx = before.left - after.left;\n const dy = before.top - after.top;\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5) return;\n\n const el = child as HTMLElement;\n this._flipEls.add(el);\n // Invert: snap element back to where it was, then animate to new pos.\n el.style.transition = 'none';\n el.style.transform = `translate(${dx}px,${dy}px)`;\n requestAnimationFrame(() => {\n el.style.transition = 'transform 140ms ease';\n el.style.transform = '';\n });\n });\n }\n\n // Animate indicator open (first appearance in this container only).\n if (needsCreate) {\n cancelAnimationFrame(this._indicatorRaf);\n this._indicatorRaf = requestAnimationFrame(() => {\n if (!this._indicator) return;\n if (isRow) {\n this._indicator.style.width = '3px';\n this._indicator.style.margin = '0 3px';\n } else {\n this._indicator.style.height = '4px';\n this._indicator.style.margin = '3px 0';\n }\n });\n }\n }\n\n private _removeIndicator(): void {\n cancelAnimationFrame(this._indicatorRaf);\n this._indicator?.remove();\n this._indicator = null;\n this._indicatorContainerId = null;\n this._indicatorIndex = -1;\n }\n\n // ─────────────────────────────────────────────────────────\n // calcInsertIndex\n // ─────────────────────────────────────────────────────────\n\n calcInsertIndex(containerId: string): number {\n const container = this._getEl(containerId);\n if (!container) return 0;\n\n const skipClasses = [\n 'section-placeholder', 'container-placeholder', 'repeater-placeholder',\n 'repeater-badge', 'repeater-preview-row', 'iox-insert-indicator',\n 'iox-drag-active-source',\n ];\n const children = Array.from(container.children).filter(\n el => !skipClasses.some(cls => el.classList.contains(cls))\n );\n if (!children.length) return 0;\n\n const cs = window.getComputedStyle(container);\n const isHorizontal =\n (cs.display === 'flex' || cs.display === 'inline-flex') &&\n (!cs.flexDirection || cs.flexDirection === 'row' || cs.flexDirection === 'row-reverse');\n\n for (let i = 0; i < children.length; i++) {\n const rect = children[i].getBoundingClientRect();\n if (isHorizontal) {\n if (this._lastPointerX < rect.left + rect.width / 2) return i;\n } else {\n if (this._lastPointerY < rect.top + rect.height / 2) return i;\n }\n }\n return children.length;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { IoxDataSource } from '../models/component.model';\n\n/**\n * Page-scoped registry that holds the current page's data sources.\n * Scoped to PageUiComponent.providers[] so every builder service\n * (BindingsComponent, BuilderRepeaterComponent) shares the same instance.\n *\n * Seeded by PageUiComponent.loadPage() from saved page data, then kept\n * up to date by BindingsComponent whenever the user adds/removes a source.\n */\n@Injectable()\nexport class DataSourceRegistryService {\n private _ds$ = new BehaviorSubject<IoxDataSource[]>([]);\n\n readonly dataSources$ = this._ds$.asObservable();\n\n setDataSources(ds: IoxDataSource[]): void {\n this._ds$.next(ds);\n }\n\n getDataSources(): IoxDataSource[] {\n return this._ds$.value;\n }\n\n findByAlias(alias: string): IoxDataSource | undefined {\n return this._ds$.value.find(ds => ds.alias === alias);\n }\n\n getAliasOptions(): { label: string; value: string }[] {\n return this._ds$.value.map(ds => ({ label: ds.alias, value: ds.alias }));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { DeviceMode, DEVICE_OPTIONS } from '../panels/panel.model';\n\nexport interface ViewportState {\n device: DeviceMode;\n /** Real canvas width in CSS pixels (e.g., 1440 for desktop). */\n width: number;\n /** Real canvas height in CSS pixels (e.g., 900 for desktop). Simulates the browser viewport. */\n height: number;\n /** Visual scale factor (0–1+). Canvas is rendered at `width × height` then scaled. */\n scale: number;\n}\n\nconst STORAGE_KEY = 'iox_builder_viewport';\n\n@Injectable()\nexport class ViewportService {\n private state: ViewportState = this.loadFromStorage();\n\n private stateSubject = new BehaviorSubject<ViewportState>(this.state);\n public state$ = this.stateSubject.asObservable();\n\n getState(): ViewportState {\n return this.state;\n }\n\n getScale(): number {\n return this.state.scale;\n }\n\n setDevice(device: DeviceMode): void {\n const option = DEVICE_OPTIONS.find(d => d.mode === device);\n if (!option) return;\n this.update({ device, width: option.width, height: option.height });\n }\n\n setScale(scale: number): void {\n this.update({ scale: Math.max(0.1, Math.min(2, scale)) });\n }\n\n setWidth(width: number): void {\n this.update({ width });\n }\n\n /**\n * Calculate the scale that makes the canvas fit inside the available editor width.\n * @param availableWidth The pixel width of the editor area that holds the canvas.\n * @param padding Optional horizontal padding to subtract (default 40px total).\n */\n fitToWidth(availableWidth: number, padding = 40): void {\n const usable = availableWidth - padding;\n if (usable <= 0) return;\n const scale = Math.min(1, usable / this.state.width);\n this.setScale(scale);\n }\n\n /**\n * Calculate the scale that makes the canvas fit both the available width AND height.\n * Uses the smaller of the two scale factors so the entire viewport frame is visible.\n * @param containerWidth Available container width in screen pixels.\n * @param containerHeight Available container height in screen pixels.\n * @param padding Total padding to subtract from both dimensions (default 40px).\n */\n fitToSize(containerWidth: number, containerHeight: number, padding = 40): void {\n const usableW = containerWidth - padding;\n const usableH = containerHeight - padding;\n if (usableW <= 0 || usableH <= 0) return;\n const scaleX = usableW / this.state.width;\n const scaleY = usableH / this.state.height;\n this.setScale(Math.min(1, scaleX, scaleY));\n }\n\n /**\n * Convert a screen-space coordinate to canvas-space (unscaled).\n * Call this when translating pointer events into canvas-relative positions.\n */\n screenToCanvas(screenX: number, screenY: number, canvasRect: DOMRect): { x: number; y: number } {\n return {\n x: (screenX - canvasRect.left) / this.state.scale,\n y: (screenY - canvasRect.top) / this.state.scale,\n };\n }\n\n private update(partial: Partial<ViewportState>): void {\n this.state = { ...this.state, ...partial };\n this.stateSubject.next(this.state);\n this.saveToStorage();\n }\n\n private saveToStorage(): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(this.state));\n } catch {}\n }\n\n private loadFromStorage(): ViewportState {\n const defaults: ViewportState = {\n device: DeviceMode.Desktop,\n width: DEVICE_OPTIONS[0].width,\n height: DEVICE_OPTIONS[0].height,\n scale: 0.75,\n };\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return defaults;\n const saved = JSON.parse(raw);\n const device = (Object.values(DeviceMode) as string[]).includes(saved.device)\n ? saved.device as DeviceMode\n : defaults.device;\n const option = DEVICE_OPTIONS.find(d => d.mode === device) ?? DEVICE_OPTIONS[0];\n return {\n device,\n width: typeof saved.width === 'number' && saved.width > 0 ? saved.width : option.width,\n height: typeof saved.height === 'number' && saved.height > 0 ? saved.height : option.height,\n scale: typeof saved.scale === 'number' ? Math.max(0.1, Math.min(2, saved.scale)) : defaults.scale,\n };\n } catch {\n return defaults;\n }\n }\n}\n","// Re-exported from the shared iox-ui package so iox-builder consumers\n// don't need to import from two different packages.\nexport { ComponentInstanceRegistryService } from '@vectoriox/iox-ui';\n","import { Injectable, NgZone, inject } from '@angular/core';\n\nimport {\n ComponentNode,\n InteractionAction,\n InteractionTrigger,\n IoxInteraction,\n} from '../models/component.model';\nimport { OverlayService } from '../overlay/overlay.service';\nimport { ComponentInstanceRegistryService } from './component-instance-registry.service';\nimport { ContextStore, contextActionEffect, isActionEnabled, isContextAction, resolveContextValue } from '@vectoriox/iox-ui';\n\ninterface AttachedInteraction {\n node: ComponentNode;\n interaction: IoxInteraction;\n cleanup: () => void;\n}\n\n/**\n * Wires ComponentNode interactions to live DOM elements via the\n * OverlayService node-element registry.\n *\n * Call `attach(node)` after the node is rendered and registered.\n * Call `detach(node)` on destroy to tear down listeners/observers.\n */\n@Injectable()\nexport class InteractionEngineService {\n private attached = new Map<ComponentNode, AttachedInteraction[]>();\n\n /** Shared with the SSR engine — one store type, one set of semantics. */\n private contextStore = inject(ContextStore);\n /** Resolved data for the canvas, so a row marker (source + index) resolves back to its item. */\n private contextData: Record<string, any> = {};\n\n /** Elements that have had pre-state applied (hidden by attach). */\n private preStatedElements = new Set<HTMLElement>();\n\n /**\n * Toggle state for click interactions with reverseActions.\n * false = next click runs actions (primary); true = next click runs reverseActions.\n */\n private toggleStates = new Map<string, boolean>();\n\n /**\n * Pre-states queued for elements that weren't registered yet when the owner\n * node's attach() ran. Keyed by target node ID. Consumed when the target\n * element's own attach() fires.\n */\n private pendingPreStates = new Map<string, InteractionAction[]>();\n\n /** Action types that animate an element from hidden → visible. */\n private readonly ENTRANCE_TYPES = new Set([\n 'fadeIn', 'moveUp', 'moveDown', 'moveLeft', 'moveRight', 'scaleIn', 'show',\n ]);\n\n /** Action types that animate an element from visible → hidden. */\n private readonly EXIT_TYPES = new Set(['fadeOut', 'scaleOut', 'hide']);\n\n private readonly SWIPER_ACTIONS = new Set([\n 'swiperNext', 'swiperPrev', 'swiperGoToSlide',\n 'swiperAutoplayStart', 'swiperAutoplayStop', 'swiperAutoplayPause',\n ]);\n\n private instanceRegistry = inject(ComponentInstanceRegistryService);\n private ngZone = inject(NgZone);\n\n constructor(private overlayService: OverlayService) {}\n\n /**\n * Run all DOM-manipulation operations (pre-state, observers, animations)\n * outside the Angular zone so Zone.js does not schedule unnecessary CD ticks\n * for each RAF/IntersectionObserver/animation callback.\n * The caller is responsible for calling markForCheck() / refreshSelect() inside\n * the zone after this returns.\n */\n private runOutside<T>(fn: () => T): T {\n return this.ngZone.runOutsideAngular(fn);\n }\n\n /** Wire all interactions for a node to its rendered DOM element. */\n attach(node: ComponentNode): void { this.runOutside(() => this._attach(node)); }\n /** Attach interactions to a node whose element is NOT overlay-registered — e.g. repeater/slider\n * PREVIEW CLONES, which are non-selectable but must still animate (parity with the SSR runtime,\n * which animates every repeated row). See RenderDirective. */\n attachTo(node: ComponentNode, element: HTMLElement): void { this.runOutside(() => this._attach(node, element)); }\n private _attach(node: ComponentNode, elementOverride?: HTMLElement): void {\n const element = elementOverride ?? this.overlayService.getNodeRef(node)?.element;\n if (!element) return;\n\n const inBuilder = this.isBuilderMode();\n\n // Apply any pre-states queued for THIS element by earlier-registered nodes.\n // Pending entries are only added when appropriate (see loop below), so always consume.\n if (node.id) {\n const pending = this.pendingPreStates.get(node.id);\n if (pending) {\n for (const action of pending) {\n this.applyPreState(element, action);\n }\n this.pendingPreStates.delete(node.id);\n }\n }\n\n if (!node.interactions?.length) return;\n\n const cleanups: AttachedInteraction[] = [];\n\n for (const ix of node.interactions) {\n // Pre-state: hide target elements before their entrance animation fires so\n // the user sees a real hidden→visible animation on the canvas. Every trigger\n // now runs live in the builder (see attachInteraction), so pre-state is applied\n // for all of them EXCEPT scrollProgress — that trigger is unimplemented (no-op),\n // so pre-stating it would leave the element stuck at opacity:0 forever.\n const skipPreState = inBuilder && ix.trigger === 'scrollProgress';\n if (!skipPreState) {\n for (const action of ix.actions) {\n // A disabled action must not pre-state: it would hide the element with nothing\n // left to reveal it.\n if (!isActionEnabled(action)) continue;\n if (this.ENTRANCE_TYPES.has(action.type)) {\n const target = this.resolveTarget(node, action, element);\n if (target) {\n this.applyPreState(target, action);\n } else if (action.target && action.target !== 'self') {\n const list = this.pendingPreStates.get(action.target) ?? [];\n list.push(action);\n this.pendingPreStates.set(action.target, list);\n }\n }\n }\n }\n\n const cleanup = this.attachInteraction(node, ix, element);\n cleanups.push({ node, interaction: ix, cleanup });\n }\n\n this.attached.set(node, cleanups);\n }\n\n /** Tear down all interaction listeners for a node and reset its animated state. */\n detach(node: ComponentNode): void { this.runOutside(() => this._detach(node)); }\n private _detach(node: ComponentNode): void {\n const entries = this.attached.get(node);\n if (!entries) return;\n for (const entry of entries) {\n entry.cleanup();\n }\n this.attached.delete(node);\n\n // Reset toggle state so re-attach starts from the primary actions.\n for (const entry of entries) {\n if (entry.interaction.reverseActions?.length) {\n this.toggleStates.delete(entry.interaction.id);\n }\n }\n\n // Cancel Web Animations and strip any inline pre-state styles that\n // were applied by applyPreState() so the element returns to its natural CSS state.\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n ref.element.getAnimations().forEach(a => a.cancel());\n this.clearInlineAnimationStyles(ref.element);\n }\n\n // Also clean up pre-state on any target elements this node was animating.\n if (node.interactions) {\n for (const ix of node.interactions) {\n for (const action of ix.actions) {\n // Remove any pending pre-states for unregistered targets.\n if (action.target && action.target !== 'self') {\n const pending = this.pendingPreStates.get(action.target);\n if (pending) {\n const filtered = pending.filter(a => a !== action);\n if (filtered.length) {\n this.pendingPreStates.set(action.target, filtered);\n } else {\n this.pendingPreStates.delete(action.target);\n }\n }\n }\n // Clean up inline styles on already-registered target elements.\n const target = this.resolveTarget(node, action);\n if (target && this.preStatedElements.has(target)) {\n target.getAnimations().forEach(a => a.cancel());\n this.clearInlineAnimationStyles(target);\n this.preStatedElements.delete(target);\n }\n }\n }\n }\n }\n\n /** Re-attach interactions after they have been edited in the panel. */\n refresh(node: ComponentNode): void {\n this.runOutside(() => { this._detach(node); this._attach(node); });\n }\n\n /**\n * Replay all interactions on a node immediately, regardless of their trigger.\n * Used by the builder overlay play button for in-editor animation preview.\n * Uses fill:'none' so the element returns to its natural state after the preview.\n */\n replay(node: ComponentNode): void { this.runOutside(() => this._replay(node)); }\n private _replay(node: ComponentNode): void {\n if (!node.interactions?.length) return;\n\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n ref.element.getAnimations().forEach(a => a.cancel());\n // Clear any leftover inline styles so the pre-state applies cleanly.\n this.clearInlineAnimationStyles(ref.element);\n }\n\n // In builder mode pre-state is never applied on attach, so apply it now\n // to give an accurate hidden→visible preview. It is cleaned up via\n // executeAction's anim.finished handler once the animation completes.\n for (const ix of node.interactions) {\n for (const action of ix.actions) {\n if (this.ENTRANCE_TYPES.has(action.type)) {\n const target = this.resolveTarget(node, action);\n if (target) this.applyPreState(target, action);\n }\n }\n }\n\n for (const ix of node.interactions) {\n this.runActions(node, ix.actions);\n }\n }\n\n /**\n * Fire all interactions on the given node that match the specified trigger.\n * Used by Swiper (and future components) to dispatch their events into the\n * interaction engine without coupling to the engine's attach/detach lifecycle.\n */\n replayTrigger(nodeId: string, trigger: InteractionTrigger): void { this.runOutside(() => this._replayTrigger(nodeId, trigger)); }\n private _replayTrigger(nodeId: string, trigger: InteractionTrigger): void {\n for (const [node] of this.attached) {\n if (node.id !== nodeId) continue;\n for (const ix of (node.interactions ?? [])) {\n if (ix.trigger === trigger) {\n this.runActions(node, ix.actions);\n }\n }\n return;\n }\n }\n\n // ── Private ──────────────────────────────────────────────\n\n private attachInteraction(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n // All triggers run live in the builder canvas so the user sees the real\n // animation (pageLoad on attach, viewportEnter on scroll-into-view, click/hover).\n // The former NG0103 crash was caused by (a) Swiper's ResizeObserver created inside\n // the Angular zone — fixed in SliderContainerComponent via runOutsideAngular — and\n // (b) the overlay's Resize/MutationObservers synchronously re-dirtying the view\n // during synchronize() — fixed by coalescing overlay updates through a RAF.\n // scrollProgress is still unimplemented and returns a no-op below.\n switch (ix.trigger) {\n case 'pageLoad':\n return this.attachPageLoad(node, ix, element);\n case 'pageEnter':\n // In the builder canvas there is no navigation, so preview a page-enter the same\n // way as page-load (pre-stated hidden → animate in). In production the SSR engine\n // fires it only after the page transition completes (ClientInteractionService).\n return this.attachPageLoad(node, ix, element);\n case 'pageLeave':\n // Exit choreography that plays on navigate-away. There is no navigation in the\n // builder, so it does not auto-fire (element stays visible) — the overlay play\n // button previews it via replay(). In production the orchestrator awaits it.\n return () => {};\n case 'viewportEnter':\n return this.attachViewportEnter(node, ix, element);\n case 'click':\n return this.attachClick(node, ix, element);\n case 'hover':\n return this.attachHover(node, ix, element);\n case 'scrollProgress':\n // Scroll-progress is complex — deferred.\n return () => {};\n default:\n return () => {};\n }\n }\n\n // ── Triggers ─────────────────────────────────────────────\n\n private attachPageLoad(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const timer = setTimeout(() => {\n if (this.hasPreStatedAncestor(element)) {\n this.deferUntilVisible(element, () => this.runActions(node, ix.actions, element));\n } else {\n this.runActions(node, ix.actions, element);\n }\n }, 50);\n return () => clearTimeout(timer);\n }\n\n private attachViewportEnter(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const firedSet = new Set<string>();\n\n const fire = () => {\n const key = ix.id;\n if (ix.actions.some(a => a.once) && firedSet.has(key)) return;\n if (this.hasPreStatedAncestor(element)) {\n this.deferUntilVisible(element, () => {\n if (ix.actions.some(a => a.once) && firedSet.has(key)) return;\n firedSet.add(key);\n this.runActions(node, ix.actions, element);\n });\n return;\n }\n firedSet.add(key);\n this.runActions(node, ix.actions, element);\n };\n\n // IntersectionObserver with no root uses the browser viewport.\n // It respects overflow:hidden clipping from .preview-scroll so it fires\n // correctly as Lenis scrolls (Lenis changes scrollTop on .preview-scroll).\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) { cleanup(); fire(); }\n }\n }, { threshold: 0.1 });\n observer.observe(element);\n\n // Builder: also listen to Lenis scroll events on .preview-lenis-content\n // as a fallback in case IntersectionObserver misses elements behind a\n // CSS transform (scale) on iox-page-component.\n const lenisEl = this.overlayService.getScrollContainer();\n let scrollFired = false;\n const onScroll = () => {\n if (scrollFired) return;\n const rootEl = this.overlayService.getIntersectionRoot();\n if (!rootEl) return;\n const rootRect = rootEl.getBoundingClientRect();\n const elRect = element.getBoundingClientRect();\n const overlapH = Math.min(elRect.bottom, rootRect.bottom) - Math.max(elRect.top, rootRect.top);\n const elH = elRect.bottom - elRect.top;\n if (elH > 0 && overlapH / elH >= 0.1) { scrollFired = true; cleanup(); fire(); }\n };\n if (lenisEl) lenisEl.addEventListener('scroll', onScroll, { passive: true });\n\n const cleanup = () => {\n observer.disconnect();\n scrollFired = true;\n if (lenisEl) lenisEl.removeEventListener('scroll', onScroll);\n };\n return cleanup;\n }\n\n private isBuilderMode(): boolean {\n return document.body.classList.contains('builder-active');\n }\n\n /** Returns true if any DOM ancestor of element is currently faded out via pre-state. */\n private hasPreStatedAncestor(element: HTMLElement): boolean {\n let el = element.parentElement;\n while (el && el !== document.body) {\n if (this.preStatedElements.has(el)) return true;\n el = el.parentElement;\n }\n return false;\n }\n\n /** Polls via RAF until no ancestor is in pre-state, then fires callback. */\n private deferUntilVisible(element: HTMLElement, callback: () => void): void {\n const poll = () => {\n if (!this.hasPreStatedAncestor(element)) {\n callback();\n } else {\n requestAnimationFrame(poll);\n }\n };\n requestAnimationFrame(poll);\n }\n\n private attachClick(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const handler = () => {\n if (ix.reverseActions?.length) {\n // Toggle: alternate between primary and reverse actions on each click.\n const isToggled = this.toggleStates.get(ix.id) ?? false;\n this.runActions(node, isToggled ? ix.reverseActions : ix.actions, element);\n this.toggleStates.set(ix.id, !isToggled);\n } else {\n this.runActions(node, ix.actions, element);\n }\n };\n element.addEventListener('click', handler);\n return () => element.removeEventListener('click', handler);\n }\n\n private attachHover(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const enterHandler = () => this.runActions(node, ix.actions, element);\n const leaveHandler = () => {\n // Reverse animations on leave for hover triggers\n for (const action of ix.actions) {\n if (!isActionEnabled(action)) continue;\n // Context actions have no \"backwards\" — the shared table decides what leave does\n // (clear, unless the action sets noReverse). Same call the SSR engine makes.\n if (isContextAction(action)) {\n this.applyContextAction(action, element, 'reverse');\n continue;\n }\n const target = this.resolveTarget(node, action, element);\n if (!target) continue;\n this.reverseAction(target, action);\n }\n };\n element.addEventListener('mouseenter', enterHandler);\n element.addEventListener('mouseleave', leaveHandler);\n return () => {\n element.removeEventListener('mouseenter', enterHandler);\n element.removeEventListener('mouseleave', leaveHandler);\n };\n }\n\n // ── Actions ──────────────────────────────────────────────\n\n private runActions(node: ComponentNode, actions: InteractionAction[], selfEl?: HTMLElement | null): void {\n for (const action of actions) {\n if (!isActionEnabled(action)) continue; // switched off by the author\n if (this.SWIPER_ACTIONS.has(action.type)) {\n this.executeSwiperAction(action);\n continue;\n }\n // Context actions write STATE, not animation. `selfEl` is deliberate: $item is read by\n // walking up from the element actually hovered/clicked, which for a repeater PREVIEW ROW\n // is the clone — so each row publishes its own item, exactly as on the live site.\n if (isContextAction(action)) {\n this.applyContextAction(action, selfEl ?? null, 'forward');\n continue;\n }\n // selfEl lets 'self'-targeted actions resolve for preview CLONES, which aren't\n // overlay-registered (getNodeRef would return undefined) — see attachTo. (issue #2)\n const target = this.resolveTarget(node, action, selfEl);\n if (!target) continue;\n this.executeAction(target, action);\n }\n }\n\n /**\n * Execute a context action against the shared store. The forward/reverse semantics come from\n * `contextActionEffect` in @vectoriox/iox-ui — the same function the SSR engine calls, so the\n * builder canvas and the live site behave identically.\n */\n private applyContextAction(action: InteractionAction, el: HTMLElement | null, pass: 'forward' | 'reverse'): void {\n const effect = contextActionEffect(action as any, pass);\n if (!effect) return;\n if (effect.op === 'clear') {\n this.contextStore.clear(effect.slot);\n return;\n }\n const value = resolveContextValue(effect.value, {\n item: this.rowItemFor(el),\n resolvedData: this.contextData,\n });\n this.contextStore.set(effect.slot, value);\n }\n\n /** The repeater item this element belongs to — the nearest marked row ancestor. */\n private rowItemFor(el: HTMLElement | null): unknown {\n const row = el?.closest?.('[data-iox-row-idx]') as HTMLElement | null;\n if (!row) return undefined;\n const source = row.getAttribute('data-iox-row-src') ?? '';\n const index = Number(row.getAttribute('data-iox-row-idx'));\n const items = this.contextData?.[source];\n return Array.isArray(items) && Number.isInteger(index) ? items[index] : undefined;\n }\n\n /** Resolved data for the canvas, kept current by the repeater as it fetches. */\n setContextData(data: Record<string, any>): void {\n // MERGE, not replace — a page can hold several repeaters, each publishing its own source.\n this.contextData = { ...this.contextData, ...(data ?? {}) };\n }\n\n private executeSwiperAction(action: InteractionAction): void {\n // Target is the nodeId of the SliderContainer to control.\n const swiper = this.instanceRegistry.get(action.target) as any;\n if (!swiper) return;\n switch (action.type) {\n case 'swiperNext': swiper.slideNext(); break;\n case 'swiperPrev': swiper.slidePrev(); break;\n case 'swiperGoToSlide': swiper.slideTo(action.params?.['index'] ?? 0); break;\n case 'swiperAutoplayStart': swiper.autoplay?.start(); break;\n case 'swiperAutoplayStop': swiper.autoplay?.stop(); break;\n case 'swiperAutoplayPause': swiper.autoplay?.pause(); break;\n }\n }\n\n private resolveTarget(ownerNode: ComponentNode, action: InteractionAction, selfEl?: HTMLElement | null): HTMLElement | null {\n if (action.target === 'self' || !action.target) {\n return selfEl ?? this.overlayService.getNodeRef(ownerNode)?.element ?? null;\n }\n // Find by node ID\n for (const [n, ref] of this.overlayService.getAllNodeEntries()) {\n if (n.id === action.target) return ref.element;\n }\n return null;\n }\n\n private executeAction(element: HTMLElement, action: InteractionAction): void {\n const { keyframes } = this.buildAnimation(action);\n if (!keyframes.length) return;\n\n // 'both' = backwards (holds first keyframe during delay) + forwards (holds last keyframe after end).\n const anim = element.animate(keyframes, {\n duration: action.duration,\n delay: action.delay,\n easing: action.easing,\n fill: 'both',\n });\n\n if (this.ENTRANCE_TYPES.has(action.type)) {\n anim.finished.then(() => {\n element.style.removeProperty('pointer-events');\n element.removeAttribute('data-iox-hidden');\n this.preStatedElements.delete(element);\n // Builder: clear inline pre-state so cancelling animations later\n // doesn't leave the element invisible after a play preview.\n if (this.isBuilderMode()) this.clearInlineAnimationStyles(element);\n }).catch(() => {});\n } else if (this.EXIT_TYPES.has(action.type)) {\n // Once the exit animation finishes the element is invisible —\n // disable pointer events so it doesn't silently block clicks underneath it.\n anim.finished.then(() => {\n element.style.setProperty('pointer-events', 'none');\n }).catch(() => {});\n }\n }\n\n /**\n * Freeze an element at the animation's starting frame immediately, before any\n * trigger fires. Called for ALL entrance-type actions regardless of trigger so\n * that a click-triggered fadeIn on a menu overlay also starts it hidden.\n *\n * In builder mode only opacity:0 is applied — transforms on canvas elements\n * inside iox-page-component's scale() transform break Lenis scroll. The transform\n * jump at animation t=0 is invisible because the element is already opacity:0.\n * In production the full keyframe is applied + pointer-events:none.\n */\n private applyPreState(element: HTMLElement, action: InteractionAction): void {\n const { keyframes } = this.buildAnimation(action);\n if (!keyframes.length) return;\n const first = keyframes[0] as Record<string, string>;\n if (this.isBuilderMode()) {\n // No transforms — inline transforms on children inside iox-page-component's\n // scale() break Lenis scroll. pointer-events:none lets wheel events and\n // hover fall through to visible elements underneath.\n element.style.setProperty('opacity', '0');\n element.style.setProperty('pointer-events', 'none');\n } else {\n for (const [prop, val] of Object.entries(first)) {\n (element.style as any)[prop] = String(val);\n }\n element.style.setProperty('pointer-events', 'none');\n }\n element.setAttribute('data-iox-hidden', '');\n this.preStatedElements.add(element);\n }\n\n private clearInlineAnimationStyles(element: HTMLElement): void {\n element.style.removeProperty('opacity');\n element.style.removeProperty('transform');\n element.style.removeProperty('visibility');\n element.style.removeProperty('pointer-events');\n element.removeAttribute('data-iox-hidden');\n }\n\n private reverseAction(element: HTMLElement, action: InteractionAction): void {\n const { keyframes } = this.buildAnimation(action);\n if (!keyframes.length) return;\n\n // Reverse: play the keyframes backwards\n element.animate([...keyframes].reverse(), {\n duration: action.duration,\n easing: action.easing,\n fill: 'forwards',\n });\n }\n\n private buildAnimation(action: InteractionAction): { keyframes: Keyframe[]; options: KeyframeAnimationOptions } {\n const dist = action.params?.['distance'] ?? 20;\n let keyframes: Keyframe[] = [];\n\n switch (action.type) {\n case 'fadeIn':\n keyframes = [{ opacity: 0 }, { opacity: 1 }];\n break;\n case 'fadeOut':\n keyframes = [{ opacity: 1 }, { opacity: 0 }];\n break;\n case 'moveUp':\n keyframes = [{ transform: `translateY(${dist}px)`, opacity: 0 }, { transform: 'translateY(0)', opacity: 1 }];\n break;\n case 'moveDown':\n keyframes = [{ transform: `translateY(-${dist}px)`, opacity: 0 }, { transform: 'translateY(0)', opacity: 1 }];\n break;\n case 'moveLeft':\n keyframes = [{ transform: `translateX(${dist}px)`, opacity: 0 }, { transform: 'translateX(0)', opacity: 1 }];\n break;\n case 'moveRight':\n keyframes = [{ transform: `translateX(-${dist}px)`, opacity: 0 }, { transform: 'translateX(0)', opacity: 1 }];\n break;\n case 'scaleIn':\n keyframes = [{ transform: 'scale(0.8)', opacity: 0 }, { transform: 'scale(1)', opacity: 1 }];\n break;\n case 'scaleOut':\n keyframes = [{ transform: 'scale(1)', opacity: 1 }, { transform: 'scale(0.8)', opacity: 0 }];\n break;\n case 'rotate':\n const deg = action.params?.['degrees'] ?? 360;\n keyframes = [{ transform: `rotate(0deg)` }, { transform: `rotate(${deg}deg)` }];\n break;\n case 'show':\n keyframes = [{ opacity: 0, visibility: 'hidden' }, { opacity: 1, visibility: 'visible' }];\n break;\n case 'hide':\n keyframes = [{ opacity: 1, visibility: 'visible' }, { opacity: 0, visibility: 'hidden' }];\n break;\n case 'toggleVisibility':\n // Toggle is stateful — handled separately via element style\n keyframes = [{ opacity: 0 }, { opacity: 1 }];\n break;\n }\n\n return {\n keyframes,\n options: {\n duration: action.duration,\n delay: action.delay,\n easing: action.easing,\n fill: 'forwards',\n },\n };\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { InteractionPreset } from '../models/component.model';\n\n/**\n * InteractionPresetRegistryService — in-memory store for org-level interaction presets.\n *\n * Loaded once per page by PageUiComponent alongside the page layout.\n * Scoped to PageUiComponent.providers[] via IoxBuilderModule — one registry per builder instance.\n */\n@Injectable()\nexport class InteractionPresetRegistryService {\n private presets = new Map<string, InteractionPreset>();\n\n setPresets(presets: InteractionPreset[]): void {\n this.presets.clear();\n for (const p of presets) {\n this.presets.set(p.id, p);\n }\n }\n\n getPreset(id: string): InteractionPreset | undefined {\n return this.presets.get(id);\n }\n\n getAll(): InteractionPreset[] {\n return Array.from(this.presets.values());\n }\n\n upsert(preset: InteractionPreset): void {\n this.presets.set(preset.id, preset);\n }\n\n remove(id: string): void {\n this.presets.delete(id);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\n\nexport interface BuilderClipboard {\n node?: ComponentNode;\n presetId?: string;\n interactionPresetId?: string;\n}\n\n/**\n * BuilderClipboardService — in-memory typed clipboard for the page builder.\n *\n * Stores element copies, style preset references, and interaction preset references.\n * Lives in memory only — no navigator.clipboard usage.\n * Scoped to PageUiComponent.providers[] — one clipboard per builder instance.\n */\n@Injectable()\nexport class BuilderClipboardService {\n private _clip: BuilderClipboard = {};\n\n copyNode(node: ComponentNode): void {\n this._clip = { node: JSON.parse(JSON.stringify(node)) };\n }\n\n copyPreset(presetId: string): void {\n this._clip = { ...this._clip, presetId };\n }\n\n copyInteractionPreset(interactionPresetId: string): void {\n this._clip = { ...this._clip, interactionPresetId };\n }\n\n getNode(): ComponentNode | undefined { return this._clip.node; }\n getPresetId(): string | undefined { return this._clip.presetId; }\n getInteractionPresetId(): string | undefined { return this._clip.interactionPresetId; }\n\n clear(): void { this._clip = {}; }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ElementState, STRUCTURAL_STATES, RELATIONAL_STATES, RELATIONAL_STATE_BASE, TARGETED_STATES, TARGETED_STATE_BASE } from '../models/component.model';\nimport { compileDeclarations, buildTargetedStateSelector } from '@vectoriox/iox-ui';\n\n/**\n * StyleRegistryService — manages a single <style> tag for the builder canvas.\n *\n * Each builder component gets two CSS classes:\n * .iox-node-{id} — applied to the inner element; handles layout/visual props\n * (display, flex, background, border, padding, etc.)\n * .iox-outer-{id} — applied to the host element by RenderDirective; handles\n * properties that participate in the PARENT flow (margin,\n * align-self, flex-grow/shrink/basis, order).\n *\n * This split is necessary because margin on an inner wrapper only adds internal\n * space — it does not push sibling elements. Applying margin to the host element\n * (which IS the flex/block child in the parent container) makes it work correctly.\n *\n * State styles (hover/active/focus) are stored under key `${nodeId}:${state}`\n * and compiled to `.iox-node-{id}:hover { … }` selectors.\n *\n * Design token variables are stored under the reserved key `__tokens__` and\n * compiled to a `:root { … }` block prepended to all other rules.\n *\n * Scoped to PageUiComponent.providers[] — one stylesheet per builder instance.\n */\n@Injectable()\nexport class StyleRegistryService {\n readonly changes$ = new Subject<void>();\n\n private rules = new Map<string, string>();\n private styleEl: HTMLStyleElement | null = null;\n\n /**\n * Properties that must live on the OUTER wrapper (.iox-outer-{id}) because they\n * affect how the element participates in its PARENT layout (flex/block flow).\n * Everything else goes to the INNER element (.iox-node-{id}).\n *\n * Exception — out-of-flow positioning (position:fixed/absolute):\n * When position is fixed or absolute, width is redirected to the inner element\n * (the positioned one) and a default width:100% is added if none is set, so the\n * element stays visible. top/right/bottom/left/zIndex are always inner because\n * they are co-ordinates of the positioned element, not the flow wrapper.\n * position itself goes to inner with `!important` to beat component-scoped CSS.\n */\n private static readonly OUTER_PROPS = new Set([\n 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft',\n 'alignSelf', 'flexGrow', 'flexShrink', 'flexBasis', 'order',\n // Grid-child placement — like the flex-child props above, these position the node\n // within the PARENT's grid, so they must land on the outer host, not the inner div.\n 'gridColumn', 'gridRow', 'justifySelf',\n 'width',\n ]);\n\n /** Properties that need !important on the inner element to beat Angular's scoped-CSS specificity boost. */\n private static readonly IMPORTANT_PROPS = new Set(['position']);\n\n init(): void {\n this.styleEl = document.createElement('style');\n this.styleEl.id = 'iox-runtime-styles';\n document.head.appendChild(this.styleEl);\n }\n\n /**\n * Write or update the base styles for a node, or a pseudo-class state override.\n *\n * @param nodeId The node's CSS id (used in `.iox-node-{nodeId}`)\n * @param styles Flat CSS property map (camelCase keys)\n * @param state Optional pseudo-class state ('hover' | 'active' | 'focus' | …).\n * When provided, compiles to `.iox-node-{id}:{state} { … }`.\n * State rules are NOT partitioned into inner/outer.\n * @param relativeToId For RELATIONAL states (e.g. 'parent-hover') this is the ancestor\n * css id; compiles to `.iox-node-{relativeToId}:{base} .iox-node-{nodeId} { … }`.\n * For TARGETED states (e.g. 'trigger-hover') this is the SCOPE css id\n * (nearest common ancestor of the styled node + trigger).\n * @param triggerId For TARGETED states only: the css id of the trigger node whose\n * pseudo-class drives the state. Compiles a `:has()`-scoped selector.\n */\n upsert(nodeId: string, styles: Record<string, any>, state?: ElementState, relativeToId?: string, triggerId?: string): void {\n if (!nodeId) return;\n\n if (state) {\n const key = `${nodeId}:${state}`;\n\n // Targeted states (trigger-hover): the styled node restyles when an ARBITRARY chosen\n // element is hovered. The selector is `:has()`-scoped to `relativeToId` (the nearest\n // common ancestor of styled + trigger) so it stays repetition-safe with one shared rule.\n if ((TARGETED_STATES as string[]).includes(state)) {\n const base = TARGETED_STATE_BASE[state];\n const css = (relativeToId && triggerId && base)\n ? this.compile(buildTargetedStateSelector(relativeToId, triggerId, nodeId, base), styles)\n : '';\n if (css) {\n this.rules.set(key, css);\n } else {\n this.rules.delete(key);\n }\n this.flush();\n return;\n }\n\n // Relational states (parent-hover): the pseudo-class lives on an ANCESTOR\n // and cascades to this element. Requires the ancestor's css id.\n if ((RELATIONAL_STATES as string[]).includes(state)) {\n const base = RELATIONAL_STATE_BASE[state];\n const css = (relativeToId && base)\n ? this.compile(`iox-node-${relativeToId}:${base} .iox-node-${nodeId}`, styles)\n : '';\n if (css) {\n this.rules.set(key, css);\n } else {\n this.rules.delete(key);\n }\n this.flush();\n return;\n }\n\n // Structural pseudo-classes (first-child, last-child, nth-child) target the\n // outer wrapper element so they participate correctly in grid/flex layout.\n const prefix = (STRUCTURAL_STATES as string[]).includes(state) ? 'iox-outer' : 'iox-node';\n const css = this.compile(`${prefix}-${nodeId}:${state}`, styles);\n if (css) {\n this.rules.set(key, css);\n } else {\n this.rules.delete(key);\n }\n this.flush();\n return;\n }\n\n // ::marker pseudo-element — emitted as a separate rule, not part of inner/outer split.\n const markerStyles = styles['__markerStyles'] as Record<string, any> | undefined;\n if (markerStyles && Object.keys(markerStyles).length) {\n const markerCss = this.compile(`iox-node-${nodeId}::marker`, markerStyles);\n if (markerCss) this.rules.set(`${nodeId}::marker`, markerCss);\n else this.rules.delete(`${nodeId}::marker`);\n } else {\n this.rules.delete(`${nodeId}::marker`);\n }\n\n const pos = String(styles['position'] ?? '');\n const isOutOfFlow = pos === 'fixed' || pos === 'absolute';\n\n const inner: Record<string, any> = {};\n const outer: Record<string, any> = {};\n for (const [k, v] of Object.entries(styles)) {\n if (k === '__markerStyles') continue;\n const wantsOuter = StyleRegistryService.OUTER_PROPS.has(k);\n // width goes to inner for fixed/absolute (the positioned element owns its own width)\n if (wantsOuter && !(isOutOfFlow && k === 'width')) {\n outer[k] = v;\n } else {\n inner[k] = v;\n }\n }\n // Ensure fixed/absolute elements stay visible when no explicit width is set\n if (isOutOfFlow && inner['width'] === undefined) {\n inner['width'] = '100%';\n }\n const innerCss = this.compile(`iox-node-${nodeId}`, inner);\n const outerCss = this.compile(`iox-outer-${nodeId}`, outer);\n const combined = [innerCss, outerCss].filter(Boolean).join('\\n');\n if (combined) {\n this.rules.set(nodeId, combined);\n } else {\n this.rules.delete(nodeId);\n }\n this.flush();\n }\n\n /**\n * Write the org-level design token variables as a `:root { … }` block.\n * Token names should be CSS custom property names without the `--` prefix\n * (e.g., `{ 'iox-primary-color': '#cb9090' }`).\n * Pass an empty object to clear all tokens.\n */\n upsertTokens(tokens: Record<string, string>): void {\n const entries = Object.entries(tokens)\n .filter(([, v]) => v !== undefined && v !== null && v !== '')\n .map(([k, v]) => ` --${k}: ${v};`);\n if (entries.length) {\n this.rules.set('__tokens__', `:root {\\n${entries.join('\\n')}\\n}`);\n } else {\n this.rules.delete('__tokens__');\n }\n this.flush();\n }\n\n remove(nodeId: string): void {\n if (!nodeId) return;\n // Remove base rule and all state rules for this node\n this.rules.delete(nodeId);\n for (const key of this.rules.keys()) {\n if (key.startsWith(`${nodeId}:`)) {\n this.rules.delete(key);\n }\n }\n this.flush();\n }\n\n destroy(): void {\n this.rules.clear();\n if (this.styleEl) {\n this.styleEl.remove();\n this.styleEl = null;\n }\n }\n\n private compile(className: string, styles: Record<string, any>): string {\n // Declaration compilation (kebab-case, viewport-unit rewrite, !important) lives in\n // the shared style-compiler so the SSR engine produces byte-identical output.\n // The inner/outer partition + selector emission stay here (builder-only concern).\n const decls = compileDeclarations(styles, StyleRegistryService.IMPORTANT_PROPS);\n if (!decls.length) return '';\n const body = decls.map(d => ` ${d};`).join('\\n');\n return `.${className} {\\n${body}\\n}`;\n }\n\n private _flushPending = false;\n\n private flush(): void {\n if (!this.styleEl || this._flushPending) return;\n this._flushPending = true;\n requestAnimationFrame(() => {\n this._flushPending = false;\n if (!this.styleEl) return;\n // __tokens__ always first so variables are available to all subsequent rules\n const tokenBlock = this.rules.get('__tokens__');\n const rest = Array.from(this.rules.entries())\n .filter(([k]) => k !== '__tokens__')\n .map(([, v]) => v);\n this.styleEl.textContent = [tokenBlock, ...rest].filter(Boolean).join('\\n');\n this.changes$.next();\n });\n }\n}\n","import { ChangeDetectorRef, Injectable } from '@angular/core';\nimport Moveable from 'moveable';\n\nimport { ComponentNode } from '../models/component.model';\nimport { DragEngineService, DragPayload } from './drag-engine.service';\nimport { StyleRegistryService } from './style-registry.service';\n\n/**\n * MoveableCanvasService — Phase 1 of the Moveable + Selecto migration\n * (see iox-ai-guidance/architecture/builder/moveable-migration.md).\n *\n * Drives DRAG for the SELECTED element via Moveable instead of interact.js, while REUSING the\n * proven reorder machinery (`DragEngineService.handleDrop`). It is a pure INPUT device: during a\n * drag it applies a TRANSIENT transform, and on drop it RESETS the transform to nothing and instead\n * reorders the layout tree (constraint C1 — a persisted transform on an in-flow canvas element\n * breaks Lenis scroll). Everything here runs ONLY when `moveableMode` is on; interact.js is\n * untouched, so the flag-off path is byte-identical to today.\n *\n * Scale: Moveable reads `getBoundingClientRect()` (already post-scale) and works in viewport\n * client coordinates, so drop hit-testing via `elementsFromPoint` / rects is scale-correct without\n * extra math. The control box is rendered into the same overlay container the selection overlay uses.\n */\n@Injectable({ providedIn: 'root' })\nexport class MoveableCanvasService {\n private moveable: Moveable | null = null;\n private container: HTMLElement | null = null;\n private scaleGetter: () => number = () => 1;\n\n private target: HTMLElement | null = null;\n private node: ComponentNode | null = null;\n private sourceId: string | null = null;\n /** A rubber-band multi-select group is active; `groupAt` guards the immediate follow-up click. */\n private groupActive = false;\n private groupAt = 0;\n\n /** Called after a successful reorder so the host can emit LAYOUT_CHANGED / refresh selection. */\n onReorder: (() => void) | null = null;\n /** Called after a geometry commit (resize) so the host can emit LAYOUT_CHANGED (undo/save). */\n onLayoutChanged: (() => void) | null = null;\n\n constructor(\n private dragEngine: DragEngineService,\n private styleRegistry: StyleRegistryService,\n ) {}\n\n /** Preview device viewport size (CSS px) — reference for vw/vh unit conversion on resize. */\n private viewportGetter: () => { width: number; height: number } = () => ({ width: 0, height: 0 });\n\n /** Wire the Moveable control box into `container`; `scaleGetter` returns the live canvas zoom;\n * `viewportGetter` returns the previewed device viewport size (for vw/vh resize conversion). */\n init(container: HTMLElement, scaleGetter: () => number, viewportGetter?: () => { width: number; height: number }): void {\n this.container = container;\n this.scaleGetter = scaleGetter;\n if (viewportGetter) this.viewportGetter = viewportGetter;\n }\n\n /** Point Moveable at the selected element (skips inline-edit + preview-clone targets). */\n select(element: HTMLElement | null, node: ComponentNode | null): void {\n // Swallow the deselect+click that fire on the SAME mouseup that just ended a rubber-band\n // group selection — otherwise the trailing clearSelect (→ destroyMoveable) or click would\n // instantly collapse the fresh group. Must run BEFORE the null-check below. A later,\n // deliberate click is well outside the ~250ms window and clears the group normally.\n if (this.groupActive && Date.now() - this.groupAt < 250) return;\n this.groupActive = false;\n\n this.target = null;\n this.node = null;\n this.sourceId = null;\n if (!element || !node || !this.container) { this.destroyMoveable(); return; }\n // Preview clones (repeater/slider rows) and hidden nodes are not editable.\n if (element.closest('[data-iox-hidden]') || (node as any).__previewClone) { this.destroyMoveable(); return; }\n\n this.target = element;\n this.node = node;\n this.sourceId = this.resolveDropzoneId(element);\n this.ensureMoveable();\n // Single selection: the OverlayService draws the outline, so Moveable stays line-less (a\n // group selection re-enables the lines in selectGroup).\n (this.moveable as any).hideDefaultLines = true;\n this.moveable!.target = element;\n // Snap against sibling/cousin nodes (not self, ancestors, or own descendants).\n (this.moveable as any).elementGuidelines = this.guidelines(element);\n // Drag is initiated by grabbing the ELEMENT itself (like interact.js) — not a Moveable\n // overlay area — so a plain click still passes through to selection/child-selection and only\n // a movement past the threshold starts a drag. Keeps Moveable visually silent (no hit-area box).\n (this.moveable as any).dragTarget = element;\n this.moveable!.updateRect();\n }\n\n /**\n * Multi-select group (Selecto rubber-band → group move). With 2+ targets Moveable shows its\n * bounding box + handles for the whole group; with ≤1 it defers to the normal single-select\n * path (select()), which keeps the OverlayService as the sole owner of single-selection visuals.\n * Returns true when a group is active so the host can skip the single-select wiring.\n */\n selectGroup(elements: HTMLElement[]): boolean {\n const visible = (elements || []).filter(el => {\n if (el.closest('[data-iox-hidden]')) return false;\n // Out-of-flow (fixed/absolute) nodes are positioned independently — grouping them with\n // in-flow siblings for a reflow-move is meaningless, and a fixed node's control-box\n // measurement is unreliable in the transformed canvas (see moveable-migration.md gap).\n const pos = getComputedStyle(el).position;\n return pos !== 'fixed' && pos !== 'absolute' && pos !== 'sticky';\n });\n // Keep only the TOP-MOST selected nodes — Moveable can't group an element with its own\n // descendant, and moving a parent already moves its children (the rubber band grabs both).\n const targets = visible.filter(el => !visible.some(other => other !== el && other.contains(el)));\n if (targets.length <= 1) { return false; }\n this.target = null;\n this.node = null;\n this.groupActive = true;\n this.groupAt = Date.now();\n this.ensureMoveable();\n // A GROUP box is a legitimate visual (nothing single-select in the overlay to duplicate).\n (this.moveable as any).hideDefaultLines = false;\n this.moveable!.target = targets as any;\n this.moveable!.updateRect();\n return true;\n }\n\n /** Recompute the control-box position (call on scroll/zoom/layout changes). */\n refresh(): void { this.moveable?.updateRect(); }\n\n /** Snap guideline elements for `target`: every node host except itself, its ancestors, and its\n * own descendants — i.e. siblings/cousins to align edges/centers against. */\n private guidelines(target: HTMLElement): HTMLElement[] {\n if (!this.container) return [];\n const all = Array.from(this.container.querySelectorAll<HTMLElement>('[class*=\"iox-node-\"]'));\n return all.filter(el => el !== target && !target.contains(el) && !el.contains(target));\n }\n\n destroy(): void { this.destroyMoveable(); this.container = null; }\n\n // ── internals ────────────────────────────────────────────────────────────\n\n private ensureMoveable(): void {\n if (this.moveable) return;\n this.moveable = new Moveable(this.container!, {\n target: undefined,\n draggable: true,\n resizable: true, // Phase 3 — corner handles → styleProps width/height (C2)\n rotatable: false, // (out-of-flow only — C1)\n origin: false,\n zoom: 1,\n // The OverlayService owns ALL selection visuals (pink outline, hover margin/padding rings,\n // toolbar, badges) — Moveable draws NO box/lines. It shows ONLY the 4 corner RESIZE handles\n // (renderDirections) and provides the drag hit-area. `iox-moveable-silent` + SCSS in\n // builder.component.scss hide the lines and style the handles to match, below the overlay.\n hideDefaultLines: true,\n renderDirections: ['nw', 'ne', 'sw', 'se'],\n className: 'iox-moveable-silent',\n // Snap-to-guides: align edges/centers to sibling elements while dragging/resizing, with\n // the distance readout. elementGuidelines are refreshed per selection (see select()).\n snappable: true,\n snapThreshold: 6,\n snapDirections: { top: true, left: true, bottom: true, right: true, center: true, middle: true },\n elementSnapDirections: { top: true, left: true, bottom: true, right: true, center: true, middle: true },\n snapGap: true,\n isDisplaySnapDigit: true,\n } as any);\n\n this.moveable.on('dragStart', (e) => {\n // Never start a drag from inside inline text editing.\n if ((e.inputEvent?.target as HTMLElement)?.closest?.('[contenteditable=\"true\"]')) {\n e.stop?.();\n }\n });\n // Transient transform only — visual feedback during the drag (C1: reset on drop).\n this.moveable.on('drag', (e) => { e.target.style.transform = e.transform; });\n this.moveable.on('dragEnd', (e) => this.commitDrag(e));\n\n // Resize: live inline width/height for feedback, then commit to styleProps on end (C2 — never\n // a transform:scale, so no Lenis-scroll break; the panel + save + SSR all see the real size).\n this.moveable.on('resize', (e) => {\n e.target.style.width = `${Math.round(e.width)}px`;\n e.target.style.height = `${Math.round(e.height)}px`;\n e.target.style.transform = e.drag.transform; // keeps the box anchored while resizing\n });\n this.moveable.on('resizeEnd', (e) => this.commitResize(e));\n }\n\n private destroyMoveable(): void {\n if (this.moveable) { this.moveable.destroy(); this.moveable = null; }\n }\n\n private commitDrag(e: any): void {\n const el = e.target as HTMLElement;\n // C1: never persist the transform — reset it; the result is a tree reorder, not a position.\n el.style.transform = '';\n if (!this.node) return;\n\n const pointer = this.lastPointer(e);\n if (!pointer) { this.onReorder?.(); return; }\n\n const targetId = this.dropzoneUnderPoint(pointer.x, pointer.y, el);\n if (!targetId) { this.onReorder?.(); return; }\n\n const children = this.dragEngine.getData(targetId) as ComponentNode[] | undefined;\n const cdr = this.dragEngine.getCdr(targetId) as ChangeDetectorRef | undefined;\n if (!children || !cdr) { this.onReorder?.(); return; }\n\n const insertIndex = this.calcInsertIndex(targetId, pointer.y);\n const srcChildren = this.sourceId ? (this.dragEngine.getData(this.sourceId) as ComponentNode[] | undefined) : undefined;\n const sourceIndex = srcChildren ? srcChildren.indexOf(this.node) : -1;\n const payload: DragPayload = { type: 'internal', data: this.node, sourceId: this.sourceId ?? null, sourceIndex };\n this.dragEngine.handleDrop(children, { payload, targetId, insertIndex }, targetId, cdr, () => {\n this.onReorder?.();\n // Re-point the control box at the moved element's (possibly new) host.\n setTimeout(() => this.moveable?.updateRect(), 0);\n });\n }\n\n private commitResize(e: any): void {\n const el = e.target as HTMLElement;\n el.style.transform = ''; // C1: never persist a transform on an in-flow canvas element\n if (!this.node) { return; }\n const last = e.lastEvent ?? e;\n const wPx = last.width ?? el.getBoundingClientRect().width;\n const hPx = last.height ?? el.getBoundingClientRect().height;\n // C2: geometry goes to styleProps (width/height) — never a transform:scale. Keep the unit the\n // user CONFIGURED (%, vw, em, …) instead of always forcing px.\n this.applyStyle(this.node, {\n width: this.toConfiguredUnit(wPx, this.currentStyleValue('width'), el, 'width'),\n height: this.toConfiguredUnit(hPx, this.currentStyleValue('height'), el, 'height'),\n });\n // Clear the transient inline size so the styleProps `.iox-node` rule drives it (single source).\n el.style.width = '';\n el.style.height = '';\n this.onLayoutChanged?.();\n setTimeout(() => this.moveable?.updateRect(), 0);\n }\n\n /** The node's currently-configured value for a style trait (e.g. '100%', '120px'). */\n private currentStyleValue(name: string): string | undefined {\n for (const group of ((this.node as any)?.styleTraits ?? [])) {\n for (const trait of (group.traits ?? [])) {\n if (trait.name === name) return trait.default;\n }\n }\n return undefined;\n }\n\n /** Convert a pixel measurement into the unit the user configured, so resizing from the canvas\n * preserves %, vw/vh, em/rem etc. instead of always writing px. */\n private toConfiguredUnit(px: number, current: string | undefined, el: HTMLElement, axis: 'width' | 'height'): string {\n const round = (n: number) => Math.round(n * 100) / 100;\n const m = String(current ?? '').trim().match(/(px|%|vw|vh|vmin|vmax|rem|em)\\s*$/);\n const unit = m ? m[1] : 'px';\n switch (unit) {\n case '%': {\n const ref = axis === 'width' ? (el.parentElement?.clientWidth ?? 0) : (el.parentElement?.clientHeight ?? 0);\n return ref > 0 ? `${round(px / ref * 100)}%` : `${Math.round(px)}px`;\n }\n case 'vw': { const vw = this.viewportGetter().width; return vw > 0 ? `${round(px / vw * 100)}vw` : `${Math.round(px)}px`; }\n case 'vh': { const vh = this.viewportGetter().height; return vh > 0 ? `${round(px / vh * 100)}vh` : `${Math.round(px)}px`; }\n case 'vmin': { const { width, height } = this.viewportGetter(); const base = Math.min(width, height); return base > 0 ? `${round(px / base * 100)}vmin` : `${Math.round(px)}px`; }\n case 'vmax': { const { width, height } = this.viewportGetter(); const base = Math.max(width, height); return base > 0 ? `${round(px / base * 100)}vmax` : `${Math.round(px)}px`; }\n case 'rem': { const fs = parseFloat(getComputedStyle(el.ownerDocument.documentElement).fontSize) || 16; return `${round(px / fs)}rem`; }\n case 'em': { const fs = parseFloat(getComputedStyle(el).fontSize) || 16; return `${round(px / fs)}em`; }\n default: return `${Math.round(px)}px`;\n }\n }\n\n /** Write geometry changes into the node's styleTraits (the serialized source of truth) and the\n * central stylesheet, so the style panel, save (self-describing), and SSR engine all agree. */\n private applyStyle(node: ComponentNode, changes: Record<string, string>): void {\n const styles: Record<string, any> = {};\n for (const group of ((node as any).styleTraits ?? [])) {\n for (const trait of (group.traits ?? [])) {\n if (trait.name in changes) trait.default = changes[trait.name];\n if (trait.name !== undefined && trait.default !== undefined) styles[trait.name] = trait.default;\n }\n }\n const cssId = (node as any).styleId ?? node.id;\n if (cssId) this.styleRegistry.upsert(cssId, styles);\n }\n\n /** Final pointer position from the Moveable end event (client/viewport px). */\n private lastPointer(e: any): { x: number; y: number } | null {\n const ie = e.inputEvent as MouseEvent | undefined;\n if (ie && typeof ie.clientX === 'number') return { x: ie.clientX, y: ie.clientY };\n if (Array.isArray(e.clientX)) return { x: e.clientX[0], y: e.clientY[0] };\n if (typeof e.clientX === 'number') return { x: e.clientX, y: e.clientY };\n return null;\n }\n\n /** Walk up from an element to the nearest registered dropzone id (el.id is stamped by DragEngine). */\n private resolveDropzoneId(el: HTMLElement | null): string | null {\n let e: HTMLElement | null = el;\n while (e) {\n if (e.id && this.dragEngine.getData(e.id) !== undefined) return e.id;\n e = e.parentElement;\n }\n return null;\n }\n\n /** Topmost registered dropzone under the pointer that is NOT inside the dragged element's subtree. */\n private dropzoneUnderPoint(x: number, y: number, draggedEl: HTMLElement): string | null {\n const stack = document.elementsFromPoint(x, y) as HTMLElement[];\n for (const el of stack) {\n const id = this.resolveDropzoneId(el);\n if (!id) continue;\n const zoneEl = document.getElementById(id);\n if (zoneEl && draggedEl.contains(zoneEl)) continue; // don't drop into own subtree\n return id;\n }\n return null;\n }\n\n /** Insertion index within a dropzone by comparing pointer Y to each child's vertical midpoint. */\n private calcInsertIndex(targetId: string, y: number): number {\n const zoneEl = document.getElementById(targetId);\n if (!zoneEl) return 0;\n const childWraps = Array.from(zoneEl.children).filter(\n (c) => (c as HTMLElement).matches('.container-child, .section-child, [data-iox-draggable]'),\n ) as HTMLElement[];\n let idx = 0;\n for (const w of childWraps) {\n const r = w.getBoundingClientRect();\n if (y > r.top + r.height / 2) idx++;\n }\n return idx;\n }\n}\n","import { Injectable } from '@angular/core';\nimport Selecto from 'selecto';\n\n/**\n * SelectoCanvasService — Phase 1 of the Moveable + Selecto migration\n * (see iox-ai-guidance/architecture/builder/moveable-migration.md).\n *\n * Rubber-band MULTI-select on the canvas. Runs ONLY when `moveableMode` is on; interact.js is\n * untouched, so the flag-off path is byte-identical to today.\n *\n * - `selectFromInside: false` — a drag that STARTS on a node moves it (Moveable); the rubber band\n * only starts from empty canvas space, so single-element drag/select is unaffected.\n * - `selectByClick: false` — a plain click still flows through the existing single-select path\n * (OverlayService), so nothing about clicking changes.\n * - `rootContainer` is the UNtransformed `.preview` (Selecto explicitly wants a non-transformed\n * root): the rubber band and the targets' client rects are then in the same viewport space, so\n * hit-testing is correct even though the canvas content is `transform: scale()`d.\n *\n * On a rubber-band release it emits the selected node host elements; the host maps them to nodes and\n * drives Moveable with the group (see MoveableCanvasService.selectGroup).\n */\n@Injectable({ providedIn: 'root' })\nexport class SelectoCanvasService {\n private selecto: Selecto | null = null;\n\n /** Called on rubber-band release with the selected `.iox-node-*` host elements (may be empty). */\n onSelect: ((elements: HTMLElement[]) => void) | null = null;\n\n /** Count from the last rubber-band release (state/telemetry). */\n lastSelectedCount = 0;\n\n /**\n * Wire Selecto onto the canvas.\n * @param container untransformed element the rubber band renders into (`.preview`).\n * @param dragContainer element the drag is listened on (the same `.preview`).\n * @param selectableRoot the node container whose `.iox-node-*` descendants are selectable.\n */\n init(container: HTMLElement, dragContainer: HTMLElement, selectableRoot: HTMLElement): void {\n this.destroy();\n this.selecto = new Selecto({\n container,\n rootContainer: container,\n dragContainer,\n // Only real node hosts inside the canvas — never overlay/toolbar chrome.\n selectableTargets: [`#${selectableRoot.id || 'canvas-preview'} [class*=\"iox-node-\"]`],\n selectByClick: false,\n selectFromInside: false,\n hitRate: 0, // any intersection selects — forgiving rubber band\n });\n this.selecto.on('selectEnd', (e: any) => {\n this.lastSelectedCount = (e.selected as HTMLElement[]).length;\n this.onSelect?.((e.selected as HTMLElement[]).filter(el => !!el));\n });\n }\n\n /** Keep Selecto's selectable set fresh after layout changes (nodes added/removed/reordered). */\n refresh(): void { /* selectableTargets is a live function — nothing to recompute */ }\n\n destroy(): void {\n this.selecto?.destroy();\n this.selecto = null;\n }\n}\n","// Virtual trait composition now lives in @vectoriox/iox-ui so the SSR engine (which does NOT depend\n// on iox-builder) can use the SAME logic — otherwise the engine emitted raw virtual keys\n// (translate-x, filter-blur…) as invalid CSS. This is a re-export passthrough to keep existing\n// iox-builder imports (`../style-compose`) working with no duplicated implementation.\nexport { composeVirtualTraits, VIRTUAL_TRAIT_KEYS } from '@vectoriox/iox-ui';\n","import { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectorRef,\n ComponentRef,\n Directive,\n EnvironmentInjector,\n EventEmitter,\n Inject,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewContainerRef,\n createComponent,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { safeSetInput } from '@vectoriox/iox-ui';\n\nimport { ComponentNode, ElementState, RELATIONAL_STATES, TARGETED_STATES } from '../models/component.model';\nimport { ComponentRegistryService } from '../services/component-registry.service';\nimport { DragEngineService } from '../services/drag-engine.service';\nimport { OverlayService } from '../overlay/overlay.service';\nimport { StyleRegistryService } from '../services/style-registry.service';\nimport { InteractionEngineService } from '../services/interaction-engine.service';\nimport { PanelEventService, PanelEventTypes } from '../panels/panel-event.service';\nimport { composeVirtualTraits } from '../style-compose';\n\n// Module-level counter — unique drop-list ID per Section instance across the whole app session.\nlet dropListCounter = 0;\n\n/**\n * Node types whose iox-ui component is a DIRECTIVE-HOST (element+attribute selector on the real\n * tag, e.g. `img[iox-img]`, `h1[iox-heading]`). The host IS the element, so we must NOT force an\n * inline `display:block` (it out-ranks both `:host` and the styleProps `.iox-node` rule — the same\n * bug the SSR engine hit). Mirrors the engine's DIRECTIVE_HOST_TYPES for the leaf/variable-tag set.\n * NOTE: Container/Section/List/ListItem render via iox-BUILDER wrapper components here (not\n * directive-hosts), so they are intentionally excluded.\n */\nconst DIRECTIVE_HOST_TYPES = new Set<string>([\n 'Image', 'Icon', 'Divider', 'Spacer', 'Button', 'Link', 'Heading', 'Text', 'ButtonBlock',\n // Phase 2 (9c): layout components converted to directive-hosts (host IS the real tag).\n 'Section', 'Container', 'List', 'ListItem',\n]);\n\nconst CONTAINER_TAGS = ['div', 'section', 'article', 'header', 'footer', 'main', 'nav', 'ul', 'ol', 'li'];\n\n/**\n * RenderDirective — applied to <ng-container> to dynamically instantiate a\n * builder component with zero wrapper elements in the DOM.\n *\n * A directive's ViewContainerRef inserts the created component's host element as\n * a sibling of the ng-container comment node — directly inside the parent element\n * — so the resulting DOM has no extra <app-renderer> wrapper.\n *\n * Usage:\n * <ng-container [ioxRender]=\"node\"\n * (onClick)=\"handleClick($event)\"\n * (onMouseEnter)=\"handleMouseEnter($event)\"\n * (onMouseLeave)=\"handleMouseLeave()\">\n * </ng-container>\n */\n@Directive({\n selector: '[ioxRender]',\n standalone: false,\n})\nexport class RenderDirective implements OnInit, OnDestroy {\n @Input() ioxRender: ComponentNode | null = null;\n /**\n * WRAPPER-COLLAPSE opt-in (task 9c). When a parent renders a child DIRECTLY (no `iox-outer`\n * wrapper div), it passes the parent dropzone id here. The RenderDirective then puts the\n * `iox-outer-{id}` class on the node HOST (so the host is the single flex/grid item carrying both\n * `iox-outer` + `iox-node`, like the SSR engine) and registers drag on the host. When unset\n * (`null`), the legacy path is byte-identical — the parent's wrapper owns `iox-outer` + drag.\n */\n @Input() ioxDragSourceId: string | null = null;\n @Output() onClick = new EventEmitter<any>();\n @Output() onMouseEnter = new EventEmitter<any>();\n @Output() onMouseLeave = new EventEmitter<any>();\n\n private childSubs: Subscription[] = [];\n /** Host element drag was registered on (collapsed path) — unregistered on destroy. */\n private hostDragEl: HTMLElement | null = null;\n\n constructor(\n private vcr: ViewContainerRef,\n private injector: Injector,\n private envInjector: EnvironmentInjector,\n @Inject(DOCUMENT) private doc: Document,\n private registryService: ComponentRegistryService,\n private overlayService: OverlayService,\n private styleRegistry: StyleRegistryService,\n private interactionEngine: InteractionEngineService,\n private cdr: ChangeDetectorRef,\n private panelEventService: PanelEventService,\n private dragEngine: DragEngineService,\n ) {}\n\n /**\n * Tag for a variable-tag directive-host (whose selector lists several tags, so\n * `vcr.createComponent` would always pick the first). Reads the value from the node's traits.\n * Returns null for fixed-tag hosts and non-directive-host components.\n */\n private variableTag(node: ComponentNode): string | null {\n const traitVal = (name: string): any =>\n (Object.values(node.traits || {}) as any[]).find(t => t?.name === name)?.default;\n switch (node.type) {\n case 'Heading': {\n const l = traitVal('level');\n return ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(l) ? l : 'h2';\n }\n case 'Text':\n return traitVal('tag') === 'span' ? 'span' : 'p';\n case 'ButtonBlock':\n return traitVal('tag') === 'a' ? 'a' : 'button';\n case 'Container':\n case 'List':\n case 'ListItem': {\n const t = traitVal('htmlTag');\n if (CONTAINER_TAGS.includes(t)) return t;\n return node.type === 'List' ? 'ul' : node.type === 'ListItem' ? 'li' : 'div';\n }\n default:\n return null;\n }\n }\n\n ngOnInit(): void {\n this.render(this.ioxRender);\n }\n\n ngOnDestroy(): void {\n this.childSubs.forEach(s => s.unsubscribe());\n if (this.hostDragEl) { this.dragEngine.unregisterDraggable(this.hostDragEl); this.hostDragEl = null; }\n if (this.ioxRender) {\n this.interactionEngine.detach(this.ioxRender);\n this.overlayService.unregisterNode(this.ioxRender);\n // Only remove the CSS rule if this node OWNS it (i.e. it is not a clone).\n // Clones set styleId to point at the template node's id — removing would\n // destroy the shared rule and break all other rows.\n const isClone = !!this.ioxRender.styleId;\n if (!isClone && this.ioxRender.id) {\n this.styleRegistry.remove(this.ioxRender.id);\n }\n }\n }\n\n /**\n * Walk up from `target` to find a registered parent component element.\n * Returns { element, node } if found, or null if the target is outside\n * all known builder components (e.g. the canvas background).\n */\n /**\n * The nearest ancestor node's cssId, read from the DOM `iox-node-{id}` classes (NOT the overlay\n * registry — at state-restore time the parent isn't registered yet, since it registers only\n * AFTER rendering its children). Used to key relational (parent-hover) rules. (issue #1)\n */\n private resolveParentNodeId(childEl: HTMLElement | null): string | undefined {\n let el = childEl?.parentElement ?? null;\n while (el) {\n for (let i = 0; i < el.classList.length; i++) {\n const c = el.classList[i];\n if (c.startsWith('iox-node-')) return c.slice('iox-node-'.length);\n }\n el = el.parentElement;\n }\n return undefined;\n }\n\n /** Nearest ANCESTOR of the styled element that is a registered iox-node AND contains the trigger\n * element — i.e. the DOM equivalent of `nearestCommonAncestorId`, resolved per rendered instance.\n * Used to re-emit a `trigger-hover` rule after a move/duplicate. Returns undefined if the trigger\n * isn't in the DOM yet (caller then skips rather than clobbering the existing rule). */\n private resolveTargetedScopeId(styledEl: HTMLElement | null, triggerCssId: string): string | undefined {\n let el = styledEl?.parentElement ?? null;\n while (el) {\n let cssId: string | undefined;\n for (let i = 0; i < el.classList.length; i++) {\n const c = el.classList[i];\n if (c.startsWith('iox-node-')) { cssId = c.slice('iox-node-'.length); break; }\n }\n if (cssId && el.querySelector(`.iox-node-${triggerCssId}`)) return cssId;\n el = el.parentElement;\n }\n return undefined;\n }\n\n private findParentNodeElement(target: HTMLElement): { element: HTMLElement; node: ComponentNode } | null {\n let el: HTMLElement | null = target;\n while (el) {\n const match = this.overlayService.findNodeByElement(el);\n if (match) {\n return { element: el, node: match.node };\n }\n el = el.parentElement;\n }\n return null;\n }\n\n private render(node: ComponentNode | null): void {\n if (!node) return;\n\n const componentClass = this.registryService.getComponent(node.type);\n if (!componentClass) return;\n\n // vcr.createComponent inserts the new component's host element after the ng-container\n // comment anchor — directly inside the parent element. No wrapper div is created.\n // Variable-tag directive-hosts (Heading/Text/ButtonBlock) list every allowed tag in their\n // selector, so vcr.createComponent would always pick the FIRST — create them on an explicit\n // hostElement of the right tag and insert that view instead (mirrors the SSR engine).\n const tag = this.variableTag(node);\n let componentRef: ComponentRef<any>;\n if (tag) {\n const hostElement = this.doc.createElement(tag);\n componentRef = createComponent(componentClass, {\n environmentInjector: this.envInjector,\n elementInjector: this.injector,\n hostElement,\n });\n this.vcr.insert(componentRef.hostView);\n } else {\n componentRef = this.vcr.createComponent(componentClass, { injector: this.injector });\n }\n\n // Apply regular trait defaults (title, image, description, etc.). safeSetInput() uses\n // setInput() for declared inputs (marks the view dirty, integrates with CD + signal inputs)\n // and falls back to direct assignment for anything the component doesn't declare — so a\n // trait that has no matching @Input (e.g. `sourcePath` on a SliderContainer) never emits the\n // NG0303 console error that a bare setInput() would. Skip SectionLabel traits — they are\n // UI-only panel headers with no matching input.\n Object.values(node.traits || {}).forEach((trait: any) => {\n if (trait.type === 'sectionLabel') return;\n safeSetInput(componentRef, trait.name, trait.default);\n });\n\n // Build initial style map from styleTraits defaults.\n const initialStyle: Record<string, any> = {};\n if (node.styleTraits?.length) {\n for (const group of node.styleTraits) {\n for (const trait of group.traits) {\n if (trait.default !== undefined) {\n initialStyle[trait.name] = trait.default;\n }\n }\n }\n }\n\n // Use styleId when present (clone nodes share the template node's CSS rule).\n const cssId = node.styleId ?? node.id;\n\n // Register CSS rules in the central stylesheet (inner + outer split).\n if (cssId) {\n const composedBase = composeVirtualTraits(initialStyle);\n this.styleRegistry.upsert(cssId, composedBase);\n // Restore per-state overrides saved from a previous session.\n if (node.stateStyles) {\n const childEl = componentRef.location?.nativeElement as HTMLElement | null;\n for (const state of Object.keys(node.stateStyles) as ElementState[]) {\n const stateMap = (node.stateStyles as Record<string, any>)[state];\n if (!stateMap || !Object.keys(stateMap).length) continue;\n if ((RELATIONAL_STATES as string[]).includes(state)) {\n // Relational states (parent-hover) compile to\n // `.iox-node-{parentId}:hover .iox-node-{childId}` — they need the CURRENT parent id.\n // Resolve it from the DOM so the rule re-resolves after a cross-container MOVE (which\n // re-renders the child). If it can't be resolved yet (initial load: the parent registers\n // its class only after rendering its children), SKIP — do NOT clobber the correct rule\n // that page-ui's applyStateEnhancements already produced from the node tree. (issue #1)\n const relativeToId = this.resolveParentNodeId(childEl);\n if (!relativeToId) continue;\n this.styleRegistry.upsert(cssId, composeVirtualTraits(stateMap, initialStyle), state, relativeToId);\n } else if ((TARGETED_STATES as string[]).includes(state)) {\n // Targeted states (trigger-hover) compile to a `:has()` scoped to the nearest\n // common ancestor of the styled node + the chosen trigger. On a re-render (move,\n // duplicate, drop) we must RE-EMIT with a freshly-resolved scope — otherwise the\n // rule is clobbered and the hover stops working. Resolve the scope from the live\n // DOM (works per-instance); SKIP if the trigger isn't rendered yet, so we don't\n // clobber the correct rule page-ui's applyStateEnhancements already produced.\n const triggerCssId = node.stateTriggers?.[state];\n if (!triggerCssId) continue;\n const scopeId = this.resolveTargetedScopeId(childEl, triggerCssId);\n if (!scopeId) continue;\n this.styleRegistry.upsert(cssId, composeVirtualTraits(stateMap, initialStyle), state, scopeId, triggerCssId);\n } else {\n this.styleRegistry.upsert(cssId, composeVirtualTraits(stateMap, initialStyle), state);\n }\n }\n }\n }\n\n // Set nodeId — declared as @Input() on every builder component.\n if (cssId) {\n componentRef.setInput('nodeId', cssId);\n }\n\n // Pass the node reference. 'node' is NOT declared as @Input on leaf\n // components (Card, Text, etc.) — always use direct assignment to avoid\n // Angular NG0303 warnings that setInput() would trigger.\n (componentRef.instance as any)['node'] = node;\n\n // Layout components (Section/Container) read this.style internally for\n // CDK drop list orientation. 'style' is not declared as @Input so use\n // direct assignment; children and dropListId ARE @Input on all layouts.\n // Guard with Array.isArray so leaf nodes whose serialized data happens\n // to have a stale/empty children key don't trigger NG0303.\n const instance = componentRef.instance as any;\n if (Array.isArray(node.children) && 'dropListId' in instance) {\n instance['style'] = { ...initialStyle };\n componentRef.setInput('children', node.children);\n componentRef.setInput('dropListId', `section-${++dropListCounter}`);\n }\n\n // Forward child events from layout components (Section → builder)\n const childClick: EventEmitter<any> = instance['childClick'];\n const childMouseEnter: EventEmitter<any> = instance['childMouseEnter'];\n const childMouseLeave: EventEmitter<any> = instance['childMouseLeave'];\n if (childClick) this.childSubs.push(childClick.subscribe((e: any) => this.onClick.emit(e)));\n if (childMouseEnter) this.childSubs.push(childMouseEnter.subscribe((e: any) => this.onMouseEnter.emit(e)));\n if (childMouseLeave) this.childSubs.push(childMouseLeave.subscribe(() => this.onMouseLeave.emit()));\n\n componentRef.changeDetectorRef.detectChanges();\n\n // Attach overlay-driven DOM event listeners directly on the component host element.\n // For layout components the host element is <app-section>; for leaf components\n // it is e.g. <app-card>. Either way this is the correct inspectable element.\n const nativeEl: HTMLElement | null = componentRef.location?.nativeElement ?? null;\n\n // Custom element host defaults to display:inline. Set it to block so it participates\n // properly in layout and CDK can capture its bounding rect. SKIP for directive-hosts: the\n // host is a real element with its own display, and an inline style here out-ranks both\n // `:host` and the styleProps `.iox-node` rule (it would e.g. force Link's <a> to block).\n if (nativeEl && !DIRECTIVE_HOST_TYPES.has(node.type)) {\n nativeEl.style.display = 'block';\n }\n // Preview clones (repeater/slider-generated rows) are display-only — only the\n // template node is selectable/editable. Skip overlay registration + interaction\n // wiring for them so they can't be hovered, selected, or edited on the canvas.\n const isPreviewClone = !!(node as any).__previewClone;\n if (nativeEl && !isPreviewClone) {\n // WRAPPER-COLLAPSE (opt-in via ioxDragSourceId): the HOST is the flex/grid item, so it\n // carries `iox-outer-{id}` (margin/width) IN ADDITION to `iox-node-{id}` (visual) — one\n // element, like the engine — and drag is registered on it (the wrapper is gone). The\n // StyleRegistry's split still works: both classes are on this one host.\n if (this.ioxDragSourceId != null && cssId) {\n nativeEl.classList.add(`iox-outer-${cssId}`);\n const sourceId = this.ioxDragSourceId;\n this.dragEngine.registerDraggable(nativeEl, () => ({\n type: 'internal' as const,\n data: node,\n sourceId,\n sourceIndex: this.dragEngine.getData(sourceId)?.indexOf(node) ?? -1,\n }));\n this.hostDragEl = nativeEl;\n }\n // Register node → element mapping for parent lookups\n this.overlayService.registerNode(node, nativeEl, componentRef);\n // Notify BindingsComponent so it re-applies bindings on the new\n // ComponentRef — needed after cross-container drag where Angular\n // creates a fresh instance that hasn't had bindings pushed to it yet.\n this.panelEventService.emit(PanelEventTypes.NODE_RENDERED, { node });\n\n nativeEl.addEventListener('mouseenter', (event: MouseEvent) => {\n if ((event as any)._fromClick) return;\n if (nativeEl.hasAttribute('data-iox-hidden')) return;\n this.onMouseEnter.emit({ element: nativeEl, node });\n });\n nativeEl.addEventListener('mouseleave', (event: MouseEvent) => {\n if (nativeEl.hasAttribute('data-iox-hidden')) return;\n // When leaving a child component, check if the mouse moved to a\n // parent component (e.g. card → section). If so, emit mouseenter\n // for that parent instead of clearing hover entirely.\n const related = event.relatedTarget as HTMLElement | null;\n if (related) {\n const parentEntry = this.findParentNodeElement(related);\n if (parentEntry) {\n this.onMouseEnter.emit(parentEntry);\n return;\n }\n }\n this.onMouseLeave.emit();\n });\n nativeEl.addEventListener('click', (event: MouseEvent) => {\n event.stopPropagation();\n if (nativeEl.hasAttribute('data-iox-hidden')) return;\n this.onClick.emit({ element: nativeEl, node, componentRef });\n });\n nativeEl.addEventListener('contextmenu', (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if (nativeEl.hasAttribute('data-iox-hidden')) return;\n this.onClick.emit({ element: nativeEl, node, componentRef });\n this.overlayService.triggerContextMenu(event.clientX, event.clientY);\n });\n }\n\n // Wire up interactions (animations) after the element is in the DOM. Preview clones are\n // non-selectable (not overlay-registered) but MUST still animate — parity with the SSR\n // runtime, which animates every repeated row — so attach by element (issue #2).\n if (!isPreviewClone) {\n this.interactionEngine.attach(node);\n } else if (nativeEl) {\n this.interactionEngine.attachTo(node, nativeEl);\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { StylePreset } from '../models/component.model';\n\n/**\n * PresetRegistryService — in-memory store for org-level style presets.\n *\n * Loaded once per page by PageUiComponent (alongside the page layout) and\n * injected into the overlay (for badge labels) and style panel (for apply /\n * create / edit / detach flows).\n *\n * Scoped to PageUiComponent.providers[] — one registry per builder instance.\n */\n@Injectable()\nexport class PresetRegistryService {\n private presets = new Map<string, StylePreset>();\n\n setPresets(presets: StylePreset[]): void {\n this.presets.clear();\n for (const p of presets) {\n this.presets.set(p.id, p);\n }\n }\n\n getPreset(id: string): StylePreset | undefined {\n return this.presets.get(id);\n }\n\n getAll(): StylePreset[] {\n return Array.from(this.presets.values());\n }\n\n upsert(preset: StylePreset): void {\n this.presets.set(preset.id, preset);\n }\n\n remove(id: string): void {\n this.presets.delete(id);\n }\n\n /**\n * Resolve the effective style map for a node that references a preset.\n * Merges preset base styles with the node's local overrides so that\n * element-level values always win.\n *\n * @param presetId ID of the applied preset.\n * @param overrides The node's `styleOverrides` record (may be empty).\n */\n resolveStyles(presetId: string, overrides: Record<string, any>): Record<string, any> {\n const preset = this.presets.get(presetId);\n if (!preset) return { ...overrides };\n return { ...preset.styleProps, ...overrides };\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { OverlayEntry, OverlayService, ToolbarAction } from './overlay.service';\nimport { IoxInteraction } from '../models/component.model';\nimport { ViewportService } from '../services/viewport.service';\nimport { PresetRegistryService } from '../services/preset-registry.service';\nimport { SymbolRegistryService } from '../services/symbol-registry.service';\nimport { InteractionPresetRegistryService } from '../services/interaction-preset-registry.service';\nimport { InteractionEngineService } from '../services/interaction-engine.service';\nimport { BuilderClipboardService } from '../services/builder-clipboard.service';\nimport { StyleRegistryService } from '../services/style-registry.service';\nimport { PanelEventService, PanelEventTypes } from '../panels/panel-event.service';\n\n@Component({\n selector: 'app-overlay',\n templateUrl: './overlay.component.html',\n styleUrls: ['./overlay.component.scss'],\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OverlayComponent implements OnInit, OnDestroy {\n @Output() toolbarAction = new EventEmitter<{ action: ToolbarAction; entry: OverlayEntry; position?: 'before' | 'after'; interaction?: IoxInteraction; wrapType?: string }>();\n\n /** Element types the selected node can be wrapped in (Wrap-in submenu). Phase 1: layout containers. */\n readonly wrapTargets: { type: string; label: string; icon: string }[] = [\n { type: 'Container', label: 'Container', icon: 'ph-thin ph-square' },\n { type: 'LinkedContainer', label: 'Linked Container', icon: 'ph-thin ph-link-simple' },\n ];\n\n /** Whether the Wrap-in flyout submenu is open (hover-driven). */\n public wrapSubmenuOpen = false;\n\n public hoverEntry: OverlayEntry | null = null;\n public selectEntry: OverlayEntry | null = null;\n\n // Hover: Chrome DevTools-style ring layers (clip-path punches out content area)\n public hiOutlineStyle: Record<string, string> = {};\n public hiMarginStyle: Record<string, string> = {};\n public hiPaddingStyle: Record<string, string> = {};\n\n // Select: simple IOX pink outline\n public selectOutlineStyle: Record<string, string> = {};\n\n // More dropdown — opened from the ⋯ button or from a right-click.\n // Position is set to fixed viewport coords so it appears at the cursor.\n public moreMenuVisible = false;\n public moreMenuStyle: Record<string, string> = {};\n\n // Badge context menu — opened by right-clicking a preset badge.\n public badgeMenuVisible = false;\n public badgeMenuType: 'style' | 'interaction' | null = null;\n public badgeMenuPos = { x: 0, y: 0 };\n // The specific IoxInteraction being right-clicked (interaction badges only).\n public badgeInteraction: IoxInteraction | null = null;\n\n // Tracks which badge was last clicked — used by Cmd+C in page-ui.\n public activeBadgeType: 'style' | 'interaction' | null = null;\n\n private subs: Subscription[] = [];\n private resizeObserver?: ResizeObserver;\n private containerResizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n // All overlay repositioning is funnelled through a single coalesced RAF.\n // Observer callbacks (Resize/Mutation) MUST NOT call updateAll()/markForCheck()\n // synchronously — during a live interaction animation they can fire while\n // Angular is inside ApplicationRef.synchronize(), re-dirtying the view within\n // the same loop and blowing past MAX_SYNC_RUNS → NG0103. scheduleUpdate() defers\n // the markForCheck to the next frame, outside the current synchronize() pass,\n // and collapses a burst of notifications into one update per frame.\n private _updateRaf = 0;\n private scheduleUpdate = (): void => {\n cancelAnimationFrame(this._updateRaf);\n this._updateRaf = requestAnimationFrame(() => this.updateAll());\n };\n private boundUpdate = () => this.scheduleUpdate();\n private boundScrollUpdate = () => this.scheduleUpdate();\n private activeScrollContainer: HTMLElement | null = null;\n\n constructor(\n private overlayService: OverlayService,\n private viewportService: ViewportService,\n private presetRegistry: PresetRegistryService,\n private symbolRegistry: SymbolRegistryService,\n private interactionPresetRegistry: InteractionPresetRegistryService,\n private interactionEngine: InteractionEngineService,\n private clipboard: BuilderClipboardService,\n private styleRegistry: StyleRegistryService,\n private panelEventService: PanelEventService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.subs.push(\n this.overlayService.hover$.subscribe(entry => {\n this.hoverEntry = entry;\n this.updateHover();\n this.cdr.markForCheck();\n }),\n this.overlayService.select$.subscribe(entry => {\n this.selectEntry = entry;\n if (!entry) this.activeBadgeType = null;\n this.observeSelectElement();\n this.updateSelect();\n this.cdr.markForCheck();\n })\n );\n\n window.addEventListener('resize', this.boundUpdate, { passive: true });\n\n // Re-calculate overlay positions whenever zoom / device changes.\n this.subs.push(\n this.viewportService.state$.subscribe(() => {\n // Delay one frame so the DOM has applied the new transform/width.\n this.scheduleUpdate();\n })\n );\n\n // Re-calculate when CSS rules change (margin/width applied via stylesheet).\n this.subs.push(\n this.styleRegistry.changes$.subscribe(() => this.scheduleUpdate())\n );\n\n // Watch the canvas container for size changes (e.g. right panel open/close\n // transition changes canvas width, shifting element positions).\n const container = this.overlayService.getContainer();\n if (container) {\n if (typeof ResizeObserver !== 'undefined') {\n this.containerResizeObserver = new ResizeObserver(this.scheduleUpdate);\n this.containerResizeObserver.observe(container);\n }\n }\n\n // iox-page-component's Lenis dispatches a synthetic 'scroll' event on\n // its wrapper element after each raf tick — listen to that to reposition\n // overlay boxes as the canvas scrolls.\n this.subs.push(\n this.overlayService.scrollContainer$.subscribe(el => {\n this.activeScrollContainer?.removeEventListener('scroll', this.boundScrollUpdate);\n this.activeScrollContainer = el;\n el.addEventListener('scroll', this.boundScrollUpdate, { passive: true });\n })\n );\n\n // Open the more menu when a canvas element is right-clicked.\n this.subs.push(\n this.overlayService.contextMenu$.subscribe(({ x, y }) => {\n this.moreMenuStyle = { top: `${y}px`, left: `${x}px` };\n this.moreMenuVisible = true;\n this.cdr.markForCheck();\n })\n );\n }\n\n ngOnDestroy(): void {\n this.subs.forEach(s => s.unsubscribe());\n this.resizeObserver?.disconnect();\n this.containerResizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n cancelAnimationFrame(this._updateRaf);\n window.removeEventListener('resize', this.boundUpdate);\n this.activeScrollContainer?.removeEventListener('scroll', this.boundScrollUpdate);\n this.activeScrollContainer = null;\n }\n\n // ── Toolbar actions ──────────────────────────────────────\n onSelectParent(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.SelectParent, entry: this.selectEntry });\n }\n\n onDuplicate(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Duplicate, entry: this.selectEntry });\n }\n\n onDelete(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Delete, entry: this.selectEntry });\n }\n\n onWrap(event: MouseEvent, wrapType: string): void {\n event.stopPropagation();\n this.wrapSubmenuOpen = false;\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Wrap, entry: this.selectEntry, wrapType });\n }\n\n /** Slider slides must stay direct children of the slider container — never wrap them. */\n get canWrap(): boolean {\n const type = this.selectEntry?.node?.type;\n return !!type && type !== 'SliderSlide';\n }\n\n onPlay(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Play, entry: this.selectEntry });\n }\n\n onSaveAsBlock(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.SaveAsBlock, entry: this.selectEntry });\n }\n\n onToggleMore(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n if (this.moreMenuVisible) {\n this.moreMenuVisible = false;\n } else {\n this.moreMenuStyle = { top: `${event.clientY}px`, left: `${event.clientX}px` };\n this.moreMenuVisible = true;\n }\n this.cdr.markForCheck();\n }\n\n closeMoreMenu(): void {\n this.moreMenuVisible = false;\n this.wrapSubmenuOpen = false;\n this.cdr.markForCheck();\n }\n\n onContextMenu(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.moreMenuStyle = { top: `${event.clientY}px`, left: `${event.clientX}px` };\n this.moreMenuVisible = true;\n this.cdr.markForCheck();\n }\n\n onMakeGlobal(event: MouseEvent, position: 'before' | 'after'): void {\n event.stopPropagation();\n this.closeMoreMenu();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.MakeGlobal, entry: this.selectEntry, position });\n }\n\n onRemoveGlobal(event: MouseEvent): void {\n event.stopPropagation();\n this.closeMoreMenu();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.RemoveGlobal, entry: this.selectEntry });\n }\n\n get hasInteractions(): boolean {\n return !!this.selectEntry?.node?.interactions?.length;\n }\n\n get selectedNodeIsGlobal(): boolean {\n return !!this.selectEntry?.node?.isGlobal;\n }\n\n get selectedPresetName(): string | null {\n const id = this.selectEntry?.node?.stylePresetId;\n if (!id) return null;\n return this.presetRegistry.getPreset(id)?.name ?? null;\n }\n\n get isLinkedSymbol(): boolean {\n return !!this.selectEntry?.node?.symbolId;\n }\n\n get isDetachedSymbol(): boolean {\n const node = this.selectEntry?.node;\n if (!node || node.symbolId || !node.detachedSymbolId) return false;\n // Only show the re-link button when the backing block still exists.\n return this.symbolRegistry.isBlockSymbol(node.detachedSymbolId);\n }\n\n get linkedSymbolName(): string | null {\n const id = this.selectEntry?.node?.symbolId;\n if (!id) return null;\n return this.symbolRegistry.getSymbol(id)?.name ?? null;\n }\n\n get interactions(): IoxInteraction[] {\n return this.selectEntry?.node?.interactions ?? [];\n }\n\n triggerLabel(trigger: string): string {\n const labels: Record<string, string> = {\n pageLoad: 'Load', viewportEnter: 'Scroll', click: 'Click',\n hover: 'Hover', scrollProgress: 'Progress',\n };\n return labels[trigger] ?? trigger;\n }\n\n triggerIcon(trigger: string): string {\n const icons: Record<string, string> = {\n pageLoad: 'ph-thin ph-rocket-launch', viewportEnter: 'ph-thin ph-eye',\n click: 'ph-thin ph-cursor-click', hover: 'ph-thin ph-hand-pointing',\n scrollProgress: 'ph-thin ph-arrows-down-up',\n };\n return icons[trigger] ?? 'ph-thin ph-lightning';\n }\n\n actionLabel(ix: IoxInteraction): string {\n const first = ix.actions[0];\n if (!first) return '';\n const labels: Record<string, string> = {\n fadeIn: 'Fade In', fadeOut: 'Fade Out',\n moveUp: 'Move Up', moveDown: 'Move Down',\n moveLeft: 'Move Left', moveRight: 'Move Right',\n scaleIn: 'Scale In', scaleOut: 'Scale Out',\n rotate: 'Rotate', show: 'Show', hide: 'Hide',\n toggleVisibility: 'Toggle',\n };\n const label = labels[first.type] ?? first.type;\n return ix.actions.length > 1 ? `${label} +${ix.actions.length - 1}` : label;\n }\n\n get hasPresetInClipboard(): boolean { return !!this.clipboard.getPresetId(); }\n get hasInteractionPresetInClipboard(): boolean { return !!this.clipboard.getInteractionPresetId(); }\n\n onEditPreset(event: MouseEvent): void {\n event.stopPropagation();\n this.activeBadgeType = 'style';\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.EditPreset, entry: this.selectEntry });\n }\n\n /**\n * Interaction badge clicked. It must ONLY open the Interactions panel with THIS interaction\n * active — it must NOT fire the element's (live) animation. `preventDefault` + `stopPropagation`\n * fully swallow the pointer event so it can never reach the node's live `click` interaction\n * listener. The specific `ix` is forwarded so the builder can expand it in the panel.\n */\n onEditInteractionPreset(event: MouseEvent, ix?: IoxInteraction): void {\n event.preventDefault();\n event.stopPropagation();\n this.activeBadgeType = 'interaction';\n if (this.selectEntry) {\n this.toolbarAction.emit({ action: ToolbarAction.EditInteractionPreset, entry: this.selectEntry, interaction: ix });\n }\n }\n\n /** Swallow the follow-up click on the badge so it can't reach the canvas / a live interaction. */\n onBadgeClickSwallow(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n }\n\n // ── Badge context menu ───────────────────────────────────\n\n onBadgeContextMenu(event: MouseEvent, type: 'style' | 'interaction', ix?: IoxInteraction): void {\n event.preventDefault();\n event.stopPropagation();\n this.badgeMenuType = type;\n this.badgeInteraction = ix ?? null;\n this.badgeMenuPos = { x: event.clientX, y: event.clientY };\n this.badgeMenuVisible = true;\n this.moreMenuVisible = false;\n this.cdr.markForCheck();\n }\n\n onBadgeCopy(): void {\n if (this.badgeMenuType === 'style') {\n const id = this.selectEntry?.node?.stylePresetId;\n if (id) this.clipboard.copyPreset(id);\n }\n this.closeBadgeMenu();\n }\n\n onBadgeEdit(): void {\n const type = this.badgeMenuType;\n this.closeBadgeMenu();\n if (type === 'style' && this.selectEntry) {\n this.activeBadgeType = 'style';\n this.toolbarAction.emit({ action: ToolbarAction.EditPreset, entry: this.selectEntry });\n } else if (type === 'interaction' && this.selectEntry) {\n this.activeBadgeType = 'interaction';\n this.toolbarAction.emit({ action: ToolbarAction.EditInteractionPreset, entry: this.selectEntry });\n }\n }\n\n onBadgeRemoveInteraction(): void {\n const node = this.selectEntry?.node;\n if (!node || !this.badgeInteraction) return;\n node.interactions = (node.interactions ?? []).filter(i => i.id !== this.badgeInteraction!.id);\n if (!node.interactions.length) node.interactionPresetId = undefined;\n this.interactionEngine.refresh(node);\n this.overlayService.refreshSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, node);\n this.closeBadgeMenu();\n }\n\n closeBadgeMenu(): void {\n this.badgeMenuVisible = false;\n this.cdr.markForCheck();\n }\n\n get hasCopiedNode(): boolean { return !!this.clipboard.getNode(); }\n\n onCopyNode(event: MouseEvent): void {\n event.stopPropagation();\n const node = this.selectEntry?.node;\n if (node) this.clipboard.copyNode(node);\n this.closeMoreMenu();\n }\n\n onPasteNode(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.Paste, entry: this.selectEntry });\n this.closeMoreMenu();\n }\n\n onCopyPreset(event: MouseEvent): void {\n event.stopPropagation();\n const id = this.selectEntry?.node?.stylePresetId;\n if (id) this.clipboard.copyPreset(id);\n this.closeMoreMenu();\n }\n\n onPastePreset(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.PastePreset, entry: this.selectEntry });\n this.closeMoreMenu();\n }\n\n onCopyInteractionPreset(event: MouseEvent): void {\n event.stopPropagation();\n const id = this.selectEntry?.node?.interactionPresetId;\n if (id) this.clipboard.copyInteractionPreset(id);\n this.closeMoreMenu();\n }\n\n onPasteInteractionPreset(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.PasteInteractionPreset, entry: this.selectEntry });\n this.closeMoreMenu();\n }\n\n get isSliderContainer(): boolean {\n return this.selectEntry?.node?.type === 'SliderContainer';\n }\n\n onAddSlide(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.AddSlide, entry: this.selectEntry });\n }\n\n onDetachSymbol(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.DetachSymbol, entry: this.selectEntry });\n }\n\n onResyncSymbol(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.ResyncSymbol, entry: this.selectEntry });\n }\n\n private observeSelectElement(): void {\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n // Scroll listener is on the container permanently (attached in ngOnInit).\n // No need to re-attach it here.\n\n if (!this.selectEntry?.element) return;\n\n // Observe the inner styled element — that's where [ngStyle] applies CSS.\n const styledEl = this.overlayService.getStyledElement(this.selectEntry.element);\n\n // ResizeObserver — catches size changes.\n // Skip the first callback: it fires synchronously on observe() in the same\n // microtask as the select$ subscription which already calls updateAll().\n // Painting twice in one frame causes a visible flicker.\n if (typeof ResizeObserver !== 'undefined') {\n let skipFirst = true;\n this.resizeObserver = new ResizeObserver(() => {\n if (skipFirst) { skipFirst = false; return; }\n this.scheduleUpdate();\n });\n this.resizeObserver.observe(styledEl);\n }\n\n // MutationObserver — catches style attribute changes (margin, padding etc.)\n this.mutationObserver = new MutationObserver(this.scheduleUpdate);\n this.mutationObserver.observe(styledEl, {\n attributes: true,\n attributeFilter: ['style', 'class'],\n });\n }\n\n private updateAll(): void {\n this.updateHover();\n this.updateSelect();\n this.cdr.markForCheck();\n }\n\n private updateHover(): void {\n if (!this.hoverEntry) {\n this.hiOutlineStyle = {};\n this.hiMarginStyle = {};\n this.hiPaddingStyle = {};\n return;\n }\n\n const styledEl = this.overlayService.getStyledElement(this.hoverEntry.element);\n const rect = styledEl.getBoundingClientRect();\n // Recalculate fresh — stored boxModel can be stale if CSS rules changed.\n const { margin, border, padding } = this.overlayService.buildBoxModel(this.hoverEntry.element);\n\n // All overlay boxes use position:fixed with raw viewport coords from\n // getBoundingClientRect() — no container offset subtraction.\n // This matches the approach used by the drop-target overlay and the drag\n // clone, both of which position correctly at any zoom level.\n // Using cRect subtraction + position:absolute inside .preview (which has\n // contain:layout paint) caused sub-pixel accumulation errors at zoom != 100%.\n const scale = this.viewportService.getScale();\n\n // Scale the spacing values: getComputedStyle returns unscaled CSS px,\n // getBoundingClientRect returns scaled viewport px. Both must match.\n const m = {\n top: margin.top * scale,\n right: margin.right * scale,\n bottom: margin.bottom * scale,\n left: margin.left * scale,\n };\n const mW = rect.width + m.left + m.right;\n const mH = rect.height + m.top + m.bottom;\n\n this.hiOutlineStyle = this.createBoxStyle(rect.top, rect.left, rect.width, rect.height);\n\n // Orange ring: margin-box with border-box punched out\n this.hiMarginStyle = {\n ...this.createBoxStyle(rect.top - m.top, rect.left - m.left, mW, mH),\n 'clip-path': this.createRingClipPath(mW, mH, m.top, m.right, m.bottom, m.left),\n };\n\n // Green ring: border-box with content-box punched out\n const bpTop = (border.top + padding.top) * scale;\n const bpRight = (border.right + padding.right) * scale;\n const bpBottom = (border.bottom + padding.bottom) * scale;\n const bpLeft = (border.left + padding.left) * scale;\n this.hiPaddingStyle = {\n ...this.createBoxStyle(rect.top, rect.left, rect.width, rect.height),\n 'clip-path': this.createRingClipPath(rect.width, rect.height, bpTop, bpRight, bpBottom, bpLeft),\n };\n }\n\n private updateSelect(): void {\n if (!this.selectEntry) {\n this.selectOutlineStyle = {};\n return;\n }\n\n const styledEl = this.overlayService.getStyledElement(this.selectEntry.element);\n const rect = styledEl.getBoundingClientRect();\n // position:fixed with raw viewport coords — same reasoning as updateHover.\n this.selectOutlineStyle = this.createBoxStyle(rect.top, rect.left, rect.width, rect.height);\n }\n\n /** Build position/size styles for a position:fixed overlay box. */\n private createBoxStyle(top: number, left: number, width: number, height: number): Record<string, string> {\n return {\n top: `${top}px`,\n left: `${left}px`,\n width: `${Math.max(width, 0)}px`,\n height: `${Math.max(height, 0)}px`,\n };\n }\n\n private createRingClipPath(w: number, h: number, inTop: number, inRight: number, inBottom: number, inLeft: number): string {\n const x1 = Math.max(inLeft, 0);\n const y1 = Math.max(inTop, 0);\n const x2 = Math.max(w - inRight, x1);\n const y2 = Math.max(h - inBottom, y1);\n // Each sub-rect must be explicitly closed so the bridge between them\n // is a zero-area line — prevents diagonal edge triangle artifacts.\n return `polygon(evenodd, 0px 0px, ${w}px 0px, ${w}px ${h}px, 0px ${h}px, 0px 0px, ${x1}px ${y1}px, ${x2}px ${y1}px, ${x2}px ${y2}px, ${x1}px ${y2}px, ${x1}px ${y1}px)`;\n }\n\n}\n","<div class=\"overlay-root\">\n\n <!-- HOVER — Chrome DevTools-style rings (content area stays transparent) -->\n <ng-container *ngIf=\"hoverEntry\">\n <div class=\"hi-outline\" [ngStyle]=\"hiOutlineStyle\"></div>\n <div class=\"hi-margin\" [ngStyle]=\"hiMarginStyle\"></div>\n <div class=\"hi-padding\" [ngStyle]=\"hiPaddingStyle\"></div>\n </ng-container>\n\n <!-- SELECT — IOX pink outline + toolbar -->\n <div class=\"select-outline\" *ngIf=\"selectEntry\" [ngStyle]=\"selectOutlineStyle\">\n\n <!-- Preset badges container — below the outline, start-aligned -->\n <div class=\"preset-badge\" *ngIf=\"selectedPresetName || interactions.length\">\n <div *ngIf=\"selectedPresetName\"\n class=\"preset-badge__item\"\n [class.preset-badge__item--active]=\"activeBadgeType === 'style'\"\n title=\"Style preset: {{ selectedPresetName }} — click to edit, right-click to copy\"\n (mousedown)=\"onEditPreset($event)\"\n (contextmenu)=\"onBadgeContextMenu($event, 'style')\">\n <i class=\"ph-fill ph-paint-bucket\"></i>\n <span>{{ selectedPresetName }}</span>\n </div>\n <div *ngFor=\"let ix of interactions\"\n class=\"preset-badge__item preset-badge__item--interaction\"\n [class.preset-badge__item--active]=\"activeBadgeType === 'interaction'\"\n [title]=\"triggerLabel(ix.trigger) + ': ' + actionLabel(ix) + ' — click to edit, right-click to remove'\"\n (mousedown)=\"onEditInteractionPreset($event, ix)\"\n (click)=\"onBadgeClickSwallow($event)\"\n (contextmenu)=\"onBadgeContextMenu($event, 'interaction', ix)\">\n <i [class]=\"triggerIcon(ix.trigger)\"></i>\n <span>{{ triggerLabel(ix.trigger) }}: {{ actionLabel(ix) }}</span>\n </div>\n </div>\n\n <div class=\"select-toolbar\" (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n\n <!-- Component name -->\n <span class=\"toolbar-name\">{{ selectEntry?.componentName }}</span>\n <span class=\"toolbar-sep\"></span>\n\n <!-- Quick actions -->\n <button *ngIf=\"isSliderContainer\" class=\"toolbar-btn toolbar-btn--add-slide\" title=\"Add slide\" (mousedown)=\"onAddSlide($event)\">\n <i class=\"ph-thin ph-plus\"></i>\n <span class=\"toolbar-btn__label\">Add slide</span>\n </button>\n <button class=\"toolbar-btn\" title=\"Duplicate\" (mousedown)=\"onDuplicate($event)\">\n <i class=\"ph-thin ph-copy\"></i>\n </button>\n <button *ngIf=\"hasInteractions\" class=\"toolbar-btn toolbar-btn--play\" title=\"Play animations\" (mousedown)=\"onPlay($event)\">\n <i class=\"ph-thin ph-play\"></i>\n </button>\n <button *ngIf=\"isLinkedSymbol\" class=\"toolbar-btn toolbar-btn--symbol\"\n [title]=\"(linkedSymbolName ? linkedSymbolName : 'Symbol') + ' — click to detach'\"\n (mousedown)=\"onDetachSymbol($event)\">\n <i class=\"ph-thin ph-link\"></i>\n <span class=\"toolbar-btn__label\">{{ linkedSymbolName || 'Symbol' }}</span>\n </button>\n <button *ngIf=\"isDetachedSymbol\" class=\"toolbar-btn toolbar-btn--resync\"\n title=\"Detached — click to re-link\"\n (mousedown)=\"onResyncSymbol($event)\">\n <i class=\"ph-thin ph-link-break\"></i>\n <span class=\"toolbar-btn__label\">Detached</span>\n </button>\n <button class=\"toolbar-btn toolbar-btn--danger\" title=\"Delete\" (mousedown)=\"onDelete($event)\">\n <i class=\"ph-thin ph-trash\"></i>\n </button>\n <span class=\"toolbar-sep\"></span>\n <button class=\"toolbar-btn\" title=\"Select parent\" (mousedown)=\"onSelectParent($event)\">\n <i class=\"ph-thin ph-arrow-up\"></i>\n </button>\n\n <!-- More menu trigger — opens a fixed-position dropdown at the cursor -->\n <button class=\"toolbar-btn toolbar-btn--more\" title=\"More actions\" (mousedown)=\"onToggleMore($event)\">\n <i class=\"ph-thin ph-dots-three\"></i>\n </button>\n </div>\n </div>\n\n <!-- Shared more/context menu — fixed-position, opened by ⋯ button or right-click -->\n <div *ngIf=\"moreMenuVisible\" class=\"toolbar-more-dropdown\" [ngStyle]=\"moreMenuStyle\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n <button class=\"more-item\" (mousedown)=\"onSelectParent($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-arrow-up\"></i>\n Select parent\n </button>\n <button class=\"more-item\" (mousedown)=\"onDuplicate($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-copy\"></i>\n Duplicate\n </button>\n <div *ngIf=\"canWrap\" class=\"more-item-submenu\"\n (mouseenter)=\"wrapSubmenuOpen = true\" (mouseleave)=\"wrapSubmenuOpen = false\">\n <button class=\"more-item\" (mousedown)=\"$event.stopPropagation()\">\n <i class=\"ph-thin ph-selection-plus\"></i>\n Wrap in\n <i class=\"ph-thin ph-caret-right more-item__chevron\"></i>\n </button>\n <div *ngIf=\"wrapSubmenuOpen\" class=\"more-submenu-flyout\">\n <button *ngFor=\"let target of wrapTargets\" class=\"more-item\"\n (mousedown)=\"onWrap($event, target.type); closeMoreMenu()\">\n <i [class]=\"target.icon\"></i>\n {{ target.label }}\n </button>\n </div>\n </div>\n <button class=\"more-item more-item--danger\" (mousedown)=\"onDelete($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-trash\"></i>\n Delete\n </button>\n <div class=\"more-divider\"></div>\n <button class=\"more-item\" (mousedown)=\"onCopyNode($event)\">\n <i class=\"ph-thin ph-scissors\"></i>\n Copy element\n </button>\n <button *ngIf=\"hasCopiedNode\" class=\"more-item\" (mousedown)=\"onPasteNode($event)\">\n <i class=\"ph-thin ph-clipboard\"></i>\n Paste element\n </button>\n <div class=\"more-divider\"></div>\n <button *ngIf=\"selectEntry?.node?.stylePresetId\" class=\"more-item\" (mousedown)=\"onCopyPreset($event)\">\n <i class=\"ph-thin ph-paint-bucket\"></i>\n Copy style preset\n </button>\n <button *ngIf=\"hasPresetInClipboard\" class=\"more-item\" (mousedown)=\"onPastePreset($event)\">\n <i class=\"ph-thin ph-paint-bucket\"></i>\n Paste style preset\n </button>\n <button *ngIf=\"selectEntry?.node?.interactionPresetId\" class=\"more-item\" (mousedown)=\"onCopyInteractionPreset($event)\">\n <i class=\"ph-thin ph-lightning\"></i>\n Copy interaction preset\n </button>\n <button *ngIf=\"hasInteractionPresetInClipboard\" class=\"more-item\" (mousedown)=\"onPasteInteractionPreset($event)\">\n <i class=\"ph-thin ph-lightning\"></i>\n Paste interaction preset\n </button>\n <div class=\"more-divider\"></div>\n <button *ngIf=\"isLinkedSymbol\" class=\"more-item\" (mousedown)=\"onDetachSymbol($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-link-break\"></i>\n Detach from symbol<ng-container *ngIf=\"linkedSymbolName\"> ({{ linkedSymbolName }})</ng-container>\n </button>\n <button *ngIf=\"isDetachedSymbol\" class=\"more-item more-item--resync\" (mousedown)=\"onResyncSymbol($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-link\"></i>\n Re-link to symbol\n </button>\n <button class=\"more-item\" (mousedown)=\"onSaveAsBlock($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-bookmark\"></i>\n Save as reusable block\n </button>\n <button *ngIf=\"hasInteractions\" class=\"more-item more-item--play\" (mousedown)=\"onPlay($event); closeMoreMenu()\">\n <i class=\"ph-thin ph-play\"></i>\n Play animations\n </button>\n <div class=\"more-divider\"></div>\n <ng-container *ngIf=\"!selectedNodeIsGlobal; else removeGlobalItem\">\n <button class=\"more-item\" (mousedown)=\"onMakeGlobal($event, 'before')\">\n <i class=\"ph-thin ph-globe\"></i>\n Make Global (Before Content)\n </button>\n <button class=\"more-item\" (mousedown)=\"onMakeGlobal($event, 'after')\">\n <i class=\"ph-thin ph-globe\"></i>\n Make Global (After Content)\n </button>\n </ng-container>\n <ng-template #removeGlobalItem>\n <button class=\"more-item\" (mousedown)=\"onRemoveGlobal($event)\">\n <i class=\"ph-thin ph-globe\"></i>\n Remove from Global\n </button>\n </ng-template>\n </div>\n\n <!-- Backdrop to close the more menu -->\n <div *ngIf=\"moreMenuVisible\" class=\"overlay-context-backdrop\"\n (mousedown)=\"closeMoreMenu()\">\n </div>\n\n <!-- Badge context menu — options differ by badge type -->\n <div *ngIf=\"badgeMenuVisible\" class=\"badge-context-menu\"\n [ngStyle]=\"{ top: badgeMenuPos.y + 'px', left: badgeMenuPos.x + 'px' }\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n <ng-container *ngIf=\"badgeMenuType === 'style'\">\n <button class=\"more-item\" (mousedown)=\"onBadgeCopy()\">\n <i class=\"ph-thin ph-copy\"></i>\n Copy preset\n </button>\n <button class=\"more-item\" (mousedown)=\"onBadgeEdit()\">\n <i class=\"ph-thin ph-pencil-simple\"></i>\n Edit preset\n </button>\n </ng-container>\n <ng-container *ngIf=\"badgeMenuType === 'interaction'\">\n <button class=\"more-item\" (mousedown)=\"onBadgeEdit()\">\n <i class=\"ph-thin ph-pencil-simple\"></i>\n Edit in panel\n </button>\n <button class=\"more-item more-item--danger\" (mousedown)=\"onBadgeRemoveInteraction()\">\n <i class=\"ph-thin ph-trash\"></i>\n Remove interaction\n </button>\n </ng-container>\n </div>\n <div *ngIf=\"badgeMenuVisible\" class=\"overlay-context-backdrop\"\n (mousedown)=\"closeBadgeMenu()\">\n </div>\n\n</div>\n","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { Popover } from 'primeng/popover';\n\nimport {\n BuilderMode,\n DeviceMode,\n DeviceOption,\n DEVICE_OPTIONS,\n ZOOM_OPTIONS,\n ScreenWidthOption,\n SCREEN_WIDTH_OPTIONS,\n} from '../panels/panel.model';\n\n@Component({\n selector: 'app-toolbar',\n templateUrl: './toolbar.component.html',\n styleUrls: ['./toolbar.component.scss'],\n standalone: false,\n})\nexport class ToolbarComponent {\n @Input() activeMode: BuilderMode = BuilderMode.Select;\n @Input() activeDevice: DeviceMode = DeviceMode.Desktop;\n @Input() activeZoom: number = 100;\n @Input() activeScreenWidth: number = 1440;\n @Input() canUndo = false;\n @Input() canRedo = false;\n @Input() isSaving = false;\n @Input() pageStatus: string = 'draft';\n\n @Output() modeChange = new EventEmitter<BuilderMode>();\n @Output() deviceChange = new EventEmitter<DeviceMode>();\n @Output() zoomChange = new EventEmitter<number | 'fit'>();\n @Output() screenWidthChange = new EventEmitter<number>();\n @Output() undo = new EventEmitter<void>();\n @Output() redo = new EventEmitter<void>();\n @Output() save = new EventEmitter<void>();\n @Output() preview = new EventEmitter<void>();\n @Output() publishToggle = new EventEmitter<void>();\n\n get isPublished(): boolean {\n return this.pageStatus === 'published';\n }\n\n @ViewChild('modePopover') modePopover!: Popover;\n @ViewChild('devicePopover') devicePopover!: Popover;\n @ViewChild('zoomPopover') zoomPopover!: Popover;\n @ViewChild('widthPopover') widthPopover!: Popover;\n\n public modes = BuilderMode;\n public deviceModes = DeviceMode;\n public deviceOptions = DEVICE_OPTIONS;\n public zoomOptions = ZOOM_OPTIONS;\n public screenWidthOptions: ScreenWidthOption[] = SCREEN_WIDTH_OPTIONS;\n\n get activeModeIcon(): string {\n switch (this.activeMode) {\n case BuilderMode.Select: return 'ph-thin ph-cursor';\n case BuilderMode.Style: return 'ph-thin ph-paint-brush-broad';\n case BuilderMode.Pan: return 'ph-thin ph-hand';\n default: return 'ph-thin ph-cursor';\n }\n }\n\n get activeModeLabel(): string {\n switch (this.activeMode) {\n case BuilderMode.Select: return 'Select';\n case BuilderMode.Style: return 'Style';\n case BuilderMode.Pan: return 'Pan';\n default: return 'Select';\n }\n }\n\n get activeDeviceOption(): DeviceOption {\n return this.deviceOptions.find(d => d.mode === this.activeDevice) || this.deviceOptions[0];\n }\n\n get zoomLabel(): string {\n return `${this.activeZoom}%`;\n }\n\n get sliderZoom(): number {\n return Math.min(100, Math.max(20, this.activeZoom));\n }\n\n // ── Mode ────────────────────────────────────────────────\n toggleModePopover(event: Event): void {\n this.modePopover.toggle(event);\n }\n\n selectMode(mode: BuilderMode): void {\n if (this.activeMode !== mode) {\n this.modeChange.emit(mode);\n }\n this.modePopover.hide();\n }\n\n // ── Device ──────────────────────────────────────────────\n toggleDevicePopover(event: Event): void {\n this.devicePopover.toggle(event);\n }\n\n selectDevice(mode: DeviceMode): void {\n if (this.activeDevice !== mode) {\n this.deviceChange.emit(mode);\n }\n this.devicePopover.hide();\n }\n\n // ── Zoom slider ──────────────────────────────────────────\n onSliderChange(event: Event): void {\n const value = +(event.target as HTMLInputElement).value;\n this.zoomChange.emit(value);\n }\n\n // ── Screen width ─────────────────────────────────────────\n toggleWidthPopover(event: Event): void {\n this.widthPopover.toggle(event);\n }\n\n selectScreenWidth(width: number): void {\n if (this.activeScreenWidth !== width) {\n this.screenWidthChange.emit(width);\n }\n this.widthPopover.hide();\n }\n\n // ── Zoom ────────────────────────────────────────────────\n toggleZoomPopover(event: Event): void {\n this.zoomPopover.toggle(event);\n }\n\n selectZoom(value: number | 'fit'): void {\n this.zoomChange.emit(value);\n this.zoomPopover.hide();\n }\n}\n","<div class=\"builder-toolbar\">\n <!-- ── Mode switcher (stateful) ─────────────────────── -->\n <button class=\"tool-btn stateful\"\n (click)=\"toggleModePopover($event)\"\n [title]=\"activeModeLabel\">\n <i [class]=\"activeModeIcon\"></i>\n </button>\n\n <p-popover #modePopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n [class.is-active]=\"activeMode === modes.Select\"\n (click)=\"selectMode(modes.Select)\">\n <i class=\"ph-thin ph-cursor\"></i>\n <span>Select</span>\n </button>\n <button class=\"popover-option\"\n [class.is-active]=\"activeMode === modes.Pan\"\n (click)=\"selectMode(modes.Pan)\">\n <i class=\"ph-thin ph-hand\"></i>\n <span>Pan</span>\n </button>\n <button class=\"popover-option\"\n [class.is-active]=\"activeMode === modes.Style\"\n (click)=\"selectMode(modes.Style)\">\n <i class=\"ph-thin ph-paint-brush-broad\"></i>\n <span>Style</span>\n </button>\n </div>\n </p-popover>\n\n <span class=\"divider\"></span>\n\n <!-- ── Undo / Redo (action) ─────────────────────────── -->\n <button class=\"tool-btn\" title=\"Undo\" [disabled]=\"!canUndo\" (click)=\"undo.emit()\">\n <i class=\"ph-thin ph-arrow-counter-clockwise\"></i>\n </button>\n <button class=\"tool-btn\" title=\"Redo\" [disabled]=\"!canRedo\" (click)=\"redo.emit()\">\n <i class=\"ph-thin ph-arrow-clockwise\"></i>\n </button>\n\n <span class=\"divider\"></span>\n\n <!-- ── Device switcher (stateful) ───────────────────── -->\n <button class=\"tool-btn stateful\"\n (click)=\"toggleDevicePopover($event)\"\n [title]=\"activeDeviceOption.label\">\n <i [class]=\"activeDeviceOption.icon\"></i>\n </button>\n\n <p-popover #devicePopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n *ngFor=\"let d of deviceOptions\"\n [class.is-active]=\"activeDevice === d.mode\"\n (click)=\"selectDevice(d.mode)\">\n <i [class]=\"d.icon\"></i>\n <span>{{ d.label }}</span>\n </button>\n </div>\n </p-popover>\n\n <!-- ── Screen width — Desktop only ─────────────────── -->\n @if (activeDevice === deviceModes.Desktop) {\n <button class=\"tool-btn stateful width-btn\"\n (click)=\"toggleWidthPopover($event)\"\n title=\"Screen width\">\n <span class=\"width-label\">{{ activeScreenWidth }}</span>\n </button>\n }\n\n <p-popover #widthPopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n *ngFor=\"let w of screenWidthOptions\"\n [class.is-active]=\"activeScreenWidth === w.width\"\n (click)=\"selectScreenWidth(w.width)\">\n <span>{{ w.label }}</span>\n </button>\n </div>\n </p-popover>\n\n <!-- ── Zoom (stateful) ──────────────────────────────── -->\n <button class=\"tool-btn stateful zoom-btn\"\n (click)=\"toggleZoomPopover($event)\"\n title=\"Zoom\">\n <span class=\"zoom-label\">{{ zoomLabel }}</span>\n </button>\n\n <p-popover #zoomPopover [appendTo]=\"'body'\" styleClass=\"toolbar-popover\">\n <div class=\"zoom-popover\">\n <div class=\"zoom-slider-row\">\n <input class=\"zoom-slider\"\n type=\"range\"\n min=\"20\" max=\"100\" step=\"1\"\n [value]=\"sliderZoom\"\n (input)=\"onSliderChange($event)\">\n <span class=\"zoom-slider-value\">{{ zoomLabel }}</span>\n </div>\n <div class=\"popover-strip\">\n <button class=\"popover-option\"\n *ngFor=\"let z of zoomOptions\"\n [class.is-active]=\"z.value === activeZoom\"\n (click)=\"selectZoom(z.value)\">\n <span>{{ z.label }}</span>\n </button>\n </div>\n </div>\n </p-popover>\n\n <span class=\"divider\"></span>\n\n <!-- ── Save ────────────────────────────────────────────── -->\n <button class=\"tool-btn save-btn\"\n [class.is-saving]=\"isSaving\"\n [disabled]=\"isSaving\"\n title=\"Save\"\n (click)=\"save.emit()\">\n <i class=\"ph-thin ph-floppy-disk\"></i>\n </button>\n\n <!-- ── Preview ──────────────────────────────────────────── -->\n <button class=\"tool-btn preview-btn\"\n title=\"Preview\"\n (click)=\"preview.emit()\">\n <i class=\"ph-thin ph-eye\"></i>\n </button>\n\n <span class=\"divider\"></span>\n\n <!-- ── Publish / Unpublish ──────────────────────────────── -->\n <button class=\"tool-btn publish-btn\"\n [class.is-published]=\"isPublished\"\n [title]=\"isPublished ? 'Unpublish' : 'Publish'\"\n (click)=\"publishToggle.emit()\">\n <i [class]=\"isPublished ? 'ph-thin ph-cloud-slash' : 'ph-thin ph-cloud-arrow-up'\"></i>\n <span class=\"publish-label\">{{ isPublished ? 'Unpublish' : 'Publish' }}</span>\n </button>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { ComponentRegistryService } from '../../services/component-registry.service';\nimport { OverlayService } from '../../overlay/overlay.service';\nimport { BuilderMode, NodeAction } from '../panel.model';\n\ninterface TreeNode {\n node: ComponentNode;\n icon: string;\n label: string;\n depth: number;\n expanded: boolean;\n hasChildren: boolean;\n /** Reference to the parent's children array that contains this node. */\n parentArray: ComponentNode[];\n /** Index of this node inside parentArray. */\n indexInParent: number;\n}\n\n@Component({\n selector: 'app-layer-tree',\n templateUrl: './layer-tree.component.html',\n styleUrls: ['./layer-tree.component.scss'],\n standalone: false,\n})\nexport class LayerTreeComponent implements OnInit, OnDestroy {\n @Input() layout: ComponentNode[] = [];\n @Input() globalElements: ComponentNode[] = [];\n @Output() nodeSelect = new EventEmitter<ComponentNode>();\n @Output() nodeAction = new EventEmitter<{ action: NodeAction; node: ComponentNode }>();\n @Output() nodeMove = new EventEmitter<void>();\n\n public flatTree: TreeNode[] = [];\n public flatGlobalTree: TreeNode[] = [];\n public selectedNodeId: string | null = null;\n public hoveredNodeId: string | null = null;\n\n public editingNodeId: string | null = null;\n public editingValue = '';\n\n public activeSection: 'page' | 'global' = 'page';\n\n /** Cache: component type → icon class */\n private iconMap = new Map<string, string>();\n private selectSub?: Subscription;\n /** Last-seen structural signature — used by ngDoCheck to skip no-op rebuilds. */\n private _layoutSig = '';\n private _globalSig = '';\n\n constructor(\n private registry: ComponentRegistryService,\n private overlayService: OverlayService,\n ) {}\n\n ngOnInit(): void {\n this.buildIconMap();\n this.rebuild();\n this.selectSub = this.overlayService.select$.subscribe(entry => {\n this.selectedNodeId = entry?.node?.id ?? null;\n });\n }\n\n ngOnDestroy(): void {\n this.selectSub?.unsubscribe();\n }\n\n // Runs on every CD cycle — exit immediately if structure hasn't changed.\n ngDoCheck(): void {\n const sig = this.sig(this.layout);\n const globalSig = this.sig(this.globalElements);\n if (sig !== this._layoutSig || globalSig !== this._globalSig) {\n this._layoutSig = sig;\n this._globalSig = globalSig;\n this.rebuild();\n }\n }\n\n /** Cheap structural signature: node IDs + nesting depth only. */\n private sig(nodes: ComponentNode[]): string {\n return nodes.map(n =>\n (n.id ?? n.type) + (n.children?.length ? '{' + this.sig(n.children) + '}' : '')\n ).join(',');\n }\n\n onNodeClick(treeNode: TreeNode): void {\n const node = treeNode.node;\n this.selectedNodeId = node.id ?? null;\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n this.overlayService.setSelect(\n ref.element,\n node.type,\n BuilderMode.Select,\n node,\n ref.componentRef,\n );\n // Scroll the element into view on the canvas\n ref.element.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n this.nodeSelect.emit(node);\n }\n\n onNodeMouseEnter(treeNode: TreeNode): void {\n this.hoveredNodeId = treeNode.node.id ?? null;\n const ref = this.overlayService.getNodeRef(treeNode.node);\n if (ref) {\n this.overlayService.setHover(ref.element, treeNode.node.type, BuilderMode.Select);\n }\n }\n\n onNodeMouseLeave(): void {\n this.hoveredNodeId = null;\n this.overlayService.clearHover();\n }\n\n toggleExpand(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n treeNode.expanded = !treeNode.expanded;\n this.rebuild();\n }\n\n onDeleteNode(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n this.nodeAction.emit({ action: NodeAction.Delete, node: treeNode.node });\n }\n\n onDuplicateNode(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n this.nodeAction.emit({ action: NodeAction.Duplicate, node: treeNode.node });\n }\n\n startRename(treeNode: TreeNode, event: MouseEvent): void {\n event.stopPropagation();\n this.editingNodeId = treeNode.node.id ?? null;\n this.editingValue = treeNode.node.label ?? '';\n }\n\n saveRename(treeNode: TreeNode): void {\n const val = this.editingValue.trim();\n treeNode.node.label = val || undefined;\n treeNode.label = treeNode.node.label ?? treeNode.node.type;\n this.editingNodeId = null;\n this.editingValue = '';\n }\n\n cancelRename(): void {\n this.editingNodeId = null;\n this.editingValue = '';\n }\n\n /**\n * CDK drop handler for tree reorder.\n * Works on the flat tree indices — maps back to parent arrays to do the move.\n */\n onTreeDrop(event: CdkDragDrop<TreeNode[]>): void {\n if (event.previousIndex === event.currentIndex) return;\n\n const draggedTreeNode = this.flatTree[event.previousIndex];\n if (!draggedTreeNode) return;\n\n const targetTreeNode = this.flatTree[event.currentIndex];\n if (!targetTreeNode) return;\n\n // Remove from source parent\n const srcArray = draggedTreeNode.parentArray;\n const srcIdx = draggedTreeNode.indexInParent;\n srcArray.splice(srcIdx, 1);\n\n // Determine destination: insert at the same position as the target node in its parent.\n // If dropping after the target, adjust index.\n const destArray = targetTreeNode.parentArray;\n let destIdx = targetTreeNode.indexInParent;\n\n // If dragging downward (previousIndex < currentIndex), the target index\n // may have shifted because we already removed the item from source.\n // If source and destination are the same array and srcIdx < destIdx, adjust.\n if (srcArray === destArray && srcIdx < destIdx) {\n destIdx--;\n }\n\n destArray.splice(destIdx, 0, draggedTreeNode.node);\n\n // Rebuild tree and notify builder\n this.rebuild();\n this.nodeMove.emit();\n }\n\n // ── Internals ────────────────────────────────────────────\n\n /** Build a type→icon lookup from the registry so we don't instantiate configs per node. */\n private buildIconMap(): void {\n for (const entry of this.registry.getAll()) {\n const instance = new entry.config();\n this.iconMap.set(entry.type, instance.icon || 'ph-thin ph-cube');\n }\n }\n\n private expandedState = new Map<string, boolean>();\n\n private rebuild(): void {\n // Save expanded state\n for (const tn of [...this.flatTree, ...this.flatGlobalTree]) {\n if (tn.node.id) {\n this.expandedState.set(tn.node.id, tn.expanded);\n }\n }\n const next: TreeNode[] = [];\n this.flattenTree(this.layout, 0, next);\n this.flatTree = next;\n\n const nextGlobal: TreeNode[] = [];\n this.flattenTree(this.globalElements, 0, nextGlobal);\n this.flatGlobalTree = nextGlobal;\n }\n\n private flattenTree(nodes: ComponentNode[], depth: number, out: TreeNode[], parentArr?: ComponentNode[]): void {\n const arr = parentArr ?? nodes;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n const hasChildren = !!(node.children && node.children.length);\n const expanded = node.id ? (this.expandedState.get(node.id) ?? true) : true;\n const treeNode: TreeNode = {\n node,\n icon: this.iconMap.get(node.type) || 'ph-thin ph-cube',\n label: node.label ?? node.type,\n depth,\n expanded,\n hasChildren,\n parentArray: arr,\n indexInParent: i,\n };\n out.push(treeNode);\n if (node.children && expanded) {\n this.flattenTree(node.children, depth + 1, out, node.children);\n }\n }\n }\n}\n","<div class=\"layer-tree\">\n <div class=\"tree-header\">\n <button class=\"section-tab\" [class.section-tab--active]=\"activeSection === 'page'\" (click)=\"activeSection = 'page'\">\n <i class=\"ph-thin ph-stack\"></i> Page\n </button>\n <button class=\"section-tab\" [class.section-tab--active]=\"activeSection === 'global'\" (click)=\"activeSection = 'global'\">\n <i class=\"ph-thin ph-globe\"></i> Global\n <span *ngIf=\"flatGlobalTree.length\" class=\"section-tab-badge\">{{ flatGlobalTree.length }}</span>\n </button>\n </div>\n\n <!-- ── Page elements tree ───────────────────── -->\n <div *ngIf=\"activeSection === 'page'\"\n class=\"tree-body\"\n cdkDropList\n [cdkDropListData]=\"flatTree\"\n (cdkDropListDropped)=\"onTreeDrop($event)\">\n <div *ngIf=\"!flatTree.length\" class=\"tree-empty\">\n <i class=\"ph-thin ph-tree-structure\"></i>\n <span>No layers yet</span>\n </div>\n\n <div *ngFor=\"let tn of flatTree\"\n class=\"tree-row\"\n cdkDrag\n [cdkDragData]=\"tn\"\n [class.is-selected]=\"tn.node.id === selectedNodeId\"\n [class.is-hovered]=\"tn.node.id === hoveredNodeId\"\n [style.padding-inline-start.px]=\"12 + tn.depth * 16\"\n (click)=\"onNodeClick(tn)\"\n (mouseenter)=\"onNodeMouseEnter(tn)\"\n (mouseleave)=\"onNodeMouseLeave()\">\n\n <i class=\"ph-thin ph-dots-six-vertical drag-handle\" cdkDragHandle></i>\n\n <button *ngIf=\"tn.hasChildren\" class=\"expand-btn\" (click)=\"toggleExpand(tn, $event)\">\n <i class=\"ph-thin\" [ngClass]=\"tn.expanded ? 'ph-caret-down' : 'ph-caret-right'\"></i>\n </button>\n <span *ngIf=\"!tn.hasChildren\" class=\"expand-spacer\"></span>\n\n <i [class]=\"tn.icon\" class=\"node-icon\"></i>\n <ng-container *ngIf=\"editingNodeId === tn.node.id; else staticLabel\">\n <input class=\"node-rename-input\"\n [value]=\"editingValue\"\n (input)=\"editingValue = $any($event.target).value\"\n (keydown.enter)=\"saveRename(tn)\"\n (keydown.escape)=\"cancelRename()\"\n (blur)=\"saveRename(tn)\"\n (click)=\"$event.stopPropagation()\"\n autofocus>\n </ng-container>\n <ng-template #staticLabel>\n <span class=\"node-label\" [class.node-label--named]=\"tn.node.label\">{{ tn.label }}</span>\n </ng-template>\n\n <span class=\"node-actions\">\n <button class=\"action-btn\" title=\"Rename\" (click)=\"startRename(tn, $event)\">\n <i class=\"ph-thin ph-pencil-simple\"></i>\n </button>\n <button class=\"action-btn\" title=\"Duplicate\" (click)=\"onDuplicateNode(tn, $event)\">\n <i class=\"ph-thin ph-copy\"></i>\n </button>\n <button class=\"action-btn action-btn--delete\" title=\"Delete\" (click)=\"onDeleteNode(tn, $event)\">\n <i class=\"ph-thin ph-trash\"></i>\n </button>\n </span>\n </div>\n </div>\n\n <!-- ── Global elements tree ─────────────────── -->\n <div *ngIf=\"activeSection === 'global'\" class=\"tree-body\">\n <div *ngIf=\"!flatGlobalTree.length\" class=\"tree-empty\">\n <i class=\"ph-thin ph-globe\"></i>\n <span>No global elements</span>\n </div>\n\n <div *ngFor=\"let tn of flatGlobalTree\"\n class=\"tree-row tree-row--global\"\n [class.is-selected]=\"tn.node.id === selectedNodeId\"\n [class.is-hovered]=\"tn.node.id === hoveredNodeId\"\n [style.padding-inline-start.px]=\"12 + tn.depth * 16\"\n (click)=\"onNodeClick(tn)\"\n (mouseenter)=\"onNodeMouseEnter(tn)\"\n (mouseleave)=\"onNodeMouseLeave()\">\n\n <button *ngIf=\"tn.hasChildren\" class=\"expand-btn\" (click)=\"toggleExpand(tn, $event)\">\n <i class=\"ph-thin\" [ngClass]=\"tn.expanded ? 'ph-caret-down' : 'ph-caret-right'\"></i>\n </button>\n <span *ngIf=\"!tn.hasChildren\" class=\"expand-spacer\"></span>\n\n <i [class]=\"tn.icon\" class=\"node-icon\"></i>\n <span class=\"node-label\">{{ tn.label }}</span>\n <span class=\"node-position-badge\">{{ tn.node.globalPosition }}</span>\n\n <span class=\"node-actions\">\n <button class=\"action-btn action-btn--delete\" title=\"Delete\" (click)=\"onDeleteNode(tn, $event)\">\n <i class=\"ph-thin ph-trash\"></i>\n </button>\n </span>\n </div>\n </div>\n</div>\n","\n\nimport { AfterViewInit, ApplicationRef, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild, effect, inject } from '@angular/core';\nimport Lenis from 'lenis';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode, IoxDataSource, IoxInteraction, StyleCategory } from './models/component.model';\nimport { regenerateNodeIds } from './utils/clone-ids.util';\nimport { wrapNode } from './models/wrap-node';\nimport { OverlayEntry, OverlayService } from './overlay/overlay.service';\nimport { PanelEvent, PanelEventService, PanelEventTypes } from './panels/panel-event.service';\nimport { BuilderMode, DeviceMode, DEVICE_OPTIONS, NodeAction, PageRouteAnimationSettings, PageSettings, PanelTypes, ToolbarAction } from './panels/panel.model';\nimport { ComponentRegistryService } from './services/component-registry.service';\nimport { DragEngineService, IoxDropEvent } from './services/drag-engine.service';\nimport { MoveableCanvasService } from './services/moveable-canvas.service';\nimport { SelectoCanvasService } from './services/selecto-canvas.service';\nimport { DataSourceRegistryService } from './services/data-source-registry.service';\nimport { InteractionEngineService } from './services/interaction-engine.service';\nimport { ViewportService } from './services/viewport.service';\nimport { BuilderClipboardService } from './services/builder-clipboard.service';\nimport { InteractionPresetRegistryService } from './services/interaction-preset-registry.service';\nimport { SymbolRegistryService } from './services/symbol-registry.service';\nimport { ContextStore, applyBindingPipes, collectContextSlotKeys, nodeUsesContext, resolvePath, safeSetInput, withContextSlots } from '@vectoriox/iox-ui';\n\n@Component({\n selector: 'app-builder',\n templateUrl: './builder.component.html',\n styleUrls: ['./builder.component.scss'],\n standalone: false,\n})\nexport class BuilderComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n private contextStore = inject(ContextStore);\n\n /**\n * Re-apply context-bound inputs on the CANVAS when a slot changes — the builder twin of the\n * engine's effect. The canvas is a live runtime, so hovering a repeater row while editing must\n * swap the bound element just as it does on the published site.\n *\n * Only nodes that read a slot are touched; nothing else re-renders (trap T2).\n */\n private readonly contextEffect = effect(() => {\n const slotValues = this.contextStore.values();\n if (!Object.keys(slotValues).length) return;\n const slotKeys = collectContextSlotKeys(this.layout);\n if (!slotKeys.size) return;\n this.applyContextBindings(this.layout, withContextSlots({}, slotValues), slotKeys);\n });\n\n @Input() layout: ComponentNode[] = [];\n @Input() dataSources: IoxDataSource[] = [];\n @Input() orgId = 'default';\n @Input() routeParams: any[] = [];\n @Input() pageName = '';\n @Input() isSaving = false;\n @Input() pageStatus: string = 'draft';\n @Input() pageSettings: PageSettings | null = null;\n @Input() globalElements: ComponentNode[] = [];\n @Input() canUndo = false;\n @Input() canRedo = false;\n /** Feature flag: drive drag/select/resize via Moveable + Selecto instead of interact.js.\n * Default OFF — the proven interact.js path is unchanged until cutover. See\n * iox-ai-guidance/architecture/builder/moveable-migration.md. */\n @Input() moveableMode = false;\n @Output() save = new EventEmitter<void>();\n @Output() undo = new EventEmitter<void>();\n @Output() redo = new EventEmitter<void>();\n @Output() back = new EventEmitter<void>();\n @Output() preview = new EventEmitter<void>();\n @Output() publishToggle = new EventEmitter<void>();\n @Output() pageSettingsChange = new EventEmitter<PageSettings>();\n @Output() applyAnimationToAll = new EventEmitter<PageRouteAnimationSettings>();\n @Output() saveBlock = new EventEmitter<{ name: string; node: ComponentNode }>();\n @Output() globalElementsChange = new EventEmitter<ComponentNode[]>();\n @ViewChild('previewCanvas') previewCanvas?: ElementRef<HTMLElement>;\n @ViewChild('previewScroll') previewScrollRef?: ElementRef<HTMLElement>;\n @ViewChild('lenisContent') lenisContentRef?: ElementRef<HTMLElement>;\n @ViewChild('globalOverlay') globalOverlayRef?: ElementRef<HTMLElement>;\n\n public components: any[] = [];\n public activePanel: string = PanelTypes.STYLES;\n public isPanelOpen = false;\n public panelTypes = PanelTypes;\n public activeMode: BuilderMode = BuilderMode.Select;\n public builderModes = BuilderMode;\n public activeDevice: DeviceMode = DeviceMode.Desktop;\n public activeZoom: number = 100;\n public activeScreenWidth: number = 1440;\n public selectedItem: ComponentNode | null = null;\n public isDragging = false;\n public scrollThumbTop = 0; // px from top of track\n public scrollThumbHeight = 0; // px height of thumb\n public isScrollbarVisible = false;\n public scrollbarTranslate = 0; // counteracts Lenis wrapper scrollTop shifting position:absolute children\n public activeSidebar: 'components' | 'tree' | 'tokens' | 'pages' = 'components';\n public showSaveBlockDialog = false;\n public saveBlockName = '';\n private pendingBlockNode: ComponentNode | null = null;\n public isPanning = false;\n public panX = 0;\n public panY = 0;\n /** Canvas frame height in canvas-space pixels (= previewScroll.clientHeight / scale).\n * Used as iox-page-component's height so position:fixed top:0;bottom:0 fills the\n * same area as height:100vh (both resolve to this value). */\n public canvasFrameHeight = 0;\n private panStartX = 0;\n private panStartY = 0;\n private panOriginX = 0;\n private panOriginY = 0;\n private hoverHideRaf = 0;\n private viewportSub?: Subscription;\n private lenis?: Lenis;\n private lenisRafId?: number;\n private canvasRo?: ResizeObserver;\n private previewFrameRo?: ResizeObserver;\n private canvasContentHeight = 0;\n\n // Type-safe event forwarding for toolbar outputs\n handleToolbarModeChange(mode: BuilderMode): void {\n this.onModeChange(mode);\n }\n handleToolbarDeviceChange(device: DeviceMode): void {\n this.onDeviceChange(device);\n }\n handleToolbarZoomChange(value: number | 'fit'): void {\n this.onZoomChange(value);\n }\n\n handleToolbarScreenWidthChange(width: number): void {\n this.viewportService.setWidth(width);\n this.panX = 0;\n this.panY = 0;\n this.autoFitViewport();\n }\n\n get globalElementsBefore(): ComponentNode[] {\n return this.globalElements.filter(n => n.globalPosition === 'before');\n }\n\n get globalElementsAfter(): ComponentNode[] {\n return this.globalElements.filter(n => n.globalPosition === 'after');\n }\n\n /** Canvas width in CSS pixels (driven by ViewportService). */\n get viewportWidth(): number {\n return this.viewportService.getState().width;\n }\n\n /** Canvas viewport height in CSS pixels (driven by ViewportService). */\n get viewportHeight(): number {\n return this.viewportService.getState().height;\n }\n\n /** Visual (scaled) canvas width — used to size the scroll container so the\n * scrollbar aligns with the right edge of the canvas, not the CMS shell. */\n get viewportScaledWidth(): number {\n const s = this.viewportService.getState().scale;\n return Math.round(this.viewportWidth * s);\n }\n\n /** CSS transform for the visual canvas.\n * Includes translateX(-50%) for centering because iox-page-component is\n * position:absolute; left:50% inside .preview-lenis-content. */\n get viewportTransform(): string {\n const s = this.viewportService.getState().scale;\n const parts: string[] = ['translateX(-50%)'];\n if (this.panX !== 0 || this.panY !== 0) parts.push(`translate(${this.panX}px, ${this.panY}px)`);\n if (s !== 1) parts.push(`scale(${s})`);\n return parts.join(' ');\n }\n\n /**\n * Height of the Lenis content proxy div (realContentHeight × scale).\n * Lenis scrolls against this value so scroll range is always in visual px,\n * not unscaled CSS px — correct at any zoom level.\n */\n get scaledContentHeight(): number {\n const s = this.viewportService.getState().scale;\n return Math.round(this.canvasContentHeight * s);\n }\n\n /** The canvas starts at the simulated viewport height, just like a real empty browser page. */\n get canvasMinHeight(): number {\n return this.viewportService.getState().height;\n }\n\n private sub?: Subscription;\n private registrySub?: Subscription;\n\n constructor(\n private registry: ComponentRegistryService,\n private overlayService: OverlayService,\n private panelEventService: PanelEventService,\n private dragEngine: DragEngineService,\n private dsRegistry: DataSourceRegistryService,\n private viewportService: ViewportService,\n private interactionEngine: InteractionEngineService,\n private interactionPresetRegistry: InteractionPresetRegistryService,\n private clipboard: BuilderClipboardService,\n private symbolRegistry: SymbolRegistryService,\n private cdr: ChangeDetectorRef,\n private appRef: ApplicationRef,\n private moveableCanvas: MoveableCanvasService,\n private selectoCanvas: SelectoCanvasService,\n ) {}\n\n ngOnInit(): void {\n this.components = this.registry.getAll();\n this.dsRegistry.setDataSources(this.dataSources);\n this.dragEngine.setScale(this.viewportService.getScale());\n this.sub = this.panelEventService.subscribe((panelEvent: PanelEvent) => this.handlePanelEvents(panelEvent));\n this.sub.add(this.dragEngine.isDragging$.subscribe((v: boolean) => {\n this.isDragging = v;\n this.cdr.markForCheck();\n }));\n this.sub.add(this.dragEngine.dropComplete$.subscribe((node: ComponentNode) => {\n this._selectAfterDrop(node);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }));\n this.panelEventService.emit(PanelEventTypes.PANEL_OPEN, PanelTypes.STYLES);\n this.viewportSub = this.viewportService.state$.subscribe(state => {\n this.activeDevice = state.device;\n this.activeZoom = Math.round(state.scale * 100);\n this.activeScreenWidth = state.width;\n this.dragEngine.setScale(state.scale);\n this.updatePreviewVh();\n // scaledContentHeight changes with scale — flush DOM first so\n // .preview-lenis-content has its new height before Lenis reads it.\n this.cdr.detectChanges();\n this.lenis?.resize();\n // iox-page-component has transition:0.25s — overlay positions are stale\n // until the transform animation completes. Re-fire after the transition.\n setTimeout(() => { this.overlayService.refreshSelect(); this.moveableCanvas.refresh(); }, 270);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['pageSettings']) {\n // Reinit Lenis with updated scroll options (lerp, wheelMultiplier, etc.)\n // so the builder preview reflects the live-page scroll feel in real time.\n this.initLenis();\n }\n if (changes['globalElements']) {\n // The *ngIf on the global overlay renders after this hook — defer so\n // globalOverlayRef is in the DOM before we try to set CSS vars on it.\n setTimeout(() => this.updatePreviewVh());\n }\n }\n\n ngAfterViewInit(): void {\n this.updatePreviewVh();\n // Re-compute --preview-vh whenever the canvas frame resizes (panel open/close,\n // window resize, etc.) so 100vh always fills the visible area.\n if (this.previewScrollRef?.nativeElement) {\n this.previewFrameRo = new ResizeObserver(() => this.updatePreviewVh());\n this.previewFrameRo.observe(this.previewScrollRef.nativeElement);\n }\n this.overlayService.setContainer(this.previewCanvas?.nativeElement || null);\n // Builder dispatches synthetic 'scroll' events on .preview-lenis-content from\n // the Lenis callback — point the overlay scroll listener at that element.\n // (Not previewScrollRef which is the Lenis eventsTarget — dispatching there\n // would cause Lenis to re-fire its scroll handler → infinite loop.)\n this.overlayService.setScrollContainer(this.lenisContentRef?.nativeElement || null);\n // .preview-scroll is the Lenis clipping container (overflow:hidden, scrollTop changes).\n // Used as IntersectionObserver root so viewportEnter triggers fire correctly on canvas scroll.\n this.overlayService.setIntersectionRoot(this.previewScrollRef?.nativeElement || null);\n\n // Register the root canvas as a dropzone.\n const canvasEl = document.getElementById('canvas-preview')!;\n if (canvasEl) {\n this.dragEngine.registerDropzone(\n 'canvas-preview',\n canvasEl,\n this.layout,\n this.cdr,\n (evt) => this.onDrop(evt),\n );\n // Track canvas content height so scaledContentHeight (= height × scale)\n // keeps the Lenis content proxy correctly sized at any zoom level.\n this.canvasRo = new ResizeObserver(entries => {\n const h = entries[0]?.contentRect.height ?? 0;\n if (h !== this.canvasContentHeight) {\n this.canvasContentHeight = h;\n this.cdr.detectChanges();\n this.lenis?.resize();\n }\n });\n this.canvasRo.observe(canvasEl);\n }\n\n // The canvas is an EDITING surface: clicking a Link / LinkedContainer / Button (anything\n // rendering an <a href>) must select it, never navigate — a redirect unloads the builder and\n // loses unsaved work. Bound to `.preview` (NOT #canvas-preview) so it also covers the\n // GLOBAL-elements overlay, which is a SIBLING layer outside the page canvas — a linked\n // container in a global header used to slip past the old canvas-only guard and navigate.\n // Capture phase so it runs before the node's own click handler; it covers EVERY anchor,\n // including repeater/slider preview clones (RenderDirective skips their per-node listeners)\n // and any future link component. preventDefault only cancels default navigation — the click\n // still propagates, so selection/overlay behaviour is unchanged. `auxclick` covers\n // middle-click, which opens a tab without firing `click`.\n const previewEl = this.previewCanvas?.nativeElement;\n if (previewEl) {\n previewEl.addEventListener('click', this.blockCanvasNavigation, true);\n previewEl.addEventListener('auxclick', this.blockCanvasNavigation, true);\n }\n\n this.initLenis();\n\n // Moveable path (flag-gated — interact.js is untouched when off). Drive drag for the selected\n // element via Moveable, reusing DragEngineService.handleDrop for the reorder. See\n // iox-ai-guidance/architecture/builder/moveable-migration.md.\n if (this.moveableMode && this.previewCanvas?.nativeElement) {\n this.moveableCanvas.init(\n this.previewCanvas.nativeElement,\n () => this.viewportService.getScale(),\n () => ({ width: this.viewportWidth, height: this.viewportHeight }),\n );\n // Resize commits geometry to styleProps → emit LAYOUT_CHANGED so undo/save pick it up.\n this.moveableCanvas.onLayoutChanged = () => this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n this.sub?.add(this.overlayService.select$.subscribe(entry => {\n this.moveableCanvas.select(entry?.element ?? null, entry?.node ?? null);\n }));\n\n // Selecto rubber-band MULTI-select (Phase 1). Only starts from empty canvas space\n // (selectFromInside:false), so single-element drag/click are untouched. 2+ → Moveable\n // group; exactly 1 → the existing single-select (via a click); 0 → clear.\n const canvasEl = document.getElementById('canvas-preview');\n const previewEl = this.previewCanvas.nativeElement;\n if (canvasEl) {\n this.selectoCanvas.init(previewEl, previewEl, canvasEl);\n this.selectoCanvas.onSelect = (elements) => {\n if (this.moveableCanvas.selectGroup(elements)) return; // 2+ → group box\n if (elements.length === 1) {\n elements[0].dispatchEvent(new MouseEvent('click', { bubbles: true }));\n } else {\n this.overlayService.clearSelect();\n this.moveableCanvas.select(null, null);\n }\n };\n }\n }\n\n setTimeout(() => this.appRef.tick());\n }\n\n /**\n * Walk the tree and push freshly-resolved values into the live component instances of every node\n * that reads a context slot. Uses the overlay's node→ComponentRef registry, and the shared\n * `safeSetInput` so an undeclared input can never trigger NG0303.\n */\n private applyContextBindings(nodes: ComponentNode[], data: Record<string, any>, slotKeys: ReadonlySet<string>): void {\n for (const node of nodes ?? []) {\n if (nodeUsesContext(node, slotKeys)) {\n const ref = this.overlayService.getNodeRef(node)?.componentRef;\n if (ref) {\n for (const binding of node.bindings ?? []) {\n if (!slotKeys.has(binding.source)) continue;\n const sourceData = data[binding.source];\n if (sourceData == null) continue;\n const raw = binding.path ? resolvePath(sourceData, binding.path) : sourceData;\n const value = applyBindingPipes(raw, (binding as any).pipes);\n if (value !== undefined && value !== null) safeSetInput(ref, binding.prop, value);\n }\n }\n }\n if (node.children?.length) this.applyContextBindings(node.children, data, slotKeys);\n }\n }\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n this.registrySub?.unsubscribe();\n this.viewportSub?.unsubscribe();\n this.moveableCanvas.destroy();\n this.selectoCanvas.destroy();\n this.destroyLenis();\n this.canvasRo?.disconnect();\n this.previewFrameRo?.disconnect();\n this.overlayService.setContainer(null);\n this.overlayService.setScrollContainer(null);\n this.overlayService.setIntersectionRoot(null);\n const canvasEl = document.getElementById('canvas-preview');\n if (canvasEl) {\n this.dragEngine.unregisterDropzone('canvas-preview', canvasEl);\n }\n const previewEl = this.previewCanvas?.nativeElement;\n if (previewEl) {\n previewEl.removeEventListener('click', this.blockCanvasNavigation, true);\n previewEl.removeEventListener('auxclick', this.blockCanvasNavigation, true);\n }\n }\n\n /**\n * Cancel the browser's default navigation for any link clicked on the editing canvas.\n *\n * Bound property (not a method) so add/removeEventListener share one reference. Matches the\n * clicked target's nearest `a[href]`, so it covers a Link/Button host as well as a click on\n * anything nested inside a LinkedContainer. Only the DEFAULT action is cancelled — propagation\n * is untouched, so node selection, the overlay and the context menu all behave normally.\n */\n private readonly blockCanvasNavigation = (event: MouseEvent): void => {\n const target = event.target as HTMLElement | null;\n if (target?.closest?.('a[href]')) event.preventDefault();\n };\n\n /**\n * Set --preview-vh / --preview-vw on .preview-scroll so that viewport-relative\n * units (vh, vw) inside the canvas resolve to the simulated canvas dimensions\n * rather than the real browser viewport.\n *\n * --preview-vh = canvas frame height (unscaled) / 100\n * --preview-vw = canvas width from viewport state / 100\n *\n * Both fall back to their native unit in production (no variables defined).\n */\n private updatePreviewVh(): void {\n const el = this.previewScrollRef?.nativeElement;\n if (!el) return;\n const state = this.viewportService.getState();\n const frameH = el.clientHeight / state.scale;\n const vhVal = `${frameH / 100}px`;\n const vwVal = `${state.width / 100}px`;\n el.style.setProperty('--preview-vh', vhVal);\n el.style.setProperty('--preview-vw', vwVal);\n // Mirror on global overlay so vh/vw units resolve identically there\n this.globalOverlayRef?.nativeElement?.style.setProperty('--preview-vh', vhVal);\n this.globalOverlayRef?.nativeElement?.style.setProperty('--preview-vw', vwVal);\n this.canvasFrameHeight = Math.round(frameH);\n }\n\n private initLenis(): void {\n this.destroyLenis();\n if (!this.previewScrollRef?.nativeElement || !this.lenisContentRef?.nativeElement) return;\n\n const s = this.pageSettings?.scroll;\n this.lenis = new Lenis({\n wrapper: this.previewScrollRef.nativeElement,\n content: this.lenisContentRef.nativeElement,\n eventsTarget: this.previewScrollRef.nativeElement,\n lerp: s?.lerp ?? 0.1,\n wheelMultiplier: s?.wheelMultiplier ?? 1,\n touchMultiplier: s?.touchMultiplier ?? 1,\n orientation: s?.direction ?? 'vertical',\n infinite: s?.infinite ?? false,\n autoResize: false, // we drive resize() manually via canvasRo + viewportSub\n });\n\n this.lenis.on('scroll', (instance: Lenis) => {\n const clientH = this.previewScrollRef!.nativeElement.clientHeight;\n this.onPageScroll({\n scrollTop: instance.scroll,\n scrollHeight: instance.limit + clientH,\n clientHeight: clientH,\n scrollPercentage: instance.progress * 100,\n });\n // Notify overlay to reposition boxes on each scroll tick.\n // Dispatch on lenisContent (not previewScrollRef/eventsTarget) to avoid\n // Lenis re-consuming the event and causing infinite recursion.\n this.lenisContentRef!.nativeElement.dispatchEvent(new Event('scroll'));\n // Keep the fixed-position drop-target overlay aligned when canvas scrolls\n // during an active drag (pointer doesn't move, so _onDragMove never fires).\n this.dragEngine.refreshDragOverlays();\n // Reposition the Moveable control box (resize handles) on each scroll tick — otherwise\n // the handles drift away from the element as the canvas scrolls (the overlay outline\n // already repositions via the synthetic 'scroll' above).\n this.moveableCanvas.refresh();\n });\n\n const raf = (time: number) => {\n this.lenis?.raf(time);\n this.lenisRafId = requestAnimationFrame(raf);\n };\n this.lenisRafId = requestAnimationFrame(raf);\n }\n\n private destroyLenis(): void {\n if (this.lenisRafId != null) cancelAnimationFrame(this.lenisRafId);\n this.lenis?.destroy();\n this.lenis = undefined;\n this.lenisRafId = undefined;\n }\n\n addComponent(name: string): void {\n const config = this.registry.createConfig(name);\n if (!config) {\n return;\n }\n this.layout.push(config);\n }\n\n onDrop(event: IoxDropEvent): void {\n const { payload, insertIndex } = event;\n\n if (payload.type === 'external') {\n if (typeof payload.data === 'string') {\n const config = this.registry.createConfig(payload.data);\n if (!config) return;\n this.layout.splice(insertIndex, 0, config);\n this.cdr.markForCheck();\n this._selectAfterDrop(config);\n } else {\n const clone = this.deepCloneWithNewIds(payload.data as ComponentNode);\n this.layout.splice(insertIndex, 0, clone);\n this.cdr.markForCheck();\n this._selectAfterDrop(clone);\n }\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n return;\n }\n\n const item = payload.data as ComponentNode;\n\n if (payload.sourceId === 'blocks-panel') {\n // Reusable block from the palette — may be a bare ComponentNode or a\n // block wrapper { name, node, syncInstances, symbolId }. Extract the node.\n // Prefer symbol.node (always up-to-date) over block.node (original snapshot).\n const data = item as any;\n const symbolNode = data.symbolId ? this.symbolRegistry.getSymbol(data.symbolId)?.node : null;\n const nodeData: ComponentNode = (symbolNode ?? data.node ?? data) as ComponentNode;\n const clone = this.deepCloneWithNewIds(nodeData);\n if (data.syncInstances && data.symbolId) {\n clone.symbolId = data.symbolId;\n }\n this.layout.splice(insertIndex, 0, clone);\n this.cdr.markForCheck();\n this._selectAfterDrop(clone);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n return;\n }\n\n if (payload.sourceId && payload.sourceId !== 'canvas-preview') {\n // Cross-list move from a nested container into canvas root.\n const sourceData = this.dragEngine.getData(payload.sourceId);\n if (sourceData) {\n const srcIdx = sourceData.indexOf(item);\n if (srcIdx !== -1) {\n sourceData.splice(srcIdx, 1);\n this.dragEngine.getCdr(payload.sourceId)?.detectChanges();\n }\n }\n this.layout.splice(insertIndex, 0, item);\n this.cdr.markForCheck();\n this._selectAfterDrop(item);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n return;\n }\n\n // Same-container reorder (canvas root).\n const currentIdx = this.layout.indexOf(item);\n if (currentIdx !== -1) {\n const adjustedIdx = insertIndex > currentIdx ? insertIndex - 1 : insertIndex;\n this.layout.splice(currentIdx, 1);\n this.layout.splice(adjustedIdx, 0, item);\n this.cdr.markForCheck();\n this._selectAfterDrop(item);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n }\n\n onModeChange(mode: BuilderMode): void {\n this.activeMode = mode;\n if (mode === BuilderMode.Pan) {\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.overlayService.clearHover();\n } else {\n // Returning to Select/Style — reset pan offset so canvas re-centers\n this.panX = 0;\n this.panY = 0;\n }\n }\n\n onDeviceChange(device: DeviceMode): void {\n this.viewportService.setDevice(device);\n this.panX = 0;\n this.panY = 0;\n this.autoFitViewport();\n }\n\n onZoomChange(value: number | 'fit'): void {\n if (value === 'fit') {\n this.panX = 0;\n this.panY = 0;\n this.autoFitViewport();\n } else {\n this.viewportService.setScale(value / 100);\n }\n }\n\n // ── Board pan ────────────────────────────────────────────\n\n onBoardMouseDown(event: MouseEvent): void {\n if (this.activeMode !== BuilderMode.Pan) return;\n if (event.button !== 0) return;\n this.isPanning = true;\n this.panStartX = event.clientX;\n this.panStartY = event.clientY;\n this.panOriginX = this.panX;\n this.panOriginY = this.panY;\n event.preventDefault();\n }\n\n onBoardMouseMove(event: MouseEvent): void {\n if (!this.isPanning) return;\n this.panX = this.panOriginX + (event.clientX - this.panStartX);\n this.panY = this.panOriginY + (event.clientY - this.panStartY);\n }\n\n onBoardMouseUp(): void {\n this.isPanning = false;\n }\n\n private autoFitViewport(): void {\n const container = this.previewCanvas?.nativeElement;\n if (!container) return;\n // Available width = container width minus horizontal padding (10px × 2)\n this.viewportService.fitToWidth(container.clientWidth, 20);\n }\n\n selectPanel(panel: string): void {\n this.activePanel = panel;\n this.panelEventService.emit(this.isPanelOpen ? PanelEventTypes.PANEL_SELECTED : PanelEventTypes.PANEL_OPEN, panel);\n }\n\n handleClick(event: any): void {\n if (this.activeMode === BuilderMode.Pan) return;\n this.selectedItem = event.node;\n this.overlayService.setSelect(event.element, event.node.type, this.activeMode, event.node, event.componentRef);\n this.selectPanel(PanelTypes.STYLES);\n this._emitElementSelect(event.node, event.componentRef);\n }\n\n private _selectAfterDrop(node: ComponentNode): void {\n // Wait one tick for Angular to render the new component and register it\n // in the overlay before attempting to select it.\n setTimeout(() => {\n const ref = this.overlayService.getNodeRef(node);\n if (!ref) return;\n this.selectedItem = node;\n this.overlayService.setSelect(ref.element, node.type, this.activeMode, node, ref.componentRef);\n this.selectPanel(PanelTypes.STYLES);\n this._emitElementSelect(node, ref.componentRef);\n });\n }\n\n handleMouseEnter(event: any): void {\n if (this.isDragging || this.activeMode === BuilderMode.Pan) return;\n cancelAnimationFrame(this.hoverHideRaf);\n this.overlayService.setHover(event.element, event.node.type, this.activeMode);\n }\n\n handleMouseLeave(): void {\n if (this.isDragging || this.activeMode === BuilderMode.Pan) return;\n cancelAnimationFrame(this.hoverHideRaf);\n this.hoverHideRaf = requestAnimationFrame(() => this.overlayService.clearHover());\n }\n\n handleCanvasClick(): void {\n // Only fires when clicking empty canvas space (renderers call stopPropagation)\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n\n onTreeNodeSelect(node: ComponentNode): void {\n this.selectedItem = node;\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n this._emitElementSelect(node, ref.componentRef);\n }\n this.selectPanel(PanelTypes.STYLES);\n }\n\n onTreeNodeAction(event: { action: NodeAction; node: ComponentNode }): void {\n const { action, node } = event;\n\n // Check global elements first\n const globalIdx = this.globalElements.findIndex(n => n === node);\n if (globalIdx !== -1) {\n if (action === NodeAction.Delete) {\n this.globalElements.splice(globalIdx, 1);\n this.globalElementsChange.emit([...this.globalElements]);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n return;\n }\n\n const result = this.findNodeInTree(node, this.layout);\n if (!result) return;\n\n if (action === NodeAction.Delete) {\n result.parent.splice(result.index, 1);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n } else if (action === NodeAction.Duplicate) {\n const clone = this.deepCloneWithNewIds(node);\n result.parent.splice(result.index + 1, 0, clone);\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n }\n\n onTreeNodeMove(): void {\n // Tree drag moved a node — canvas will re-render via change detection.\n // Clear selection since the moved node's DOM element may be recreated.\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n\n // ── Toolbar actions ──────────────────────────────────────\n onToolbarAction(event: { action: ToolbarAction; entry: OverlayEntry; position?: 'before' | 'after'; interaction?: IoxInteraction; wrapType?: string }): void {\n const { action, entry } = event;\n const node = entry.node;\n if (!node) return;\n\n switch (action) {\n case ToolbarAction.Delete: {\n const result = this.findNodeInTree(node, this.layout) ?? this.findNodeInTree(node, this.globalElements);\n if (result) {\n result.parent.splice(result.index, 1);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.Duplicate: {\n const result = this.findNodeInTree(node, this.layout) ?? this.findNodeInTree(node, this.globalElements);\n if (result) {\n const clone = this.deepCloneWithNewIds(node);\n result.parent.splice(result.index + 1, 0, clone);\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.Wrap: {\n const wrapType = event.wrapType;\n if (!wrapType) break;\n const wrapper = this.registry.createConfig(wrapType) as ComponentNode | null;\n if (!wrapper) break;\n // Wrap in place within whichever tree the node lives in — page\n // layout first, then global elements. Context is never crossed.\n let wrapped = wrapNode(this.layout, node, wrapper);\n let inGlobal = false;\n if (!wrapped) {\n wrapped = wrapNode(this.globalElements, node, wrapper);\n inGlobal = !!wrapped;\n }\n if (wrapped) {\n if (inGlobal) this.globalElementsChange.emit([...this.globalElements]);\n this.cdr.detectChanges();\n // If the wrapped node lives in a Repeater template, rebuild its repeated rows so\n // every clone picks up the new wrapper (and re-resolves the now-nested bindings).\n this._refreshRepeaterFor(node);\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n this._selectAfterDrop(wrapped);\n }\n break;\n }\n case ToolbarAction.Play: {\n this.interactionEngine.replay(node);\n break;\n }\n case ToolbarAction.SaveAsBlock: {\n const blockClone: ComponentNode = JSON.parse(JSON.stringify(node));\n this._stripGlobalFlags(blockClone);\n this.pendingBlockNode = blockClone;\n this.saveBlockName = '';\n this.showSaveBlockDialog = true;\n break;\n }\n case ToolbarAction.SelectParent: {\n const parentNode = this.findParentNode(node, this.layout) ?? this.findParentNode(node, this.globalElements);\n if (parentNode) {\n const ref = this.overlayService.getNodeRef(parentNode);\n if (ref) {\n this.selectedItem = parentNode;\n this.overlayService.setSelect(ref.element, parentNode.type, this.activeMode, parentNode, ref.componentRef);\n this._emitElementSelect(parentNode, ref.componentRef);\n }\n } else {\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n break;\n }\n case ToolbarAction.MakeGlobal: {\n const result = this.findNodeInTree(node, this.layout);\n if (result) {\n result.parent.splice(result.index, 1);\n node.isGlobal = true;\n node.globalPosition = event.position ?? 'before';\n this.globalElements.push(node);\n this.globalElementsChange.emit([...this.globalElements]);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.cdr.markForCheck();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.RemoveGlobal: {\n const idx = this.globalElements.findIndex(n => n.id === node.id);\n if (idx !== -1) {\n this.globalElements.splice(idx, 1);\n node.isGlobal = false;\n node.globalPosition = undefined;\n this.layout.push(node);\n this.globalElementsChange.emit([...this.globalElements]);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n this.cdr.markForCheck();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.EditPreset: {\n this.panelEventService.emit(PanelEventTypes.PRESET_EDIT, node.stylePresetId);\n this.panelEventService.emit(\n this.isPanelOpen ? PanelEventTypes.PANEL_SELECTED : PanelEventTypes.PANEL_OPEN,\n PanelTypes.STYLES,\n );\n break;\n }\n case ToolbarAction.EditInteractionPreset: {\n // Preset-linked node → open preset-edit mode. Plain interaction → just open the panel.\n if (node.interactionPresetId) {\n this.panelEventService.emit(PanelEventTypes.INTERACTION_PRESET_EDIT, node.interactionPresetId);\n }\n this.panelEventService.emit(\n this.isPanelOpen ? PanelEventTypes.PANEL_SELECTED : PanelEventTypes.PANEL_OPEN,\n PanelTypes.INTERACTIONS,\n );\n // Expand the specific interaction the badge represents so the panel opens \"on the right\n // interaction active\". Emitted AFTER PANEL_OPEN so the panel is showing this node.\n if (event.interaction?.id) {\n this.panelEventService.emit(PanelEventTypes.INTERACTION_EDIT, event.interaction.id);\n }\n break;\n }\n case ToolbarAction.PastePreset: {\n const presetId = this.clipboard.getPresetId();\n if (presetId) {\n node.stylePresetId = presetId;\n node.styleOverrides = {};\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef: null });\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.PasteInteractionPreset: {\n const interactionPresetId = this.clipboard.getInteractionPresetId();\n if (interactionPresetId) {\n node.interactionPresetId = interactionPresetId;\n const preset = this.interactionPresetRegistry.getPreset(interactionPresetId);\n if (preset) node.interactions = JSON.parse(JSON.stringify(preset.interactions));\n this.interactionEngine.refresh(node);\n this.overlayService.refreshSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n }\n break;\n }\n case ToolbarAction.DetachSymbol: {\n node.detachedSymbolId = node.symbolId;\n node.symbolId = undefined;\n this.overlayService.refreshSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n break;\n }\n case ToolbarAction.ResyncSymbol: {\n node.symbolId = node.detachedSymbolId;\n node.detachedSymbolId = undefined;\n const symbol = this.symbolRegistry.getSymbol(node.symbolId!);\n if (symbol) {\n this.panelEventService.emit(PanelEventTypes.SYMBOLS_CHANGED, symbol);\n }\n this.overlayService.refreshSelect();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n break;\n }\n case ToolbarAction.Copy: {\n this.clipboard.copyNode(node);\n break;\n }\n case ToolbarAction.Paste: {\n const pastedNode = this.clipboard.getNode();\n if (!pastedNode) break;\n const clone = this.deepCloneWithNewIds(pastedNode);\n const result = this.findNodeInTree(node, this.layout) ?? this.findNodeInTree(node, this.globalElements);\n if (result) {\n result.parent.splice(result.index + 1, 0, clone);\n } else {\n this.layout.push(clone);\n }\n this.cdr.detectChanges();\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n break;\n }\n case ToolbarAction.AddSlide: {\n if (!Array.isArray(node.children)) break;\n const slide = this.registry.createConfig('SliderSlide');\n if (!slide) break;\n node.children = [...node.children, slide];\n const ref = this.overlayService.getNodeRef(node);\n if (ref?.componentRef) {\n ref.componentRef.setInput('children', node.children);\n ref.componentRef.changeDetectorRef.detectChanges();\n }\n this.panelEventService.emit(PanelEventTypes.LAYOUT_CHANGED, this.layout);\n break;\n }\n }\n }\n\n confirmSaveBlock(): void {\n if (!this.saveBlockName.trim() || !this.pendingBlockNode) return;\n this.saveBlock.emit({ name: this.saveBlockName.trim(), node: this.pendingBlockNode });\n this.showSaveBlockDialog = false;\n this.pendingBlockNode = null;\n }\n\n cancelSaveBlock(): void {\n this.showSaveBlockDialog = false;\n this.pendingBlockNode = null;\n }\n\n private deepCloneWithNewIds(node: ComponentNode): ComponentNode {\n const clone: ComponentNode = JSON.parse(JSON.stringify(node));\n // Fresh ids + remap intra-subtree references (stateTriggers, interaction targets) so a\n // duplicated/pasted structure stays self-consistent (trigger-hover keeps its own trigger).\n regenerateNodeIds(clone, { styleId: 'regenerate' });\n return clone;\n }\n\n private _stripGlobalFlags(node: ComponentNode): void {\n node.isGlobal = false;\n node.globalPosition = undefined;\n node.children?.forEach(c => this._stripGlobalFlags(c));\n }\n\n private _scrollbarTimer: ReturnType<typeof setTimeout> | null = null;\n\n onPageScroll(event: { scrollTop: number; scrollHeight: number; clientHeight: number; scrollPercentage?: number }): void {\n const contentH = event.scrollHeight;\n const wrapperH = event.clientHeight;\n if (contentH <= wrapperH) {\n this.isScrollbarVisible = false;\n return;\n }\n // .canvas-scrollbar has top:20px; bottom:20px — visible track is 40px shorter.\n const trackH = wrapperH - 40;\n const thumbH = Math.max((trackH / contentH) * trackH, 32);\n // Use Lenis progress (0–1) when available — more accurate than recomputing from scroll/limit.\n const progress = event.scrollPercentage != null ? event.scrollPercentage / 100\n : event.scrollTop / (contentH - wrapperH);\n const thumbTop = progress * (trackH - thumbH);\n this.scrollThumbHeight = thumbH;\n this.scrollThumbTop = thumbTop;\n this.isScrollbarVisible = true;\n // .canvas-scrollbar is position:absolute inside the Lenis wrapper.\n // When Lenis calls wrapper.scrollTo(), scrollTop shifts all absolute children.\n // Counteract with translateY(scrollTop) so the track stays visually anchored.\n this.scrollbarTranslate = event.scrollTop;\n this.cdr.markForCheck();\n\n if (this._scrollbarTimer) clearTimeout(this._scrollbarTimer);\n this._scrollbarTimer = setTimeout(() => {\n this.isScrollbarVisible = false;\n this.cdr.markForCheck();\n }, 1200);\n }\n\n private findNodeInTree(target: ComponentNode, children: ComponentNode[]): { parent: ComponentNode[]; index: number } | null {\n for (let i = 0; i < children.length; i++) {\n if (children[i] === target) {\n return { parent: children, index: i };\n }\n if (children[i].children) {\n const found = this.findNodeInTree(target, children[i].children!);\n if (found) return found;\n }\n }\n return null;\n }\n\n private findParentNode(target: ComponentNode, children: ComponentNode[], parent?: ComponentNode): ComponentNode | null {\n for (const child of children) {\n if (child === target) return parent || null;\n if (child.children) {\n const found = this.findParentNode(target, child.children, child);\n if (found) return found;\n }\n }\n return null;\n }\n\n /** Returns the closest ancestor (or self) of `target` that has a `symbolId`. */\n private findSymbolAncestorOf(target: ComponentNode, nodes: ComponentNode[]): ComponentNode | null {\n for (const node of nodes) {\n if (node === target) return node.symbolId ? node : null;\n if (node.children?.length && this.findNodeInTree(target, node.children)) {\n if (node.symbolId) return node;\n return this.findSymbolAncestorOf(target, node.children);\n }\n }\n return null;\n }\n\n /** Nearest Repeater ancestor of `target` (or null). A node inside a repeater renders in ITEM\n * scope, so the bindings panel needs the repeater to sample its current item (e.g. bind an\n * Image to a `gallery` string item). Prefers the innermost repeater when nested. */\n private findRepeaterAncestorOf(target: ComponentNode, nodes: ComponentNode[]): ComponentNode | null {\n for (const node of nodes) {\n if (node === target) return null;\n if (node.children?.length && this.findNodeInTree(target, node.children)) {\n return this.findRepeaterAncestorOf(target, node.children)\n ?? (node.type === 'Repeater' ? node : null);\n }\n }\n return null;\n }\n\n /** If `node` lives inside a Repeater template, tell that repeater to rebuild its preview rows so\n * a structural change (e.g. wrapping a template child) propagates to every repeated row. No-op\n * when the node is not inside a repeater. */\n private _refreshRepeaterFor(node: ComponentNode): void {\n const repeater = this.findRepeaterAncestorOf(node, this.layout)\n ?? this.findRepeaterAncestorOf(node, this.globalElements);\n if (!repeater) return;\n const ref = this.overlayService.getNodeRef(repeater);\n (ref?.componentRef?.instance as { refreshTemplate?: () => void })?.refreshTemplate?.();\n }\n\n /** Emit ELEMENT_SELECT with the ancestors the panels need (symbol + repeater item scope). */\n private _emitElementSelect(node: ComponentNode, componentRef: any): void {\n const symbolAncestor = this.findSymbolAncestorOf(node, this.layout)\n ?? this.findSymbolAncestorOf(node, this.globalElements);\n const repeaterAncestor = this.findRepeaterAncestorOf(node, this.layout)\n ?? this.findRepeaterAncestorOf(node, this.globalElements);\n // Parent's live `display` — drives the Child Layout group's parent-scoped visibility so\n // flex-child vs grid-child controls only surface when the parent actually lays them out.\n const parent = this.findParentNode(node, this.layout) ?? this.findParentNode(node, this.globalElements);\n const parentDisplay = parent ? this.readNodeDisplay(parent) : null;\n this.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef, symbolAncestor, repeaterAncestor, parentDisplay });\n }\n\n /** Read a node's current `display` value. The style panel mutates `styleTraits` in place at edit\n * time, so that is the live source of truth; fall back to a preset's `styleOverrides` map, then\n * the CSS initial value. */\n private readNodeDisplay(node: ComponentNode): string {\n const layoutGroup = node.styleTraits?.find(g => g.category === StyleCategory.Layout);\n const displayTrait = layoutGroup?.traits.find(t => t.name === 'display');\n if (displayTrait?.default != null) return displayTrait.default;\n return node.styleOverrides?.['display'] ?? 'block';\n }\n\n private handlePanelEvents(panelEvent: PanelEvent): void {\n if (panelEvent.type === PanelEventTypes.PANEL_CLOSE) {\n this.isPanelOpen = false;\n return;\n }\n\n if (panelEvent.type === PanelEventTypes.PANEL_OPEN) {\n this.isPanelOpen = true;\n }\n }\n}","<div class=\"builder\">\n <header class=\"builder-header\">\n <div class=\"sidebar-switcher\">\n <button (click)=\"activeSidebar = 'pages'\" [class.active]=\"activeSidebar === 'pages'\" title=\"Pages\" aria-label=\"Pages\">\n <i class=\"ph-thin ph-browsers\"></i>\n </button>\n <button (click)=\"activeSidebar = 'components'\" [class.active]=\"activeSidebar === 'components'\" title=\"Components\" aria-label=\"Components\">\n <i class=\"ph-thin ph-cube\"></i>\n </button>\n <button (click)=\"activeSidebar = 'tree'\" [class.active]=\"activeSidebar === 'tree'\" title=\"Layers\" aria-label=\"Layers\">\n <i class=\"ph-thin ph-tree-structure\"></i>\n </button>\n <button (click)=\"activeSidebar = 'tokens'\" [class.active]=\"activeSidebar === 'tokens'\" title=\"Design Tokens\" aria-label=\"Design Tokens\">\n <i class=\"ph-thin ph-circles-three\"></i>\n </button>\n </div>\n\n <app-toolbar\n [activeMode]=\"activeMode\"\n [activeDevice]=\"activeDevice\"\n [activeZoom]=\"activeZoom\"\n [activeScreenWidth]=\"activeScreenWidth\"\n [isSaving]=\"isSaving\"\n [pageStatus]=\"pageStatus\"\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (modeChange)=\"handleToolbarModeChange($event)\"\n (deviceChange)=\"handleToolbarDeviceChange($event)\"\n (zoomChange)=\"handleToolbarZoomChange($event)\"\n (screenWidthChange)=\"handleToolbarScreenWidthChange($event)\"\n (save)=\"save.emit()\"\n (preview)=\"preview.emit()\"\n (publishToggle)=\"publishToggle.emit()\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\">\n </app-toolbar>\n\n <div class=\"panel-switcher\">\n <button (click)=\"selectPanel(panelTypes.BINDINGS)\" [class.active]=\"activePanel === panelTypes.BINDINGS\" title=\"Bindings\">\n <i class=\"ph-thin ph-plugs-connected\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.STYLES)\" [class.active]=\"activePanel === panelTypes.STYLES\" title=\"Styles\">\n <i class=\"ph-thin ph-paint-brush\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.PAGE)\" [class.active]=\"activePanel === panelTypes.PAGE\" title=\"Page settings\" aria-label=\"Page settings\">\n <i class=\"ph-thin ph-gear-six\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.INTERACTIONS)\" [class.active]=\"activePanel === panelTypes.INTERACTIONS\" title=\"Interactions\">\n <i class=\"ph-thin ph-lightning\"></i>\n </button>\n </div> \n </header>\n\n <div class=\"builder-main\" [class.panel-open]=\"isPanelOpen\">\n <aside class=\"sidebar\">\n <div *ngIf=\"activeSidebar === 'pages'\" class=\"sidebar-slot\">\n <ng-content select=\"[builderPages]\"></ng-content>\n </div>\n <div *ngIf=\"activeSidebar === 'components'\" class=\"sidebar-slot\">\n <ng-content select=\"[builderComponents]\"></ng-content>\n </div>\n <div *ngIf=\"activeSidebar === 'tokens'\" class=\"sidebar-slot\">\n <ng-content select=\"[builderTokens]\"></ng-content>\n </div>\n <app-layer-tree *ngIf=\"activeSidebar === 'tree'\"\n [layout]=\"layout\"\n [globalElements]=\"globalElements\"\n (nodeSelect)=\"onTreeNodeSelect($event)\"\n (nodeAction)=\"onTreeNodeAction($event)\"\n (nodeMove)=\"onTreeNodeMove()\"></app-layer-tree>\n </aside>\n\n <main #previewCanvas class=\"preview\"\n [class.grab-mode]=\"activeMode === builderModes.Pan\"\n [class.grabbing]=\"isPanning\"\n (click)=\"handleCanvasClick()\"\n (mousedown)=\"onBoardMouseDown($event)\"\n (mousemove)=\"onBoardMouseMove($event)\"\n (mouseup)=\"onBoardMouseUp()\"\n (mouseleave)=\"onBoardMouseUp()\">\n <app-overlay (toolbarAction)=\"onToolbarAction($event)\"></app-overlay>\n\n <!-- Custom Lenis scrollbar — lives in .preview (not .preview-scroll) so it\n stays in the right gutter and never overlaps the canvas at large widths.\n No translateY counteract needed since it isn't inside the Lenis wrapper. -->\n <div class=\"canvas-scrollbar\"\n [class.visible]=\"isScrollbarVisible\">\n <div class=\"canvas-scrollbar-thumb\"\n [style.height.px]=\"scrollThumbHeight\"\n [style.top.px]=\"scrollThumbTop\">\n </div>\n </div>\n\n <!-- Global elements overlay — outside Lenis so position:fixed children\n stay pinned to the canvas viewport rather than scrolling with content.\n Shares viewportTransform so elements scale correctly at any zoom level.\n Height matches viewportHeight so position:fixed + inset:0 fills the\n simulated viewport correctly (CSS calc(100%) would give the wrong\n containing-block height and break full-screen fixed overlays). -->\n <div *ngIf=\"globalElements.length\"\n #globalOverlay\n class=\"global-elements-overlay\"\n [style.width.px]=\"viewportWidth\"\n [style.height.px]=\"canvasFrameHeight || viewportHeight\"\n [style.transform]=\"viewportTransform\">\n <ng-container *ngFor=\"let item of globalElementsBefore\">\n <ng-container [ioxRender]=\"item\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let item of globalElementsAfter\">\n <ng-container [ioxRender]=\"item\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"preview-scroll\"\n #previewScroll\n [style.width.px]=\"viewportScaledWidth\"\n [class.pan-mode]=\"activeMode === builderModes.Pan\">\n\n <!-- Lenis content proxy: height = realContentHeight × scale.\n Lenis scrolls against this value so scroll range is always in\n visual px — correct at any zoom level. -->\n <div class=\"preview-lenis-content\" #lenisContent\n [style.height.px]=\"scaledContentHeight\">\n\n <iox-page-component\n [style.width.px]=\"viewportWidth\"\n [style.height.px]=\"canvasFrameHeight || viewportHeight\"\n [style.transform]=\"viewportTransform\">\n\n <div class=\"canvas-viewport\"\n id=\"canvas-preview\"\n [style.min-height.px]=\"canvasMinHeight\">\n\n <!-- WRAPPER COLLAPSE (task 9c): top-level nodes render DIRECTLY into the\n canvas viewport — no .preview-node wrapper; iox-outer + drag move to the\n host (RenderDirective, via ioxDragSourceId). -->\n <ng-container *ngFor=\"let item of layout\"\n [ioxRender]=\"item\"\n [ioxDragSourceId]=\"'canvas-preview'\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </div>\n </iox-page-component>\n </div>\n </div>\n </main>\n\n <ng-content select=\"[builderPanel]\"></ng-content>\n </div>\n\n <!-- Save as Reusable Block dialog -->\n @if (showSaveBlockDialog) {\n <div class=\"save-block-backdrop\" (click)=\"cancelSaveBlock()\"></div>\n <div class=\"save-block-dialog\" (click)=\"$event.stopPropagation()\">\n <h4 class=\"save-block-title\">Save as Reusable Block</h4>\n <input class=\"save-block-input\"\n type=\"text\"\n placeholder=\"Block name...\"\n [(ngModel)]=\"saveBlockName\"\n (keydown.enter)=\"confirmSaveBlock()\"\n (keydown.escape)=\"cancelSaveBlock()\"\n autofocus>\n <div class=\"save-block-actions\">\n <p-button size=\"small\" severity=\"secondary\" label=\"Cancel\" (click)=\"cancelSaveBlock()\"></p-button>\n <p-button size=\"small\" label=\"Save\" [disabled]=\"!saveBlockName.trim()\" (click)=\"confirmSaveBlock()\"></p-button>\n </div>\n </div>\n }\n</div>","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n/**\n * Directive-host Section (Phase 2 of the Moveable migration = task 9c). The `<section>` IS the host\n * (no `<app-section>` wrapper, no separate `.section-root`) — matching the SSR engine's\n * `section[iox-section]`. The dropzone is registered on the host element itself (was the ioxDropzone\n * directive on `.section-root`); the `.section-child` draggable wrappers are UNCHANGED, so interact.js\n * (flag-off) keeps working exactly as before. See moveable-migration.md.\n */\n@Component({\n selector: 'section[iox-section]',\n template: `\n <div *ngIf=\"!children.length\" class=\"section-placeholder\">\n <i class=\"ph-thin ph-rows\"></i>\n <span>Drop components here</span>\n </div>\n\n <!-- WRAPPER COLLAPSE (task 9c): render children directly; iox-outer + drag move to the host. -->\n <ng-container *ngFor=\"let child of children\"\n [ioxRender]=\"child\"\n [ioxDragSourceId]=\"dropListId\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n `,\n host: {\n '[class]': \"'section-root iox-node-' + nodeId + (listOrientation === 'horizontal' ? ' is-horizontal' : '')\",\n },\n styles: [`\n :host {\n position: relative;\n box-sizing: border-box;\n }\n .section-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n z-index: 0;\n opacity: 0;\n transition: opacity 0.15s;\n }\n :host(:hover) .section-placeholder,\n :host(.iox-drag-over) .section-placeholder {\n opacity: 1;\n }\n .section-placeholder i { font-size: 22px; }\n /* Flex/grid-child sizing on the collapsed direct-child hosts (was .section-child). ::ng-deep\n because the hosts are inserted dynamically by RenderDirective. */\n :host ::ng-deep > [class*=\"iox-outer-\"] { min-width: 0; }\n `],\n standalone: false,\n})\nexport class SectionComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private elRef: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n // Register the HOST as the dropzone (was the ioxDropzone directive on `.section-root`).\n this.dragEngine.registerDropzone(\n this.dropListId,\n this.elRef.nativeElement,\n this.children,\n this.cdr,\n (evt) => this.onDrop(evt),\n );\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDropzone(this.dropListId, this.elRef.nativeElement);\n }\n\n get listOrientation(): 'horizontal' | 'vertical' {\n const d = this.style?.['display'];\n if (d === 'flex' || d === 'inline-flex') {\n const dir = this.style?.['flexDirection'];\n if (!dir || dir === 'row' || dir === 'row-reverse') return 'horizontal';\n }\n return 'vertical';\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n/**\n * Directive-host Container (Phase 2 of the Moveable migration = task 9c). The real tag (div/section/\n * ul/ol/li/…, chosen from the `htmlTag` trait by RenderDirective via `hostElement`) IS the host — no\n * `<app-builder-container>` wrapper, no separate `.container-root` — matching the SSR engine. The\n * dropzone is registered on the host itself; the `.container-child` draggable wrappers are UNCHANGED,\n * so interact.js (flag-off) keeps working. Also backs the List (`ul`/`ol`) and ListItem (`li`) types.\n * See moveable-migration.md.\n */\n@Component({\n selector: 'div[iox-container],section[iox-container],article[iox-container],header[iox-container],footer[iox-container],main[iox-container],nav[iox-container],ul[iox-container],ol[iox-container],li[iox-container]',\n template: `\n <div *ngIf=\"!children.length\" class=\"container-placeholder\">\n <i class=\"ph-thin ph-square\"></i>\n <span>Drop components here</span>\n </div>\n\n <!-- WRAPPER COLLAPSE (task 9c): render each child DIRECTLY — no .container-child wrapper. The\n RenderDirective puts iox-outer + iox-node on the child's HOST (the flex item) and registers\n drag there (via ioxDragSourceId), so the builder DOM matches the SSR engine's single\n element per node. Flex-child sizing (min-width:0) moves to \\`.container-root > *\\` below. -->\n <ng-container *ngFor=\"let child of children\"\n [ioxRender]=\"child\"\n [ioxDragSourceId]=\"dropListId\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n `,\n host: {\n '[class]': \"'container-root iox-node-' + nodeId + (listOrientation === 'horizontal' ? ' is-horizontal' : '')\",\n '[attr.start]': \"htmlTag === 'ol' && start !== 1 ? start : null\",\n '[attr.reversed]': \"htmlTag === 'ol' && reversed ? '' : null\",\n },\n styles: [`\n :host {\n position: relative;\n box-sizing: border-box;\n }\n .container-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n z-index: 0;\n opacity: 0;\n transition: opacity 0.15s;\n }\n :host(:hover) .container-placeholder,\n :host(.iox-drag-over) .container-placeholder {\n opacity: 1;\n }\n .container-placeholder i { font-size: 18px; }\n /* Flex/grid-child sizing on the DIRECT children (the collapsed node hosts) — was on the\n removed .container-child wrapper. min-width:0 lets flex items shrink below content so the\n equal-split works. ::ng-deep because the hosts are inserted dynamically (RenderDirective),\n so they don't carry this component's encapsulation attribute. */\n :host ::ng-deep > [class*=\"iox-outer-\"] { min-width: 0; }\n `],\n standalone: false,\n})\nexport class BuilderContainerComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n @Input() htmlTag: string = 'div';\n @Input() start: number = 1;\n @Input() reversed: boolean = false;\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private elRef: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n // Register the HOST as the dropzone (was the ioxDropzone directive on `.container-root`).\n this.dragEngine.registerDropzone(\n this.dropListId,\n this.elRef.nativeElement,\n this.children,\n this.cdr,\n (evt) => this.onDrop(evt),\n );\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDropzone(this.dropListId, this.elRef.nativeElement);\n }\n\n get listOrientation(): 'horizontal' | 'vertical' {\n const d = this.style?.['display'];\n if (d === 'flex' || d === 'inline-flex') {\n const dir = this.style?.['flexDirection'];\n if (!dir || dir === 'row' || dir === 'row-reverse') return 'horizontal';\n }\n return 'vertical';\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../services/drag-engine.service';\n\n@Directive({\n selector: '[ioxDropzone]',\n standalone: false,\n})\nexport class IoxDropzoneDirective implements OnInit, OnDestroy {\n @Input() ioxDropzoneId = '';\n @Input() ioxDropzoneData: ComponentNode[] = [];\n /** Optional callback invoked after a drop lands in this zone (e.g. repeater preview refresh). */\n @Input() ioxDropzonePostDrop?: () => void;\n @Output() ioxDrop = new EventEmitter<IoxDropEvent>();\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.dragEngine.registerDropzone(\n this.ioxDropzoneId,\n this.el.nativeElement,\n this.ioxDropzoneData,\n this.cdr,\n (evt) => this.ioxDrop.emit(evt),\n this.ioxDropzonePostDrop,\n );\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDropzone(this.ioxDropzoneId, this.el.nativeElement);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n} from '@angular/core';\n\nimport { ComponentNode } from '../../models/component.model';\nimport { IS_PREVIEW } from '@vectoriox/iox-ui';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n@Component({\n selector: 'app-builder-linked-container',\n template: `\n <a [href]=\"resolvedHref\"\n [target]=\"target\"\n [ngStyle]=\"style\"\n [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\"\n class=\"linked-container-root\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\n <div *ngIf=\"!children.length\" class=\"linked-container-placeholder\">\n <i class=\"ph-thin ph-link\"></i>\n <span>Drop components here</span>\n </div>\n\n <!-- WRAPPER COLLAPSE (task 9c): render children directly into the <a>; iox-outer + drag\n move to the host. -->\n <ng-container *ngFor=\"let child of children\"\n [ioxRender]=\"child\"\n [ioxDragSourceId]=\"dropListId\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </a>\n `,\n styles: [`\n .linked-container-root {\n display: block;\n position: relative;\n box-sizing: border-box;\n text-decoration: none;\n color: inherit;\n cursor: pointer;\n }\n .linked-container-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n opacity: 0;\n transition: opacity 0.15s;\n }\n .linked-container-root:hover .linked-container-placeholder,\n .linked-container-root.iox-drag-over .linked-container-placeholder {\n opacity: 1;\n }\n .linked-container-placeholder i { font-size: 18px; }\n /* Flex/grid-child sizing on the collapsed direct-child hosts (was .linked-container-child).\n ::ng-deep because the hosts are inserted dynamically by RenderDirective. */\n :host ::ng-deep .linked-container-root > [class*=\"iox-outer-\"] { min-width: 0; }\n `],\n standalone: false,\n})\nexport class BuilderLinkedContainerComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Input() linkType: 'external' | 'page' = 'external';\n @Input() url = 'https://';\n @Input() pageRoute = '';\n @Input() target: '_self' | '_blank' | '_parent' | '_top' = '_self';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n private capturePreventDefault = (e: MouseEvent) => e.preventDefault();\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n private elRef: ElementRef<HTMLElement>,\n @Optional() @Inject(IS_PREVIEW) private isPreview: boolean,\n ) {}\n\n ngOnInit(): void {\n if (!this.isPreview) {\n this.elRef.nativeElement.addEventListener('click', this.capturePreventDefault, true);\n }\n }\n\n ngOnDestroy(): void {\n if (!this.isPreview) {\n this.elRef.nativeElement.removeEventListener('click', this.capturePreventDefault, true);\n }\n }\n\n get resolvedHref(): string {\n if (this.linkType !== 'page') return this.url || '#';\n return this.pageRoute || '#';\n }\n\n get listOrientation(): 'horizontal' | 'vertical' {\n const d = this.style?.['display'];\n if (d === 'flex' || d === 'inline-flex') {\n const dir = this.style?.['flexDirection'];\n if (!dir || dir === 'row' || dir === 'row-reverse') return 'horizontal';\n }\n return 'vertical';\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import { resolvePath } from '@vectoriox/iox-ui';\n\nimport { ComponentNode, IoxBinding } from '../models/component.model';\n\n/**\n * `resolvePath` now lives in @vectoriox/iox-ui so the builder canvas and BOTH engine renderers\n * share one implementation — it had already drifted while forked. Re-exported here as a passthrough\n * so existing import sites keep working. See render-parity.md.\n */\nexport { resolvePath };\n\n/**\n * Deep-clones a ComponentNode tree and overrides trait defaults\n * according to each node's bindings resolved against `item`.\n *\n * Each clone gets a new `id` (for Angular tracking / overlay registration)\n * but shares the original node's CSS class by setting `styleId = originalId`.\n * This means all repeated preview rows point to the same CSS rule block as the\n * template node — the style engine only needs one rule per logical slot.\n */\nexport function cloneNodesForItem(nodes: ComponentNode[], item: any): ComponentNode[] {\n return nodes.map(node => {\n // Capture the CSS-owning id before clone\n const cssId = node.styleId ?? node.id;\n\n const clone: ComponentNode = JSON.parse(JSON.stringify(node));\n clone.id = Math.random().toString(36).substr(2, 9);\n // Point this clone and all its descendants at the original CSS rule.\n clone.styleId = cssId;\n // Mark as a preview clone: display-only, not selectable/editable on the canvas.\n // (Distinct from styleId, which duplication/paste also uses.) The render directive\n // skips overlay registration for nodes carrying this flag.\n (clone as any).__previewClone = true;\n\n if (clone.bindings?.length && item) {\n for (const binding of clone.bindings as IoxBinding[]) {\n const value = resolvePath(item, binding.path);\n if (value !== undefined) {\n for (const trait of clone.traits || []) {\n if (trait.name === binding.prop) {\n trait.default = value;\n }\n }\n }\n }\n }\n\n if (clone.children?.length) {\n clone.children = cloneNodesForItem(clone.children, item);\n }\n\n return clone;\n });\n}\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport {\n computeRelative,\n DataSourceEndpoints,\n dataSourcePlanToRequest,\n getByPath,\n normalizeCollectionResult,\n planDataSource,\n resolveRepeaterItems,\n} from '@vectoriox/iox-ui';\n\nimport { IoxDataSource } from '../models/component.model';\n\n/**\n * Public content bases the builder canvas resolves data against — the SAME `@Public()` controllers\n * the live storefront (SSR engine) hits, so the canvas preview shows what the published page shows.\n * Provide from the host app, e.g. `{ cmsBase: config.host + 'api/', shopBase: config.host + 'api/shop/' }`.\n */\nexport const IOX_DATA_SOURCE_ENDPOINTS = new InjectionToken<DataSourceEndpoints>('IOX_DATA_SOURCE_ENDPOINTS');\n\n/**\n * THE data fetch for every canvas component that renders a data source (Repeater, SliderContainer)\n * and for the bindings preview.\n *\n * Before this existed, each of those fetched by itself through an injected admin content service\n * (`getContent(contentType, orgId)` → `api/org/:orgId/resources/:type`), which takes NO filters:\n * the data source's `filterByQueryParams` / `filterByRouteParam` were silently ignored, so the\n * canvas always showed the whole unfiltered collection, and the live SSR site — which does apply\n * them — rendered something different. Every caller now runs the SHARED `planDataSource` from\n * `@vectoriox/iox-ui` against the public controllers, exactly like the SSR engine.\n */\n@Injectable()\nexport class BuilderDataSourceService {\n\n constructor(\n private http: HttpClient,\n @Optional() @Inject(IOX_DATA_SOURCE_ENDPOINTS) private endpoints: DataSourceEndpoints | null,\n ) {}\n\n /** True when the host app wired the public endpoints — without them nothing can be fetched. */\n get isConfigured(): boolean { return !!this.endpoints; }\n\n /**\n * Resolve a data source to the value its MODE describes: the item for a `single` source, the\n * array for a `list`. The builder is design time — there are no live route or query params — so\n * a route filter falls back to `defaultId` and a query filter to its `defaultValue`, which is\n * exactly what `planDataSource` does with empty params.\n *\n * Callers pass the source itself (resolved from their own page-scoped\n * `DataSourceRegistryService`) rather than an alias: this service is module-scoped and must not\n * capture a registry from the wrong injector. Emits `null` when the source resolves to no\n * request or the fetch fails — the canvas degrades to an empty preview, it never throws.\n */\n fetch(ds: IoxDataSource | undefined): Observable<any> {\n if (!ds) return of(null);\n\n const plan = planDataSource(ds as any);\n if (plan.kind === 'static') return of(plan.data);\n if (plan.kind === 'none' || !this.endpoints) return of(null);\n\n const request = dataSourcePlanToRequest(plan, this.endpoints);\n if (!request) return of(null);\n\n const { kind, mode } = plan;\n return this.http.get(request.url, { params: request.params }).pipe(\n // A by-id response is already the item; anything else goes through the shared\n // unwrap-and-pick so `single` yields one item and `list` the whole array.\n map((data: any) => kind === 'by-id'\n ? (Array.isArray(data) ? (data[0] ?? null) : data)\n : normalizeCollectionResult(mode, data)),\n catchError(() => of(null)),\n );\n }\n\n /** Same fetch, always as an array — for the canvas components that repeat over the source. */\n fetchItems(ds: IoxDataSource | undefined): Observable<any[]> {\n return this.fetchRepeaterItems(ds);\n }\n\n /**\n * Items a Repeater/Slider iterates over. With `sourcePath` it repeats over an array PROPERTY of a\n * SINGLE-resource source (e.g. `product.gallery`); without it the source itself is the list.\n * Uses the SHARED `resolveRepeaterItems` so the canvas preview matches the SSR engine.\n */\n fetchRepeaterItems(ds: IoxDataSource | undefined, sourcePath?: string): Observable<any[]> {\n return this.fetch(ds).pipe(map(value => resolveRepeaterItems(value, sourcePath)));\n }\n\n /**\n * Resolve a data source BY ALIAS, following `derived` aliases (a VIEW into another variable:\n * resolve the parent, then getByPath) and `relative` aliases (route-context — `$current`/\n * `$siblings`/`$related`). `findByAlias` is injected so this module stays registry-free (the caller\n * passes its own page-scoped registry). Recurses for chained aliases.\n *\n * The builder is design time: `relative` sources resolve their dependency aliases (subject +\n * collection) — a single source falls back to its `defaultId`, a list to the whole collection —\n * then run the SHARED `computeRelative`, so the canvas shows the SAME neighbours the SSR engine\n * bakes into the live page. `$route` has no live params at design time → `{}`.\n */\n fetchByAlias(alias: string, findByAlias: (a: string) => IoxDataSource | undefined): Observable<any> {\n const ds = findByAlias(alias);\n if (!ds) return of(null);\n if (ds.type === 'derived') {\n const d = ds.request?.derived;\n if (!d?.from) return of(null);\n return this.fetchByAlias(d.from, findByAlias).pipe(map(parent => getByPath(parent, d.path ?? '')));\n }\n if (ds.type === 'relative') {\n const spec = ds.request?.relative;\n if (!spec) return of(null);\n if (spec.kind === 'route') return of({});\n const subjectAlias = spec.kind === 'current' ? spec.from : (spec.subjectFrom ?? spec.from);\n const needsCollection = spec.kind === 'siblings' || spec.kind === 'related';\n return forkJoin({\n subject: subjectAlias ? this.fetchByAlias(subjectAlias, findByAlias) : of(undefined),\n collection: needsCollection && spec.from ? this.fetchByAlias(spec.from, findByAlias) : of(undefined),\n }).pipe(map(({ subject, collection }) => computeRelative(spec, { subject, collection, routeParams: {} })));\n }\n return this.fetch(ds);\n }\n\n /** Repeater items for an alias (follows derived aliases + applies an optional sourcePath). */\n fetchRepeaterItemsByAlias(\n alias: string,\n findByAlias: (a: string) => IoxDataSource | undefined,\n sourcePath?: string,\n ): Observable<any[]> {\n return this.fetchByAlias(alias, findByAlias).pipe(map(value => resolveRepeaterItems(value, sourcePath)));\n }\n}\n","import { Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\nimport { DragEngineService } from '../services/drag-engine.service';\n\n@Directive({\n selector: '[ioxDraggable]',\n standalone: false,\n})\nexport class IoxDraggableDirective implements OnInit, OnDestroy {\n /** The node (for canvas items) or component type string (for sidebar items). */\n @Input() ioxDragData: ComponentNode | string = '';\n /** Drop-zone id the item lives in. Null for sidebar items. */\n @Input() ioxDragSourceId: string | null = null;\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n ) {}\n\n ngOnInit(): void {\n this.dragEngine.registerDraggable(this.el.nativeElement, () => {\n const data = this.ioxDragData;\n const type: 'internal' | 'external' = typeof data === 'string' ? 'external' : 'internal';\n const sourceIndex = type === 'internal' && this.ioxDragSourceId\n ? (this.dragEngine.getData(this.ioxDragSourceId)?.indexOf(data as ComponentNode) ?? -1)\n : -1;\n return { type, data, sourceId: this.ioxDragSourceId, sourceIndex };\n });\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDraggable(this.el.nativeElement);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode, IoxBinding } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\nimport { OverlayService } from '../../overlay/overlay.service';\nimport { BuilderDataSourceService } from '../../services/builder-data-source.service';\nimport { DataSourceRegistryService } from '../../services/data-source-registry.service';\nimport { PanelEventService, PanelEventTypes } from '../../panels/panel-event.service';\nimport { cloneNodesForItem, resolvePath } from '../../utils/binding-path.util';\nimport { InteractionEngineService } from '../../services/interaction-engine.service';\n\n@Component({\n selector: 'app-builder-repeater',\n template: `\n <ng-template #badgeContent>\n <i class=\"ph-thin ph-repeat\"></i>\n <span *ngIf=\"source\">{{ source }}</span>\n <span *ngIf=\"!source\" class=\"repeater-badge-empty\">No source</span>\n <span *ngIf=\"items.length\" class=\"repeater-badge-count\">&times; {{ items.length }}</span>\n <span *ngIf=\"isLoading\" class=\"repeater-badge-loading\"><i class=\"ph-thin ph-circle-notch\"></i></span>\n </ng-template>\n\n <!--\n .repeater-wrapper is the layout root.\n In has-children state, .repeater-badge lives here as a direct child\n (position:absolute, hover-only) so it is NOT a child of .repeater-root\n and does NOT shift the :nth-child index of the item wrappers.\n\n In empty state, .repeater-badge lives inside .repeater-root (no items\n to count, so :nth-child is irrelevant there).\n -->\n <div class=\"repeater-wrapper\" [class.has-children]=\"children.length > 0\">\n\n <!-- HAS-CHILDREN: badge outside root, absolute over wrapper -->\n <div *ngIf=\"children.length > 0\" class=\"repeater-badge\">\n <ng-container *ngTemplateOutlet=\"badgeContent\"></ng-container>\n </div>\n\n <div class=\"repeater-root\"\n [ngClass]=\"['iox-node-' + nodeId]\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n [ioxDropzonePostDrop]=\"refreshPreviewsBound\"\n (ioxDrop)=\"onDrop($event)\">\n\n <!-- EMPTY STATE: badge + placeholder inside root -->\n <ng-container *ngIf=\"!children.length\">\n <div class=\"repeater-badge\">\n <ng-container *ngTemplateOutlet=\"badgeContent\"></ng-container>\n </div>\n <div class=\"repeater-placeholder\">\n <i class=\"ph-thin ph-rows\"></i>\n <span>Drop a component here as the item template</span>\n </div>\n </ng-container>\n\n <!-- Template items — DIRECT children of repeater-root.\n :first-child / :nth-child(odd) etc. now correctly target these\n as siblings of the preview items below. -->\n <div *ngFor=\"let child of children\"\n [ngClass]=\"['repeater-item-template', 'iox-outer-' + (child.styleId ?? child.id)]\"\n [attr.data-iox-row-src]=\"source || null\"\n [attr.data-iox-row-idx]=\"source ? 0 : null\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n\n <!-- Preview items — also DIRECT children of repeater-root. -->\n <ng-container *ngFor=\"let row of previewRows; let ri = index\">\n <div *ngFor=\"let child of row\"\n [ngClass]=\"['repeater-preview-child', 'iox-outer-' + (child.styleId ?? child.id)]\"\n [attr.data-iox-row-src]=\"source || null\"\n [attr.data-iox-row-idx]=\"ri + 1\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"$event\"\n (onMouseEnter)=\"$event\"\n (onMouseLeave)=\"undefined\">\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n `,\n styles: [`\n /* ── Outer wrapper: anchors the absolute badge in has-children state ── */\n .repeater-wrapper {\n position: relative;\n box-sizing: border-box;\n }\n\n /* ── Badge base (used in both empty and has-children contexts) ── */\n .repeater-badge {\n display: flex;\n align-items: center;\n gap: 0.4rem;\n padding: 4px 8px;\n font-size: 11px;\n color: #cb9090;\n background: rgba(203, 144, 144, 0.08);\n border: 1px dashed rgba(203, 144, 144, 0.4);\n border-bottom: none;\n border-radius: 4px 4px 0 0;\n user-select: none;\n }\n\n /* ── Has-children: badge is absolute over the wrapper, hover-only ── */\n .repeater-wrapper.has-children > .repeater-badge {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 10;\n border-radius: 0 0 4px 0;\n border: 1px solid rgba(203, 144, 144, 0.5);\n opacity: 0;\n cursor: pointer;\n transition: opacity 0.15s;\n }\n .repeater-wrapper.has-children:hover > .repeater-badge {\n opacity: 1;\n }\n\n .repeater-badge i { font-size: 13px; }\n .repeater-badge-empty { opacity: 0.55; }\n .repeater-badge-count { margin-left: auto; font-weight: 600; }\n .repeater-badge-loading i { animation: spin 1s linear infinite; }\n @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\n\n /* ── Root ── */\n .repeater-root {\n box-sizing: border-box;\n }\n\n /* ── Empty state: dashed border on root (connected with badge above) ── */\n .repeater-wrapper:not(.has-children) .repeater-root {\n border: 1px dashed rgba(203, 144, 144, 0.4);\n border-top: none;\n border-radius: 0 0 4px 4px;\n min-height: 40px;\n }\n\n .repeater-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n padding: 1.5rem 1rem;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n }\n .repeater-placeholder i { font-size: 20px; }\n\n /* ── Template item: direct child, draggable, full opacity ── */\n .repeater-item-template {\n min-width: 0;\n }\n\n /* ── Preview items: direct children, dimmed, non-interactive ── */\n .repeater-preview-child {\n opacity: 0.55;\n pointer-events: none;\n min-width: 0;\n }\n `],\n standalone: false,\n})\nexport class BuilderRepeaterComponent implements OnInit, OnDestroy {\n private _children: ComponentNode[] = [];\n get children(): ComponentNode[] { return this._children; }\n /** RenderDirective sets `source` (→ fetchData) BEFORE `children`. With an async source the response\n * lands after children are set, so previews build fine; but a SYNC source (static, or a fast\n * cache) resolves before children exist, leaving previewRows empty. Rebuild when children arrive\n * (or change) so both orderings — and loaded pages with sync sources — render their rows. */\n @Input() set children(value: ComponentNode[]) {\n this._children = value ?? [];\n // Defer to the next tick: RenderDirective sets `children` before the template child's\n // component is instantiated/registered, so applyFirstItemToTemplate needs the ref to exist\n // first (otherwise the FIRST row shows its default instead of item[0]'s value).\n if (this.items.length) setTimeout(() => this.refreshPreviews());\n }\n @Input() style: { [key: string]: any } = {};\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n public items: any[] = [];\n public previewRows: ComponentNode[][] = [];\n public isLoading = false;\n\n /** Bound reference passed to [ioxDropzonePostDrop] so the directive can call it. */\n readonly refreshPreviewsBound = () => { setTimeout(() => this.refreshPreviews()); };\n\n private _source = '';\n private _sourcePath = '';\n private _limit = 10;\n private bindingSub?: Subscription;\n\n get source(): string { return this._source; }\n @Input() set source(value: string) {\n if (value === this._source) return;\n this._source = value;\n if (value) { this.fetchData(); }\n else { this.items = []; this.previewRows = []; }\n }\n\n /** Optional array PROPERTY inside a single-resource source to repeat over (e.g. `gallery`). */\n get sourcePath(): string { return this._sourcePath; }\n @Input() set sourcePath(value: string) {\n const next = value ?? '';\n if (next === this._sourcePath) return;\n this._sourcePath = next;\n if (this._source) { this.fetchData(); }\n }\n\n get limit(): number { return this._limit; }\n @Input() set limit(value: number) {\n if (value === this._limit) return;\n this._limit = value;\n if (this._source) { this.fetchData(); }\n }\n\n constructor(\n private dragEngine: DragEngineService,\n private overlayService: OverlayService,\n private dataSourceService: BuilderDataSourceService,\n private dsRegistry: DataSourceRegistryService,\n private panelEventService: PanelEventService,\n private cdr: ChangeDetectorRef,\n private interactionEngine: InteractionEngineService,\n ) {}\n\n ngOnInit(): void {\n this.bindingSub = this.panelEventService.subscribe(event => {\n // A binding OR an interaction change on a template node must re-clone the preview rows.\n // Interactions matter because clones are attached by ELEMENT at render time, so a newly\n // added interaction never reaches an existing clone — it would appear to work only after\n // a save + reload. See element-context-state-plan.md.\n if (event.type !== PanelEventTypes.BINDING_CHANGED\n && event.type !== PanelEventTypes.INTERACTION_CHANGED) return;\n const changedNode: ComponentNode = event.data?.node;\n if (!changedNode || !this.items.length) return;\n if (this.isInTemplate(changedNode)) {\n this.refreshPreviews();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.bindingSub?.unsubscribe();\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr,\n () => { if (this.items.length > 0) setTimeout(() => this.refreshPreviews()); });\n }\n\n /** Monotonic fetch token — editing a binding sets `source` and `sourcePath` as two separate inputs,\n * each firing a fetch; the transient mismatched one (old source + new path, or vice-versa) must not\n * clobber the correct result if it resolves last. Only the newest fetch's response is applied. */\n private _fetchSeq = 0;\n\n /** Data comes from the SHARED resolver (public controllers + the source's own filters) — the\n * same decision the SSR engine runs, so the canvas preview matches the published page. */\n private fetchData(): void {\n if (!this._source) return;\n\n const seq = ++this._fetchSeq;\n this.isLoading = true;\n this.cdr.markForCheck();\n // Resolve BY ALIAS so `derived` sources (e.g. galleryImages = product.gallery) follow their\n // parent. `sourcePath` (legacy/back-compat) still repeats over an array property inline.\n this.dataSourceService.fetchRepeaterItemsByAlias(\n this._source, (a) => this.dsRegistry.findByAlias(a), this._sourcePath,\n ).subscribe(items => {\n if (seq !== this._fetchSeq) return; // a newer fetch superseded this one — ignore stale items\n this.items = items.slice(0, this._limit);\n // Row markers store a REFERENCE (source + index); the engine needs the array to resolve\n // it back to an item, exactly as the SSR runtime uses resolvedData.\n this.interactionEngine.setContextData({ [this._source]: this.items });\n this.refreshPreviews();\n this.isLoading = false;\n this.cdr.markForCheck();\n });\n }\n\n private isInTemplate(target: ComponentNode): boolean {\n const search = (nodes: ComponentNode[]): boolean =>\n nodes.some(c =>\n c === target || c.id === target.id ||\n (c.children?.length ? search(c.children) : false)\n );\n return search(this.children);\n }\n\n private refreshPreviews(): void {\n if (!this.items.length || !this.children.length) {\n this.previewRows = [];\n this.cdr.markForCheck();\n return;\n }\n this.applyFirstItemToTemplate();\n this.previewRows = this.items.slice(1).map(item =>\n cloneNodesForItem(this.children, item)\n );\n this.cdr.markForCheck();\n }\n\n private applyFirstItemToTemplate(): void {\n const item = this.items[0];\n if (!item || !this.children.length) return;\n this.applyBindingsToNodes(this.children, item);\n }\n\n /** Apply item[0]'s bound values to the live template row, walking the WHOLE subtree — not just\n * direct children. A bound node can sit any level deep once a template child is wrapped in a\n * container (or otherwise nested), so recursion is required or the first row shows defaults. */\n private applyBindingsToNodes(nodes: ComponentNode[], item: any): void {\n for (const child of nodes) {\n if (child.bindings?.length) {\n const ref = this.overlayService.getNodeRef(child);\n if (ref?.componentRef) {\n for (const binding of child.bindings as IoxBinding[]) {\n const value = resolvePath(item, binding.path);\n if (value !== undefined) {\n ref.componentRef.instance[binding.prop] = value;\n }\n }\n ref.componentRef.changeDetectorRef.detectChanges();\n }\n }\n if (child.children?.length) {\n this.applyBindingsToNodes(child.children, item);\n }\n }\n }\n\n /** Rebuild preview rows after the template STRUCTURE changed (e.g. a child was wrapped, deleted,\n * or moved). Deferred so the new DOM + overlay refs exist before bindings are re-applied. */\n refreshTemplate(): void {\n if (this.items.length) setTimeout(() => this.refreshPreviews());\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n/**\n * Directive-host ButtonBlock (wrapper collapse, task 9c). The real `<button>`/`<a>` IS the host —\n * chosen by RenderDirective via `hostElement` from the `tag` trait (`variableTag`), NOT an internal\n * `<button>` in the template. This matches the SSR engine's `button[iox-button-block]` component and\n * every other collapsed builder component (Container/Section/List/…): ONE element per node carrying\n * BOTH `iox-outer-{id}` (margin/width) + `iox-node-{id}` (visual props). Previously this component\n * kept the OLD pattern — a custom-element selector plus a template that rendered its own\n * `<button class=\"button-block-root\">` — so RenderDirective's host `<button>` (iox-outer) wrapped a\n * second `<button>` (iox-node): button-in-button, and width (outer) + aspect-ratio (inner) split\n * across two elements so aspect-ratio never resolved. Collapsing to the single host fixes both.\n *\n * The `button`/`a` UA resets (border, background, text-decoration) live in the builder app's global\n * styles.scss, kept OFF `:host` so styleProps (`.iox-node-{id}`) can override them.\n */\n@Component({\n selector: 'button[iox-button-block],a[iox-button-block]',\n template: `\n <span *ngIf=\"!children.length\" class=\"button-block-placeholder\">Button</span>\n\n <!-- WRAPPER COLLAPSE (task 9c): render children directly into the host; iox-outer + drag land\n on each child's host (via ioxDragSourceId), matching the SSR engine. -->\n <ng-container *ngFor=\"let child of children\"\n [ioxRender]=\"child\"\n [ioxDragSourceId]=\"dropListId\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n `,\n host: {\n '[class]': \"'button-block-root iox-node-' + nodeId\",\n '[attr.href]': \"tag === 'a' ? (href || null) : null\",\n '[attr.target]': \"tag === 'a' ? (target || null) : null\",\n '[attr.type]': \"tag === 'a' ? null : type\",\n },\n styles: [`\n :host { box-sizing: border-box; }\n .button-block-placeholder {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: rgba(100, 116, 139, 0.4);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n }\n /* Flex/grid-child sizing on the collapsed direct-child hosts; ::ng-deep for dynamic hosts. */\n :host ::ng-deep > [class*=\"iox-outer-\"] { min-width: 0; }\n `],\n standalone: false,\n})\nexport class BuilderButtonBlockComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n @Input() style: { [key: string]: any } = {};\n @Input() tag: 'button' | 'a' = 'button';\n @Input() href = '';\n @Input() target: '_self' | '_blank' = '_self';\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Input() nodeId = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private elRef: ElementRef<HTMLElement>,\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n // Register the HOST as the dropzone (was the ioxDropzone directive on the inner button).\n this.dragEngine.registerDropzone(\n this.dropListId,\n this.elRef.nativeElement,\n this.children,\n this.cdr,\n (evt) => this.onDrop(evt),\n );\n }\n\n ngOnDestroy(): void {\n this.dragEngine.unregisterDropzone(this.dropListId, this.elRef.nativeElement);\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { IS_PREVIEW } from '@vectoriox/iox-ui';\nimport { ComponentNode, IoxBinding } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\nimport { ComponentInstanceRegistryService } from '../../services/component-instance-registry.service';\nimport { InteractionEngineService } from '../../services/interaction-engine.service';\nimport { OverlayService } from '../../overlay/overlay.service';\nimport { BuilderDataSourceService } from '../../services/builder-data-source.service';\nimport { DataSourceRegistryService } from '../../services/data-source-registry.service';\nimport { PanelEventService, PanelEventTypes } from '../../panels/panel-event.service';\nimport { cloneNodesForItem, resolvePath } from '../../utils/binding-path.util';\n\n@Component({\n selector: 'app-slider-container',\n template: `\n <!-- EDIT MODE: shell wraps swiper + nav buttons so arrows position relative to slide area -->\n <div *ngIf=\"!isPreview\"\n class=\"slider-edit-shell\"\n [ngClass]=\"['iox-node-' + nodeId]\"\n [ngStyle]=\"editShellStyle\"\n ioxDropzone\n [ioxDropzoneId]=\"source ? '' : dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\n <!-- Repeat badge: hover-only, anchored top-left of shell -->\n <div *ngIf=\"source\" class=\"slider-repeat-badge\">\n <i class=\"ph-thin ph-repeat\"></i>\n <span>{{ source }}</span>\n <span *ngIf=\"items.length\" class=\"slider-repeat-badge-count\">&times; {{ items.length }}</span>\n <i *ngIf=\"isLoading\" class=\"ph-thin ph-circle-notch slider-badge-spin\"></i>\n </div>\n\n <div #editSwiperEl class=\"swiper swiper-edit\" [attr.dir]=\"dir\" [style.direction]=\"dir\">\n <div class=\"swiper-wrapper\">\n\n <!-- NORMAL MODE: all children as draggable slides -->\n <ng-container *ngIf=\"!source\">\n <div *ngFor=\"let child of children\"\n class=\"swiper-slide\"\n [ngClass]=\"['iox-outer-' + (child.styleId ?? child.id)]\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </ng-container>\n\n <!-- REPEAT MODE: template slide (item 0) + dimmed preview slides (items 1..N) -->\n <ng-container *ngIf=\"source\">\n <!-- Template slide — draggable/editable, receives item[0] data -->\n <div *ngIf=\"children.length\"\n class=\"swiper-slide\"\n [ngClass]=\"['iox-outer-' + (children[0].styleId ?? children[0].id)]\"\n ioxDraggable\n [ioxDragData]=\"children[0]\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"children[0]\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n <!-- Preview slides — dimmed, non-interactive, data resolved from items 1..N -->\n <div *ngFor=\"let slide of previewSlides; trackBy: trackByNodeId\"\n class=\"swiper-slide slider-preview-slide\"\n [ngClass]=\"['iox-outer-' + (slide.styleId ?? slide.id)]\">\n <ng-container\n [ioxRender]=\"slide\"\n (onClick)=\"$event\"\n (onMouseEnter)=\"$event\"\n (onMouseLeave)=\"undefined\">\n </ng-container>\n </div>\n </ng-container>\n\n </div>\n\n <div *ngIf=\"!source && !children.length\" class=\"slider-edit-placeholder\">\n <i class=\"ph-thin ph-sliders-horizontal\"></i>\n <span>Click + in toolbar to add a slide</span>\n </div>\n\n <div *ngIf=\"enablePagination\" class=\"swiper-pagination\"></div>\n <div *ngIf=\"enableScrollbar\" class=\"swiper-scrollbar\"></div>\n </div>\n\n <!-- Nav buttons live on the shell, not inside .swiper, so overflow:hidden never clips them\n and top:50%+transform always centers on the real slide height -->\n <button *ngIf=\"enableNavigation\" class=\"slider-edit-nav slider-edit-nav--prev\"\n (click)=\"_swiper?.slidePrev()\" type=\"button\" title=\"Previous slide\">\n <i class=\"ph-thin ph-caret-left\"></i>\n </button>\n <button *ngIf=\"enableNavigation\" class=\"slider-edit-nav slider-edit-nav--next\"\n (click)=\"_swiper?.slideNext()\" type=\"button\" title=\"Next slide\">\n <i class=\"ph-thin ph-caret-right\"></i>\n </button>\n </div>\n\n <!-- PREVIEW MODE: real Swiper with all interactions enabled -->\n <div *ngIf=\"isPreview\"\n #swiperEl\n class=\"swiper\"\n [ngClass]=\"['iox-node-' + nodeId]\"\n [ngStyle]=\"previewStyle\"\n [attr.dir]=\"dir\"\n [style.direction]=\"dir\"\n [style.--swiper-navigation-color]=\"navigationColor || null\"\n [style.--swiper-navigation-size.px]=\"navigationSize || null\"\n [style.--swiper-pagination-color]=\"paginationColor || null\">\n <div class=\"swiper-wrapper\">\n <!-- Swiper requires .swiper-slide as a DIRECT child of .swiper-wrapper.\n Wrap each rendered slide in one (same structure as edit mode) so the\n app-slider-slide host sits INSIDE the slide, not between it and the wrapper. -->\n <ng-container *ngIf=\"!source\">\n <div *ngFor=\"let child of children\"\n class=\"swiper-slide\"\n [ngClass]=\"['iox-outer-' + (child.styleId ?? child.id)]\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </ng-container>\n <!-- REPEAT: template slide + preview slides -->\n <ng-container *ngIf=\"source\">\n <div *ngIf=\"children.length\"\n class=\"swiper-slide\"\n [ngClass]=\"['iox-outer-' + (children[0].styleId ?? children[0].id)]\">\n <ng-container\n [ioxRender]=\"children[0]\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n <div *ngFor=\"let slide of previewSlides; trackBy: trackByNodeId\"\n class=\"swiper-slide\"\n [ngClass]=\"['iox-outer-' + (slide.styleId ?? slide.id)]\">\n <ng-container\n [ioxRender]=\"slide\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div *ngIf=\"enableNavigation\" class=\"swiper-button-prev\"></div>\n <div *ngIf=\"enableNavigation\" class=\"swiper-button-next\"></div>\n <div *ngIf=\"enablePagination\" class=\"swiper-pagination\"></div>\n <div *ngIf=\"enableScrollbar\" class=\"swiper-scrollbar\"></div>\n </div>\n `,\n styles: [`\n :host {\n display: block;\n }\n /* swiper.css sets .swiper-wrapper { height: 100% } which inflates the container\n to parent height. Override to auto so the slider sizes to slide content. */\n .swiper-wrapper {\n height: auto;\n }\n /* ── Edit-mode shell ─────────────────────────────────────────────────────\n Shell is the IOX-styled container ([ngStyle]=\"style\" lives here).\n position:relative anchors the absolutely-positioned nav buttons + badge.\n The .swiper inside fills the shell width and auto-heights to slides. */\n .slider-edit-shell {\n position: relative;\n display: block;\n }\n .swiper-edit {\n width: 100%;\n }\n /* Edit-mode slides need position:relative for the overlay hit-test */\n .swiper-edit .swiper-slide {\n position: relative;\n }\n /* Nav buttons: siblings to .swiper, positioned on the shell.\n top:50% + transform are purely CSS → auto-recenter on any height change. */\n .slider-edit-nav {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 32px;\n height: 32px;\n border-radius: 50%;\n border: 1px solid rgba(255,255,255,0.5);\n background: rgba(0,0,0,0.22);\n color: white;\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 10;\n transition: background 0.15s;\n }\n .slider-edit-nav:hover { background: rgba(0,0,0,0.45); }\n .slider-edit-nav--prev { left: 8px; }\n .slider-edit-nav--next { right: 8px; }\n .slider-edit-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n }\n .slider-edit-placeholder i { font-size: 22px; }\n /* ── Repeat badge ───────────────────────────────────────────────────────\n Hover-only, anchored top-left of shell. Same visual language as Repeater badge. */\n .slider-repeat-badge {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 10;\n display: flex;\n align-items: center;\n gap: 0.4rem;\n padding: 4px 8px;\n font-size: 11px;\n color: #cb9090;\n background: rgba(203, 144, 144, 0.08);\n border: 1px solid rgba(203, 144, 144, 0.5);\n border-radius: 0 0 4px 0;\n opacity: 0;\n transition: opacity 0.15s;\n user-select: none;\n pointer-events: none;\n }\n .slider-edit-shell:hover .slider-repeat-badge {\n opacity: 1;\n }\n .slider-repeat-badge-count { font-weight: 600; }\n .slider-badge-spin { animation: slider-badge-spin 1s linear infinite; }\n @keyframes slider-badge-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n /* ── Preview slides (repeat mode): dimmed, non-interactive ─────────── */\n .slider-preview-slide {\n opacity: 0.55;\n pointer-events: none;\n }\n `],\n standalone: false,\n})\nexport class SliderContainerComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n @Input() children: ComponentNode[] = [];\n\n private _style: Record<string, any> = {};\n private _previewStyle: Record<string, any> = {};\n private _editShellStyle: Record<string, any> = { position: 'relative' };\n @Input() set style(v: Record<string, any>) {\n if (v === this._style) return;\n this._style = v;\n // `direction` is driven by the `dir` (Language direction) trait via [style.direction].\n // Strip it from the ngStyle map: NgStyle writes the inline style last and would otherwise\n // override the dir-driven direction with the generic Layout default → RTL wouldn't apply.\n // Rebuild cached objects so ngStyle only re-applies on real input changes (avoids MO spam).\n const { direction: _dropDirection, ...rest } = v || {};\n this._previewStyle = rest;\n this._editShellStyle = { ...rest, position: 'relative' };\n }\n get style(): Record<string, any> { return this._style; }\n\n get previewStyle(): Record<string, any> { return this._previewStyle; }\n get editShellStyle(): Record<string, any> { return this._editShellStyle; }\n\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n // ── Parameters ─────────────────────────────────────────────────────────────\n @Input() dir: 'ltr' | 'rtl' = 'ltr';\n @Input() direction: 'horizontal' | 'vertical' = 'horizontal';\n @Input() slidesPerView: number | 'auto' = 'auto';\n @Input() slidesPerGroup: number = 1;\n /** 'off' | 'loop' | 'rewind' */\n @Input() loop: string = 'off';\n @Input() centeredSlides: boolean = false;\n @Input() spaceBetween: number = 0;\n @Input() initialSlide: number = 0;\n @Input() autoHeight: boolean = false;\n @Input() grabCursor: boolean = true;\n @Input() slideToClickedSlide: boolean = false;\n\n // ── Effects ────────────────────────────────────────────────────────────────\n @Input() effect: 'slide' | 'fade' | 'cube' | 'coverflow' | 'flip' | 'cards' | 'creative' = 'slide';\n @Input() speed: number = 300;\n\n // ── Navigation ─────────────────────────────────────────────────────────────\n @Input() enableNavigation: boolean = false;\n @Input() navigationColor: string = '';\n @Input() navigationSize: number = 44;\n\n // ── Pagination ─────────────────────────────────────────────────────────────\n @Input() enablePagination: boolean = false;\n @Input() paginationColor: string = '';\n @Input() paginationType: 'bullets' | 'fraction' | 'progressbar' = 'bullets';\n @Input() paginationClickable: boolean = true;\n @Input() paginationDynamicBullets: boolean = false;\n\n // ── Autoplay ───────────────────────────────────────────────────────────────\n @Input() enableAutoplay: boolean = false;\n @Input() autoplayDelay: number = 3000;\n @Input() autoplayPauseOnMouseEnter: boolean = true;\n @Input() autoplayDisableOnInteraction: boolean = false;\n\n // ── Modules ────────────────────────────────────────────────────────────────\n @Input() enableScrollbar: boolean = false;\n @Input() freeMode: boolean = false;\n @Input() enableKeyboard: boolean = false;\n @Input() enableMousewheel: boolean = false;\n @Input() enableZoom: boolean = false;\n @Input() enableParallax: boolean = false;\n\n // ── Grid ───────────────────────────────────────────────────────────────────\n @Input() enableGrid: boolean = false;\n @Input() gridRows: number = 2;\n\n // ── Responsive ─────────────────────────────────────────────────────────────\n @Input() breakpoints: string = '';\n\n // ── Data binding ───────────────────────────────────────────────────────────\n private _source = '';\n private _limit = 10;\n\n get source(): string { return this._source; }\n @Input() set source(value: string) {\n if (value === this._source) return;\n this._source = value;\n if (value) {\n this.fetchData();\n } else {\n this.items = [];\n this.previewSlides = [];\n this._scheduleReinit();\n }\n }\n\n get limit(): number { return this._limit; }\n @Input() set limit(value: number) {\n if (value === this._limit) return;\n this._limit = value;\n if (this._source) { this.fetchData(); }\n }\n\n public items: any[] = [];\n public previewSlides: ComponentNode[] = [];\n public isLoading = false;\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n @ViewChild('swiperEl', { static: false }) swiperEl?: ElementRef<HTMLElement>;\n @ViewChild('editSwiperEl', { static: false }) editSwiperEl?: ElementRef<HTMLElement>;\n\n _swiper: any = null;\n private _initRafId = 0;\n private _bindingSub?: Subscription;\n private instanceRegistry = inject(ComponentInstanceRegistryService);\n private interactionEngine = inject(InteractionEngineService);\n private ngZone = inject(NgZone);\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n @Optional() @Inject(IS_PREVIEW) public isPreview: boolean,\n @Optional() private overlayService: OverlayService,\n @Optional() private dataSourceService: BuilderDataSourceService | null,\n @Optional() private dsRegistry: DataSourceRegistryService,\n @Optional() private panelEventService: PanelEventService,\n ) {\n this.isPreview = !!isPreview;\n }\n\n ngOnInit(): void {\n if (this.panelEventService) {\n this._bindingSub = this.panelEventService.subscribe(event => {\n if (event.type !== PanelEventTypes.BINDING_CHANGED) return;\n const changedNode: ComponentNode = event.data?.node;\n if (!changedNode || !this.items.length || !this._source) return;\n if (this._isInTemplate(changedNode)) {\n this.refreshPreviews();\n }\n });\n }\n }\n\n ngAfterViewInit(): void {\n // Run outside Angular's zone so Swiper's internal ResizeObserver, MutationObserver,\n // and RAF-based animation loops don't trigger unnecessary CD ticks.\n this.ngZone.runOutsideAngular(() => {\n this._initRafId = requestAnimationFrame(() => this._initSwiper());\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._swiper) return;\n\n // dir-only change: use changeLanguageDirection() — avoids full reinit\n // which races against Angular re-rendering slides in the DOM.\n if (changes['dir'] && Object.keys(changes).length === 1) {\n this._swiper.changeLanguageDirection(this.dir);\n return;\n }\n\n const previewKeys = new Set([\n 'direction', 'loop', 'slidesPerView', 'slidesPerGroup', 'spaceBetween', 'speed',\n 'effect', 'grabCursor', 'centeredSlides', 'initialSlide', 'autoHeight',\n 'slideToClickedSlide', 'freeMode', 'breakpoints',\n 'enableNavigation', 'navigationColor', 'navigationSize',\n 'enablePagination', 'paginationColor', 'paginationType', 'paginationClickable', 'paginationDynamicBullets',\n 'enableScrollbar', 'enableAutoplay',\n 'enableKeyboard', 'enableMousewheel', 'enableZoom', 'enableGrid', 'enableParallax',\n 'autoplayDelay', 'autoplayPauseOnMouseEnter', 'autoplayDisableOnInteraction',\n 'gridRows',\n ]);\n\n // Edit mode also reinits when children change (new slide added or removed)\n const editKeys = new Set([...previewKeys, 'children']);\n const relevantKeys = this.isPreview ? previewKeys : editKeys;\n\n const hasConfigChange = Object.keys(changes).some(k => relevantKeys.has(k));\n if (hasConfigChange) {\n this._destroySwiper();\n this.ngZone.runOutsideAngular(() => {\n this._initRafId = requestAnimationFrame(() => this._initSwiper());\n });\n }\n }\n\n ngOnDestroy(): void {\n cancelAnimationFrame(this._initRafId);\n this._destroySwiper();\n this._bindingSub?.unsubscribe();\n }\n\n trackByNodeId(_index: number, node: ComponentNode): string {\n return node.id ?? String(_index);\n }\n\n onDrop(event: IoxDropEvent): void {\n if (this._source) return; // repeat mode: drops disabled, slides come from data source\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n if (this._swiper) {\n this.ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => this._swiper?.update());\n });\n }\n }\n\n // ── Data fetching ───────────────────────────────────────────────────────────\n\n /** Slides come from the SHARED resolver (public controllers + the source's own filters) — the\n * same decision the SSR engine runs, so the canvas preview matches the published page. */\n private fetchData(): void {\n if (!this._source || !this.dataSourceService || !this.dsRegistry) return;\n\n this.isLoading = true;\n this.cdr.markForCheck();\n this.dataSourceService.fetchItems(this.dsRegistry.findByAlias(this._source)).subscribe(items => {\n this.items = items.slice(0, this._limit);\n this.refreshPreviews();\n this.isLoading = false;\n this.cdr.markForCheck();\n });\n }\n\n private refreshPreviews(): void {\n if (!this.items.length || !this.children.length) {\n this.previewSlides = [];\n this.cdr.markForCheck();\n this._scheduleReinit();\n return;\n }\n this.applyFirstItemToTemplate();\n // Each preview slide = one cloned SliderSlide node with item data resolved\n this.previewSlides = this.items.slice(1).map(item =>\n cloneNodesForItem([this.children[0]], item)[0]\n );\n this.cdr.markForCheck();\n this._scheduleReinit();\n }\n\n private applyFirstItemToTemplate(): void {\n const item = this.items[0];\n if (!item || !this.children.length || !this.overlayService) return;\n // Bindings live on leaf nodes inside the template slide, so recurse into the tree\n this.applyItemToNodes([this.children[0]], item);\n }\n\n private applyItemToNodes(nodes: ComponentNode[], item: any): void {\n for (const node of nodes) {\n if (node.bindings?.length) {\n const ref = this.overlayService.getNodeRef(node);\n if (ref?.componentRef) {\n for (const binding of node.bindings as IoxBinding[]) {\n const value = resolvePath(item, binding.path);\n if (value !== undefined) {\n ref.componentRef.instance[binding.prop] = value;\n }\n }\n ref.componentRef.changeDetectorRef.detectChanges();\n }\n }\n if (node.children?.length) {\n this.applyItemToNodes(node.children, item);\n }\n }\n }\n\n private _isInTemplate(target: ComponentNode): boolean {\n const search = (nodes: ComponentNode[]): boolean =>\n nodes.some(c =>\n c === target || c.id === target.id ||\n (c.children?.length ? search(c.children) : false)\n );\n return this.children.length > 0 && search([this.children[0]]);\n }\n\n private _scheduleReinit(): void {\n this._destroySwiper();\n this.ngZone.runOutsideAngular(() => {\n this._initRafId = requestAnimationFrame(() => this._initSwiper());\n });\n }\n\n // ── Swiper lifecycle ────────────────────────────────────────────────────────\n\n private async _initSwiper(): Promise<void> {\n const el = this.isPreview ? this.swiperEl?.nativeElement : this.editSwiperEl?.nativeElement;\n if (!el) return;\n\n const [{ default: Swiper }, swiperModules] = await Promise.all([\n import('swiper'),\n import('swiper/modules'),\n ]);\n\n const {\n Navigation, Pagination, Scrollbar, Autoplay,\n Keyboard, Mousewheel, Zoom, Grid, Parallax, FreeMode,\n EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCards, EffectCreative,\n } = swiperModules as any;\n\n const modules: any[] = [];\n if (this.enableNavigation) modules.push(Navigation);\n if (this.enablePagination) modules.push(Pagination);\n if (this.enableScrollbar) modules.push(Scrollbar);\n\n const config: Record<string, any> = {\n modules,\n direction: this.direction,\n slidesPerView: this.slidesPerView,\n slidesPerGroup: this.slidesPerGroup > 1 ? this.slidesPerGroup : 1,\n spaceBetween: this.spaceBetween,\n speed: this.isPreview ? this.speed : 300,\n // Always slide effect in edit mode — fade/cube etc. hide all but active slide\n effect: this.isPreview ? this.effect : 'slide',\n centeredSlides: this.centeredSlides,\n initialSlide: this.initialSlide,\n autoHeight: this.autoHeight,\n };\n\n if (this.isPreview) {\n // Full interactive config for preview\n config['grabCursor'] = this.grabCursor;\n config['slideToClickedSlide'] = this.slideToClickedSlide;\n config['loop'] = this.loop === 'loop';\n config['rewind'] = this.loop === 'rewind';\n\n if (this.freeMode) { modules.push(FreeMode); config['freeMode'] = true; }\n if (this.enableAutoplay) { modules.push(Autoplay); }\n if (this.enableKeyboard) { modules.push(Keyboard); }\n if (this.enableMousewheel){ modules.push(Mousewheel);}\n if (this.enableZoom) { modules.push(Zoom); }\n if (this.enableGrid) { modules.push(Grid); }\n if (this.enableParallax) { modules.push(Parallax); }\n\n const effectMap: Record<string, any> = {\n fade: EffectFade, cube: EffectCube, flip: EffectFlip,\n coverflow: EffectCoverflow, cards: EffectCards, creative: EffectCreative,\n };\n if (this.effect !== 'slide' && effectMap[this.effect]) {\n modules.push(effectMap[this.effect]);\n }\n\n if (this.enableNavigation) {\n config['navigation'] = { prevEl: '.swiper-button-prev', nextEl: '.swiper-button-next' };\n }\n if (this.enablePagination) {\n config['pagination'] = {\n el: '.swiper-pagination',\n type: this.paginationType,\n clickable: this.paginationClickable,\n dynamicBullets: this.paginationDynamicBullets,\n };\n }\n if (this.enableScrollbar) config['scrollbar'] = { el: '.swiper-scrollbar', draggable: true };\n if (this.enableAutoplay) {\n config['autoplay'] = {\n delay: this.autoplayDelay,\n pauseOnMouseEnter: this.autoplayPauseOnMouseEnter,\n disableOnInteraction: this.autoplayDisableOnInteraction,\n };\n }\n if (this.enableGrid && this.gridRows > 1) config['grid'] = { rows: this.gridRows };\n if (this.breakpoints) {\n try { config['breakpoints'] = JSON.parse(this.breakpoints); } catch { /* ignore */ }\n }\n\n config['on'] = {\n slideChange: (swiper: any) => this._onSwiperEvent('swiperSlideChange', swiper),\n reachBeginning: (swiper: any) => this._onSwiperEvent('swiperReachBeginning', swiper),\n reachEnd: (swiper: any) => this._onSwiperEvent('swiperReachEnd', swiper),\n autoplayStart: (swiper: any) => this._onSwiperEvent('swiperAutoplayStart', swiper),\n autoplayStop: (swiper: any) => this._onSwiperEvent('swiperAutoplayStop', swiper),\n };\n } else {\n // Edit mode: disable touch/swipe so builder click handlers work normally\n config['allowTouchMove'] = false;\n config['simulateTouch'] = false;\n\n if (this.enableNavigation) {\n config['navigation'] = { prevEl: '.swiper-button-prev', nextEl: '.swiper-button-next' };\n }\n if (this.enablePagination) {\n config['pagination'] = {\n el: '.swiper-pagination',\n type: this.paginationType,\n clickable: this.paginationClickable,\n dynamicBullets: this.paginationDynamicBullets,\n };\n }\n if (this.enableScrollbar) config['scrollbar'] = { el: '.swiper-scrollbar', draggable: false };\n }\n\n this._swiper = new Swiper(el, config);\n this.instanceRegistry.register(this.nodeId, this._swiper);\n }\n\n private _destroySwiper(): void {\n if (this._swiper) {\n this._swiper.destroy(true, true);\n this._swiper = null;\n this.instanceRegistry.unregister(this.nodeId);\n }\n }\n\n private _onSwiperEvent(eventName: string, swiper: any): void {\n this.interactionEngine.replayTrigger(this.nodeId, eventName as any);\n\n if (eventName === 'swiperSlideChange') {\n const prevIdx: number = swiper.previousIndex;\n const activeIdx: number = swiper.activeIndex;\n const allSlides = this._source ? [this.children[0], ...this.previewSlides] : this.children;\n if (prevIdx !== undefined && allSlides[prevIdx]) {\n this.interactionEngine.replayTrigger(allSlides[prevIdx].id!, 'swiperSlideInactive');\n }\n if (allSlides[activeIdx]) {\n this.interactionEngine.replayTrigger(allSlides[activeIdx].id!, 'swiperSlideActive');\n }\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n} from '@angular/core';\n\nimport { IS_PREVIEW } from '@vectoriox/iox-ui';\nimport { ComponentNode } from '../../models/component.model';\nimport { DragEngineService, IoxDropEvent } from '../../services/drag-engine.service';\n\n@Component({\n selector: 'app-slider-slide',\n template: `\n <!-- The .swiper-slide wrapper (with the iox-outer-* class) is provided by SliderContainer —\n Swiper needs it as a direct child of .swiper-wrapper — and the SLIDE'S size lands there\n via StyleRegistryService. This is only the styled INNER block, so width/min-width/\n max-width MUST be stripped (slideEditStyle): the slide is already sized on the outer\n wrapper, and re-applying width here would size the content to 71% OF the 71% slide (the\n engine's iox-slider-slide is a single host, so it never had this trap). Preview and edit\n behave identically — the earlier preview branch used the un-stripped style input and\n shrank the content inside its own slide. -->\n <div class=\"slide-edit-block\"\n [ngClass]=\"['iox-node-' + nodeId]\"\n [ngStyle]=\"slideEditStyle\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\n <div *ngIf=\"!children.length\" class=\"slide-placeholder\">\n <i class=\"ph-thin ph-image\"></i>\n <span>Drop components here</span>\n </div>\n\n <div *ngFor=\"let child of children\"\n [ngClass]=\"['iox-outer-' + (child.styleId ?? child.id)]\"\n ioxDraggable\n [ioxDragData]=\"child\"\n [ioxDragSourceId]=\"dropListId\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"childClick.emit($event)\"\n (onMouseEnter)=\"childMouseEnter.emit($event)\"\n (onMouseLeave)=\"childMouseLeave.emit()\">\n </ng-container>\n </div>\n </div>\n `,\n styles: [`\n .slide-edit-block {\n position: relative;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n /* default card bg — overridden by inline [ngStyle] when user sets a background */\n background-color: var(--p-surface-300);\n }\n .slide-edit-block {\n width: 100%;\n }\n .slide-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1.5px dashed rgba(100, 116, 139, 0.35);\n border-radius: 4px;\n color: rgba(100, 116, 139, 0.5);\n font-size: 12px;\n pointer-events: none;\n user-select: none;\n opacity: 0;\n transition: opacity 0.15s;\n }\n :host:hover .slide-placeholder,\n :host.iox-drag-over .slide-placeholder {\n opacity: 1;\n }\n .slide-placeholder i { font-size: 22px; }\n `],\n standalone: false,\n})\nexport class SliderSlideComponent implements OnInit, OnDestroy {\n @Input() children: ComponentNode[] = [];\n\n private _style: Record<string, any> = {};\n private _slideEditStyle: Record<string, any> = {};\n @Input() set style(v: Record<string, any>) {\n if (v === this._style) return;\n this._style = v;\n // Strip width constraints; rebuild cached object so ngStyle only updates DOM\n // when the input actually changed — prevents spurious MutationObserver triggers.\n const { width, minWidth, maxWidth, ...rest } = v || {};\n this._slideEditStyle = rest;\n }\n get style(): Record<string, any> { return this._style; }\n\n get slideEditStyle(): Record<string, any> { return this._slideEditStyle; }\n\n @Input() nodeId: string = '';\n @Input() dropListId = '';\n\n @Output() childClick = new EventEmitter<any>();\n @Output() childMouseEnter = new EventEmitter<any>();\n @Output() childMouseLeave = new EventEmitter<void>();\n\n constructor(\n private dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n @Optional() @Inject(IS_PREVIEW) public isPreview: boolean,\n ) {\n this.isPreview = !!isPreview;\n }\n\n ngOnInit(): void {}\n ngOnDestroy(): void {}\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import { Component, Input, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'panel-child',\n template: '<ng-template #tpl><ng-content></ng-content></ng-template>',\n standalone: false,\n})\nexport class PanelChildComponent {\n @Input() name!: string;\n @ViewChild('tpl', { static: true }) template!: TemplateRef<any>;\n}","import { AfterContentInit, Component, ContentChildren, OnDestroy, QueryList } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { PanelEvent, PanelEventService, PanelEventTypes } from '../panel-event.service';\nimport { PanelChildComponent } from './panel-child.component';\n\n@Component({\n selector: 'app-panel',\n templateUrl: './panel.component.html',\n styleUrls: ['./panel.component.scss'],\n standalone: false,\n})\nexport class PanelComponent implements AfterContentInit, OnDestroy {\n public isPanelOpen = false;\n public activePanel: string | null = null;\n\n @ContentChildren(PanelChildComponent) panelChildren!: QueryList<PanelChildComponent>;\n\n private sub?: Subscription;\n\n constructor(private panelEventService: PanelEventService) {\n this.sub = this.panelEventService.subscribe((panelEvent: PanelEvent) => {\n if (panelEvent.type === PanelEventTypes.PANEL_CLOSE) {\n this.isPanelOpen = false;\n this.activePanel = null;\n return;\n }\n\n if (panelEvent.type === PanelEventTypes.PANEL_SELECTED || panelEvent.type === PanelEventTypes.PANEL_OPEN) {\n this.isPanelOpen = true;\n this.activePanel = panelEvent.data;\n }\n });\n }\n\n ngAfterContentInit(): void {}\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n }\n}","<div class=\"panel\">\n <ng-container *ngFor=\"let child of panelChildren\">\n <div class=\"panel-body\" [ngClass]=\"{ active: activePanel === child.name }\">\n <ng-container *ngTemplateOutlet=\"child.template\"></ng-container>\n </div>\n </ng-container>\n</div>","import { Injectable } from '@angular/core';\n\nimport { ComponentNode } from '../models/component.model';\n\nexport interface HistoryEntry {\n layout: ComponentNode[];\n timestamp: number;\n}\n\nconst MAX_HISTORY = 50;\n\n/**\n * BuilderHistoryService — snapshot-based undo/redo for the page builder.\n *\n * Snapshots are JSON deep-clones of the full layout array.\n * Session-only — not persisted to the backend.\n * Scoped to PageUiComponent.providers[] — one history stack per builder instance.\n */\n@Injectable()\nexport class BuilderHistoryService {\n private _past: HistoryEntry[] = [];\n private _future: HistoryEntry[] = [];\n\n get canUndo(): boolean { return this._past.length > 1; }\n get canRedo(): boolean { return this._future.length > 0; }\n\n push(layout: ComponentNode[]): void {\n this._past.push({ layout: JSON.parse(JSON.stringify(layout)), timestamp: Date.now() });\n if (this._past.length > MAX_HISTORY) {\n this._past.shift();\n }\n this._future = [];\n }\n\n undo(): ComponentNode[] | null {\n if (!this.canUndo) return null;\n const current = this._past.pop()!;\n this._future.unshift(current);\n return JSON.parse(JSON.stringify(this._past[this._past.length - 1].layout));\n }\n\n redo(): ComponentNode[] | null {\n if (!this.canRedo) return null;\n const next = this._future.shift()!;\n this._past.push(next);\n return JSON.parse(JSON.stringify(next.layout));\n }\n\n clear(): void {\n this._past = [];\n this._future = [];\n }\n}\n","import { NO_ERRORS_SCHEMA, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { AccordionModule } from 'primeng/accordion';\nimport { ButtonModule } from 'primeng/button';\nimport { PopoverModule } from 'primeng/popover';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DialogModule } from 'primeng/dialog';\n\nimport { IoxPageModule } from '@vectoriox/iox-ui';\n\nimport { BuilderComponent } from './builder.component';\nimport { SectionComponent } from './components/section/section.component';\nimport { BuilderContainerComponent } from './components/container/container.component';\nimport { BuilderLinkedContainerComponent } from './components/linked-container/linked-container.component';\nimport { BuilderRepeaterComponent } from './components/repeater/repeater.component';\nimport { BuilderButtonBlockComponent } from './components/button-block/button-block.component';\nimport { SliderContainerComponent } from './components/slider-container/slider-container.component';\nimport { SliderSlideComponent } from './components/slider-slide/slider-slide.component';\nimport { OverlayComponent } from './overlay/overlay.component';\nimport { ToolbarComponent } from './toolbar/toolbar.component';\nimport { RenderDirective } from './render/render.directive';\nimport { IoxDraggableDirective } from './directives/iox-draggable.directive';\nimport { IoxDropzoneDirective } from './directives/iox-dropzone.directive';\nimport { PanelComponent } from './panels/panel/panel.component';\nimport { PanelChildComponent } from './panels/panel/panel-child.component';\nimport { LayerTreeComponent } from './panels/layer-tree/layer-tree.component';\n\nimport { DragEngineService } from './services/drag-engine.service';\nimport { OverlayService } from './overlay/overlay.service';\nimport { ComponentRegistryService } from './services/component-registry.service';\nimport { DataSourceRegistryService } from './services/data-source-registry.service';\nimport { InteractionEngineService } from './services/interaction-engine.service';\nimport { ViewportService } from './services/viewport.service';\nimport { StyleRegistryService } from './services/style-registry.service';\nimport { PanelEventService } from './panels/panel-event.service';\nimport { PresetRegistryService } from './services/preset-registry.service';\nimport { SymbolRegistryService } from './services/symbol-registry.service';\nimport { InteractionPresetRegistryService } from './services/interaction-preset-registry.service';\nimport { BuilderHistoryService } from './services/builder-history.service';\nimport { BuilderClipboardService } from './services/builder-clipboard.service';\nimport { BuilderDataSourceService } from './services/builder-data-source.service';\n\n// The Style / Page / Bindings / Interactions panels are NOT part of this library: the builder\n// projects them in through <ng-content select=\"[builderPanel]\"> and the consuming app declares\n// them (they need <dynamic-input> from its InputsModule). Stale copies of the Style and Page\n// panels used to sit under lib/panels/ — undeclared and unexported, so editing them changed\n// nothing on screen. Deleted; do not reintroduce them here.\nconst DECLARATIONS = [\n BuilderComponent,\n RenderDirective,\n IoxDraggableDirective,\n IoxDropzoneDirective,\n OverlayComponent,\n ToolbarComponent,\n SectionComponent,\n BuilderContainerComponent,\n BuilderLinkedContainerComponent,\n BuilderRepeaterComponent,\n BuilderButtonBlockComponent,\n SliderContainerComponent,\n SliderSlideComponent,\n PanelComponent,\n PanelChildComponent,\n LayerTreeComponent,\n];\n\n@NgModule({\n declarations: DECLARATIONS,\n imports: [\n CommonModule,\n FormsModule,\n DragDropModule,\n AccordionModule,\n ButtonModule,\n PopoverModule,\n InputTextModule,\n SelectModule,\n TooltipModule,\n DialogModule,\n IoxPageModule,\n ],\n providers: [\n DragEngineService,\n OverlayService,\n ComponentRegistryService,\n DataSourceRegistryService,\n InteractionEngineService,\n ViewportService,\n StyleRegistryService,\n PanelEventService,\n PresetRegistryService,\n SymbolRegistryService,\n InteractionPresetRegistryService,\n BuilderHistoryService,\n BuilderClipboardService,\n BuilderDataSourceService,\n ],\n exports: [\n // Angular/PrimeNG modules re-exported so consumers can use them\n CommonModule,\n FormsModule,\n DragDropModule,\n AccordionModule,\n ButtonModule,\n PopoverModule,\n InputTextModule,\n SelectModule,\n TooltipModule,\n DialogModule,\n IoxPageModule,\n // Builder declarations\n BuilderComponent,\n RenderDirective,\n IoxDraggableDirective,\n IoxDropzoneDirective,\n OverlayComponent,\n ToolbarComponent,\n SectionComponent,\n BuilderContainerComponent,\n BuilderLinkedContainerComponent,\n BuilderRepeaterComponent,\n BuilderButtonBlockComponent,\n SliderContainerComponent,\n SliderSlideComponent,\n PanelComponent,\n PanelChildComponent,\n LayerTreeComponent,\n ],\n schemas: [NO_ERRORS_SCHEMA],\n})\nexport class IoxBuilderModule {}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Canvas data preview used to come from host-provided content services (IOX_CONTENT_SERVICE /\n * IOX_SHOP_SERVICE), whose `getContent(contentType, orgId)` hit the ADMIN resources endpoint and\n * accepted no filters — so the Repeater/Slider ignored every data-source filter. Data now flows\n * through BuilderDataSourceService + the shared planDataSource, configured with\n * IOX_DATA_SOURCE_ENDPOINTS. Those tokens are gone; do not reintroduce a fetch that bypasses it.\n */\n\n/** Optional font manager. Provide from the host app to populate the fontFamily dropdown. */\nexport const IOX_FONT_MANAGER = new InjectionToken<IoxFontManager>('IOX_FONT_MANAGER');\n\nexport interface IoxFontManager {\n loadFonts(orgId: string): void;\n uploadedFonts$: import('rxjs').Observable<any>;\n getAllFontOptions(): { label: string; value: string }[];\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderButtonComponentConfig extends ComponentConfig {\n constructor() {\n super('Button', 'app-builder-button', 'ph-thin ph-cursor-click', 'Basic');\n this.inputs = {\n label: 'text',\n link: 'text',\n variant: 'select'\n };\n this.traits = [\n new TraitConfig('label', 'Label', TraitInputType.Text, undefined, 'Click me'),\n new TraitConfig('link', 'Link', TraitInputType.Text, undefined, '#'),\n new TraitConfig('variant', 'Variant', TraitInputType.Select, ['primary', 'outlined', 'text'], 'primary'),\n ];\n this.styleTraits = buildFullStyleTraits();\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class ButtonBlockComponentConfig extends ComponentConfig {\n constructor() {\n super('ButtonBlock', 'app-builder-button-block', 'ph-thin ph-cursor-click', 'Basic');\n this.children = [];\n this.inputs = {\n tag: 'select',\n href: 'text',\n target: 'select',\n type: 'select',\n };\n this.traits = [\n new TraitConfig('tag', 'Tag', TraitInputType.Select, ['button', 'a'], 'button'),\n new TraitConfig('href', 'URL', TraitInputType.Text, undefined, '', false, { trait: 'tag', values: 'a' }),\n new TraitConfig('target', 'Target', TraitInputType.Select, ['_self', '_blank'], '_self', false, { trait: 'tag', values: 'a' }),\n new TraitConfig('type', 'Type', TraitInputType.Select, ['button', 'submit', 'reset'], 'button', false, { trait: 'tag', values: 'button' }),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n width: 'auto',\n height: 'auto',\n padding: '10px 20px',\n borderRadius: '6px',\n cursor: 'pointer',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class CardComponentConfig extends ComponentConfig {\n constructor() {\n super('Card', 'app-card', 'ph-thin ph-cards', 'Content');\n this.inputs = {\n title: 'text',\n image: 'image',\n description: 'text'\n };\n this.traits = [\n new TraitConfig('title', 'Title', TraitInputType.Text, undefined, 'Default Title'),\n new TraitConfig('image', 'Image URL', TraitInputType.Media, { mode: 'compact' }, 'https://via.placeholder.com/150'),\n new TraitConfig('description', 'Description', TraitInputType.Text, undefined, 'This is a default card description.')\n ];\n this.styleTraits = buildFullStyleTraits();\n\n this.applyStyleDefaults({\n width: '200px',\n height: 'auto',\n padding: '16px 16px 16px 16px',\n borderWidth: '1px 1px 1px 1px',\n borderStyle: 'solid',\n borderColor: '#cccccc',\n borderRadius: '8px',\n backgroundColor: '#ffffff',\n });\n }\n}","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderContainerComponentConfig extends ComponentConfig {\n constructor() {\n super('Container', 'app-builder-container', 'ph-thin ph-square', 'Layout');\n this.children = [];\n this.traits = [\n new TraitConfig('htmlTag', 'HTML Tag', TraitInputType.Select,\n ['div', 'section', 'article', 'header', 'footer', 'main', 'nav', 'ul', 'ol', 'li'],\n 'div'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n height: 'auto',\n minHeight: '200px',\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import { ComponentConfig, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderDividerComponentConfig extends ComponentConfig {\n constructor() {\n super('Divider', 'app-builder-divider', 'ph-thin ph-minus', 'Layout');\n this.traits = [];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n height: '1px',\n backgroundColor: '#cccccc',\n margin: '8px 0px 8px 0px',\n });\n }\n}\n","import {\n ComponentConfig,\n TraitConfig,\n TraitInputType,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n BorderGroupStyleConfig,\n BackgroundGroupStyleConfig,\n} from '../../models/component.model';\n\n/**\n * Gallery — crossfade image gallery (working name; \"fade\" is the first effect, not the component).\n *\n * The RENDER component is the shared engine twin `ClientGalleryComponent` (`iox-gallery`) from\n * `@vectoriox/iox-ui` — reused directly in the builder (like Image reuses BuilderImageComponent), so\n * there is ONE implementation of the crossfade for both canvas and live site. This config only\n * declares the editable traits + the minimal style groups (size + spacing, per product decision).\n *\n * Population (v1): the `images` MediaList trait (URL / one-by-one / filebox / paste). Data-source\n * binding (`source`/`sourcePath`) is a later phase. See gallery-component-plan.md.\n */\nexport class GalleryConfig extends ComponentConfig {\n constructor() {\n super('Gallery', 'iox-gallery', 'ph-thin ph-images', 'Media');\n\n this.traits = [\n // ── Images ────────────────────────────────────────────────────────\n new TraitConfig('__imagesLabel', 'Images', TraitInputType.SectionLabel),\n new TraitConfig('images', 'Images', TraitInputType.MediaList, undefined, []),\n\n // ── Playback ──────────────────────────────────────────────────────\n new TraitConfig('__playbackLabel', 'Playback', TraitInputType.SectionLabel),\n // Effect is a Select scaffolded for future effects; v1 lists only Fade.\n new TraitConfig('effect', 'Effect', TraitInputType.Select,\n [{ label: 'Fade', value: 'fade' }], 'fade'),\n // Durations are milliseconds — use a plain Number field (Scrub renders a px unit label).\n new TraitConfig('showDuration', 'Show duration (ms)', TraitInputType.Number, undefined, 4000),\n new TraitConfig('fadeDuration', 'Fade duration (ms)', TraitInputType.Number, undefined, 1000),\n new TraitConfig('autoStart', 'Auto start', TraitInputType.Checkbox, undefined, true),\n ];\n\n // Styling: size + spacing + border + background (letterbox). No typography (not text-bearing).\n this.styleTraits = [\n new PositionGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n ];\n\n // Size traits stay at their group default (auto) so a gallery starts unconstrained. The one\n // exception is `minHeight: 200px` — the image layers are absolutely positioned (no intrinsic\n // height), so without a floor a freshly-dropped, unsized gallery would collapse to 0px and be\n // invisible. min-height is a style-engine default on `.iox-node` (not scoped component CSS),\n // so the user can freely override it.\n this.applyStyleDefaults({\n minHeight: '200px',\n backgroundColor: '#000000',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderHeadingComponentConfig extends ComponentConfig {\n constructor() {\n super('Heading', 'app-builder-heading', 'ph-thin ph-text-h', 'Basic');\n this.traits = [\n new TraitConfig('content', 'Content', TraitInputType.Text, undefined, 'Heading'),\n new TraitConfig('level', 'Level', TraitInputType.Select,\n ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'], 'h2'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n fontSize: '32px',\n fontWeight: '700',\n width: 'auto',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderIconComponentConfig extends ComponentConfig {\n constructor() {\n super('Icon', 'app-builder-icon', 'ph-thin ph-star', 'Basic');\n this.traits = [\n new TraitConfig('iconClass', 'Icon', TraitInputType.Icon, undefined, 'ph-thin ph-star'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n fontSize: '24px',\n color: '#374151',\n // An icon is a glyph, not a paragraph — the Typography group's default line-height of\n // 1.5 adds phantom vertical space and misaligns it. Default to 0 so the line box is fully\n // collapsed and the icon contributes no extra vertical space (spacing comes from\n // padding/margin instead). Serialized into styleProps (self-describing node).\n lineHeight: '0',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderImageComponentConfig extends ComponentConfig {\n constructor() {\n super('Image', 'app-builder-image', 'ph-thin ph-image', 'Basic');\n this.inputs = {\n src: 'text',\n alt: 'text',\n };\n this.traits = [\n new TraitConfig('src', 'Image URL', TraitInputType.Media, { mode: 'compact' }, 'https://placehold.co/600x400?text=Image'),\n new TraitConfig('alt', 'Alt Text', TraitInputType.Text, undefined, 'Image'),\n // objectFit moved to the Size style group (flows through the CSS engine as a style trait).\n ];\n this.styleTraits = buildFullStyleTraits();\n\n this.applyStyleDefaults({\n width: '300px',\n aspectRatio: '1/1',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderLinkComponentConfig extends ComponentConfig {\n constructor() {\n super('Link', 'app-builder-link', 'ph-thin ph-link', 'Basic');\n this.inputs = {\n label: 'text',\n linkType: 'select',\n url: 'text',\n pageRoute: 'text',\n target: 'select',\n };\n this.traits = [\n new TraitConfig('label', 'Label', TraitInputType.Text, undefined, 'Click here'),\n new TraitConfig(\n 'linkType', 'Link Type', TraitInputType.Select,\n [{ label: 'External URL', value: 'external' }, { label: 'Website Page', value: 'page' }],\n 'external'\n ),\n new TraitConfig('url', 'URL', TraitInputType.Text, undefined, 'https://', false,\n { trait: 'linkType', values: 'external' }),\n new TraitConfig('pageRoute', 'Page Route', TraitInputType.Text, undefined, '', false,\n { trait: 'linkType', values: 'page' }),\n new TraitConfig(\n 'target', 'Target', TraitInputType.Select,\n [\n { label: 'Same tab', value: '_self' },\n { label: 'New tab', value: '_blank' },\n { label: 'Parent frame', value: '_parent' },\n { label: 'Full window', value: '_top' },\n ],\n '_self'\n ),\n ];\n this.styleTraits = buildFullStyleTraits();\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderLinkedContainerConfig extends ComponentConfig {\n constructor() {\n super('LinkedContainer', 'app-builder-linked-container', 'ph-thin ph-link-simple', 'Layout');\n this.children = [];\n this.inputs = {\n linkType: 'select',\n url: 'text',\n pageRoute: 'text',\n target: 'select',\n };\n this.traits = [\n new TraitConfig(\n 'linkType', 'Link Type', TraitInputType.Select,\n [{ label: 'External URL', value: 'external' }, { label: 'Website Page', value: 'page' }],\n 'external'\n ),\n new TraitConfig('url', 'URL', TraitInputType.Text, undefined, 'https://', false,\n { trait: 'linkType', values: 'external' }),\n new TraitConfig('pageRoute', 'Page Route', TraitInputType.Text, undefined, '', false,\n { trait: 'linkType', values: 'page' }),\n new TraitConfig(\n 'target', 'Target', TraitInputType.Select,\n [\n { label: 'Same tab', value: '_self' },\n { label: 'New tab', value: '_blank' },\n { label: 'Parent frame', value: '_parent' },\n { label: 'Full window', value: '_top' },\n ],\n '_self'\n ),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: 'auto',\n height: 'auto',\n minHeight: '80px',\n display: 'block',\n });\n }\n}\n","import {\n ComponentConfig,\n TraitConfig,\n TraitInputType,\n buildFullStyleTraits,\n} from '../../models/component.model';\n\nexport class BuilderListItemComponentConfig extends ComponentConfig {\n constructor() {\n super('ListItem', 'app-builder-container', 'ph-thin ph-list-dashes', 'Layout');\n this.traits = [\n new TraitConfig('htmlTag', 'Tag', TraitInputType.Select, ['li'], 'li'),\n ];\n this.styleTraits = buildFullStyleTraits();\n this.children = [];\n this.applyStyleDefaults({\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import { ComponentConfig, TraitConfig, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class TextBlockComponentConfig extends ComponentConfig {\n constructor() {\n super('Text', 'app-text-block', 'ph-thin ph-text-aa', 'Basic');\n this.inputs = {\n content: 'text',\n tag: 'select',\n };\n this.traits = [\n new TraitConfig('content', 'Content', TraitInputType.Text, undefined, 'Enter text here'),\n new TraitConfig('tag', 'Tag', TraitInputType.Select, ['p', 'span'], 'p'),\n ];\n this.styleTraits = buildFullStyleTraits();\n\n this.applyStyleDefaults({\n display: 'block',\n height: 'auto',\n minHeight: '20px',\n padding: '10px',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n ComponentNode,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n ListGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n TypographyGroupStyleConfig,\n} from '../../models/component.model';\nimport { BuilderListItemComponentConfig } from '../list-item/list-item.config';\nimport { TextBlockComponentConfig } from '../text/text.config';\n\nexport class BuilderListComponentConfig extends ComponentConfig {\n constructor() {\n super('List', 'app-builder-container', 'ph-thin ph-list', 'Layout');\n this.traits = [\n new TraitConfig('htmlTag', 'Tag', TraitInputType.Select, ['ul', 'ol'], 'ul'),\n new TraitConfig('start', 'Start At', TraitInputType.Number, undefined, 1, false,\n { trait: 'htmlTag', values: 'ol' }),\n new TraitConfig('reversed', 'Reversed', TraitInputType.Checkbox, undefined, false, false,\n { trait: 'htmlTag', values: 'ol' }),\n ];\n this.styleTraits = [\n new ListGroupStyleConfig(),\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.children = [\n this.makeListItem(),\n this.makeListItem(),\n this.makeListItem(),\n ];\n this.applyStyleDefaults({\n display: 'block',\n backgroundColor: 'transparent',\n padding: '0px 0px 0px 24px',\n });\n }\n\n private makeListItem(): ComponentNode {\n const item = new BuilderListItemComponentConfig();\n const textCfg = new TextBlockComponentConfig();\n const contentTrait = textCfg.traits.find(t => t.name === 'content');\n if (contentTrait) contentTrait.default = 'List item';\n item.children = [textCfg];\n return item;\n }\n}\n","import { ComponentConfig, ComponentTrait, TraitInputType, buildFullStyleTraits } from '../../models/component.model';\n\nexport class RepeaterComponentConfig extends ComponentConfig {\n constructor() {\n super('Repeater', 'app-builder-repeater', 'ph-thin ph-repeat', 'Data');\n this.children = [];\n this.traits = [\n {\n name: 'source',\n label: 'Source',\n type: TraitInputType.Select,\n options: [], // populated at runtime from DataSourceRegistryService aliases\n default: '',\n } as ComponentTrait,\n {\n name: 'limit',\n label: 'Limit',\n type: TraitInputType.Number,\n default: 10,\n } as ComponentTrait,\n ];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n height: 'auto',\n });\n }\n}\n","import { ComponentConfig, buildFullStyleTraits } from '../../models/component.model';\n\nexport class SectionComponentConfig extends ComponentConfig {\n constructor() {\n super('Section', 'app-section', 'ph-thin ph-rows', 'Layout');\n this.children = [];\n this.traits = [];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n width: 'auto',\n height: 'auto',\n minHeight: '200px',\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import {\n ComponentConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n BorderGroupStyleConfig,\n BackgroundGroupStyleConfig,\n PositionGroupStyleConfig,\n LayoutGroupStyleConfig,\n TypographyGroupStyleConfig,\n} from '../../models/component.model';\n\nexport class SliderSlideConfig extends ComponentConfig {\n constructor() {\n super('SliderSlide', 'app-slider-slide', 'ph-thin ph-rectangle', 'Media');\n\n this.children = [];\n // Hidden: SliderSlide is created only via the \"Add Slide\" toolbar button,\n // not by dragging from the Components panel.\n this.hidden = true;\n\n this.componentEvents = [\n { value: 'swiperSlideActive', label: 'This Slide Becomes Active', icon: 'ph-thin ph-eye' },\n { value: 'swiperSlideInactive', label: 'This Slide Becomes Inactive', icon: 'ph-thin ph-eye-slash' },\n ];\n\n this.traits = [];\n\n this.styleTraits = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n ];\n\n this.applyStyleDefaults({\n width: '33%',\n aspectRatio: '1 / 1',\n });\n }\n}\n","import {\n ComponentConfig,\n ComponentTrait,\n TraitConfig,\n TraitInputType,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n LayoutGroupStyleConfig,\n SpacingGroupStyleConfig,\n BorderGroupStyleConfig,\n BackgroundGroupStyleConfig,\n EffectsGroupStyleConfig,\n} from '../../models/component.model';\nimport { SliderSlideConfig } from '../slider-slide/slider-slide.config';\n\nexport class SliderContainerConfig extends ComponentConfig {\n constructor() {\n super('SliderContainer', 'app-slider-container', 'ph-thin ph-slideshow', 'Media');\n\n this.children = [\n new SliderSlideConfig(),\n new SliderSlideConfig(),\n new SliderSlideConfig(),\n new SliderSlideConfig(),\n ];\n\n this.componentEvents = [\n { value: 'swiperSlideChange', label: 'Slide Changes', icon: 'ph-thin ph-arrows-left-right' },\n { value: 'swiperReachBeginning', label: 'Reaches First Slide', icon: 'ph-thin ph-skip-back' },\n { value: 'swiperReachEnd', label: 'Reaches Last Slide', icon: 'ph-thin ph-skip-forward' },\n { value: 'swiperAutoplayStart', label: 'Autoplay Starts', icon: 'ph-thin ph-play' },\n { value: 'swiperAutoplayStop', label: 'Autoplay Stops', icon: 'ph-thin ph-stop' },\n ];\n\n this.componentMethods = [\n { value: 'swiperNext', label: 'Next Slide' },\n { value: 'swiperPrev', label: 'Previous Slide' },\n { value: 'swiperGoToSlide', label: 'Go to Slide', params: [{ name: 'index', type: 'number', label: 'Slide Index (0-based)' }] },\n { value: 'swiperAutoplayStart', label: 'Start Autoplay' },\n { value: 'swiperAutoplayStop', label: 'Stop Autoplay' },\n { value: 'swiperAutoplayPause', label: 'Pause Autoplay' },\n ];\n\n this.traits = [\n // ── Data binding ──────────────────────────────────────────────────\n new TraitConfig('__dataLabel', 'Data', TraitInputType.SectionLabel),\n\n {\n name: 'source',\n label: 'Source',\n type: TraitInputType.Select,\n options: [], // populated at runtime from DataSourceRegistryService aliases\n default: '',\n } as ComponentTrait,\n\n new TraitConfig('limit', 'Limit', TraitInputType.Number, undefined, 10),\n\n // ── Parameters ────────────────────────────────────────────────────\n new TraitConfig('__paramsLabel', 'Parameters', TraitInputType.SectionLabel),\n\n new TraitConfig('dir', 'Language direction', TraitInputType.SelectButton,\n [{ label: 'LTR', value: 'ltr' }, { label: 'RTL', value: 'rtl' }],\n 'ltr'),\n\n new TraitConfig('direction', 'Slide direction', TraitInputType.Select,\n [{ label: 'Horizontal', value: 'horizontal' }, { label: 'Vertical', value: 'vertical' }],\n 'horizontal'),\n\n new TraitConfig('slidesPerView', 'Slides per view', TraitInputType.Select,\n [\n { label: 'Auto (slide width)', value: 'auto' },\n { label: '1', value: 1 },\n { label: '2', value: 2 },\n { label: '3', value: 3 },\n { label: '4', value: 4 },\n { label: '5', value: 5 },\n { label: '6', value: 6 },\n ],\n 'auto'),\n\n new TraitConfig('slidesPerGroup', 'Slides per group', TraitInputType.Scrub, undefined, 1),\n\n new TraitConfig('loop', 'Loop', TraitInputType.SelectButton,\n [\n { label: 'Off', value: 'off' },\n { label: 'Loop', value: 'loop' },\n { label: 'Rewind', value: 'rewind' },\n ],\n 'off'),\n\n new TraitConfig('centeredSlides', 'Centered slides', TraitInputType.Checkbox, undefined, false),\n\n new TraitConfig('spaceBetween', 'Space between (px)', TraitInputType.Scrub, undefined, 0),\n\n new TraitConfig('initialSlide', 'Initial slide', TraitInputType.Scrub, undefined, 0),\n\n new TraitConfig('autoHeight', 'Auto height', TraitInputType.Checkbox, undefined, false),\n\n new TraitConfig('grabCursor', 'Grab cursor', TraitInputType.Checkbox, undefined, true),\n\n new TraitConfig('slideToClickedSlide', 'Slide to clicked slide', TraitInputType.Checkbox, undefined, false),\n\n // ── Effects ───────────────────────────────────────────────────────\n new TraitConfig('__effectsLabel', 'Effects', TraitInputType.SectionLabel),\n\n new TraitConfig('effect', 'Effect', TraitInputType.Select,\n [\n { label: 'Slide', value: 'slide' },\n { label: 'Fade', value: 'fade' },\n { label: 'Cube', value: 'cube' },\n { label: 'Coverflow', value: 'coverflow' },\n { label: 'Flip', value: 'flip' },\n { label: 'Cards', value: 'cards' },\n { label: 'Creative', value: 'creative' },\n ],\n 'slide'),\n\n new TraitConfig('speed', 'Transition duration (ms)', TraitInputType.Scrub, undefined, 300),\n\n // ── Navigation ────────────────────────────────────────────────────\n new TraitConfig('__navLabel', 'Navigation', TraitInputType.SectionLabel),\n\n new TraitConfig('enableNavigation', 'Navigation arrows', TraitInputType.Checkbox, undefined, false),\n\n new TraitConfig('navigationColor', 'Color', TraitInputType.Color, undefined, '#ffffff',\n undefined, { trait: 'enableNavigation', values: 'true' }),\n\n new TraitConfig('navigationSize', 'Size (px)', TraitInputType.Scrub, undefined, 44,\n undefined, { trait: 'enableNavigation', values: 'true' }),\n\n // ── Pagination ────────────────────────────────────────────────────\n new TraitConfig('__paginationLabel', 'Pagination', TraitInputType.SectionLabel),\n\n new TraitConfig('enablePagination', 'Pagination', TraitInputType.Checkbox, undefined, false),\n\n new TraitConfig('paginationColor', 'Color', TraitInputType.Color, undefined, '#ffffff',\n undefined, { trait: 'enablePagination', values: 'true' }),\n\n new TraitConfig('paginationType', 'Type', TraitInputType.SelectButton,\n [\n { label: '•••', value: 'bullets' },\n { label: '—', value: 'progressbar' },\n { label: '1/5', value: 'fraction' },\n ],\n 'bullets', undefined, { trait: 'enablePagination', values: 'true' }),\n\n new TraitConfig('paginationClickable', 'Clickable', TraitInputType.Checkbox, undefined, true,\n undefined, { trait: 'enablePagination', values: 'true' }),\n\n new TraitConfig('paginationDynamicBullets', 'Dynamic bullets', TraitInputType.Checkbox, undefined, false,\n undefined, { trait: 'enablePagination', values: 'true' }),\n\n // ── Autoplay ──────────────────────────────────────────────────────\n new TraitConfig('__autoplayLabel', 'Autoplay', TraitInputType.SectionLabel),\n\n new TraitConfig('enableAutoplay', 'Autoplay', TraitInputType.Checkbox, undefined, false),\n\n new TraitConfig('autoplayDelay', 'Delay (ms)', TraitInputType.Scrub, undefined, 3000,\n undefined, { trait: 'enableAutoplay', values: 'true' }),\n\n new TraitConfig('autoplayPauseOnMouseEnter', 'Pause on hover', TraitInputType.Checkbox, undefined, true,\n undefined, { trait: 'enableAutoplay', values: 'true' }),\n\n new TraitConfig('autoplayDisableOnInteraction', 'Disable on interact', TraitInputType.Checkbox, undefined, false,\n undefined, { trait: 'enableAutoplay', values: 'true' }),\n\n // ── Modules ───────────────────────────────────────────────────────\n new TraitConfig('__modulesLabel', 'Modules', TraitInputType.SectionLabel),\n\n new TraitConfig('enableScrollbar', 'Scrollbar', TraitInputType.Checkbox, undefined, false),\n new TraitConfig('freeMode', 'Free mode', TraitInputType.Checkbox, undefined, false),\n new TraitConfig('enableKeyboard', 'Keyboard control', TraitInputType.Checkbox, undefined, false),\n new TraitConfig('enableMousewheel','Mousewheel', TraitInputType.Checkbox, undefined, false),\n new TraitConfig('enableZoom', 'Zoom', TraitInputType.Checkbox, undefined, false),\n new TraitConfig('enableParallax', 'Parallax', TraitInputType.Checkbox, undefined, false),\n\n // ── Grid ──────────────────────────────────────────────────────────\n new TraitConfig('__gridLabel', 'Grid', TraitInputType.SectionLabel),\n\n new TraitConfig('enableGrid', 'Grid (multi-row)', TraitInputType.Checkbox, undefined, false),\n\n new TraitConfig('gridRows', 'Rows', TraitInputType.Scrub, undefined, 2,\n undefined, { trait: 'enableGrid', values: 'true' }),\n\n // ── Responsive ────────────────────────────────────────────────────\n new TraitConfig('__responsiveLabel', 'Responsive', TraitInputType.SectionLabel),\n\n new TraitConfig('breakpoints', 'Breakpoints (JSON)', TraitInputType.Textarea, undefined, ''),\n ];\n\n this.styleTraits = [\n new PositionGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n\n this.applyStyleDefaults({\n });\n }\n}\n","import { ComponentConfig, buildFullStyleTraits } from '../../models/component.model';\n\nexport class BuilderSpacerComponentConfig extends ComponentConfig {\n constructor() {\n super('Spacer', 'app-builder-spacer', 'ph-thin ph-arrows-vertical', 'Layout');\n this.traits = [];\n this.styleTraits = buildFullStyleTraits();\n this.applyStyleDefaults({\n height: '40px',\n });\n }\n}\n","/*\n * Public API Surface of @vectoriox/iox-builder\n */\n\nexport * from './lib/iox-builder.module';\nexport * from './lib/builder.component';\nexport * from './lib/render/render.directive';\nexport { StyleCategory, IoxBinding, IoxContextSlot, SetContextParams, DsFilterByRouteParam, DsFilterByQueryParam, DataSourceType, IoxDataSource, InteractionTrigger, InteractionActionType, InteractionAction, IoxInteraction, TRIGGER_OPTIONS, ACTION_TYPE_OPTIONS, INVERSE_ACTION, EASING_OPTIONS, ElementState, SUPPORTED_STATES, INTERACTION_STATES, STRUCTURAL_STATES, RELATIONAL_STATES, RELATIONAL_STATE_BASE, TARGETED_STATES, TARGETED_STATE_BASE, ComponentNode, TraitInputType, TraitOptionMap, TraitSelectOption, QuadSizeSegment, TraitShowCondition, ComponentTrait, StyleTrait, StyleTraitGroup, generateNodeId, ComponentConfig, TraitConfig, StyleTraitConfig, GroupStyleConfig, UNITS_ALL, UNITS_NO_VW, UNITS_FIXED, UNITS_DEG, resolveTraitControllerType, resolveTraitOptions, StylePreset, buildPresetStyleTraits, buildFullStyleTraits, ListGroupStyleConfig, IoxSymbol, InteractionPreset, ComponentEventDef, ComponentMethodDef, flattenSchemaFields, arraySchemaFields, arrayItemSchemaFields, PositionGroupStyleConfig, LayoutGroupStyleConfig, ChildLayoutGroupStyleConfig, SizeGroupStyleConfig, DimensionsGroupStyleConfig, BackgroundGroupStyleConfig, SpacingGroupStyleConfig, BorderGroupStyleConfig, TypographyGroupStyleConfig, EffectsGroupStyleConfig } from './lib/models/component.model';\nexport { wrapNode, findNodeLocation } from './lib/models/wrap-node';\nexport * from './lib/services/component-instance-registry.service';\nexport * from './lib/services/symbol-registry.service';\nexport * from './lib/services/interaction-preset-registry.service';\nexport * from './lib/services/builder-history.service';\nexport * from './lib/services/builder-clipboard.service';\nexport * from './lib/services/builder-data-source.service';\nexport * from './lib/services/builder-data-source.service';\nexport * from './lib/panels/panel.model';\nexport * from './lib/panels/panel-event.service';\nexport * from './lib/tokens/builder.tokens';\nexport * from './lib/services/component-registry.service';\nexport * from './lib/services/data-source-registry.service';\nexport * from './lib/services/drag-engine.service';\nexport * from './lib/services/style-registry.service';\nexport * from './lib/services/viewport.service';\nexport * from './lib/services/preset-registry.service';\nexport * from './lib/overlay/overlay.service';\nexport * from './lib/overlay/overlay.component';\nexport * from './lib/toolbar/toolbar.component';\nexport * from './lib/directives/iox-draggable.directive';\nexport * from './lib/directives/iox-dropzone.directive';\nexport * from './lib/panels/panel/panel.component';\nexport * from './lib/panels/panel/panel-child.component';\nexport * from './lib/panels/layer-tree/layer-tree.component';\nexport * from './lib/services/interaction-engine.service';\nexport { composeVirtualTraits, VIRTUAL_TRAIT_KEYS } from './lib/style-compose';\n\n// Component classes (builder variants with drag/drop)\nexport * from './lib/components/section/section.component';\nexport * from './lib/components/container/container.component';\nexport * from './lib/components/linked-container/linked-container.component';\nexport * from './lib/components/repeater/repeater.component';\nexport * from './lib/components/button-block/button-block.component';\nexport * from './lib/components/slider-container/slider-container.component';\nexport * from './lib/components/slider-slide/slider-slide.component';\n\n// Component configs\nexport * from './lib/components/button/button.config';\nexport * from './lib/components/button-block/button-block.config';\nexport * from './lib/components/card/card.config';\nexport * from './lib/components/container/container.config';\nexport * from './lib/components/divider/divider.config';\nexport * from './lib/components/gallery/gallery.config';\nexport * from './lib/components/heading/heading.config';\nexport * from './lib/components/icon/icon.config';\nexport * from './lib/components/image/image.config';\nexport * from './lib/components/link/link.config';\nexport * from './lib/components/linked-container/linked-container.config';\nexport * from './lib/components/list/list.config';\nexport * from './lib/components/list-item/list-item.config';\nexport * from './lib/components/repeater/repeater.config';\nexport * from './lib/components/section/section.config';\nexport * from './lib/components/slider-container/slider-container.config';\nexport * from './lib/components/slider-slide/slider-slide.config';\nexport * from './lib/components/spacer/spacer.config';\nexport * from './lib/components/text/text.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EASING_OPTIONS","i1.ComponentRegistryService","i2.SymbolRegistryService","i1.OverlayService","i1.DragEngineService","i2.StyleRegistryService","i2.OverlayService","i3.StyleRegistryService","i4.InteractionEngineService","i5.PanelEventService","i6.DragEngineService","i2.ViewportService","i3.PresetRegistryService","i4.SymbolRegistryService","i5.InteractionPresetRegistryService","i6.InteractionEngineService","i7.BuilderClipboardService","i8.StyleRegistryService","i9.PanelEventService","i10","i1","i2","i3","i3.PanelEventService","i4.DragEngineService","i5.DataSourceRegistryService","i6.ViewportService","i7.InteractionEngineService","i8.InteractionPresetRegistryService","i9.BuilderClipboardService","i10.SymbolRegistryService","i11.MoveableCanvasService","i12.SelectoCanvasService","i13","i17.RenderDirective","i18.OverlayComponent","i19.ToolbarComponent","i20.LayerTreeComponent","i3.RenderDirective","i4.IoxDropzoneDirective","i3.BuilderDataSourceService","i4.DataSourceRegistryService","i7","i8.RenderDirective","i9.IoxDraggableDirective","i10.IoxDropzoneDirective","i6","i7.RenderDirective","i8.IoxDraggableDirective","i9.IoxDropzoneDirective","i4.IoxDraggableDirective","i5.IoxDropzoneDirective","i1.PanelEventService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEY;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB;AAC2F;AAC3F,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;;AAEb,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AAC7B,CAAC,EAfW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;IAqDb;AAAZ,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,KAAA,CAAA,GAAA,KAAmB;AACnB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAoB;AACpB,IAAA,cAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,IAAA,cAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAsB;AACtB;AACyF;AACzF,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,SAAuB;AACvB;;AAEyC;AACzC,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAwB;AACxB;;;AAGyC;AACzC,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAwB;AAC5B,CAAC,EAlBW,cAAc,KAAd,cAAc,GAAA,EAAA,CAAA,CAAA;AA+H1B;;;AAGG;AACI,MAAM,cAAc,GAAkE;AACzF,IAAA,MAAM,EAAK,SAAS;AACpB,IAAA,OAAO,EAAI,QAAQ;AACnB,IAAA,IAAI,EAAO,MAAM;AACjB,IAAA,IAAI,EAAO,MAAM;AACjB,IAAA,OAAO,EAAI,UAAU;AACrB,IAAA,QAAQ,EAAG,SAAS;AACpB,IAAA,MAAM,EAAK,UAAU;AACrB,IAAA,QAAQ,EAAG,QAAQ;AACnB,IAAA,QAAQ,EAAG,WAAW;AACtB,IAAA,SAAS,EAAE,UAAU;;;;AAIrB,IAAA,UAAU,EAAI,cAAc;AAC5B,IAAA,YAAY,EAAE,YAAY;;AAsBvB,MAAM,eAAe,GAAiE;IACzF,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAClE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,oBAAoB,EAAE;IACvE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,qBAAqB,EAAE;IACxE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAC3E,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE;IACnE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE;IACpE,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,iCAAiC,EAAE;;AAG3F,MAAM,mBAAmB,GAAsD;AAClF,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;AACrC,IAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;AACvC,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;AACrC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE;AACzC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE;AACzC,IAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE;AAC3C,IAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;AACvC,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE;AACzC,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,IAAA,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,mBAAmB,EAAE;AACzD,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE;AAC7C,IAAA,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAE;;AAG9C,MAAMA,gBAAc,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa;AA4CrF;AACO,MAAM,kBAAkB,GAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO;AAE7E;AACO,MAAM,iBAAiB,GAAmB,CAAC,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB;AAElH;;;;;AAKG;AACI,MAAM,iBAAiB,GAAmB,CAAC,cAAc;AAEzD,MAAM,qBAAqB,GAA0C;AACxE,IAAA,cAAc,EAAE,OAAO;;AAG3B;;;;;;;;;;AAUG;AACI,MAAM,eAAe,GAAmB,CAAC,eAAe;AAExD,MAAM,mBAAmB,GAA0C;AACtE,IAAA,eAAe,EAAE,OAAO;;AAGrB,MAAM,gBAAgB,GAAmB,CAAC,GAAG,kBAAkB,EAAE,GAAG,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,GAAG,eAAe;AA0DtI;;;;AAIG;AACG,SAAU,sBAAsB,CAAC,UAA+B,EAAA;AAClE,IAAA,MAAM,SAAS,GAAuB;AAClC,QAAA,IAAI,sBAAsB,EAAE;AAC5B,QAAA,IAAI,oBAAoB,EAAE;AAC1B,QAAA,IAAI,0BAA0B,EAAE;AAChC,QAAA,IAAI,uBAAuB,EAAE;AAC7B,QAAA,IAAI,sBAAsB,EAAE;AAC5B,QAAA,IAAI,0BAA0B,EAAE;AAChC,QAAA,IAAI,uBAAuB,EAAE;AAC7B,QAAA,IAAI,wBAAwB,EAAE;KACjC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,KAAK;AAC3B,QAAA,GAAG,KAAK;QACR,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK;AAC/B,YAAA,GAAG,KAAK;YACR,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO;AACzF,SAAA,CAAC,CAAC;AACN,KAAA,CAAC,CAAC;AACP;IAEY;AAAZ,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,aAAqB;AACrB,IAAA,cAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf;AACoG;AACpG,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,cAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACzB,CAAC,EAnBW,cAAc,KAAd,cAAc,GAAA,EAAA,CAAA,CAAA;SAsEV,cAAc,GAAA;AAC1B,IAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAClD;MAEa,eAAe,CAAA;IAsBxB,WAAA,CAAY,IAAY,EAAE,QAAgB,EAAE,IAAI,GAAG,iBAAiB,EAAE,QAAQ,GAAG,SAAS,EAAA;AACtF,QAAA,IAAI,CAAC,EAAE,GAAG,cAAc,EAAE;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACzB;AAEA;AACyD;AAC/C,IAAA,kBAAkB,CAAC,QAA6B,EAAA;;;;AAItD,QAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,SAAS,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;AACnF,YAAA,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACvE;AACA,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;gBAC9B,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;oBACpC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;gBACxC;YACJ;QACJ;IACJ;AACH;MAEY,WAAW,CAAA;AASpB,IAAA,WAAA,CACI,IAAY,EACZ,KAAa,EACb,IAAoB,EACpB,OAAyD,EACzD,YAAkB,EAClB,MAAgB,EAChB,QAA6B,EAAA;AAE7B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC5B;AACH;MAKY,gBAAgB,CAAA;IAIzB,WAAA,CAAY,QAAgB,EAAE,MAAqB,EAAA;AAC/C,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACxB;AACH;AAED;AAEO,MAAM,SAAS,GAAe,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACjE,MAAM,WAAW,GAAa,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI;AAC3D,MAAM,WAAW,GAAa,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI;AACrD,MAAM,SAAS,GAAe,CAAC,KAAK;AAE3C;AAEM,SAAU,0BAA0B,CAAC,IAAoB,EAAA;IAC3D,QAAQ,IAAI;AACR,QAAA,KAAK,cAAc,CAAC,MAAM,EAAW,OAAO,QAAQ;AACpD,QAAA,KAAK,cAAc,CAAC,MAAM,EAAW,OAAO,QAAQ;AACpD,QAAA,KAAK,cAAc,CAAC,QAAQ,EAAS,OAAO,QAAQ;AACpD,QAAA,KAAK,cAAc,CAAC,KAAK,EAAY,OAAO,aAAa;AACzD,QAAA,KAAK,cAAc,CAAC,eAAe,EAAE,OAAO,iBAAiB;AAC7D,QAAA,KAAK,cAAc,CAAC,YAAY,EAAK,OAAO,cAAc;AAC1D,QAAA,KAAK,cAAc,CAAC,KAAK,EAAY,OAAO,OAAO;AACnD,QAAA,KAAK,cAAc,CAAC,KAAK,EAAY,OAAO,OAAO;AACnD,QAAA,KAAK,cAAc,CAAC,YAAY,EAAK,OAAO,cAAc;AAC1D,QAAA,KAAK,cAAc,CAAC,IAAI,EAAa,OAAO,MAAM;AAClD,QAAA,KAAK,cAAc,CAAC,KAAK,EAAY,OAAO,OAAO;AACnD,QAAA,KAAK,cAAc,CAAC,SAAS,EAAQ,OAAO,WAAW;AACvD,QAAA,KAAK,cAAc,CAAC,UAAU,EAAO,OAAO,QAAQ;AACpD,QAAA,KAAK,cAAc,CAAC,YAAY,EAAK,OAAO,cAAc;AAC1D,QAAA,KAAK,cAAc,CAAC,QAAQ,EAAS,OAAO,UAAU;AACtD,QAAA,SAAqC,OAAO,MAAM;;AAE1D;AAEM,SAAU,mBAAmB,CAAC,KAAqB,EAAA;AACrD,IAAA,IACI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK;AACnC,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe;AAC7C,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,YAAY;AAC1C,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK;AACnC,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK;AACnC,QAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK,EACrC;QACE,OAAO,KAAK,CAAC,OAAO;IACxB;IACA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU,EAAE;;;AAG1C,QAAA,OAAO,EAAE;IACb;IACA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,MAAM,EAAE;AACtC,QAAA,OAAO,SAAS;IACpB;AACA,IAAA,MAAM,IAAI,GAAI,KAAK,CAAC,OAAiB,IAAI,EAAE;;IAE3C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;AACtE,QAAA,OAAO,IAAI;IACf;IACA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,MAAc,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3E;AAEA;AAEA,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;AAElE,MAAO,wBAAyB,SAAQ,gBAAgB,CAAA;AAC1D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;YAC1B,IAAI,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,EACzD,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;YACpE,IAAI,WAAW,CAAC,KAAK,EAAK,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EACpI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;YACxD,IAAI,WAAW,CAAC,OAAO,EAAG,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EACpI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;YACxD,IAAI,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EACpI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;YACxD,IAAI,WAAW,CAAC,MAAM,EAAI,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EACpI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;YACxD,IAAI,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAC1G,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;AAC3D,SAAA,CAAC;IACN;AACH;AAED;AAEM,MAAO,sBAAuB,SAAQ,gBAAgB,CAAA;AACxD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;YACxB,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,MAAM,EACvD,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC;;YAGjE,IAAI,WAAW,CAAC,eAAe,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,EAAE;gBACvE,EAAE,KAAK,EAAE,KAAK,EAAa,KAAK,EAAE,YAAY,EAAW,IAAI,EAAE,wBAAwB,EAAE;gBACzF,EAAE,KAAK,EAAE,aAAa,EAAK,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,uBAAuB,EAAE;gBACxF,EAAE,KAAK,EAAE,QAAQ,EAAU,KAAK,EAAE,UAAU,EAAa,IAAI,EAAE,uBAAuB,EAAE;gBACxF,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,mBAAmB,EAAI,IAAI,EAAE,qBAAqB,EAAE;AACzF,aAAA,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACtD,IAAI,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,EAAE;gBAClE,EAAE,KAAK,EAAE,QAAQ,EAAQ,KAAK,EAAE,SAAS,EAAQ,IAAI,EAAE,kBAAkB,EAAE;gBAC3E,EAAE,KAAK,EAAE,MAAM,EAAU,KAAK,EAAE,MAAM,EAAW,IAAI,EAAE,mCAAmC,EAAE;gBAC5F,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,iCAAiC,EAAE;AAC7F,aAAA,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;YAGzD,IAAI,WAAW,CAAC,gBAAgB,EAAE,SAAS,EAAE,cAAc,CAAC,YAAY,EAAE;gBACtE,EAAE,KAAK,EAAE,YAAY,EAAK,KAAK,EAAE,OAAO,EAAU,IAAI,EAAE,uBAAuB,EAAE;gBACjF,EAAE,KAAK,EAAE,QAAQ,EAAS,KAAK,EAAE,QAAQ,EAAS,IAAI,EAAE,oCAAoC,EAAE;gBAC9F,EAAE,KAAK,EAAE,UAAU,EAAO,KAAK,EAAE,KAAK,EAAY,IAAI,EAAE,wBAAwB,EAAE;gBAClF,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,kCAAkC,EAAE;gBAC5F,EAAE,KAAK,EAAE,cAAc,EAAG,KAAK,EAAE,cAAc,EAAG,IAAI,EAAE,uBAAuB,EAAE;gBACjF,EAAE,KAAK,EAAE,cAAc,EAAG,KAAK,EAAE,cAAc,EAAG,IAAI,EAAE,qBAAqB,EAAE;AAClF,aAAA,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YACvE,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,YAAY,EAAE;gBACtE,EAAE,KAAK,EAAE,SAAS,EAAK,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,4BAA4B,EAAE;gBAC7E,EAAE,KAAK,EAAE,OAAO,EAAO,KAAK,EAAE,OAAO,EAAI,IAAI,EAAE,sBAAsB,EAAE;gBACvE,EAAE,KAAK,EAAE,QAAQ,EAAM,KAAK,EAAE,QAAQ,EAAG,IAAI,EAAE,kCAAkC,EAAE;gBACnF,EAAE,KAAK,EAAE,KAAK,EAAS,KAAK,EAAE,KAAK,EAAM,IAAI,EAAE,yBAAyB,EAAE;AAC7E,aAAA,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YACpE,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAC9C,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAC/D,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;;YAGnD,IAAI,WAAW,CAAC,qBAAqB,EAAE,SAAS,EAAE,cAAc,CAAC,YAAY,EACzE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAClE,IAAI,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,cAAc,CAAC,YAAY,EACnE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACnE,IAAI,WAAW,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC,YAAY,EAAE;gBAC1E,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,8BAA8B,EAAE;gBAC5E,EAAE,KAAK,EAAE,OAAO,EAAI,KAAK,EAAE,OAAO,EAAI,IAAI,EAAE,uBAAuB,EAAE;gBACrE,EAAE,KAAK,EAAE,QAAQ,EAAG,KAAK,EAAE,QAAQ,EAAG,IAAI,EAAE,oCAAoC,EAAE;gBAClF,EAAE,KAAK,EAAE,KAAK,EAAM,KAAK,EAAE,KAAK,EAAM,IAAI,EAAE,wBAAwB,EAAE;AACzE,aAAA,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC1D,IAAI,WAAW,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC,YAAY,EAAE;gBAC1E,EAAE,KAAK,EAAE,OAAO,EAAU,KAAK,EAAE,OAAO,EAAU,IAAI,EAAE,sBAAsB,EAAE;gBAChF,EAAE,KAAK,EAAE,QAAQ,EAAS,KAAK,EAAE,QAAQ,EAAS,IAAI,EAAE,kCAAkC,EAAE;gBAC5F,EAAE,KAAK,EAAE,KAAK,EAAY,KAAK,EAAE,KAAK,EAAY,IAAI,EAAE,yBAAyB,EAAE;gBACnF,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,gCAAgC,EAAE;gBAC1F,EAAE,KAAK,EAAE,cAAc,EAAG,KAAK,EAAE,cAAc,EAAG,IAAI,EAAE,uBAAuB,EAAE;gBACjF,EAAE,KAAK,EAAE,SAAS,EAAQ,KAAK,EAAE,SAAS,EAAQ,IAAI,EAAE,4BAA4B,EAAE;AACzF,aAAA,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;YAG1D,IAAI,WAAW,CAAC,WAAW,EAAE,gBAAgB,EAAE,cAAc,CAAC,YAAY,EAAE;AACxE,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9B,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACjC,aAAA,EAAE,KAAK,CAAC;AACZ,SAAA,CAAC;IACN;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAmB,GAAuB,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC/G,MAAM,WAAW,GAAuB,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC7F,MAAM,WAAW,GAAuB,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE;AAEvF,MAAO,2BAA4B,SAAQ,gBAAgB,CAAA;AAC7D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE;;YAE7B,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,YAAY,EAAE;gBACpE,EAAE,KAAK,EAAE,MAAM,EAAK,KAAK,EAAE,MAAM,EAAK,IAAI,EAAE,kBAAkB,EAAE;gBAChE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,4BAA4B,EAAE;gBAC1E,EAAE,KAAK,EAAE,OAAO,EAAI,KAAK,EAAE,OAAO,EAAI,IAAI,EAAE,sBAAsB,EAAE;gBACpE,EAAE,KAAK,EAAE,QAAQ,EAAG,KAAK,EAAE,QAAQ,EAAG,IAAI,EAAE,kCAAkC,EAAE;gBAChF,EAAE,KAAK,EAAE,KAAK,EAAM,KAAK,EAAE,KAAK,EAAM,IAAI,EAAE,yBAAyB,EAAE;AAC1E,aAAA,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,CAAC;AACtC,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAClD,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,CAAC;;AAGjF,YAAA,IAAI,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,EACpD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC;AACvE,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EACxD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC;AACvE,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EACtD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC;;;YAIlG,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,YAAY,EAAE;gBACxE,EAAE,KAAK,EAAE,MAAM,EAAK,KAAK,EAAE,MAAM,EAAK,IAAI,EAAE,kBAAkB,EAAE;gBAChE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,8BAA8B,EAAE;gBAC5E,EAAE,KAAK,EAAE,OAAO,EAAI,KAAK,EAAE,OAAO,EAAI,IAAI,EAAE,uBAAuB,EAAE;gBACrE,EAAE,KAAK,EAAE,QAAQ,EAAG,KAAK,EAAE,QAAQ,EAAG,IAAI,EAAE,oCAAoC,EAAE;gBAClF,EAAE,KAAK,EAAE,KAAK,EAAM,KAAK,EAAE,KAAK,EAAM,IAAI,EAAE,wBAAwB,EAAE;AACzE,aAAA,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC;AAC9B,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,QAAQ,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC;AACnG,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC;AAChG,SAAA,CAAC;IACN;AACH;AAED;AAEM,MAAO,oBAAqB,SAAQ,gBAAgB,CAAA;AACtD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,WAAW,CAAC,OAAO,EAAM,GAAG,EAAM,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAK,GAAG,EAAM,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,UAAU,EAAG,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,UAAU,EAAG,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5I,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;;AAE5I,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,MAAM,EAChE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC;;;YAGhF,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,MAAM,EAC5D,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC;;;;YAIhE,IAAI,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE;AAC3D,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAG,KAAK,EAAE,QAAQ,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAG,KAAK,EAAE,QAAQ,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAK,KAAK,EAAE,MAAM,EAAE;AACnC,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAK,KAAK,EAAE,MAAM,EAAE;AACtC,aAAA,EAAE,SAAS,CAAC;AAChB,SAAA,CAAC;IACN;AACH;AAED;AACM,MAAO,0BAA2B,SAAQ,oBAAoB,CAAA;AAAG;AAEvE;AAEM,MAAO,0BAA2B,SAAQ,gBAAgB,CAAA;AAC5D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE;AAC5B,YAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EACjE,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CAAC;AACrH,SAAA,CAAC;IACN;AACH;AAEK,MAAO,uBAAwB,SAAQ,gBAAgB,CAAA;AACzD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE;YACzB,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,eAAe,EAAE;AAChE,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACtC,aAAA,EAAE,iBAAiB,CAAC;YACrB,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,eAAe,EAAE;AAClE,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACtC,aAAA,EAAE,iBAAiB;AACvB,SAAA,CAAC;IACN;AACH;AAEK,MAAO,sBAAuB,SAAQ,gBAAgB,CAAA;AACxD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;YACxB,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,eAAe,EAAE;AAC3E,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACrC,aAAA,EAAE,KAAK,CAAC;YACT,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,YAAY,EAAE;AACxE,gBAAA,EAAE,KAAK,EAAE,OAAO,EAAG,IAAI,EAAE,yBAAyB,EAAE;AACpD,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE;AAClD,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAE;AACnD,aAAA,EAAE,OAAO,CAAC;AACX,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,KAAK,EAC/D,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC;YACjG,IAAI,WAAW,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC,eAAe,EAAE;AAC7E,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE;AACrC,gBAAA,QAAQ,EAAE;oBACN,EAAE,GAAG,EAAE,UAAU,EAAM,IAAI,EAAE,uBAAuB,EAAK,SAAS,EAAE,iBAAiB,EAAE;oBACvF,EAAE,GAAG,EAAE,WAAW,EAAK,IAAI,EAAE,wBAAwB,EAAI,SAAS,EAAE,kBAAkB,EAAE;oBACxF,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,0BAA0B,EAAE,SAAS,EAAE,qBAAqB,EAAE;oBAC3F,EAAE,GAAG,EAAE,aAAa,EAAG,IAAI,EAAE,yBAAyB,EAAG,SAAS,EAAE,oBAAoB;AAC3F;AACJ,aAAA,EAAE,KAAK;AACX,SAAA,CAAC;IACN;AACH;AAEK,MAAO,0BAA2B,SAAQ,gBAAgB,CAAA;AAC5D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE;AAC5B,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,UAAU,EAAE,EAAE,EACtE,qBAAqB,CAAC;AAC1B,YAAA,IAAI,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EACzD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC;AAC5D,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EACxD,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC;AAC1D,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAClD,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC;;;;;AAKjG,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,KAAK,EAC7D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC;AACvD,YAAA,IAAI,WAAW,CAAC,eAAe,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EAC5D,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC;YAC/D,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,EAAE,cAAc,CAAC,YAAY,EAAE;AAC1D,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAK,IAAI,EAAE,4BAA4B,EAAE;AACxD,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAG,IAAI,EAAE,8BAA8B,EAAE;AAC1D,gBAAA,EAAE,KAAK,EAAE,OAAO,EAAI,IAAI,EAAE,6BAA6B,EAAE;AACzD,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,+BAA+B,EAAE;AAC9D,aAAA,EAAE,MAAM,CAAC;AACV,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,EAAE,cAAc,CAAC,YAAY,EACxD,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EACxH,QAAQ,EAAE,IAAI,CAAC;AACnB,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,EAAE,cAAc,CAAC,YAAY,EAC7D,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAC/H,MAAM,EAAE,IAAI,CAAC;YACjB,IAAI,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,uBAAuB,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAClE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AAC/D,YAAA,IAAI,WAAW,CAAC,uBAAuB,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAClE,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC;AAC7G,SAAA,CAAC;IACN;AACH;AAEK,MAAO,uBAAwB,SAAQ,gBAAgB,CAAA;AACzD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE;;AAEzB,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EACtD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC;YACrD,IAAI,WAAW,CAAC,cAAc,EAAE,YAAY,EAAE,cAAc,CAAC,MAAM,EAAE;gBACjE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;AAC9D,gBAAA,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY;gBACvD,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY;AACxE,aAAA,EAAE,QAAQ,CAAC;YACZ,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE;gBACvD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;gBAC3D,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM;AACjE,aAAA,EAAE,MAAM,CAAC;;YAGV,IAAI,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,WAAW,EAAG,YAAY,EAAG,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;AAChF,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;;YAGhF,IAAI,WAAW,CAAC,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,CAAC;AAC3E,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EACpD,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AACtE,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EACpD,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AACtE,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EACrD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EACrD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EACpD,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EACnD,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EACnD,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;;YAGrE,IAAI,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,EACtD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AAC7D,YAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EACjE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;AAClE,YAAA,IAAI,WAAW,CAAC,kBAAkB,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EAClE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAC9D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAC9D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EAChE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EACxD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,cAAc,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EAC1D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;;YAG7F,IAAI,WAAW,CAAC,eAAe,EAAE,UAAU,EAAE,cAAc,CAAC,YAAY,CAAC;AACzE,YAAA,IAAI,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,EACxD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AAC7D,YAAA,IAAI,WAAW,CAAC,oBAAoB,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EACpE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;AACnG,YAAA,IAAI,WAAW,CAAC,kBAAkB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAChE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;AACnG,YAAA,IAAI,WAAW,CAAC,kBAAkB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAChE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;;YAGnG,IAAI,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,YAAY,CAAC;YACjE,IAAI,WAAW,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE;AACxD,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,MAAM,EAAE;AACzC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAS,KAAK,EAAE,aAAa,EAAE;AAChD,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAQ,KAAK,EAAE,kBAAkB,EAAE;AACrD,gBAAA,EAAE,KAAK,EAAE,OAAO,EAAU,KAAK,EAAE,YAAY,EAAE;AAC/C,gBAAA,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,uBAAuB,EAAE;AAC1D,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAO,KAAK,EAAE,qCAAqC,EAAE;AACxE,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAQ,KAAK,EAAE,6CAA6C,EAAE;AAChF,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAQ,KAAK,EAAE,+DAA+D,EAAE;AAClG,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAQ,KAAK,EAAE,0DAA0D,EAAE;AAChG,aAAA,EAAE,MAAM,CAAC;;YAGV,IAAI,WAAW,CAAC,iBAAiB,EAAE,YAAY,EAAE,cAAc,CAAC,YAAY,CAAC;AAC7E,YAAA,IAAI,WAAW,CAAC,oBAAoB,EAAE,UAAU,EAAE,cAAc,CAAC,KAAK,EAClE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AAChE,YAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAC5D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;YAChE,IAAI,WAAW,CAAC,0BAA0B,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE;AACzE,gBAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa;AACzD,aAAA,EAAE,MAAM,CAAC;AACb,SAAA,CAAC;IACN;AACH;AAEK,MAAO,oBAAqB,SAAQ,gBAAgB,CAAA;AACtD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;YACtB,IAAI,WAAW,CAAC,eAAe,EAAE,cAAc,EAAE,cAAc,CAAC,MAAM,EAAE;AACpE,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAE;AACvC,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAE;AACvC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAO,KAAK,EAAE,QAAQ,EAAE;AACzC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAO,KAAK,EAAE,QAAQ,EAAE;AACzC,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAM,KAAK,EAAE,SAAS,EAAE;AAC1C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;AAC9C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;AAC9C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;AAC9C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;AACjD,aAAA,EAAE,MAAM,CAAC;YACV,IAAI,WAAW,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,CAAC,YAAY,EAAE;AACjF,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAG,KAAK,EAAE,QAAQ,EAAE;AACxC,aAAA,EAAE,SAAS,CAAC;AACb,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,EAC1D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC;AAClD,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EAC3D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC;YAC7D,IAAI,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;AACrE,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EACxD,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC;AACxG,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,EAC1D,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAC7D,SAAA,CAAC;IACN;AACH;AAED;;;;AAIG;SACa,oBAAoB,GAAA;IAChC,OAAO;AACH,QAAA,IAAI,wBAAwB,EAAE;AAC9B,QAAA,IAAI,sBAAsB,EAAE;AAC5B,QAAA,IAAI,2BAA2B,EAAE;AACjC,QAAA,IAAI,oBAAoB,EAAE;AAC1B,QAAA,IAAI,0BAA0B,EAAE;AAChC,QAAA,IAAI,uBAAuB,EAAE;AAC7B,QAAA,IAAI,sBAAsB,EAAE;AAC5B,QAAA,IAAI,0BAA0B,EAAE;AAChC,QAAA,IAAI,uBAAuB,EAAE;KAChC;AACL;SAEgB,mBAAmB,CAC/B,UAA+B,EAC/B,MAAM,GAAG,EAAE,EAAA;IAEX,MAAM,MAAM,GAAuC,EAAE;AAErD,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AACnD,QAAA,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,GAAG,GAAG;QAElD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE;AAC7C,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnE;aAAO;AACH,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QACrD;IACJ;AAEA,IAAA,OAAO,MAAM;AACjB;AAEA;;;;;;AAMG;AACG,SAAU,iBAAiB,CAAC,UAA+B,EAAA;IAC7D,MAAM,GAAG,GAAuC,EAAE;AAClD,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE;AACzD,QAAA,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE;AACzD,QAAA,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE;QACjE,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;AACzF,YAAA,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QACxC;IACJ;AACA,IAAA,OAAO,GAAG;AACd;AAEA;;;;;;;;;AASG;AACG,SAAU,qBAAqB,CACjC,UAA+B,EAC/B,SAAiB,EAAA;AAEjB,IAAA,MAAM,KAAK,GAAG,CAAC,SAAS,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IAC1D,IAAI,KAAK,GAAQ,SAAS;AAC1B,IAAA,IAAI,MAAM,GAAQ,UAAU,IAAI,EAAE;AAClC,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACtB,QAAA,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;AACrD,QAAA,MAAM,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE,UAAU,IAAI,EAAE;IAC9D;AACA,IAAA,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;IAErD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,UAAU,KAAK,KAAK,CAAC,IAAI,KAAK,UAAU,GAAG,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;IACvG,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;AAC5C,QAAA,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE;IACzE;;AAEA,IAAA,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE;IAChE,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;;IAE/F,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;AAC5C;;AC1mCA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAE7D;;;;;;;;;;;;;;AAcG;SACa,iBAAiB,CAAC,IAAmB,EAAE,OAA6C,EAAE,EAAA;AAClG,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB;AACvC,IAAA,MAAM,MAAM,GAAG,CAAC,IAAmB,KAAU;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE;AACrB,QAAA,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE;AACnB,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,YAAY,EAAE;YAC/B,IAAI,IAAI,CAAC,OAAO;AAAE,gBAAA,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE;QAC9C;aAAO;AACH,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS;QAC5B;AACA,QAAA,IAAI,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;QACpC,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC;AACzC,IAAA,CAAC;IACD,MAAM,CAAC,IAAI,CAAC;AACZ,IAAA,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC;AACpC;AAEA;AAC8E;AACxE,SAAU,mBAAmB,CAAC,IAAmB,EAAE,KAA0B,EAAA;AAC/E,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAmD;IACzE,IAAI,QAAQ,EAAE;QACV,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACvC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,YAAA,IAAI,MAAM;AAAE,gBAAA,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM;QACxC;IACJ;IACA,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE;QAC/C,MAAM,OAAO,GAAG,CAAC,IAAI,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,IAAK,WAAmB,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;AAChG,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC1B,IAAI,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;gBAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AACvC,gBAAA,IAAI,MAAM;AAAE,oBAAA,MAAM,CAAC,MAAM,GAAG,MAAM;YACtC;QACJ;IACJ;IACA,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC7E;;ACtDA;;;;;;;AAOG;AACG,SAAU,gBAAgB,CAC5B,KAAsB,EACtB,MAAqB,EAAA;AAErB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;YACrB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;QACtC;QACA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ;QAC9B,IAAI,IAAI,EAAE;YACN,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC;AAC5C,YAAA,IAAI,KAAK;AAAE,gBAAA,OAAO,KAAK;QAC3B;IACJ;AACA,IAAA,OAAO,IAAI;AACf;AAEA;;;;;;;;;;;;;;;;;AAiBG;SACa,QAAQ,CACpB,KAAsB,EACtB,MAAqB,EACrB,OAAsB,EAAA;IAEtB,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC;AAC3C,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,OAAO,IAAI;AAErB,IAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACjB,QAAA,OAAO,CAAC,QAAQ,GAAG,IAAI;AACvB,QAAA,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc;AAC9C,QAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;AACvB,QAAA,MAAM,CAAC,cAAc,GAAG,SAAS;IACrC;AAEA,IAAA,OAAO,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC;AAC3B,IAAA,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC;AACxC,IAAA,OAAO,OAAO;AAClB;;IC5DY;AAAZ,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,eAAgC;AAChC,IAAA,eAAA,CAAA,kBAAA,CAAA,GAAA,iBAAoC;AACpC,IAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,aAA8B;AAC9B,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,WAAwB;AACxB,IAAA,eAAA,CAAA,aAAA,CAAA,GAAA,YAA0B;AAC1B,IAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,gBAAkC;AAClC,IAAA,eAAA,CAAA,eAAA,CAAA,GAAA,cAA8B;;AAE9B,IAAA,eAAA,CAAA,aAAA,CAAA,GAAA,YAA0B;;AAE1B,IAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,gBAAkC;;AAElC,IAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,gBAAkC;;AAElC,IAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,eAAgC;;AAEhC,IAAA,eAAA,CAAA,yBAAA,CAAA,GAAA,uBAAiD;;AAEjD,IAAA,eAAA,CAAA,6BAAA,CAAA,GAAA,2BAAyD;AACzD;;AAEmE;AACnE,IAAA,eAAA,CAAA,kBAAA,CAAA,GAAA,iBAAoC;AACpC;;;AAGqC;AACrC,IAAA,eAAA,CAAA,qBAAA,CAAA,GAAA,oBAA0C;AAC9C,CAAC,EA7BW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;MAqCd,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAc;AASxD,IAAA;AAPG,IAAA,SAAS,CAAC,IAAsC,EAAA;QAC5C,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;IAChE;IAEA,IAAI,CAAC,IAAqB,EAAE,IAAU,EAAA;QAClC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/C;+GATS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;ICvCW;AAAZ,CAAA,UAAY,UAAU,EAAA;AAClB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AACjC,CAAC,EANW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;AAmBf,MAAM,uBAAuB,GAA0E;IAC1G,EAAE,KAAK,EAAE,MAAM,EAAO,KAAK,EAAE,MAAM,EAAQ,WAAW,EAAE,cAAc,EAAE;IACxE,EAAE,KAAK,EAAE,MAAM,EAAO,KAAK,EAAE,MAAM,EAAS,WAAW,EAAE,wBAAwB,EAAE;IACnF,EAAE,KAAK,EAAE,SAAS,EAAI,KAAK,EAAE,UAAU,EAAK,WAAW,EAAE,wBAAwB,EAAE;IACnF,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAG,WAAW,EAAE,wBAAwB,EAAE;IACnF,EAAE,KAAK,EAAE,QAAQ,EAAK,KAAK,EAAE,SAAS,EAAM,WAAW,EAAE,0BAA0B,EAAE;IACrF,EAAE,KAAK,EAAE,SAAS,EAAI,KAAK,EAAE,UAAU,EAAK,WAAW,EAAE,6BAA6B,EAAE;IACxF,EAAE,KAAK,EAAE,QAAQ,EAAK,KAAK,EAAE,MAAM,EAAS,WAAW,EAAE,eAAe,EAAE;IAC1E,EAAE,KAAK,EAAE,MAAM,EAAO,KAAK,EAAE,MAAM,EAAS,WAAW,EAAE,yBAAyB,EAAE;;AAGjF,MAAM,cAAc,GAAuC;;;AAG9D,IAAA,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,gCAAgC,EAAE;AACtE,IAAA,EAAE,KAAK,EAAE,UAAU,EAAM,KAAK,EAAE,+BAA+B,EAAE;AACjE,IAAA,EAAE,KAAK,EAAE,MAAM,EAAU,KAAK,EAAE,MAAM,EAAE;AACxC,IAAA,EAAE,KAAK,EAAE,SAAS,EAAO,KAAK,EAAE,SAAS,EAAE;AAC3C,IAAA,EAAE,KAAK,EAAE,UAAU,EAAM,KAAK,EAAE,UAAU,EAAE;AAC5C,IAAA,EAAE,KAAK,EAAE,aAAa,EAAG,KAAK,EAAE,aAAa,EAAE;AAC/C,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAQ,KAAK,EAAE,QAAQ,EAAE;AAC1C,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAQ,KAAK,EAAE,mCAAmC,EAAE;CACxE;SAiDe,mBAAmB,GAAA;IAC/B,OAAO;AACH,QAAA,KAAK,EAAE;AACH,YAAA,eAAe,EAAE,SAAS;AAC1B,YAAA,cAAc,EAAE,OAAO;AACvB,YAAA,kBAAkB,EAAE,mDAAmD;AACvE,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,UAAU,EAAE,qBAAqB;AACjC,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,QAAQ,EAAE,QAAQ;AACrB,SAAA;AACD,QAAA,MAAM,EAAE;AACJ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,SAAS,EAAE,UAAU;AACrB,YAAA,QAAQ,EAAE,KAAK;AAClB,SAAA;AACD,QAAA,cAAc,EAAE;AACZ,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,KAAK,EAAE,MAAM;;;AAGb,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,MAAM,EAAE,gCAAgC;AAC3C,SAAA;KACJ;AACL;IAEY;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,eAA6B;AAC7B,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,aAAA,CAAA,uBAAA,CAAA,GAAA,yBAAiD;AACjD,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,IAAA,aAAA,CAAA,uBAAA,CAAA,GAAA,yBAAiD;AACjD,IAAA,aAAA,CAAA,wBAAA,CAAA,GAAA,0BAAmD;AACnD,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,WAAsB;AACtB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EApBW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;IAsBb;AAAZ,CAAA,UAAY,UAAU,EAAA;AAClB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AAC3B,CAAC,EAHW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;IAKV;AAAZ,CAAA,UAAY,WAAW,EAAA;AACnB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACf,CAAC,EAJW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;IAMX;AAAZ,CAAA,UAAY,UAAU,EAAA;AAClB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACrB,CAAC,EAJW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;AAef,MAAM,cAAc,GAAmB;IAC1C,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IACpG,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IACxG,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;;AAQpG,MAAM,YAAY,GAAiB;AACtC,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;AAC7B,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;;AAQ3B,MAAM,oBAAoB,GAAwB;AACrD,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;;;MClMrB,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;QAEY,IAAA,CAAA,UAAU,GAAwE,EAAE;AAsB/F,IAAA;AApBG,IAAA,YAAY,CAAC,IAAY,EAAA;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,IAAI,IAAI;IACnD;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;QACrB,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAClC;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM;QAChD,OAAO,UAAU,GAAG,IAAI,UAAU,EAAE,GAAG,IAAI;IAC/C;AAEA,IAAA,QAAQ,CAAC,IAAY,EAAE,SAAoB,EAAE,MAAW,EAAA;AACpD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE;IACvD;IAEA,MAAM,GAAA;QACF,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;IACzC;+GAtBS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAxB,wBAAwB,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;MC+BY,cAAc,CAAA;AAD3B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAsB,IAAI,CAAC;AAC7D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAsB,IAAI,CAAC;AAC9D,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAA0B;AAE5C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AACzC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;QAE1C,IAAA,CAAA,gBAAgB,GAAuB,IAAI;QAC3C,IAAA,CAAA,sBAAsB,GAAuB,IAAI;QACjD,IAAA,CAAA,uBAAuB,GAAuB,IAAI;;AAGnD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAe;;AAG7C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAA4B;AA0IhE,IAAA;IAxIG,kBAAkB,CAAC,CAAS,EAAE,CAAS,EAAA;QACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACpC;AAEA,IAAA,YAAY,CAAC,SAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;IACrC;IAEA,YAAY,GAAA;QACR,OAAO,IAAI,CAAC,gBAAgB;IAChC;AAEA,IAAA,kBAAkB,CAAC,EAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;QAChC,IAAI,EAAE,EAAE;AAAE,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE;IAC9C;IAEA,kBAAkB,GAAA;QACd,OAAO,IAAI,CAAC,sBAAsB;IACtC;;AAGA,IAAA,mBAAmB,CAAC,EAAsB,EAAA;AACtC,QAAA,IAAI,CAAC,uBAAuB,GAAG,EAAE;IACrC;IAEA,mBAAmB,GAAA;QACf,OAAO,IAAI,CAAC,uBAAuB;IACvC;AAEA;;;;;;;AAOG;AACH,IAAA,gBAAgB,CAAC,IAAiB,EAAA;AAC9B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;AAAE,gBAAA,OAAO,IAAI;QAC9D;AACA,QAAA,OAAQ,IAAI,CAAC,iBAAiC,IAAI,IAAI;IAC1D;;AAGA,IAAA,YAAY,CAAC,IAAmB,EAAE,OAAoB,EAAE,YAA+B,EAAA;AACnF,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IACrD;AAEA,IAAA,cAAc,CAAC,IAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,UAAU,CAAC,IAAmB,EAAA;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC;;IAGA,iBAAiB,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IACjC;;AAGA,IAAA,iBAAiB,CAAC,OAAoB,EAAA;QAClC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACpC,YAAA,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,EAAE;AACzB,gBAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE;YACxB;QACJ;AACA,QAAA,OAAO,SAAS;IACpB;AAEA;;;;AAIG;AACH,IAAA,cAAc,CAAC,IAAmB,EAAA;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,SAAS;AAC1B,QAAA,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa;QAClC,OAAO,EAAE,EAAE;YACP,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;AACxC,YAAA,IAAI,KAAK;AAAE,gBAAA,OAAO,KAAK;AACvB,YAAA,EAAE,GAAG,EAAE,CAAC,aAAa;QACzB;AACA,QAAA,OAAO,SAAS;IACpB;AAEA,IAAA,QAAQ,CAAC,OAAoB,EAAE,aAAqB,EAAE,IAAiB,EAAA;QACnE,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,OAAO,KAAK,OAAO;YAAE;QACxD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;IACnG;IAEA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;IAEA,SAAS,CAAC,OAAoB,EAAE,aAAqB,EAAE,IAAiB,EAAE,IAAoB,EAAE,YAAgC,EAAA;AAC5H,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IACjF;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;IAEA,aAAa,GAAA;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7C,QAAA,IAAI,CAAC,OAAO;YAAE;QACd,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3C;;AAGA,IAAA,mBAAmB,CAAC,OAAoB,EAAA;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7C,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;IACpD;AAEA,IAAA,aAAa,CAAC,IAAiB,EAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;;AAGzC,QAAA,MAAM,OAAO,GAAI,IAAI,CAAC,aAA6B,IAAI,IAAI;QAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC;QACzC,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC3C,QAAA,MAAM,EAAE,GAAG,CAAC,CAAS,KAAI,EAAG,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChG,OAAO;AACH,YAAA,MAAM,EAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,EAAO,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAO,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAO,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;AAClI,YAAA,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAM,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAM,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,EAAM,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;AACnI,YAAA,MAAM,EAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE;SAC1I;IACL;+GAxJS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAd,cAAc,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;AC5BD;;;;;AAKG;MAEU,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAqB;;AAEtC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,GAAG,EAAU;AAuC7C,IAAA;AArCG,IAAA,UAAU,CAAC,OAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B;IACJ;AAEA,IAAA,SAAS,CAAC,EAAU,EAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B;IAEA,MAAM,GAAA;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5C;AAEA,IAAA,MAAM,CAAC,MAAiB,EAAA;QACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IACvC;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B;;AAGA,IAAA,iBAAiB,CAAC,GAAgB,EAAA;QAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;IACtC;;AAGA,IAAA,aAAa,CAAC,EAAU,EAAA;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;IACtC;;AAGA,IAAA,mBAAmB,CAAC,EAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;IAClC;+GAzCS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;ACYD,SAAS,aAAa,CAAC,IAAmB,EAAA;AACtC,IAAA,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;;IAG7D,iBAAiB,CAAC,KAAK,CAAC;AACxB,IAAA,OAAO,KAAK;AAChB;MAGa,iBAAiB,CAAA;IAE1B,WAAA,CACY,QAAkC,EAClC,cAAqC,EAAA;QADrC,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,cAAc,GAAd,cAAc;;QA0FlB,IAAA,CAAA,GAAG,GAAa,EAAE;AAClB,QAAA,IAAA,CAAA,KAAK,GAAQ,IAAI,GAAG,EAAuB;AAC3C,QAAA,IAAA,CAAA,OAAO,GAAM,IAAI,GAAG,EAAiB;AACrC,QAAA,IAAA,CAAA,MAAM,GAAO,IAAI,GAAG,EAA6B;AACjD,QAAA,IAAA,CAAA,SAAS,GAAI,IAAI,GAAG,EAAqC;AACzD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAsB;AAEnC,QAAA,IAAA,CAAA,IAAI,GAAY,IAAI,eAAe,CAAW,EAAE,CAAC;AACjD,QAAA,IAAA,CAAA,WAAW,GAAK,IAAI,eAAe,CAAU,KAAK,CAAC;AACnD,QAAA,IAAA,CAAA,WAAW,GAAK,IAAI,eAAe,CAAgB,IAAI,CAAC;;AAExD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAiB;;QAIpD,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,QAAQ,GAAuB,IAAI;QACnC,IAAA,CAAA,SAAS,GAAuB,IAAI;AAE5C;;;;AAIG;QACK,IAAA,CAAA,QAAQ,GAAuB,IAAI;;QAEnC,IAAA,CAAA,YAAY,GAAG,CAAC;QAChB,IAAA,CAAA,YAAY,GAAG,CAAC;;QAIhB,IAAA,CAAA,aAAa,GAAG,CAAC;QACjB,IAAA,CAAA,aAAa,GAAG,CAAC;;QAIjB,IAAA,CAAA,aAAa,GAAkB,IAAI;;QAGnC,IAAA,CAAA,cAAc,GAAuB,IAAI;;QAIzC,IAAA,CAAA,UAAU,GAAuB,IAAI;QACrC,IAAA,CAAA,qBAAqB,GAAkB,IAAI;QAC3C,IAAA,CAAA,eAAe,GAAG,CAAC,CAAC;QACpB,IAAA,CAAA,aAAa,GAAG,CAAC;;AAGjB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAe;;QAIjC,IAAA,CAAA,MAAM,GAAG,CAAC;;AAOV,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,GAAG,EAAmB;;QAYtC,IAAA,CAAA,cAAc,GAAG,EAAE;QAC5B,IAAA,CAAA,oBAAoB,GAAkB,IAAI;IAlK/C;;IAIH,UAAU,CACN,QAAyB,EACzB,KAAmB,EACnB,UAAkB,EAClB,GAAsB,EACtB,SAAsB,EAAA;AAEtB,QAAA,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK;AAEtC,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;AAC7B,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAW;AAChC,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;;gBAE1B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;gBAC/C,IAAI,MAAM,EAAE;oBACR,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC;oBACvC,GAAG,CAAC,aAAa,EAAE;AACnB,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;gBACnC;YACJ;iBAAO;;;gBAGH,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI;gBAC5F,MAAM,QAAQ,IAAmB,UAAU,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAkB;AAClF,gBAAA,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;gBACtC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,EAAE;AACpC,oBAAA,MAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;gBAC5C;gBACA,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC;gBACvC,GAAG,CAAC,aAAa,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YACnC;YACA,SAAS,IAAI;YACb;QACJ;AAEA,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAqB;AAE1C,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE;YACjC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;YAC3E,IAAI,UAAU,EAAE;gBACZ,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;AACvC,gBAAA,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;AACf,oBAAA,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAS,CAAC,EAAE,aAAa,EAAE;gBACnD;gBACA,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;gBACrC,GAAG,CAAC,aAAa,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YACjC;iBAAO;;;;;;;;gBAQH,MAAM,GAAG,GAAG,IAAW;gBACvB,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI;gBAC3F,MAAM,QAAQ,IAAmB,WAAW,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAkB;AAClF,gBAAA,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;gBACtC,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,QAAQ,EAAE;AAClC,oBAAA,MAAc,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;gBAC3C;gBACA,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC;gBACvC,GAAG,CAAC,aAAa,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YACnC;YACA,SAAS,IAAI;YACb;QACJ;QAEA,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AACzC,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACnB,YAAA,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW;AAC5E,YAAA,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9B,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;YACrC,GAAG,CAAC,aAAa,EAAE;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC;QACA,SAAS,IAAI;IACjB;;IA4DA,QAAQ,CAAC,KAAa,EAAA,EAAU,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IAM7C,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAC/B,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1B,YAAA,IAAI,EAAE;AAAE,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACvE;IACJ;;;;AAWQ,IAAA,MAAM,CAAC,EAAU,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;IAC5D;;;;IAMA,gBAAgB,CACZ,EAAU,EACV,EAAe,EACf,IAAW,EACX,GAAsB,EACtB,MAAiC,EACjC,QAAqB,EAAA;AAErB,QAAA,IAAI,CAAC,EAAE;YAAE;;AAGT,QAAA,EAAE,CAAC,EAAE,GAAG,EAAE;QAEV,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACxB,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5B;QACA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;AAC9B,QAAA,IAAI,QAAQ;YAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC;AAEhD,QAAA,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;AAClB,YAAA,MAAM,EAAE,sBAAsB;AAC9B,YAAA,OAAO,EAAE,SAAS;AACrB,SAAA,CAAC;IACN;IAEA,kBAAkB,CAAC,EAAU,EAAE,EAAe,EAAA;AAC1C,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,QAAA,IAAI;AAAE,YAAA,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE;AAAE,QAAA,MAAM,sBAAsB;IAC9D;;;;IAMA,iBAAiB,CAAC,EAAe,EAAE,UAA6B,EAAA;AAC5D,QAAA,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC;AAEzC,QAAA,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;;;AAGnB,YAAA,UAAU,EAAE,0BAA0B;AACtC,YAAA,SAAS,EAAE;AACP,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC;gBAC1D,IAAI,EAAG,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBACzC,GAAG,EAAI,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC3C,aAAA;AACD,YAAA,SAAS,EAAE,EAAE;AAChB,SAAA,CAAC;IACN;AAEA,IAAA,mBAAmB,CAAC,EAAe,EAAA;AAC/B,QAAA,EAAE,CAAC,eAAe,CAAC,oBAAoB,CAAC;AACxC,QAAA,IAAI;AAAE,YAAA,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE;AAAE,QAAA,MAAM,sBAAsB;IAC9D;AAEA,IAAA,OAAO,CAAC,EAAU,EAAA,EAAuB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtE,IAAA,MAAM,CAAC,EAAU,EAAA,EAAmC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,IAAA,cAAc,CAAC,EAAU,EAAA,EAAU,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAEjE,iBAAiB,GAAA;AACb,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,OAAO,CAAC;IACZ;;;;AAMQ,IAAA,YAAY,CAAC,KAAU,EAAE,EAAe,EAAE,UAA6B,EAAA;AAC3E,QAAA,IAAI,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;AACjC,YAAA,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE;YACxB;QACJ;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;QAChC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAE3B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;AAoBnC,YAAA,MAAM,MAAM,GAAI,EAAE,CAAC,iBAAiC,IAAI,EAAE;AAC1D,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC3C,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI;AAC9C,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG;;;;;AAM7C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;;;;;AAMzB,YAAA,MAAM,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAE/C,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAgB;;;;;;AAMnD,YAAA,MAAM,QAAQ,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAI,KAAK,CAAC;AACjD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACjD,YAAA,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG;gBAClB,gBAAgB;gBAChB,CAAA,KAAA,EAAQ,IAAI,CAAC,IAAI,CAAA,EAAA,CAAI;gBACrB,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,CAAA,EAAA,CAAI;AACnB,gBAAA,CAAA,MAAA,EAAS,QAAQ,CAAA,EAAA,CAAI;AACrB,gBAAA,CAAA,OAAA,EAAU,SAAS,CAAA,EAAA,CAAI;AACvB,gBAAA,CAAA,gBAAA,EAAmB,KAAK,CAAA,CAAA,CAAG;gBAC3B,2BAA2B;gBAC3B,qBAAqB;gBACrB,iBAAiB;gBACjB,cAAc;gBACd,UAAU;AACb,aAAA,CAAC,IAAI,CAAC,GAAG,CAAC;AACX,YAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACtC,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAGrB,YAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAC9C;aAAO;;AAEH,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACvE,YAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACvC;QAEA,IAAI,CAAC,cAAc,EAAE;IACzB;AAEQ,IAAA,WAAW,CAAC,KAAU,EAAA;QAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;;AAGnC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI;YACtE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI;QAC1E;QAEA,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,gBAAgB,EAAE;IAC3B;AAEQ,IAAA,UAAU,CAAC,KAAU,EAAA;;AAEzB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC;YACzD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC;QACtD;AACA,QAAA,QAAQ,CAAC,gBAAgB,CAAC,yBAAyB;AAC9C,aAAA,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;;QAGjE,IAAI,CAAC,cAAc,EAAE;;QAGrB,IAAI,CAAC,gBAAgB,EAAE;QACvB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC;;AAGxD,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC5B,YAAA,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE;AACvB,YAAA,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;QAC5B;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;QAErB,IAAI,CAAC,WAAW,EAAE;QAElB,IAAI,CAAC,oBAAoB,EAAE;QAC3B,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AAC/F,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,UAAU,CAAC,MAAK,EAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD;;;;IAMQ,WAAW,GAAA;QACf,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,gBAAgB;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAElD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAC7D;;;;AAMQ,IAAA,mBAAmB,CAAC,OAAoB,EAAE,QAAgB,EAAE,QAAgB,EAAA;QAChF,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,WAAW;QAC3E,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,wCAAwC;AACzD,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;AAExB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,GAAG,EAAE,IAAI,IAAI;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,GAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,IAAI;AACxC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;IAEQ,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;IACzB;;;;IAMQ,iBAAiB,GAAA;AACrB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa;AAC7B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa;QAE7B,IAAI,MAAM,GAAkB,IAAI;QAChC,IAAI,QAAQ,GAAG,QAAQ;AAEvB,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,EAAE;gBAAE;;;AAGT,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAAE;;AAElC,YAAA,IAAI,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC;gBAAE;AACrC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;YAC1E,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AACrC,gBAAA,IAAI,IAAI,GAAG,QAAQ,EAAE;oBAAE,QAAQ,GAAG,IAAI;oBAAE,MAAM,GAAG,EAAE;gBAAE;YACzD;QACJ;;;;;;;;;;;AAYA,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACpD,IAAI,KAAK,EAAE;AACP,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,KAAK,CAAC,qBAAqB,EAAE;gBACjG,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM;gBAC7E,IAAI,MAAM,EAAE;oBAAE,MAAM,GAAG,gBAAgB;gBAAE;qBACpC;AAAE,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;gBAAE;YAC7C;iBAAO;AACH,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;YACpC;QACJ;QAEA,IAAI,CAAC,IAAI,CAAC,oBAAoB;AAC1B,YAAA,MAAM,IAAI,MAAM,KAAK,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;YACxE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9B,IAAI,EAAE,EAAE;AACJ,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;gBAC9E,MAAM,QAAQ,GACV,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc;oBACpC,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc;;;AAG3C,gBAAA,MAAM,oBAAoB,GACtB,IAAI,CAAC,aAAa,KAAK,MAAM;oBAC7B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;AAC1D,gBAAA,IAAI,QAAQ,IAAI,oBAAoB,EAAE;AAClC,oBAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM;oBAClC,MAAM,GAAG,gBAAgB;gBAC7B;YACJ;QACJ;AAEA,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3C,gBAAA,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC;YAC1C;AACA,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;YAC3B,IAAI,MAAM,EAAE;AACR,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;YACvD;;AAEA,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;;AAG7B,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;QACrC;IACJ;;;;;;AAQA;AAC6E;IAC7E,mBAAmB,GAAA;QACf,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;QACvB,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;IAC/C;AAEQ,IAAA,kBAAkB,CAAC,QAAuB,EAAA;AAC9C,QAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,gBAAgB,EAAE;YAC5C,IAAI,CAAC,oBAAoB,EAAE;YAC3B;QACJ;QAEA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,EAAE,EAAE;YAAE,IAAI,CAAC,oBAAoB,EAAE;YAAE;QAAQ;AAEhD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACnD,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,yBAAyB;YACzD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;QAClD;AAEA,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG;YAChC,gBAAgB;YAChB,CAAA,KAAA,EAAQ,IAAI,CAAC,IAAI,CAAA,EAAA,CAAI;YACrB,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,CAAA,EAAA,CAAI;YACnB,CAAA,MAAA,EAAS,IAAI,CAAC,KAAK,CAAA,EAAA,CAAI;YACvB,CAAA,OAAA,EAAU,IAAI,CAAC,MAAM,CAAA,EAAA,CAAI;YACzB,qBAAqB;YACrB,cAAc;YACd,uBAAuB;AAC1B,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;IACf;IAEQ,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;IAC9B;AAEQ,IAAA,gBAAgB,CAAC,EAAU,EAAA;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,KAAK;AACrB,QAAA,IAAI,MAAM,GAAG,EAAE,CAAC,aAAa;QAC7B,OAAO,MAAM,EAAE;AACX,YAAA,IAAI,MAAM,CAAC,EAAE,KAAK,gBAAgB;AAAE,gBAAA,OAAO,IAAI;AAC/C,YAAA,IAAI,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;AAAE,gBAAA,OAAO,KAAK;AAC3D,YAAA,MAAM,GAAG,MAAM,CAAC,aAAa;QACjC;AACA,QAAA,OAAO,KAAK;IAChB;AAEA;;;;AAIG;IACK,qBAAqB,CAAC,OAAsB,EAAE,QAAgB,EAAA;AAClE,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK;AACvC,QAAA,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;IACrC;;;;IAMQ,gBAAgB,GAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,gBAAgB;QACvD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC1C,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,eAAe,IAAI,QAAQ,KAAK,IAAI,CAAC,qBAAqB,EAAE;AACzE,YAAA,IAAI,CAAC,eAAe,GAAG,GAAG;AAC1B,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC;QAC1C;IACJ;IAEQ,kBAAkB,CAAC,WAAmB,EAAE,KAAa,EAAA;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS;YAAE;QAEhB,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC7C,QAAA,MAAM,KAAK,GACP,CAAC,EAAE,CAAC,OAAO,KAAK,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,aAAa;AACtD,aAAC,CAAC,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,KAAK,KAAK,IAAI,EAAE,CAAC,aAAa,KAAK,aAAa,CAAC;AAE3F,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,KAAK,WAAW;QAEnE,IAAI,gBAAgB,EAAE;AAClB,YAAA,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;AACxC,YAAA,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QAC1B;AAEA,QAAA,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU;QACpC,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,sBAAsB;YAElD,IAAI,KAAK,EAAE;;;;;AAKP,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO;oBACzB,2CAA2C;wBAC3C,oEAAoE;AACpE,wBAAA,gEAAgE;YACxE;iBAAO;AACH,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO;oBACzB,2DAA2D;wBAC3D,6CAA6C;AAC7C,wBAAA,iEAAiE;YACzE;QACJ;AAEA,QAAA,IAAI,CAAC,qBAAqB,GAAG,WAAW;AAExC,QAAA,MAAM,WAAW,GAAG;YAChB,qBAAqB,EAAE,uBAAuB,EAAE,sBAAsB;YACtE,gBAAgB,EAAE,sBAAsB,EAAE,sBAAsB;YAChE,wBAAwB;SAC3B;AACD,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAClD,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAC7D;;QAGD,IAAI,WAAW,GAAiC,IAAI;QACpD,IAAI,CAAC,WAAW,EAAE;AACd,YAAA,WAAW,GAAG,IAAI,GAAG,EAAoB;AACzC,YAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;AAC3C,gBAAA,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE;oBAC3B,WAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,qBAAqB,EAAE,CAAC;gBAC1D;AACJ,YAAA,CAAC,CAAC;QACN;;QAGA,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AACtB,QAAA,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE;AAC1B,YAAA,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1C;aAAO;AACH,YAAA,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5D;;QAGA,IAAI,WAAW,EAAE;AACb,YAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;gBAC3C,MAAM,MAAM,GAAG,WAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AACtC,gBAAA,IAAI,CAAC,MAAM;oBAAE;AACb,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,qBAAqB,EAAE;gBAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;gBACnC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,GAAI,KAAK,CAAC,GAAG;AAClC,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;oBAAE;gBAE9C,MAAM,EAAE,GAAG,KAAoB;AAC/B,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;;AAErB,gBAAA,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM;gBAC5B,EAAE,CAAC,KAAK,CAAC,SAAS,GAAI,aAAa,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,GAAA,CAAK;gBAClD,qBAAqB,CAAC,MAAK;AACvB,oBAAA,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,sBAAsB;AAC5C,oBAAA,EAAE,CAAC,KAAK,CAAC,SAAS,GAAI,EAAE;AAC5B,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACN;;QAGA,IAAI,WAAW,EAAE;AACb,YAAA,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;AACxC,YAAA,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,MAAK;gBAC5C,IAAI,CAAC,IAAI,CAAC,UAAU;oBAAE;gBACtB,IAAI,KAAK,EAAE;oBACP,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAI,KAAK;oBACpC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO;gBAC1C;qBAAO;oBACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;oBACpC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO;gBAC1C;AACJ,YAAA,CAAC,CAAC;QACN;IACJ;IAEQ,gBAAgB,GAAA;AACpB,QAAA,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;AACxC,QAAA,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;IAC7B;;;;AAMA,IAAA,eAAe,CAAC,WAAmB,EAAA;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,CAAC;AAExB,QAAA,MAAM,WAAW,GAAG;YAChB,qBAAqB,EAAE,uBAAuB,EAAE,sBAAsB;YACtE,gBAAgB,EAAE,sBAAsB,EAAE,sBAAsB;YAChE,wBAAwB;SAC3B;AACD,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAClD,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAC7D;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC;QAE9B,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC7C,QAAA,MAAM,YAAY,GACd,CAAC,EAAE,CAAC,OAAO,KAAK,MAAM,IAAI,EAAE,CAAC,OAAO,KAAK,aAAa;AACtD,aAAC,CAAC,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,KAAK,KAAK,IAAI,EAAE,CAAC,aAAa,KAAK,aAAa,CAAC;AAE3F,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE;YAChD,IAAI,YAAY,EAAE;AACd,gBAAA,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AAAE,oBAAA,OAAO,CAAC;YACjE;iBAAO;AACH,gBAAA,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAAE,oBAAA,OAAO,CAAC;YACjE;QACJ;QACA,OAAO,QAAQ,CAAC,MAAM;IAC1B;+GAtvBS,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;ACzBD;;;;;;;AAOG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,eAAe,CAAkB,EAAE,CAAC;AAE9C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAiBnD,IAAA;AAfG,IAAA,cAAc,CAAC,EAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACtB;IAEA,cAAc,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;IAC1B;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC;IACzD;IAEA,eAAe,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5E;+GAnBS,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAzB,yBAAyB,EAAA,CAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;ACED,MAAM,WAAW,GAAG,sBAAsB;MAG7B,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,KAAK,GAAkB,IAAI,CAAC,eAAe,EAAE;QAE7C,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC,KAAK,CAAC;AAC9D,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAoGnD,IAAA;IAlGG,QAAQ,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK;IACrB;IAEA,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IAC3B;AAEA,IAAA,SAAS,CAAC,MAAkB,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;AAC1D,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACvE;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;QAClB,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;IAC7D;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IAC1B;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,cAAsB,EAAE,OAAO,GAAG,EAAE,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,cAAc,GAAG,OAAO;QACvC,IAAI,MAAM,IAAI,CAAC;YAAE;AACjB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACpD,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACxB;AAEA;;;;;;AAMG;AACH,IAAA,SAAS,CAAC,cAAsB,EAAE,eAAuB,EAAE,OAAO,GAAG,EAAE,EAAA;AACnE,QAAA,MAAM,OAAO,GAAG,cAAc,GAAG,OAAO;AACxC,QAAA,MAAM,OAAO,GAAG,eAAe,GAAG,OAAO;AACzC,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC;YAAE;QAClC,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;QACzC,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,OAAe,EAAE,OAAe,EAAE,UAAmB,EAAA;QAChE,OAAO;AACH,YAAA,CAAC,EAAE,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;AACjD,YAAA,CAAC,EAAE,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;SACnD;IACL;AAEQ,IAAA,MAAM,CAAC,OAA+B,EAAA;AAC1C,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE;QAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,aAAa,EAAE;IACxB;IAEQ,aAAa,GAAA;AACjB,QAAA,IAAI;AACA,YAAA,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE;QAAE,MAAM,EAAC;IACb;IAEQ,eAAe,GAAA;AACnB,QAAA,MAAM,QAAQ,GAAkB;YAC5B,MAAM,EAAE,UAAU,CAAC,OAAO;AAC1B,YAAA,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK;AAC9B,YAAA,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM;AAChC,YAAA,KAAK,EAAE,IAAI;SACd;AACD,QAAA,IAAI;YACA,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AAC7C,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,QAAQ;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,YAAA,MAAM,MAAM,GAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;kBACtE,KAAK,CAAC;AACR,kBAAE,QAAQ,CAAC,MAAM;YACrB,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC;YAC/E,OAAO;gBACH,MAAM;gBACN,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;gBACtF,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAC3F,gBAAA,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK;aACpG;QACL;AAAE,QAAA,MAAM;AACJ,YAAA,OAAO,QAAQ;QACnB;IACJ;+GAvGS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAf,eAAe,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;ACjBD;AACA;;ACiBA;;;;;;AAMG;MAEU,wBAAwB,CAAA;AAwCjC,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAA,CAAA,cAAc,GAAd,cAAc;AAvC1B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAwC;;AAG1D,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;;QAEnC,IAAA,CAAA,WAAW,GAAwB,EAAE;;AAGrC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAAe;AAElD;;;AAGG;AACK,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAmB;AAEjD;;;;AAIG;AACK,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAA+B;;QAGhD,IAAA,CAAA,cAAc,GAAG,IAAI,GAAG,CAAC;YACtC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM;AAC7E,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAErD,IAAA,CAAA,cAAc,GAAG,IAAI,GAAG,CAAC;YACtC,YAAY,EAAE,YAAY,EAAE,iBAAiB;YAC7C,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB;AACrE,SAAA,CAAC;AAEM,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AAC3D,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAEsB;AAErD;;;;;;AAMG;AACK,IAAA,UAAU,CAAI,EAAW,EAAA;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;IAC5C;;AAGA,IAAA,MAAM,CAAC,IAAmB,EAAA,EAAU,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/E;;AAE+D;IAC/D,QAAQ,CAAC,IAAmB,EAAE,OAAoB,IAAU,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACxG,OAAO,CAAC,IAAmB,EAAE,eAA6B,EAAA;AAC9D,QAAA,MAAM,OAAO,GAAG,eAAe,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO;AAChF,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;;;AAItC,QAAA,IAAI,IAAI,CAAC,EAAE,EAAE;AACT,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,IAAI,OAAO,EAAE;AACT,gBAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,oBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC;gBACvC;gBACA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM;YAAE;QAEhC,MAAM,QAAQ,GAA0B,EAAE;AAE1C,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;;;;;;YAMhC,MAAM,YAAY,GAAG,SAAS,IAAI,EAAE,CAAC,OAAO,KAAK,gBAAgB;YACjE,IAAI,CAAC,YAAY,EAAE;AACf,gBAAA,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;;;AAG7B,oBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;wBAAE;oBAC9B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACtC,wBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;wBACxD,IAAI,MAAM,EAAE;AACR,4BAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;wBACtC;6BAAO,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;AAClD,4BAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;AAC3D,4BAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;4BACjB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;wBAClD;oBACJ;gBACJ;YACJ;AAEA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AACzD,YAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QACrD;QAEA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;IACrC;;AAGA,IAAA,MAAM,CAAC,IAAmB,EAAA,EAAU,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvE,IAAA,OAAO,CAAC,IAAmB,EAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;YACzB,KAAK,CAAC,OAAO,EAAE;QACnB;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;;AAG1B,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;YACzB,IAAI,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE;gBAC1C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAClD;QACJ;;;QAIA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,GAAG,EAAE;AACL,YAAA,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC;QAChD;;AAGA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;AAChC,gBAAA,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;;oBAE7B,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;AAC3C,wBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;wBACxD,IAAI,OAAO,EAAE;AACT,4BAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC;AAClD,4BAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;gCACjB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;4BACtD;iCAAO;gCACH,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;4BAC/C;wBACJ;oBACJ;;oBAEA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;oBAC/C,IAAI,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC9C,wBAAA,MAAM,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AAC/C,wBAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC;AACvC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC;oBACzC;gBACJ;YACJ;QACJ;IACJ;;AAGA,IAAA,OAAO,CAAC,IAAmB,EAAA;QACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,IAAmB,EAAA,EAAU,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvE,IAAA,OAAO,CAAC,IAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM;YAAE;QAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,GAAG,EAAE;AACL,YAAA,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;;AAEpD,YAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC;QAChD;;;;AAKA,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;gBAC7B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;oBACtC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/C,oBAAA,IAAI,MAAM;AAAE,wBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;gBAClD;YACJ;QACJ;AAEA,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;YAChC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;QACrC;IACJ;AAEA;;;;AAIG;IACH,aAAa,CAAC,MAAc,EAAE,OAA2B,IAAU,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACxH,cAAc,CAAC,MAAc,EAAE,OAA2B,EAAA;QAC9D,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAChC,YAAA,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM;gBAAE;YACxB,KAAK,MAAM,EAAE,KAAK,IAAI,CAAC,YAAY,IAAI,EAAE,GAAG;AACxC,gBAAA,IAAI,EAAE,CAAC,OAAO,KAAK,OAAO,EAAE;oBACxB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;gBACrC;YACJ;YACA;QACJ;IACJ;;AAIQ,IAAA,iBAAiB,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;;;;;;;;AAQnF,QAAA,QAAQ,EAAE,CAAC,OAAO;AACd,YAAA,KAAK,UAAU;gBACX,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AACjD,YAAA,KAAK,WAAW;;;;gBAIZ,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AACjD,YAAA,KAAK,WAAW;;;;AAIZ,gBAAA,OAAO,MAAK,EAAE,CAAC;AACnB,YAAA,KAAK,eAAe;gBAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AACtD,YAAA,KAAK,OAAO;gBACR,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AAC9C,YAAA,KAAK,OAAO;gBACR,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AAC9C,YAAA,KAAK,gBAAgB;;AAEjB,gBAAA,OAAO,MAAK,EAAE,CAAC;AACnB,YAAA;AACI,gBAAA,OAAO,MAAK,EAAE,CAAC;;IAE3B;;AAIQ,IAAA,cAAc,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;AAChF,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAK;AAC1B,YAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;gBACpC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACrF;iBAAO;gBACH,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;YAC9C;QACJ,CAAC,EAAE,EAAE,CAAC;AACN,QAAA,OAAO,MAAM,YAAY,CAAC,KAAK,CAAC;IACpC;AAEQ,IAAA,mBAAmB,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;AACrF,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU;QAElC,MAAM,IAAI,GAAG,MAAK;AACd,YAAA,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE;YACjB,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE;AACvD,YAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACpC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAK;oBACjC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE;AACvD,oBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;oBACjB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AAC9C,gBAAA,CAAC,CAAC;gBACF;YACJ;AACA,YAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AAC9C,QAAA,CAAC;;;;QAKD,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,CAAC,OAAO,KAAI;AAClD,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AACzB,gBAAA,IAAI,KAAK,CAAC,cAAc,EAAE;AAAE,oBAAA,OAAO,EAAE;AAAE,oBAAA,IAAI,EAAE;gBAAE;YACnD;AACJ,QAAA,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AACtB,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;;;;QAKzB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE;QACxD,IAAI,WAAW,GAAG,KAAK;QACvB,MAAM,QAAQ,GAAG,MAAK;AAClB,YAAA,IAAI,WAAW;gBAAE;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE;AACxD,YAAA,IAAI,CAAC,MAAM;gBAAE;AACb,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC/C,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC;YAC9F,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG;YACtC,IAAI,GAAG,GAAG,CAAC,IAAI,QAAQ,GAAG,GAAG,IAAI,GAAG,EAAE;gBAAE,WAAW,GAAG,IAAI;AAAE,gBAAA,OAAO,EAAE;AAAE,gBAAA,IAAI,EAAE;YAAE;AACnF,QAAA,CAAC;AACD,QAAA,IAAI,OAAO;AAAE,YAAA,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAE5E,MAAM,OAAO,GAAG,MAAK;YACjB,QAAQ,CAAC,UAAU,EAAE;YACrB,WAAW,GAAG,IAAI;AAClB,YAAA,IAAI,OAAO;AAAE,gBAAA,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAChE,QAAA,CAAC;AACD,QAAA,OAAO,OAAO;IAClB;IAEQ,aAAa,GAAA;QACjB,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC7D;;AAGQ,IAAA,oBAAoB,CAAC,OAAoB,EAAA;AAC7C,QAAA,IAAI,EAAE,GAAG,OAAO,CAAC,aAAa;QAC9B,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;AAAE,gBAAA,OAAO,IAAI;AAC/C,YAAA,EAAE,GAAG,EAAE,CAAC,aAAa;QACzB;AACA,QAAA,OAAO,KAAK;IAChB;;IAGQ,iBAAiB,CAAC,OAAoB,EAAE,QAAoB,EAAA;QAChE,MAAM,IAAI,GAAG,MAAK;YACd,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACrC,gBAAA,QAAQ,EAAE;YACd;iBAAO;gBACH,qBAAqB,CAAC,IAAI,CAAC;YAC/B;AACJ,QAAA,CAAC;QACD,qBAAqB,CAAC,IAAI,CAAC;IAC/B;AAEQ,IAAA,WAAW,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;QAC7E,MAAM,OAAO,GAAG,MAAK;AACjB,YAAA,IAAI,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE;;AAE3B,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK;gBACvD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AAC1E,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC;YAC5C;iBAAO;gBACH,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;YAC9C;AACJ,QAAA,CAAC;AACD,QAAA,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1C,OAAO,MAAM,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;IAC9D;AAEQ,IAAA,WAAW,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;AAC7E,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;QACrE,MAAM,YAAY,GAAG,MAAK;;AAEtB,YAAA,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;AAC7B,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;oBAAE;;;AAG9B,gBAAA,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE;oBACzB,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;oBACnD;gBACJ;AACA,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;AACxD,gBAAA,IAAI,CAAC,MAAM;oBAAE;AACb,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;YACtC;AACJ,QAAA,CAAC;AACD,QAAA,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAY,CAAC;AACpD,QAAA,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAY,CAAC;AACpD,QAAA,OAAO,MAAK;AACR,YAAA,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC;AACvD,YAAA,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC;AAC3D,QAAA,CAAC;IACL;;AAIQ,IAAA,UAAU,CAAC,IAAmB,EAAE,OAA4B,EAAE,MAA2B,EAAA;AAC7F,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AAAE,gBAAA,SAAS;YACvC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACtC,gBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;gBAChC;YACJ;;;;AAIA,YAAA,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE;gBACzB,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,SAAS,CAAC;gBAC1D;YACJ;;;AAGA,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;AACvD,YAAA,IAAI,CAAC,MAAM;gBAAE;AACb,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;QACtC;IACJ;AAEA;;;;AAIG;AACK,IAAA,kBAAkB,CAAC,MAAyB,EAAE,EAAsB,EAAE,IAA2B,EAAA;QACrG,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAa,EAAE,IAAI,CAAC;AACvD,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,IAAI,MAAM,CAAC,EAAE,KAAK,OAAO,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YACpC;QACJ;AACA,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE;AAC5C,YAAA,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACzB,YAAY,EAAE,IAAI,CAAC,WAAW;AACjC,SAAA,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAC7C;;AAGQ,IAAA,UAAU,CAAC,EAAsB,EAAA;QACrC,MAAM,GAAG,GAAG,EAAE,EAAE,OAAO,GAAG,oBAAoB,CAAuB;AACrE,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,SAAS;QAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE;QACzD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;QACxC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS;IACrF;;AAGA,IAAA,cAAc,CAAC,IAAyB,EAAA;;AAEpC,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,EAAE;IAC/D;AAEQ,IAAA,mBAAmB,CAAC,MAAyB,EAAA;;AAEjD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAQ;AAC9D,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,QAAQ,MAAM,CAAC,IAAI;AACf,YAAA,KAAK,YAAY;gBAAW,MAAM,CAAC,SAAS,EAAE;gBAAE;AAChD,YAAA,KAAK,YAAY;gBAAW,MAAM,CAAC,SAAS,EAAE;gBAAE;AAChD,YAAA,KAAK,iBAAiB;AAAM,gBAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBAAE;AAC3E,YAAA,KAAK,qBAAqB;AAAE,gBAAA,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE;gBAAE;AACtD,YAAA,KAAK,oBAAoB;AAAG,gBAAA,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE;gBAAE;AACrD,YAAA,KAAK,qBAAqB;AAAE,gBAAA,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE;gBAAE;;IAE9D;AAEQ,IAAA,aAAa,CAAC,SAAwB,EAAE,MAAyB,EAAE,MAA2B,EAAA;QAClG,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5C,YAAA,OAAO,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,IAAI,IAAI;QAC/E;;AAEA,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,EAAE;AAC5D,YAAA,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM;gBAAE,OAAO,GAAG,CAAC,OAAO;QAClD;AACA,QAAA,OAAO,IAAI;IACf;IAEQ,aAAa,CAAC,OAAoB,EAAE,MAAyB,EAAA;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE;;AAGvB,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE;YACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,IAAI,EAAE,MAAM;AACf,SAAA,CAAC;QAEF,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAK;AACpB,gBAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;AAC9C,gBAAA,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC;AAC1C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC;;;gBAGtC,IAAI,IAAI,CAAC,aAAa,EAAE;AAAE,oBAAA,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;YACtE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;QACtB;aAAO,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;;;AAGzC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAK;gBACpB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAAC;YACvD,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;QACtB;IACJ;AAEA;;;;;;;;;AASG;IACK,aAAa,CAAC,OAAoB,EAAE,MAAyB,EAAA;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE;AACvB,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAA2B;AACpD,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;;;;YAItB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAAC;QACvD;aAAO;AACH,YAAA,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAC5C,OAAO,CAAC,KAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;YAC9C;YACA,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAAC;QACvD;AACA,QAAA,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;IACvC;AAEQ,IAAA,0BAA0B,CAAC,OAAoB,EAAA;AACnD,QAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC;AACvC,QAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;AACzC,QAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC;AAC1C,QAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;AAC9C,QAAA,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC;IAC9C;IAEQ,aAAa,CAAC,OAAoB,EAAE,MAAyB,EAAA;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE;;QAGvB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;YACtC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,IAAI,EAAE,UAAU;AACnB,SAAA,CAAC;IACN;AAEQ,IAAA,cAAc,CAAC,MAAyB,EAAA;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE;QAC9C,IAAI,SAAS,GAAe,EAAE;AAE9B,QAAA,QAAQ,MAAM,CAAC,IAAI;AACf,YAAA,KAAK,QAAQ;AACT,gBAAA,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5C;AACJ,YAAA,KAAK,SAAS;AACV,gBAAA,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5C;AACJ,YAAA,KAAK,QAAQ;gBACT,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,IAAI,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5G;AACJ,YAAA,KAAK,UAAU;gBACX,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,IAAI,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC7G;AACJ,YAAA,KAAK,UAAU;gBACX,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,IAAI,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5G;AACJ,YAAA,KAAK,WAAW;gBACZ,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,IAAI,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC7G;AACJ,YAAA,KAAK,SAAS;gBACV,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5F;AACJ,YAAA,KAAK,UAAU;gBACX,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5F;AACJ,YAAA,KAAK,QAAQ;gBACT,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,GAAG;AAC7C,gBAAA,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,CAAA,OAAA,EAAU,GAAG,CAAA,IAAA,CAAM,EAAE,CAAC;gBAC/E;AACJ,YAAA,KAAK,MAAM;gBACP,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;gBACzF;AACJ,YAAA,KAAK,MAAM;gBACP,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;gBACzF;AACJ,YAAA,KAAK,kBAAkB;;AAEnB,gBAAA,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5C;;QAGR,OAAO;YACH,SAAS;AACT,YAAA,OAAO,EAAE;gBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,gBAAA,IAAI,EAAE,UAAU;AACnB,aAAA;SACJ;IACL;+GAjmBS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAxB,wBAAwB,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;ACrBD;;;;;AAKG;MAEU,gCAAgC,CAAA;AAD7C,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAA6B;AAwBzD,IAAA;AAtBG,IAAA,UAAU,CAAC,OAA4B,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B;IACJ;AAEA,IAAA,SAAS,CAAC,EAAU,EAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B;IAEA,MAAM,GAAA;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5C;AAEA,IAAA,MAAM,CAAC,MAAyB,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IACvC;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B;+GAxBS,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAhC,gCAAgC,EAAA,CAAA,CAAA;;4FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAD5C;;;ACAD;;;;;;AAMG;MAEU,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;QAEY,IAAA,CAAA,KAAK,GAAqB,EAAE;AAmBvC,IAAA;AAjBG,IAAA,QAAQ,CAAC,IAAmB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;IAC3D;AAEA,IAAA,UAAU,CAAC,QAAgB,EAAA;QACvB,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;IAC5C;AAEA,IAAA,qBAAqB,CAAC,mBAA2B,EAAA;QAC7C,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,mBAAmB,EAAE;IACvD;IAEA,OAAO,GAAA,EAAgC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/D,WAAW,GAAA,EAAyB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChE,sBAAsB,GAAA,EAAyB,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAEtF,KAAK,GAAA,EAAW,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;+GAnBxB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAvB,uBAAuB,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACZD;;;;;;;;;;;;;;;;;;;;;AAqBG;MAEU,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEa,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAE/B,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAkB;QACjC,IAAA,CAAA,OAAO,GAA4B,IAAI;QA2LvC,IAAA,CAAA,aAAa,GAAG,KAAK;AAiBhC,IAAA;AA1MG;;;;;;;;;;;AAWG;aACqB,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,CAAC;AAC1C,QAAA,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY;AAClE,QAAA,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO;;;QAG3D,YAAY,EAAE,SAAS,EAAE,aAAa;QACtC,OAAO;AACV,KAAA,CAAC,CAAC;;aAGqB,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAvB,CAAyB;IAEhE,IAAI,GAAA;QACA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC9C,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,oBAAoB;QACtC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3C;AAEA;;;;;;;;;;;;;;AAcG;IACH,MAAM,CAAC,MAAc,EAAE,MAA2B,EAAE,KAAoB,EAAE,YAAqB,EAAE,SAAkB,EAAA;AAC/G,QAAA,IAAI,CAAC,MAAM;YAAE;QAEb,IAAI,KAAK,EAAE;AACP,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAK,EAAE;;;;AAKhC,YAAA,IAAK,eAA4B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC/C,gBAAA,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC;gBACvC,MAAM,GAAG,GAAG,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI;AAC1C,sBAAE,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;sBACtF,EAAE;gBACR,IAAI,GAAG,EAAE;oBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;gBAC5B;qBAAO;AACH,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC1B;gBACA,IAAI,CAAC,KAAK,EAAE;gBACZ;YACJ;;;AAIA,YAAA,IAAK,iBAA8B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACjD,gBAAA,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC;AACzC,gBAAA,MAAM,GAAG,GAAG,CAAC,YAAY,IAAI,IAAI;AAC7B,sBAAE,IAAI,CAAC,OAAO,CAAC,CAAA,SAAA,EAAY,YAAY,CAAA,CAAA,EAAI,IAAI,CAAA,WAAA,EAAc,MAAM,CAAA,CAAE,EAAE,MAAM;sBAC3E,EAAE;gBACR,IAAI,GAAG,EAAE;oBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;gBAC5B;qBAAO;AACH,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC1B;gBACA,IAAI,CAAC,KAAK,EAAE;gBACZ;YACJ;;;AAIA,YAAA,MAAM,MAAM,GAAI,iBAA8B,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,UAAU;AACzF,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,IAAI,KAAK,CAAA,CAAE,EAAE,MAAM,CAAC;YAChE,IAAI,GAAG,EAAE;gBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;YAC5B;iBAAO;AACH,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;YAC1B;YACA,IAAI,CAAC,KAAK,EAAE;YACZ;QACJ;;AAGA,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAoC;QAChF,IAAI,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;AAClD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,SAAA,EAAY,MAAM,CAAA,QAAA,CAAU,EAAE,YAAY,CAAC;AAC1E,YAAA,IAAI,SAAS;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,QAAA,CAAU,EAAE,SAAS,CAAC;;gBACxD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA,EAAG,MAAM,CAAA,QAAA,CAAU,CAAC;QAC/C;aAAO;YACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA,EAAG,MAAM,CAAA,QAAA,CAAU,CAAC;QAC1C;QAEA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,UAAU;QAEzD,MAAM,KAAK,GAAwB,EAAE;QACrC,MAAM,KAAK,GAAwB,EAAE;AACrC,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzC,IAAI,CAAC,KAAK,gBAAgB;gBAAE;YAC5B,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;;YAE1D,IAAI,UAAU,IAAI,EAAE,WAAW,IAAI,CAAC,KAAK,OAAO,CAAC,EAAE;AAC/C,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YAChB;iBAAO;AACH,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YAChB;QACJ;;QAEA,IAAI,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE;AAC7C,YAAA,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM;QAC3B;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,SAAA,EAAY,MAAM,CAAA,CAAE,EAAE,KAAK,CAAC;AAC1D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,UAAA,EAAa,MAAM,CAAA,CAAE,EAAE,KAAK,CAAC;AAC3D,QAAA,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAChE,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;QACpC;aAAO;AACH,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B;QACA,IAAI,CAAC,KAAK,EAAE;IAChB;AAEA;;;;;AAKG;AACH,IAAA,YAAY,CAAC,MAA8B,EAAA;AACvC,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM;aAChC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;AAC3D,aAAA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,CAAG,CAAC;AACvC,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,CAAA,SAAA,EAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,CAAK,CAAC;QACrE;aAAO;AACH,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;QACnC;QACA,IAAI,CAAC,KAAK,EAAE;IAChB;AAEA,IAAA,MAAM,CAAC,MAAc,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM;YAAE;;AAEb,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;YACjC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,CAAA,CAAA,CAAG,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;YAC1B;QACJ;QACA,IAAI,CAAC,KAAK,EAAE;IAChB;IAEA,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACvB;IACJ;IAEQ,OAAO,CAAC,SAAiB,EAAE,MAA2B,EAAA;;;;QAI1D,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,CAAC,eAAe,CAAC;QAC/E,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AAC5B,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,EAAA,EAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD,QAAA,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,IAAA,EAAO,IAAI,KAAK;IACxC;IAIQ,KAAK,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa;YAAE;AACzC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QACzB,qBAAqB,CAAC,MAAK;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;YAC1B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;;YAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AAC/C,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;iBACvC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,YAAY;iBAClC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3E,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACxB,QAAA,CAAC,CAAC;IACN;+GA/MS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAApB,oBAAoB,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;ACpBD;;;;;;;;;;;;;;AAcG;MAEU,qBAAqB,CAAA;IAiB9B,WAAA,CACY,UAA6B,EAC7B,aAAmC,EAAA;QADnC,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,aAAa,GAAb,aAAa;QAlBjB,IAAA,CAAA,QAAQ,GAAoB,IAAI;QAChC,IAAA,CAAA,SAAS,GAAuB,IAAI;AACpC,QAAA,IAAA,CAAA,WAAW,GAAiB,MAAM,CAAC;QAEnC,IAAA,CAAA,MAAM,GAAuB,IAAI;QACjC,IAAA,CAAA,IAAI,GAAyB,IAAI;QACjC,IAAA,CAAA,QAAQ,GAAkB,IAAI;;QAE9B,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,OAAO,GAAG,CAAC;;QAGnB,IAAA,CAAA,SAAS,GAAwB,IAAI;;QAErC,IAAA,CAAA,eAAe,GAAwB,IAAI;;AAQnC,QAAA,IAAA,CAAA,cAAc,GAA4C,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAH9F;AAKH;AACiG;AACjG,IAAA,IAAI,CAAC,SAAsB,EAAE,WAAyB,EAAE,cAAwD,EAAA;AAC5G,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,cAAc;AAAE,YAAA,IAAI,CAAC,cAAc,GAAG,cAAc;IAC5D;;IAGA,MAAM,CAAC,OAA2B,EAAE,IAA0B,EAAA;;;;;AAK1D,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG;YAAE;AACzD,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AAExB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAAE,IAAI,CAAC,eAAe,EAAE;YAAE;QAAQ;;QAE5E,IAAI,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAK,IAAY,CAAC,cAAc,EAAE;YAAE,IAAI,CAAC,eAAe,EAAE;YAAE;QAAQ;AAE5G,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;QAC/C,IAAI,CAAC,cAAc,EAAE;;;AAGpB,QAAA,IAAI,CAAC,QAAgB,CAAC,gBAAgB,GAAG,IAAI;AAC9C,QAAA,IAAI,CAAC,QAAS,CAAC,MAAM,GAAG,OAAO;;QAE9B,IAAI,CAAC,QAAgB,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;;;;AAIlE,QAAA,IAAI,CAAC,QAAgB,CAAC,UAAU,GAAG,OAAO;AAC3C,QAAA,IAAI,CAAC,QAAS,CAAC,UAAU,EAAE;IAC/B;AAEA;;;;;AAKG;AACH,IAAA,WAAW,CAAC,QAAuB,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,MAAM,CAAC,EAAE,IAAG;AACzC,YAAA,IAAI,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC;AAAE,gBAAA,OAAO,KAAK;;;;YAIjD,MAAM,GAAG,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,QAAQ;YACzC,OAAO,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,QAAQ;AACpE,QAAA,CAAC,CAAC;;;AAGF,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAChG,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,KAAK;QAAE;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;QACzB,IAAI,CAAC,cAAc,EAAE;;AAEpB,QAAA,IAAI,CAAC,QAAgB,CAAC,gBAAgB,GAAG,KAAK;AAC/C,QAAA,IAAI,CAAC,QAAS,CAAC,MAAM,GAAG,OAAc;AACtC,QAAA,IAAI,CAAC,QAAS,CAAC,UAAU,EAAE;AAC3B,QAAA,OAAO,IAAI;IACf;;IAGA,OAAO,GAAA,EAAW,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;AAE/C;AAC8E;AACtE,IAAA,UAAU,CAAC,MAAmB,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,EAAE;AAC9B,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAc,sBAAsB,CAAC,CAAC;AAC5F,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1F;AAEA,IAAA,OAAO,GAAA,EAAW,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;;IAIzD,cAAc,GAAA;QAClB,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAU,EAAE;AAC1C,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,KAAK;AAChB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,CAAC;;;;;AAKP,YAAA,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAC1C,YAAA,SAAS,EAAE,qBAAqB;;;AAGhC,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,aAAa,EAAE,CAAC;YAChB,cAAc,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;YAChG,qBAAqB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACvG,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,kBAAkB,EAAE,IAAI;AACpB,SAAA,CAAC;QAET,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,KAAI;;AAEhC,YAAA,IAAK,CAAC,CAAC,UAAU,EAAE,MAAsB,EAAE,OAAO,GAAG,0BAA0B,CAAC,EAAE;AAC9E,gBAAA,CAAC,CAAC,IAAI,IAAI;YACd;AACJ,QAAA,CAAC,CAAC;;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,KAAI,EAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;;QAItD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAI;AAC7B,YAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;AACjD,YAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;AACnD,YAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9D;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QAAE;IACxE;AAEQ,IAAA,UAAU,CAAC,CAAM,EAAA;AACrB,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAqB;;AAElC,QAAA,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;QAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,IAAI;YAAE;QAAQ;AAE5C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC;QAClE,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,IAAI;YAAE;QAAQ;QAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAgC;QACjF,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAkC;AAC7E,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,IAAI;YAAE;QAAQ;AAErD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAiC,GAAG,SAAS;AACvH,QAAA,MAAM,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,MAAM,OAAO,GAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,WAAW,EAAE;QAChH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAK;AACzF,YAAA,IAAI,CAAC,SAAS,IAAI;;AAElB,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;AACpD,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,YAAY,CAAC,CAAM,EAAA;AACvB,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAqB;QAClC,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE;QAAQ;AAC1B,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;AAC1D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM;;;AAG5D,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;AACvB,YAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC;AAC/E,YAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC;AACrF,SAAA,CAAC;;AAEF,QAAA,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;AACnB,QAAA,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,eAAe,IAAI;AACxB,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IACpD;;AAGQ,IAAA,iBAAiB,CAAC,IAAY,EAAA;AAClC,QAAA,KAAK,MAAM,KAAK,KAAM,IAAI,CAAC,IAAY,EAAE,WAAW,IAAI,EAAE,GAAG;YACzD,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC,MAAM,IAAI,EAAE,GAAG;AACtC,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;oBAAE,OAAO,KAAK,CAAC,OAAO;YACjD;QACJ;AACA,QAAA,OAAO,SAAS;IACpB;AAEA;AACoE;AAC5D,IAAA,gBAAgB,CAAC,EAAU,EAAE,OAA2B,EAAE,EAAe,EAAE,IAAwB,EAAA;AACvG,QAAA,MAAM,KAAK,GAAG,CAAC,CAAS,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;AACtD,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,mCAAmC,CAAC;AACjF,QAAA,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;QAC5B,QAAQ,IAAI;YACR,KAAK,GAAG,EAAE;AACN,gBAAA,MAAM,GAAG,GAAG,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,aAAa,EAAE,WAAW,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,EAAE,YAAY,IAAI,CAAC,CAAC;gBAC3G,OAAO,GAAG,GAAG,CAAC,GAAG,CAAA,EAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA,CAAA,CAAG,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA,EAAA,CAAI;YACxE;YACA,KAAK,IAAI,EAAE;gBAAE,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK;gBAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAA,EAAG,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAA,EAAA,CAAI,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA,EAAA,CAAI;YAAE;YAC1H,KAAK,IAAI,EAAE;gBAAE,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM;gBAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAA,EAAG,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAA,EAAA,CAAI,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA,EAAA,CAAI;YAAE;YAC3H,KAAK,MAAM,EAAE;gBAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;gBAAE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;gBAAE,OAAO,IAAI,GAAG,CAAC,GAAG,CAAA,EAAG,KAAK,CAAC,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC,CAAA,IAAA,CAAM,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA,EAAA,CAAI;YAAE;YACjL,KAAK,MAAM,EAAE;gBAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;gBAAE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;gBAAE,OAAO,IAAI,GAAG,CAAC,GAAG,CAAA,EAAG,KAAK,CAAC,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC,CAAA,IAAA,CAAM,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA,EAAA,CAAI;YAAE;YACjL,KAAK,KAAK,EAAE;AAAE,gBAAA,MAAM,EAAE,GAAG,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAAE,OAAO,CAAA,EAAG,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK;YAAE;YACvI,KAAK,IAAI,EAAE;AAAE,gBAAA,MAAM,EAAE,GAAG,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAAE,OAAO,CAAA,EAAG,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI;YAAE;YACvG,SAAS,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA,EAAA,CAAI;;IAE7C;AAEA;AACgG;IACxF,UAAU,CAAC,IAAmB,EAAE,OAA+B,EAAA;QACnE,MAAM,MAAM,GAAwB,EAAE;QACtC,KAAK,MAAM,KAAK,KAAM,IAAY,CAAC,WAAW,IAAI,EAAE,GAAG;YACnD,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC,MAAM,IAAI,EAAE,GAAG;AACtC,gBAAA,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO;oBAAE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC9D,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;oBAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO;YACnG;QACJ;QACA,MAAM,KAAK,GAAI,IAAY,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE;AAC9C,QAAA,IAAI,KAAK;YAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;IACvD;;AAGQ,IAAA,WAAW,CAAC,CAAM,EAAA;AACtB,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,UAAoC;AACjD,QAAA,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ;AAAE,YAAA,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;AACjF,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACzE,QAAA,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;AAAE,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE;AACxE,QAAA,OAAO,IAAI;IACf;;AAGQ,IAAA,iBAAiB,CAAC,EAAsB,EAAA;QAC5C,IAAI,CAAC,GAAuB,EAAE;QAC9B,OAAO,CAAC,EAAE;AACN,YAAA,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS;gBAAE,OAAO,CAAC,CAAC,EAAE;AACpE,YAAA,CAAC,GAAG,CAAC,CAAC,aAAa;QACvB;AACA,QAAA,OAAO,IAAI;IACf;;AAGQ,IAAA,kBAAkB,CAAC,CAAS,EAAE,CAAS,EAAE,SAAsB,EAAA;QACnE,MAAM,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAkB;AAC/D,QAAA,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;AACrC,YAAA,IAAI,CAAC,EAAE;gBAAE;YACT,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;AAC1C,YAAA,IAAI,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;AAAE,gBAAA,SAAS;AACnD,YAAA,OAAO,EAAE;QACb;AACA,QAAA,OAAO,IAAI;IACf;;IAGQ,eAAe,CAAC,QAAgB,EAAE,CAAS,EAAA;QAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC;QACrB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CACjD,CAAC,CAAC,KAAM,CAAiB,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAC7E;QAClB,IAAI,GAAG,GAAG,CAAC;AACX,QAAA,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;AACxB,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,EAAE;YACnC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;AAAE,gBAAA,GAAG,EAAE;QACvC;AACA,QAAA,OAAO,GAAG;IACd;+GA3SS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA,CAAA;;4FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACnBlC;;;;;;;;;;;;;;;;;AAiBG;MAEU,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;QAEY,IAAA,CAAA,OAAO,GAAmB,IAAI;;QAGtC,IAAA,CAAA,QAAQ,GAA+C,IAAI;;QAG3D,IAAA,CAAA,iBAAiB,GAAG,CAAC;AAiCxB,IAAA;AA/BG;;;;;AAKG;AACH,IAAA,IAAI,CAAC,SAAsB,EAAE,aAA0B,EAAE,cAA2B,EAAA;QAChF,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC;YACvB,SAAS;AACT,YAAA,aAAa,EAAE,SAAS;YACxB,aAAa;;YAEb,iBAAiB,EAAE,CAAC,CAAA,CAAA,EAAI,cAAc,CAAC,EAAE,IAAI,gBAAgB,CAAA,qBAAA,CAAuB,CAAC;AACrF,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,gBAAgB,EAAE,KAAK;YACvB,OAAO,EAAE,CAAC;AACb,SAAA,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAM,KAAI;YACpC,IAAI,CAAC,iBAAiB,GAAI,CAAC,CAAC,QAA0B,CAAC,MAAM;AAC7D,YAAA,IAAI,CAAC,QAAQ,GAAI,CAAC,CAAC,QAA0B,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACrE,QAAA,CAAC,CAAC;IACN;;AAGA,IAAA,OAAO,KAA6E;IAEpF,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACvB;+GAvCS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;;4FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACrBlC;AACA;AACA;AACA;;AC0BA;AACA,IAAI,eAAe,GAAG,CAAC;AAEvB;;;;;;;AAOG;AACH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAS;AACzC,IAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa;;AAExF,IAAA,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU;AAC7C,CAAA,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAEzG;;;;;;;;;;;;;;AAcG;MAKU,eAAe,CAAA;IAkBxB,WAAA,CACY,GAAqB,EACrB,QAAkB,EAClB,WAAgC,EACd,GAAa,EAC/B,eAAyC,EACzC,cAA8B,EAC9B,aAAmC,EACnC,iBAA2C,EAC3C,GAAsB,EACtB,iBAAoC,EACpC,UAA6B,EAAA;QAV7B,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,WAAW,GAAX,WAAW;QACO,IAAA,CAAA,GAAG,GAAH,GAAG;QACrB,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,UAAU,GAAV,UAAU;QA5Bb,IAAA,CAAA,SAAS,GAAyB,IAAI;AAC/C;;;;;;AAMG;QACM,IAAA,CAAA,eAAe,GAAkB,IAAI;AACpC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAO;AACjC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAO;AACtC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAO;QAExC,IAAA,CAAA,SAAS,GAAmB,EAAE;;QAE9B,IAAA,CAAA,UAAU,GAAuB,IAAI;IAc1C;AAEH;;;;AAIG;AACK,IAAA,WAAW,CAAC,IAAmB,EAAA;AACnC,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAY,KACzB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,EAAE,OAAO;AACpF,QAAA,QAAQ,IAAI,CAAC,IAAI;YACb,KAAK,SAAS,EAAE;AACZ,gBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;gBAC3B,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;YACtE;AACA,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG;AACpD,YAAA,KAAK,aAAa;AACd,gBAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,QAAQ;AACnD,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,MAAM;YACX,KAAK,UAAU,EAAE;AACb,gBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC7B,gBAAA,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,oBAAA,OAAO,CAAC;gBACxC,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,GAAG,IAAI,GAAG,KAAK;YAChF;AACA,YAAA;AACI,gBAAA,OAAO,IAAI;;IAEvB;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IAC/B;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5C,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;AAAE,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QAAE;AACrG,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;;;;YAIlD,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO;YACxC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE;gBAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAChD;QACJ;IACJ;AAEA;;;;AAIG;AACH;;;;AAIG;AACK,IAAA,mBAAmB,CAAC,OAA2B,EAAA;AACnD,QAAA,IAAI,EAAE,GAAG,OAAO,EAAE,aAAa,IAAI,IAAI;QACvC,OAAO,EAAE,EAAE;AACP,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACzB,gBAAA,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;oBAAE,OAAO,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YACrE;AACA,YAAA,EAAE,GAAG,EAAE,CAAC,aAAa;QACzB;AACA,QAAA,OAAO,SAAS;IACpB;AAEA;;;AAGyF;IACjF,sBAAsB,CAAC,QAA4B,EAAE,YAAoB,EAAA;AAC7E,QAAA,IAAI,EAAE,GAAG,QAAQ,EAAE,aAAa,IAAI,IAAI;QACxC,OAAO,EAAE,EAAE;AACP,YAAA,IAAI,KAAyB;AAC7B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACzB,gBAAA,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;oBAAE,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;oBAAE;gBAAO;YACjF;YACA,IAAI,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,CAAA,UAAA,EAAa,YAAY,CAAA,CAAE,CAAC;AAAE,gBAAA,OAAO,KAAK;AACxE,YAAA,EAAE,GAAG,EAAE,CAAC,aAAa;QACzB;AACA,QAAA,OAAO,SAAS;IACpB;AAEQ,IAAA,qBAAqB,CAAC,MAAmB,EAAA;QAC7C,IAAI,EAAE,GAAuB,MAAM;QACnC,OAAO,EAAE,EAAE;YACP,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACvD,IAAI,KAAK,EAAE;gBACP,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;YAC5C;AACA,YAAA,EAAE,GAAG,EAAE,CAAC,aAAa;QACzB;AACA,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,MAAM,CAAC,IAA0B,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACnE,QAAA,IAAI,CAAC,cAAc;YAAE;;;;;;QAOrB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAClC,QAAA,IAAI,YAA+B;QACnC,IAAI,GAAG,EAAE;YACL,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC;AAC/C,YAAA,YAAY,GAAG,eAAe,CAAC,cAAc,EAAE;gBAC3C,mBAAmB,EAAE,IAAI,CAAC,WAAW;gBACrC,eAAe,EAAE,IAAI,CAAC,QAAQ;gBAC9B,WAAW;AACd,aAAA,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;QAC1C;aAAO;AACH,YAAA,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxF;;;;;;;AAQA,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AACpD,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;gBAAE;YACnC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;AACzD,QAAA,CAAC,CAAC;;QAGF,MAAM,YAAY,GAAwB,EAAE;AAC5C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC1B,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;AAClC,gBAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AAC9B,oBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;wBAC7B,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO;oBAC5C;gBACJ;YACJ;QACJ;;QAGA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE;;QAGrC,IAAI,KAAK,EAAE;AACP,YAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,YAAY,CAAC;YACvD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC;;AAE9C,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,aAAmC;AAC1E,gBAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAmB,EAAE;oBACjE,MAAM,QAAQ,GAAI,IAAI,CAAC,WAAmC,CAAC,KAAK,CAAC;oBACjE,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM;wBAAE;AAChD,oBAAA,IAAK,iBAA8B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;;;;;;;wBAOjD,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AACtD,wBAAA,IAAI,CAAC,YAAY;4BAAE;AACnB,wBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC;oBACvG;AAAO,yBAAA,IAAK,eAA4B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;;;;;;;wBAOtD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAChD,wBAAA,IAAI,CAAC,YAAY;4BAAE;wBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,YAAY,CAAC;AAClE,wBAAA,IAAI,CAAC,OAAO;4BAAE;wBACd,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC;oBAChH;yBAAO;AACH,wBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,KAAK,CAAC;oBACzF;gBACJ;YACJ;QACJ;;QAGA,IAAI,KAAK,EAAE;AACP,YAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC1C;;;;AAKC,QAAA,YAAY,CAAC,QAAgB,CAAC,MAAM,CAAC,GAAG,IAAI;;;;;;AAO7C,QAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAe;AAC7C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,YAAY,IAAI,QAAQ,EAAE;YAC1D,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE;YACvC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;YAChD,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,eAAe,CAAA,CAAE,CAAC;QACvE;;AAGA,QAAA,MAAM,UAAU,GAAsB,QAAQ,CAAC,YAAY,CAAC;AAC5D,QAAA,MAAM,eAAe,GAAsB,QAAQ,CAAC,iBAAiB,CAAC;AACtE,QAAA,MAAM,eAAe,GAAsB,QAAQ,CAAC,iBAAiB,CAAC;AACtE,QAAA,IAAI,UAAU;YAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,QAAA,IAAI,eAAe;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1G,QAAA,IAAI,eAAe;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;AAEnG,QAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;;;;QAK9C,MAAM,QAAQ,GAAuB,YAAY,CAAC,QAAQ,EAAE,aAAa,IAAI,IAAI;;;;;AAMjF,QAAA,IAAI,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAClD,YAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;QACpC;;;;AAIA,QAAA,MAAM,cAAc,GAAG,CAAC,CAAE,IAAY,CAAC,cAAc;AACrD,QAAA,IAAI,QAAQ,IAAI,CAAC,cAAc,EAAE;;;;;YAK7B,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,KAAK,EAAE;gBACvC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE,CAAC;AAC5C,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe;gBACrC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO;AAC/C,oBAAA,IAAI,EAAE,UAAmB;AACzB,oBAAA,IAAI,EAAE,IAAI;oBACV,QAAQ;AACR,oBAAA,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,iBAAA,CAAC,CAAC;AACH,gBAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;YAC9B;;YAEA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC;;;;AAI9D,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC;YAEpE,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,KAAiB,KAAI;gBAC1D,IAAK,KAAa,CAAC,UAAU;oBAAE;AAC/B,gBAAA,IAAI,QAAQ,CAAC,YAAY,CAAC,iBAAiB,CAAC;oBAAE;AAC9C,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACvD,YAAA,CAAC,CAAC;YACF,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,KAAiB,KAAI;AAC1D,gBAAA,IAAI,QAAQ,CAAC,YAAY,CAAC,iBAAiB,CAAC;oBAAE;;;;AAI9C,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAAmC;gBACzD,IAAI,OAAO,EAAE;oBACT,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;oBACvD,IAAI,WAAW,EAAE;AACb,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;wBACnC;oBACJ;gBACJ;AACA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC5B,YAAA,CAAC,CAAC;YACF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAiB,KAAI;gBACrD,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,QAAQ,CAAC,YAAY,CAAC,iBAAiB,CAAC;oBAAE;AAC9C,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAChE,YAAA,CAAC,CAAC;YACF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,KAAiB,KAAI;gBAC3D,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,QAAQ,CAAC,YAAY,CAAC,iBAAiB,CAAC;oBAAE;AAC9C,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAC5D,gBAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACxE,YAAA,CAAC,CAAC;QACN;;;;QAKA,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;QACvC;aAAO,IAAI,QAAQ,EAAE;YACjB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;QACnD;IACJ;AAhVS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,6GAsBZ,QAAQ,EAAA,EAAA,EAAA,KAAA,EAAAJ,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAK,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAtBX,eAAe,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;0BAuBQ,MAAM;2BAAC,QAAQ;;sBArBnB;;sBAQA;;sBACA;;sBACA;;sBACA;;;AC3EL;;;;;;;;AAQG;MAEU,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAuB;AAsCnD,IAAA;AApCG,IAAA,UAAU,CAAC,OAAsB,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B;IACJ;AAEA,IAAA,SAAS,CAAC,EAAU,EAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B;IAEA,MAAM,GAAA;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5C;AAEA,IAAA,MAAM,CAAC,MAAmB,EAAA;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IACvC;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B;AAEA;;;;;;;AAOG;IACH,aAAa,CAAC,QAAgB,EAAE,SAA8B,EAAA;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,GAAG,SAAS,EAAE;QACpC,OAAO,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,SAAS,EAAE;IACjD;+GAtCS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;MCQY,gBAAgB,CAAA;AA0DzB,IAAA,WAAA,CACY,cAA8B,EAC9B,eAAgC,EAChC,cAAqC,EACrC,cAAqC,EACrC,yBAA2D,EAC3D,iBAA2C,EAC3C,SAAkC,EAClC,aAAmC,EACnC,iBAAoC,EACpC,GAAsB,EAAA;QATtB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QACzB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,GAAG,GAAH,GAAG;AAnEL,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAkI;;AAGnK,QAAA,IAAA,CAAA,WAAW,GAAoD;YACpE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACpE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,wBAAwB,EAAE;SACzF;;QAGM,IAAA,CAAA,eAAe,GAAG,KAAK;QAEvB,IAAA,CAAA,UAAU,GAAwB,IAAI;QACtC,IAAA,CAAA,WAAW,GAAwB,IAAI;;QAGvC,IAAA,CAAA,cAAc,GAA2B,EAAE;QAC3C,IAAA,CAAA,aAAa,GAA4B,EAAE;QAC3C,IAAA,CAAA,cAAc,GAA2B,EAAE;;QAG3C,IAAA,CAAA,kBAAkB,GAA2B,EAAE;;;QAI/C,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,aAAa,GAA2B,EAAE;;QAG1C,IAAA,CAAA,gBAAgB,GAAG,KAAK;QACxB,IAAA,CAAA,aAAa,GAAmC,IAAI;QACpD,IAAA,CAAA,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;;QAE7B,IAAA,CAAA,gBAAgB,GAA0B,IAAI;;QAG9C,IAAA,CAAA,eAAe,GAAmC,IAAI;QAErD,IAAA,CAAA,IAAI,GAAmB,EAAE;;;;;;;;QAWzB,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,cAAc,GAAG,MAAW;AAChC,YAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;AACrC,YAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACnE,QAAA,CAAC;QACO,IAAA,CAAA,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;QACzC,IAAA,CAAA,iBAAiB,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;QAC/C,IAAA,CAAA,qBAAqB,GAAuB,IAAI;IAarD;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAG;AACzC,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YACvB,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAC3B,QAAA,CAAC,CAAC,EACF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAG;AAC1C,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YACvC,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CACL;AAED,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;AAGtE,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;;YAEvC,IAAI,CAAC,cAAc,EAAE;QACzB,CAAC,CAAC,CACL;;QAGD,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CACrE;;;QAID,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACpD,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;gBACvC,IAAI,CAAC,uBAAuB,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;AACtE,gBAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC;YACnD;QACJ;;;;AAKA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,IAAG;YAChD,IAAI,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;AACjF,YAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,YAAA,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5E,CAAC,CAAC,CACL;;QAGD,IAAI,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAI;AACpD,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,EAAE,IAAI,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,EAAE;AACtD,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CACL;IACL;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,uBAAuB,EAAE,UAAU,EAAE;AAC1C,QAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE;AACnC,QAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;QACrC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;QACtD,IAAI,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;AACjF,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;IACrC;;AAGA,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC5B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAClH;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC/G;AAEA,IAAA,QAAQ,CAAC,KAAiB,EAAA;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5G;IAEA,MAAM,CAAC,KAAiB,EAAE,QAAgB,EAAA;QACtC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC5B,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC;IACpH;;AAGA,IAAA,IAAI,OAAO,GAAA;QACP,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI;AACzC,QAAA,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,aAAa;IAC3C;AAEA,IAAA,MAAM,CAAC,KAAiB,EAAA;QACpB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC1G;AAEA,IAAA,aAAa,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACjH;AAEA,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAChC;aAAO;YACH,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,IAAI,EAAE,IAAI,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAA,EAAA,CAAI,EAAE;AAC9E,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC/B;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;AAEA,IAAA,aAAa,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,IAAI,EAAE,IAAI,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAA,EAAA,CAAI,EAAE;AAC9E,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEA,YAAY,CAAC,KAAiB,EAAE,QAA4B,EAAA;QACxD,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC;IAC1H;AAEA,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC5B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAClH;AAEA,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM;IACzD;AAEA,IAAA,IAAI,oBAAoB,GAAA;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ;IAC7C;AAEA,IAAA,IAAI,kBAAkB,GAAA;QAClB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa;AAChD,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI;AACpB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI;IAC1D;AAEA,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ;IAC7C;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI;QACnC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAAE,YAAA,OAAO,KAAK;;QAElE,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACnE;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAChB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ;AAC3C,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI;AACpB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI;IAC1D;AAEA,IAAA,IAAI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,YAAY,IAAI,EAAE;IACrD;AAEA,IAAA,YAAY,CAAC,OAAe,EAAA;AACxB,QAAA,MAAM,MAAM,GAA2B;YACnC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO;AACzD,YAAA,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU;SAC7C;AACD,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO;IACrC;AAEA,IAAA,WAAW,CAAC,OAAe,EAAA;AACvB,QAAA,MAAM,KAAK,GAA2B;AAClC,YAAA,QAAQ,EAAE,0BAA0B,EAAE,aAAa,EAAE,gBAAgB;AACrE,YAAA,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,0BAA0B;AACnE,YAAA,cAAc,EAAE,2BAA2B;SAC9C;AACD,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,sBAAsB;IACnD;AAEA,IAAA,WAAW,CAAC,EAAkB,EAAA;QAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AACrB,QAAA,MAAM,MAAM,GAA2B;AACnC,YAAA,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU;AACtC,YAAA,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW;AACxC,YAAA,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY;AAC9C,YAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW;YAC1C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;AAC5C,YAAA,gBAAgB,EAAE,QAAQ;SAC7B;AACD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI;QAC9C,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,EAAG,KAAK,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE,GAAG,KAAK;IAC/E;AAEA,IAAA,IAAI,oBAAoB,GAAA,EAAc,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7E,IAAA,IAAI,+BAA+B,GAAA,EAAc,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAEnG,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;QAC9B,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAChH;AAEA;;;;;AAKG;IACH,uBAAuB,CAAC,KAAiB,EAAE,EAAmB,EAAA;QAC1D,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,aAAa;AACpC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;QACtH;IACJ;;AAGA,IAAA,mBAAmB,CAAC,KAAiB,EAAA;QACjC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;IAC3B;;AAIA,IAAA,kBAAkB,CAAC,KAAiB,EAAE,IAA6B,EAAE,EAAmB,EAAA;QACpF,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,IAAI,IAAI;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE;AAC1D,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,EAAE;YAChC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa;AAChD,YAAA,IAAI,EAAE;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC;QACA,IAAI,CAAC,cAAc,EAAE;IACzB;IAEA,WAAW,GAAA;AACP,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa;QAC/B,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,IAAI,CAAC,eAAe,GAAG,OAAO;AAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1F;aAAO,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE;AACnD,YAAA,IAAI,CAAC,eAAe,GAAG,aAAa;AACpC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACrG;IACJ;IAEA,wBAAwB,GAAA;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI;AACnC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE;QACrC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAiB,CAAC,EAAE,CAAC;AAC7F,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;AACnE,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC;QACjE,IAAI,CAAC,cAAc,EAAE;IACzB;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;AAEA,IAAA,IAAI,aAAa,GAAA,EAAc,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;AAElE,IAAA,UAAU,CAAC,KAAiB,EAAA;QACxB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI;AACnC,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACvG,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa;AAChD,QAAA,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,aAAa,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7G,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,uBAAuB,CAAC,KAAiB,EAAA;QACrC,KAAK,CAAC,eAAe,EAAE;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,mBAAmB;AACtD,QAAA,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,wBAAwB,CAAC,KAAiB,EAAA;QACtC,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACxH,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,KAAK,iBAAiB;IAC7D;AAEA,IAAA,UAAU,CAAC,KAAiB,EAAA;QACxB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC9G;AAEA,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC5B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAClH;AAEA,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC5B,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAClH;IAEQ,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE;;;AAInC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO;YAAE;;AAGhC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;;;;;AAM/E,QAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;YACvC,IAAI,SAAS,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;gBAC1C,IAAI,SAAS,EAAE;oBAAE,SAAS,GAAG,KAAK;oBAAE;gBAAQ;gBAC5C,IAAI,CAAC,cAAc,EAAE;AACzB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzC;;QAGA,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC;AACjE,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE;AACpC,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AACtC,SAAA,CAAC;IACN;IAEQ,SAAS,GAAA;QACb,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEQ,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,aAAa,GAAI,EAAE;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;YACxB;QACJ;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAC9E,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,qBAAqB,EAAE;;QAE7C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;;;;;;;QAQ9F,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;;;AAI7C,QAAA,MAAM,CAAC,GAAG;AACN,YAAA,GAAG,EAAK,MAAM,CAAC,GAAG,GAAM,KAAK;AAC7B,YAAA,KAAK,EAAG,MAAM,CAAC,KAAK,GAAI,KAAK;AAC7B,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK;AAC7B,YAAA,IAAI,EAAI,MAAM,CAAC,IAAI,GAAK,KAAK;SAChC;AACD,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,GAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK;AACzC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAI,CAAC,CAAC,MAAM;QAE1C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;;QAGvF,IAAI,CAAC,aAAa,GAAG;YACjB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;YACpE,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;SACjF;;AAGD,QAAA,MAAM,KAAK,GAAM,CAAC,MAAM,CAAC,GAAG,GAAM,OAAO,CAAC,GAAG,IAAO,KAAK;AACzD,QAAA,MAAM,OAAO,GAAI,CAAC,MAAM,CAAC,KAAK,GAAI,OAAO,CAAC,KAAK,IAAK,KAAK;AACzD,QAAA,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK;AACzD,QAAA,MAAM,MAAM,GAAK,CAAC,MAAM,CAAC,IAAI,GAAK,OAAO,CAAC,IAAI,IAAM,KAAK;QACzD,IAAI,CAAC,cAAc,GAAG;AAClB,YAAA,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YACpE,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;SAClG;IACL;IAEQ,YAAY,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;YAC5B;QACJ;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAC/E,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,qBAAqB,EAAE;;QAE7C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/F;;AAGQ,IAAA,cAAc,CAAC,GAAW,EAAE,IAAY,EAAE,KAAa,EAAE,MAAc,EAAA;QAC3E,OAAO;YACH,GAAG,EAAK,CAAA,EAAG,GAAG,CAAA,EAAA,CAAI;YAClB,IAAI,EAAI,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI;YACnB,KAAK,EAAG,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAG,CAAC,CAAC,CAAA,EAAA,CAAI;YAClC,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA,EAAA,CAAI;SACrC;IACL;IAEQ,kBAAkB,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,OAAe,EAAE,QAAgB,EAAE,MAAc,EAAA;QAC7G,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC;AACpC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC;;;AAGrC,QAAA,OAAO,CAAA,0BAAA,EAA6B,CAAC,CAAA,QAAA,EAAW,CAAC,CAAA,GAAA,EAAM,CAAC,CAAA,QAAA,EAAW,CAAC,CAAA,aAAA,EAAgB,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,IAAA,EAAO,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,IAAA,EAAO,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,IAAA,EAAO,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,IAAA,EAAO,EAAE,CAAA,GAAA,EAAM,EAAE,KAAK;IAC3K;+GAjiBS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAP,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,qHCrB7B,+wVA8MA,EAAA,MAAA,EAAA,CAAA,ssJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDzLa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,UAAA,EAGX,KAAK,EAAA,eAAA,EACA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+wVAAA,EAAA,MAAA,EAAA,CAAA,ssJAAA,CAAA,EAAA;;sBAG9C;;;MEHQ,gBAAgB,CAAA;AAN7B,IAAA,WAAA,GAAA;AAOa,QAAA,IAAA,CAAA,UAAU,GAAgB,WAAW,CAAC,MAAM;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAe,UAAU,CAAC,OAAO;QAC7C,IAAA,CAAA,UAAU,GAAW,GAAG;QACxB,IAAA,CAAA,iBAAiB,GAAW,IAAI;QAChC,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,UAAU,GAAW,OAAO;AAE3B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAe;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAc;AAC7C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAkB;AAC/C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAU;AAC9C,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAClC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;QAW3C,IAAA,CAAA,KAAK,GAAG,WAAW;QACnB,IAAA,CAAA,WAAW,GAAG,UAAU;QACxB,IAAA,CAAA,aAAa,GAAG,cAAc;QAC9B,IAAA,CAAA,WAAW,GAAG,YAAY;QAC1B,IAAA,CAAA,kBAAkB,GAAwB,oBAAoB;AAmFxE,IAAA;AAhGG,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,WAAW;IAC1C;AAaA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,UAAU;AACnB,YAAA,KAAK,WAAW,CAAC,MAAM,EAAE,OAAO,mBAAmB;AACnD,YAAA,KAAK,WAAW,CAAC,KAAK,EAAG,OAAO,8BAA8B;AAC9D,YAAA,KAAK,WAAW,CAAC,GAAG,EAAK,OAAO,iBAAiB;AACjD,YAAA,SAAyB,OAAO,mBAAmB;;IAE3D;AAEA,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,QAAQ,IAAI,CAAC,UAAU;AACnB,YAAA,KAAK,WAAW,CAAC,MAAM,EAAE,OAAO,QAAQ;AACxC,YAAA,KAAK,WAAW,CAAC,KAAK,EAAG,OAAO,OAAO;AACvC,YAAA,KAAK,WAAW,CAAC,GAAG,EAAK,OAAO,KAAK;AACrC,YAAA,SAAyB,OAAO,QAAQ;;IAEhD;AAEA,IAAA,IAAI,kBAAkB,GAAA;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9F;AAEA,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,UAAU,GAAG;IAChC;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD;;AAGA,IAAA,iBAAiB,CAAC,KAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,UAAU,CAAC,IAAiB,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IAC3B;;AAGA,IAAA,mBAAmB,CAAC,KAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;IACpC;AAEA,IAAA,YAAY,CAAC,IAAgB,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;AAGA,IAAA,cAAc,CAAC,KAAY,EAAA;QACvB,MAAM,KAAK,GAAG,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK;AACvD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;;AAGA,IAAA,kBAAkB,CAAC,KAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC;IACnC;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QACtC;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC5B;;AAGA,IAAA,iBAAiB,CAAC,KAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,UAAU,CAAC,KAAqB,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IAC3B;+GAnHS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,o5BCnB7B,02NA2IA,EAAA,MAAA,EAAA,CAAA,4oHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDxHa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,02NAAA,EAAA,MAAA,EAAA,CAAA,4oHAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAMA,SAAS;uBAAC,aAAa;;sBACvB,SAAS;uBAAC,eAAe;;sBACzB,SAAS;uBAAC,aAAa;;sBACvB,SAAS;uBAAC,cAAc;;;MEXhB,kBAAkB,CAAA;IAwB3B,WAAA,CACY,QAAkC,EAClC,cAA8B,EAAA;QAD9B,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,cAAc,GAAd,cAAc;QAzBjB,IAAA,CAAA,MAAM,GAAoB,EAAE;QAC5B,IAAA,CAAA,cAAc,GAAoB,EAAE;AACnC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAiB;AAC9C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA+C;AAC5E,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ;QAEtC,IAAA,CAAA,QAAQ,GAAe,EAAE;QACzB,IAAA,CAAA,cAAc,GAAe,EAAE;QAC/B,IAAA,CAAA,cAAc,GAAkB,IAAI;QACpC,IAAA,CAAA,aAAa,GAAkB,IAAI;QAEnC,IAAA,CAAA,aAAa,GAAkB,IAAI;QACnC,IAAA,CAAA,YAAY,GAAG,EAAE;QAEjB,IAAA,CAAA,aAAa,GAAsB,MAAM;;AAGxC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAkB;;QAGnC,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,UAAU,GAAG,EAAE;AAsJf,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAmB;IAjJ/C;IAEH,QAAQ,GAAA;QACJ,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAG;YAC3D,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI;AACjD,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE;IACjC;;IAGA,SAAS,GAAA;QACL,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;AAC/C,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,UAAU,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,EAAE;AAC1D,YAAA,IAAI,CAAC,UAAU,GAAG,GAAG;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;YAC3B,IAAI,CAAC,OAAO,EAAE;QAClB;IACJ;;AAGQ,IAAA,GAAG,CAAC,KAAsB,EAAA;QAC9B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IACd,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAClF,CAAC,IAAI,CAAC,GAAG,CAAC;IACf;AAEA,IAAA,WAAW,CAAC,QAAkB,EAAA;AAC1B,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;QAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,cAAc,CAAC,SAAS,CACzB,GAAG,CAAC,OAAO,EACX,IAAI,CAAC,IAAI,EACT,WAAW,CAAC,MAAM,EAClB,IAAI,EACJ,GAAG,CAAC,YAAY,CACnB;;AAED,YAAA,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACxE;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;AAEA,IAAA,gBAAgB,CAAC,QAAkB,EAAA;QAC/B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;QACzD,IAAI,GAAG,EAAE;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;QACrF;IACJ;IAEA,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;IACpC;IAEA,YAAY,CAAC,QAAkB,EAAE,KAAiB,EAAA;QAC9C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,QAAQ,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC,QAAQ;QACtC,IAAI,CAAC,OAAO,EAAE;IAClB;IAEA,YAAY,CAAC,QAAkB,EAAE,KAAiB,EAAA;QAC9C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC5E;IAEA,eAAe,CAAC,QAAkB,EAAE,KAAiB,EAAA;QACjD,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/E;IAEA,WAAW,CAAC,QAAkB,EAAE,KAAiB,EAAA;QAC7C,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI;QAC7C,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;IACjD;AAEA,IAAA,UAAU,CAAC,QAAkB,EAAA;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QACpC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,SAAS;AACtC,QAAA,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI;AAC1D,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;IAC1B;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;IAC1B;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,KAA8B,EAAA;AACrC,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,YAAY;YAAE;QAEhD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;AAC1D,QAAA,IAAI,CAAC,eAAe;YAAE;QAEtB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;AACxD,QAAA,IAAI,CAAC,cAAc;YAAE;;AAGrB,QAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW;AAC5C,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,aAAa;AAC5C,QAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;;;AAI1B,QAAA,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW;AAC5C,QAAA,IAAI,OAAO,GAAG,cAAc,CAAC,aAAa;;;;QAK1C,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,GAAG,OAAO,EAAE;AAC5C,YAAA,OAAO,EAAE;QACb;QAEA,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC;;QAGlD,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACxB;;;IAKQ,YAAY,GAAA;QAChB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;AACxC,YAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;AACnC,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,iBAAiB,CAAC;QACpE;IACJ;IAIQ,OAAO,GAAA;;AAEX,QAAA,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE;AACzD,YAAA,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE;AACZ,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC;YACnD;QACJ;QACA,MAAM,IAAI,GAAe,EAAE;QAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QAEpB,MAAM,UAAU,GAAe,EAAE;QACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,UAAU,CAAC;AACpD,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU;IACpC;AAEQ,IAAA,WAAW,CAAC,KAAsB,EAAE,KAAa,EAAE,GAAe,EAAE,SAA2B,EAAA;AACnG,QAAA,MAAM,GAAG,GAAG,SAAS,IAAI,KAAK;AAC9B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,MAAM,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI;AAC3E,YAAA,MAAM,QAAQ,GAAa;gBACvB,IAAI;AACJ,gBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB;AACtD,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI;gBAC9B,KAAK;gBACL,QAAQ;gBACR,WAAW;AACX,gBAAA,WAAW,EAAE,GAAG;AAChB,gBAAA,aAAa,EAAE,CAAC;aACnB;AACD,YAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClB,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;AAC3B,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC;YAClE;QACJ;IACJ;+GAnNS,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAApB,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAK,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,kOCnC/B,4kKAsGA,EAAA,MAAA,EAAA,CAAA,4pJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDnEa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,4kKAAA,EAAA,MAAA,EAAA,CAAA,4pJAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;;MEVQ,gBAAgB,CAAA;;AAuFzB,IAAA,uBAAuB,CAAC,IAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IAC3B;AACA,IAAA,yBAAyB,CAAC,MAAkB,EAAA;AACxC,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IAC/B;AACA,IAAA,uBAAuB,CAAC,KAAqB,EAAA;AACzC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,8BAA8B,CAAC,KAAa,EAAA;AACxC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,eAAe,EAAE;IAC1B;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,KAAK,QAAQ,CAAC;IACzE;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,KAAK,OAAO,CAAC;IACxE;;AAGA,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK;IAChD;;AAGA,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,MAAM;IACjD;AAEA;AAC6E;AAC7E,IAAA,IAAI,mBAAmB,GAAA;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IAC7C;AAEA;;AAEiE;AACjE,IAAA,IAAI,iBAAiB,GAAA;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK;AAC/C,QAAA,MAAM,KAAK,GAAa,CAAC,kBAAkB,CAAC;QAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,CAAA,UAAA,EAAa,IAAI,CAAC,IAAI,CAAA,IAAA,EAAO,IAAI,CAAC,IAAI,CAAA,GAAA,CAAK,CAAC;QAC/F,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,CAAA,CAAG,CAAC;AACtC,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEA;;;;AAIG;AACH,IAAA,IAAI,mBAAmB,GAAA;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;IACnD;;AAGA,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,MAAM;IACjD;IAKA,WAAA,CACY,QAAkC,EAClC,cAA8B,EAC9B,iBAAoC,EACpC,UAA6B,EAC7B,UAAqC,EACrC,eAAgC,EAChC,iBAA2C,EAC3C,yBAA2D,EAC3D,SAAkC,EAClC,cAAqC,EACrC,GAAsB,EACtB,MAAsB,EACtB,cAAqC,EACrC,aAAmC,EAAA;QAbnC,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QACzB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,aAAa,GAAb,aAAa;AA3KjB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAE3C;;;;;;AAMG;AACc,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,MAAK;YACzC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM;gBAAE;YACrC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,IAAI;gBAAE;AACpB,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC;AACtF,QAAA,CAAC,oFAAC;QAEO,IAAA,CAAA,MAAM,GAAoB,EAAE;QAC5B,IAAA,CAAA,WAAW,GAAoB,EAAE;QACjC,IAAA,CAAA,KAAK,GAAG,SAAS;QACjB,IAAA,CAAA,WAAW,GAAU,EAAE;QACvB,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,UAAU,GAAW,OAAO;QAC5B,IAAA,CAAA,YAAY,GAAwB,IAAI;QACxC,IAAA,CAAA,cAAc,GAAoB,EAAE;QACpC,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAG,KAAK;AACxB;;AAEkE;QACzD,IAAA,CAAA,YAAY,GAAG,KAAK;AACnB,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAClC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;AACxC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAgB;AACrD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAA8B;AACpE,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAyC;AACrE,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAmB;QAM7D,IAAA,CAAA,UAAU,GAAU,EAAE;AACtB,QAAA,IAAA,CAAA,WAAW,GAAW,UAAU,CAAC,MAAM;QACvC,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,UAAU,GAAG,UAAU;AACvB,QAAA,IAAA,CAAA,UAAU,GAAgB,WAAW,CAAC,MAAM;QAC5C,IAAA,CAAA,YAAY,GAAG,WAAW;AAC1B,QAAA,IAAA,CAAA,YAAY,GAAe,UAAU,CAAC,OAAO;QAC7C,IAAA,CAAA,UAAU,GAAW,GAAG;QACxB,IAAA,CAAA,iBAAiB,GAAW,IAAI;QAChC,IAAA,CAAA,YAAY,GAAyB,IAAI;QACzC,IAAA,CAAA,UAAU,GAAG,KAAK;AAClB,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,CAAC;AACnB,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,CAAC;QACtB,IAAA,CAAA,kBAAkB,GAAG,KAAK;AAC1B,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAC;QACvB,IAAA,CAAA,aAAa,GAA+C,YAAY;QACxE,IAAA,CAAA,mBAAmB,GAAG,KAAK;QAC3B,IAAA,CAAA,aAAa,GAAG,EAAE;QACjB,IAAA,CAAA,gBAAgB,GAAyB,IAAI;QAC9C,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,IAAI,GAAG,CAAC;AACf;;AAE8D;QACvD,IAAA,CAAA,iBAAiB,GAAG,CAAC;QACpB,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,YAAY,GAAG,CAAC;QAMhB,IAAA,CAAA,mBAAmB,GAAG,CAAC;AAqR/B;;;;;;;AAOG;AACc,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAC,KAAiB,KAAU;AACjE,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B;AACjD,YAAA,IAAI,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;gBAAE,KAAK,CAAC,cAAc,EAAE;AAC5D,QAAA,CAAC;QA4hBO,IAAA,CAAA,eAAe,GAAyC,IAAI;IAnuBjE;IAEH,QAAQ,GAAA;QACJ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;QACxC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QACzD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,UAAsB,KAAK,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAC3G,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAU,KAAI;AAC9D,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAmB,KAAI;AACzE,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;QAC5E,CAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;AAC1E,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAG;AAC7D,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM;AAChC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;AAC/C,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,KAAK;YACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACrC,IAAI,CAAC,eAAe,EAAE;;;AAGtB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;;;YAGpB,UAAU,CAAC,MAAK,EAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AAClG,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;;;YAGzB,IAAI,CAAC,SAAS,EAAE;QACpB;AACA,QAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE;;;YAG3B,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C;IACJ;IAEA,eAAe,GAAA;QACX,IAAI,CAAC,eAAe,EAAE;;;AAGtB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE;AACtC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YACtE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;QACpE;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,IAAI,IAAI,CAAC;;;;;AAK3E,QAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,IAAI,IAAI,CAAC;;;AAGnF,QAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,IAAI,IAAI,CAAC;;QAGrF,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAE;QAC3D,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAC5B,gBAAgB,EAChB,QAAQ,EACR,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,GAAG,EACR,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAC5B;;;YAGD,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,IAAG;AACzC,gBAAA,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC;AAC7C,gBAAA,IAAI,CAAC,KAAK,IAAI,CAAC,mBAAmB,EAAE;AAChC,oBAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC;AAC5B,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,oBAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;gBACxB;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnC;;;;;;;;;;;AAYA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa;QACnD,IAAI,SAAS,EAAE;YACX,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC;YACrE,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC;QAC5E;QAEA,IAAI,CAAC,SAAS,EAAE;;;;QAKhB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE;AACxD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CACpB,IAAI,CAAC,aAAa,CAAC,aAAa,EAChC,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EACrC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CACrE;;YAED,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;AACpH,YAAA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAG;AACxD,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC;YAC3E,CAAC,CAAC,CAAC;;;;YAKH,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;AAC1D,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa;YAClD,IAAI,QAAQ,EAAE;gBACV,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;gBACvD,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,QAAQ,KAAI;AACvC,oBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC;AAAE,wBAAA,OAAO;AACtD,oBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,wBAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;oBACzE;yBAAO;AACH,wBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;wBACjC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;oBAC1C;AACJ,gBAAA,CAAC;YACL;QACJ;QAEA,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACxC;AAEA;;;;AAIG;AACK,IAAA,oBAAoB,CAAC,KAAsB,EAAE,IAAyB,EAAE,QAA6B,EAAA;AACzG,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE;AAC5B,YAAA,IAAI,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;AACjC,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY;gBAC9D,IAAI,GAAG,EAAE;oBACL,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE;wBACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;4BAAE;wBACnC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;wBACvC,IAAI,UAAU,IAAI,IAAI;4BAAE;wBACxB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU;wBAC7E,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,EAAG,OAAe,CAAC,KAAK,CAAC;AAC5D,wBAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;4BAAE,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;oBACrF;gBACJ;YACJ;AACA,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM;gBAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC;QACvF;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;AACvB,QAAA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;QAC5B,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE;AAC3B,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC5C,QAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;QAC1D,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,QAAQ,CAAC;QAClE;AACA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa;QACnD,IAAI,SAAS,EAAE;YACX,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC;YACxE,SAAS,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC;QAC/E;IACJ;AAeA;;;;;;;;;AASG;IACK,eAAe,GAAA;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,aAAa;AAC/C,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;QAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK;AAC5C,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,MAAM,GAAG,GAAG,IAAI;QACjC,MAAM,KAAK,GAAG,CAAA,EAAG,KAAK,CAAC,KAAK,GAAG,GAAG,CAAA,EAAA,CAAI;QACtC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC;QAC3C,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC;;AAE3C,QAAA,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC;AAC9E,QAAA,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC;QAC9E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC/C;IAEQ,SAAS,GAAA;QACb,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa;YAAE;AAEnF,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC;AACnB,YAAA,OAAO,EAAU,IAAI,CAAC,gBAAgB,CAAC,aAAa;AACpD,YAAA,OAAO,EAAU,IAAI,CAAC,eAAe,CAAC,aAAa;AACnD,YAAA,YAAY,EAAK,IAAI,CAAC,gBAAgB,CAAC,aAAa;AACpD,YAAA,IAAI,EAAa,CAAC,EAAE,IAAI,IAAe,GAAG;AAC1C,YAAA,eAAe,EAAE,CAAC,EAAE,eAAe,IAAI,CAAC;AACxC,YAAA,eAAe,EAAE,CAAC,EAAE,eAAe,IAAI,CAAC;AACxC,YAAA,WAAW,EAAM,CAAC,EAAE,SAAS,IAAU,UAAU;AACjD,YAAA,QAAQ,EAAS,CAAC,EAAE,QAAQ,IAAW,KAAK;YAC5C,UAAU,EAAO,KAAK;AACzB,SAAA,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAe,KAAI;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAiB,CAAC,aAAa,CAAC,YAAY;YACjE,IAAI,CAAC,YAAY,CAAC;gBACd,SAAS,EAAS,QAAQ,CAAC,MAAM;AACjC,gBAAA,YAAY,EAAM,QAAQ,CAAC,KAAK,GAAG,OAAO;AAC1C,gBAAA,YAAY,EAAM,OAAO;AACzB,gBAAA,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,GAAG,GAAG;AAC5C,aAAA,CAAC;;;;AAIF,YAAA,IAAI,CAAC,eAAgB,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;;;AAGtE,YAAA,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE;;;;AAIrC,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AACjC,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,GAAG,GAAG,CAAC,IAAY,KAAI;AACzB,YAAA,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC;AAChD,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC;IAChD;IAEQ,YAAY,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;AAAE,YAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;AAClE,QAAA,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;IAC/B;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE;YACT;QACJ;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5B;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK;AAEtC,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;AAC7B,YAAA,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;AAClC,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;AACvD,gBAAA,IAAI,CAAC,MAAM;oBAAE;gBACb,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC;AAC1C,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YACjC;iBAAO;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAqB,CAAC;gBACrE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAChC;AACA,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;YACxE;QACJ;AAEA,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAqB;AAE1C,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,cAAc,EAAE;;;;YAIrC,MAAM,IAAI,GAAG,IAAW;YACxB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI;YAC5F,MAAM,QAAQ,IAAmB,UAAU,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAkB;YAClF,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;YAChD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,EAAE;AACrC,gBAAA,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAClC;YACA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;YACxE;QACJ;QAEA,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,gBAAgB,EAAE;;AAE3D,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC5D,IAAI,UAAU,EAAE;gBACZ,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;AACvC,gBAAA,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;AACf,oBAAA,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5B,oBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE;gBAC7D;YACJ;YACA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;YACxE;QACJ;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5C,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACnB,YAAA,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW;YAC5E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;QAC5E;IACJ;AAEA,IAAA,YAAY,CAAC,IAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,IAAI,KAAK,WAAW,CAAC,GAAG,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;QACpC;aAAO;;AAEH,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACjB;IACJ;AAEA,IAAA,cAAc,CAAC,MAAkB,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,eAAe,EAAE;IAC1B;AAEA,IAAA,YAAY,CAAC,KAAqB,EAAA;AAC9B,QAAA,IAAI,KAAK,KAAK,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;YACb,IAAI,CAAC,eAAe,EAAE;QAC1B;aAAO;YACH,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC;QAC9C;IACJ;;AAIA,IAAA,gBAAgB,CAAC,KAAiB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG;YAAE;AACzC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI;QAC3B,KAAK,CAAC,cAAc,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;AAC9D,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;IAClE;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IAC1B;IAEQ,eAAe,GAAA;AACnB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa;AACnD,QAAA,IAAI,CAAC,SAAS;YAAE;;QAEhB,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IAC9D;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,cAAc,GAAG,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC;IACtH;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG;YAAE;AACzC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI;QAC9B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC;AAC9G,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC;IAC3D;AAEQ,IAAA,gBAAgB,CAAC,IAAmB,EAAA;;;QAGxC,UAAU,CAAC,MAAK;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;AAChD,YAAA,IAAI,CAAC,GAAG;gBAAE;AACV,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC;AAC9F,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;YACnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC;AACnD,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,gBAAgB,CAAC,KAAU,EAAA;QACvB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG;YAAE;AAC5D,QAAA,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;IACjF;IAEA,gBAAgB,GAAA;QACZ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG;YAAE;AAC5D,QAAA,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;IACrF;IAEA,iBAAiB,GAAA;;AAEb,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACrC;AAEA,IAAA,gBAAgB,CAAC,IAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC;QACnD;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;IACvC;AAEA,IAAA,gBAAgB,CAAC,KAAkD,EAAA;AAC/D,QAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK;;AAG9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAChE,QAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AAClB,YAAA,IAAI,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;gBAC9B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AACxC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AACxD,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,gBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YACrC;YACA;QACJ;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AACrD,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;QAC5E;AAAO,aAAA,IAAI,MAAM,KAAK,UAAU,CAAC,SAAS,EAAE;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5C,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAChD,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;QAC5E;IACJ;IAEA,cAAc,GAAA;;;AAGV,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACrC;;AAGA,IAAA,eAAe,CAAC,KAAqI,EAAA;AACjJ,QAAA,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK;AAC/B,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;AACvB,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,QAAQ,MAAM;AACV,YAAA,KAAK,aAAa,CAAC,MAAM,EAAE;gBACvB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBACvG,IAAI,MAAM,EAAE;oBACR,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACrC,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,SAAS,EAAE;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBACvG,IAAI,MAAM,EAAE;oBACR,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5C,oBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAChD,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;AACrB,gBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;AAC/B,gBAAA,IAAI,CAAC,QAAQ;oBAAE;gBACf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAyB;AAC5E,gBAAA,IAAI,CAAC,OAAO;oBAAE;;;AAGd,gBAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;gBAClD,IAAI,QAAQ,GAAG,KAAK;gBACpB,IAAI,CAAC,OAAO,EAAE;oBACV,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC;AACtD,oBAAA,QAAQ,GAAG,CAAC,CAAC,OAAO;gBACxB;gBACA,IAAI,OAAO,EAAE;AACT,oBAAA,IAAI,QAAQ;AAAE,wBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AACtE,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;;AAGxB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC9B,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;AACxE,oBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;gBAClC;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;AACrB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;gBACnC;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,WAAW,EAAE;AAC5B,gBAAA,MAAM,UAAU,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAClE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AAClC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU;AAClC,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;gBAC/B;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,YAAY,EAAE;gBAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBAC3G,IAAI,UAAU,EAAE;oBACZ,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC;oBACtD,IAAI,GAAG,EAAE;AACL,wBAAA,IAAI,CAAC,YAAY,GAAG,UAAU;wBAC9B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC;wBAC1G,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC;oBACzD;gBACJ;qBAAO;AACH,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;gBACrC;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,UAAU,EAAE;AAC3B,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;gBACrD,IAAI,MAAM,EAAE;oBACR,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACrC,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;oBACpB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,QAAQ,IAAI,QAAQ;AAChD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AACxD,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,YAAY,EAAE;gBAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAChE,gBAAA,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;oBACZ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AAClC,oBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,oBAAA,IAAI,CAAC,cAAc,GAAG,SAAS;AAC/B,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACtB,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AACxD,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACjC,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,UAAU,EAAE;AAC3B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;gBAC5E,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACvB,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,cAAc,GAAG,eAAe,CAAC,UAAU,EAC9E,UAAU,CAAC,MAAM,CACpB;gBACD;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,qBAAqB,EAAE;;AAEtC,gBAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC1B,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE,IAAI,CAAC,mBAAmB,CAAC;gBAClG;gBACA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACvB,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,cAAc,GAAG,eAAe,CAAC,UAAU,EAC9E,UAAU,CAAC,YAAY,CAC1B;;;AAGD,gBAAA,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE;AACvB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvF;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,WAAW,EAAE;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;gBAC7C,IAAI,QAAQ,EAAE;AACV,oBAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;AAC7B,oBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACzF,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,sBAAsB,EAAE;gBACvC,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE;gBACnE,IAAI,mBAAmB,EAAE;AACrB,oBAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;oBAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,mBAAmB,CAAC;AAC5E,oBAAA,IAAI,MAAM;AAAE,wBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC/E,oBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC;AACpC,oBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC5E;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,YAAY,EAAE;AAC7B,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ;AACrC,gBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBACxE;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,YAAY,EAAE;AAC7B,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB;AACrC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACjC,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,QAAS,CAAC;gBAC5D,IAAI,MAAM,EAAE;oBACR,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,MAAM,CAAC;gBACxE;AACA,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBACxE;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;AACrB,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC7B;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,KAAK,EAAE;gBACtB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC3C,gBAAA,IAAI,CAAC,UAAU;oBAAE;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;gBAClD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBACvG,IAAI,MAAM,EAAE;AACR,oBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;gBACpD;qBAAO;AACH,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC3B;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBACxE;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,QAAQ,EAAE;gBACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAAE;gBACnC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC;AACvD,gBAAA,IAAI,CAAC,KAAK;oBAAE;gBACZ,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;gBACzC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;AAChD,gBAAA,IAAI,GAAG,EAAE,YAAY,EAAE;oBACnB,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;AACpD,oBAAA,GAAG,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;gBACtD;AACA,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;gBACxE;YACJ;;IAER;IAEA,gBAAgB,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE;QAC1D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACrF,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;IAChC;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;IAChC;AAEQ,IAAA,mBAAmB,CAAC,IAAmB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;;QAG7D,iBAAiB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACnD,QAAA,OAAO,KAAK;IAChB;AAEQ,IAAA,iBAAiB,CAAC,IAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;AAC/B,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC1D;AAIA,IAAA,YAAY,CAAC,KAAmG,EAAA;AAC5G,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY;AACnC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY;AACnC,QAAA,IAAI,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B;QACJ;;AAEA,QAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,EAAE;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC;;AAEzD,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,IAAI,IAAI,GAAG,KAAK,CAAC,gBAAgB,GAAG;cACrE,KAAK,CAAC,SAAS,IAAI,QAAQ,GAAG,QAAQ,CAAC;QAC7C,MAAM,QAAQ,GAAG,QAAQ,IAAI,MAAM,GAAG,MAAM,CAAC;AAC7C,QAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;AAC9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;;;;AAI9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,SAAS;AACzC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAEvB,IAAI,IAAI,CAAC,eAAe;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAC5D,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAK;AACnC,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B,CAAC,EAAE,IAAI,CAAC;IACZ;IAEQ,cAAc,CAAC,MAAqB,EAAE,QAAyB,EAAA;AACnE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;gBACxB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;YACzC;AACA,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACtB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAS,CAAC;AAChE,gBAAA,IAAI,KAAK;AAAE,oBAAA,OAAO,KAAK;YAC3B;QACJ;AACA,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,cAAc,CAAC,MAAqB,EAAE,QAAyB,EAAE,MAAsB,EAAA;AAC3F,QAAA,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;YAC1B,IAAI,KAAK,KAAK,MAAM;gBAAE,OAAO,MAAM,IAAI,IAAI;AAC3C,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAChB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;AAChE,gBAAA,IAAI,KAAK;AAAE,oBAAA,OAAO,KAAK;YAC3B;QACJ;AACA,QAAA,OAAO,IAAI;IACf;;IAGQ,oBAAoB,CAAC,MAAqB,EAAE,KAAsB,EAAA;AACtE,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,IAAI,IAAI,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI;AACvD,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACrE,IAAI,IAAI,CAAC,QAAQ;AAAE,oBAAA,OAAO,IAAI;gBAC9B,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;YAC3D;QACJ;AACA,QAAA,OAAO,IAAI;IACf;AAEA;;AAEqF;IAC7E,sBAAsB,CAAC,MAAqB,EAAE,KAAsB,EAAA;AACxE,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,IAAI,IAAI,KAAK,MAAM;AAAE,gBAAA,OAAO,IAAI;AAChC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACrE,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ;AACjD,wBAAC,IAAI,CAAC,IAAI,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;YACnD;QACJ;AACA,QAAA,OAAO,IAAI;IACf;AAEA;;AAE8C;AACtC,IAAA,mBAAmB,CAAC,IAAmB,EAAA;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM;eAC7C,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;AACvE,QAAA,IAAI,CAAC,QAAQ;YAAE;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC;QACnD,GAAG,EAAE,YAAY,EAAE,QAA6C,EAAE,eAAe,IAAI;IAC1F;;IAGQ,kBAAkB,CAAC,IAAmB,EAAE,YAAiB,EAAA;QAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM;eAC3C,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;QAC3E,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM;eAC/C,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;;;QAG7E,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;AACvG,QAAA,MAAM,aAAa,GAAG,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI;QAClE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC;IACxI;AAEA;;AAE6B;AACrB,IAAA,eAAe,CAAC,IAAmB,EAAA;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,MAAM,CAAC;AACpF,QAAA,MAAM,YAAY,GAAG,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;AACxE,QAAA,IAAI,YAAY,EAAE,OAAO,IAAI,IAAI;YAAE,OAAO,YAAY,CAAC,OAAO;QAC9D,OAAO,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,IAAI,OAAO;IACtD;AAEQ,IAAA,iBAAiB,CAAC,UAAsB,EAAA;QAC5C,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,WAAW,EAAE;AACjD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB;QACJ;QAEA,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,UAAU,EAAE;AAChD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QAC3B;IACJ;+GA7gCS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAArB,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAK,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAiB,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,8jCC9B7B,kwSAkLM,EAAA,MAAA,EAAA,CAAA,skKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDpJO,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,kwSAAA,EAAA,MAAA,EAAA,CAAA,skKAAA,CAAA,EAAA;;sBAoBhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAIA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA,SAAS;uBAAC,eAAe;;sBACzB,SAAS;uBAAC,eAAe;;sBACzB,SAAS;uBAAC,cAAc;;sBACxB,SAAS;uBAAC,eAAe;;;AE9D9B;;;;;;AAMG;MAuDU,gBAAgB,CAAA;AAUzB,IAAA,WAAA,CACY,KAA8B,EAC9B,UAA6B,EAC7B,GAAsB,EAAA;QAFtB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QAZN,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;AAEd,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;IAMjD;IAEH,QAAQ,GAAA;;AAEJ,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAC5B,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,CAAC,aAAa,EACxB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,GAAG,EACR,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAC5B;IACL;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IACjF;AAEA,IAAA,IAAI,eAAe,GAAA;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,aAAa,EAAE;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;YACzC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,aAAa;AAAE,gBAAA,OAAO,YAAY;QAC3E;AACA,QAAA,OAAO,UAAU;IACrB;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/E;+GA1CS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAjC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,gGAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApDf;;;;;;;;;;;;;;AAcT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2iBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAsCQ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAtD5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,QAAA,EACtB;;;;;;;;;;;;;;KAcT,EAAA,IAAA,EACK;AACF,wBAAA,SAAS,EAAE,gGAAgG;AAC9G,qBAAA,EAAA,UAAA,EAiCW,KAAK,EAAA,MAAA,EAAA,CAAA,2iBAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;ACrEL;;;;;;;AAOG;MA8DU,yBAAyB,CAAA;AAalC,IAAA,WAAA,CACY,KAA8B,EAC9B,UAA6B,EAC7B,GAAsB,EAAA;QAFtB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QAfN,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,OAAO,GAAW,KAAK;QACvB,IAAA,CAAA,KAAK,GAAW,CAAC;QACjB,IAAA,CAAA,QAAQ,GAAY,KAAK;AAExB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;IAMjD;IAEH,QAAQ,GAAA;;AAEJ,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAC5B,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,CAAC,aAAa,EACxB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,GAAG,EACR,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAC5B;IACL;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IACjF;AAEA,IAAA,IAAI,eAAe,GAAA;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,aAAa,EAAE;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;YACzC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,aAAa;AAAE,gBAAA,OAAO,YAAY;QAC3E;AACA,QAAA,OAAO,UAAU;IACrB;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/E;+GA7CS,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAlC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,2MAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,kGAAA,EAAA,YAAA,EAAA,gDAAA,EAAA,eAAA,EAAA,0CAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3DxB;;;;;;;;;;;;;;;;;AAiBT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mjBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FA0CQ,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA7DrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2MAA2M,EAAA,QAAA,EAC3M;;;;;;;;;;;;;;;;;KAiBT,EAAA,IAAA,EACK;AACF,wBAAA,SAAS,EAAE,kGAAkG;AAC7G,wBAAA,cAAc,EAAE,gDAAgD;AAChE,wBAAA,iBAAiB,EAAE,0CAA0C;AAChE,qBAAA,EAAA,UAAA,EAmCW,KAAK,EAAA,MAAA,EAAA,CAAA,mjBAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MCrFQ,oBAAoB,CAAA;AAO7B,IAAA,WAAA,CACY,EAA2B,EAC3B,UAA6B,EAC7B,GAAsB,EAAA;QAFtB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QATN,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,eAAe,GAAoB,EAAE;AAGpC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAgB;IAMjD;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAC5B,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,EAAE,CAAC,aAAa,EACrB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,GAAG,EACR,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAC/B,IAAI,CAAC,mBAAmB,CAC3B;IACL;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;IACjF;+GA1BS,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAlC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApB,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;sBAEI;;sBACA;;sBAEA;;sBACA;;;MCqEQ,+BAA+B,CAAA;AAiBxC,IAAA,WAAA,CACY,UAA6B,EAC7B,GAAsB,EACtB,KAA8B,EACE,SAAkB,EAAA;QAHlD,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,KAAK,GAAL,KAAK;QAC2B,IAAA,CAAA,SAAS,GAAT,SAAS;QApB5C,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;QAEf,IAAA,CAAA,QAAQ,GAAwB,UAAU;QAC1C,IAAA,CAAA,GAAG,GAAG,UAAU;QAChB,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,MAAM,GAA4C,OAAO;AAExD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;QAE5C,IAAA,CAAA,qBAAqB,GAAG,CAAC,CAAa,KAAK,CAAC,CAAC,cAAc,EAAE;IAOlE;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC;QACxF;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC;QAC3F;IACJ;AAEA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,GAAG,IAAI,GAAG;AACpD,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,GAAG;IAChC;AAEA,IAAA,IAAI,eAAe,GAAA;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,aAAa,EAAE;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;YACzC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,aAAa;AAAE,gBAAA,OAAO,YAAY;QAC3E;AACA,QAAA,OAAO,UAAU;IACrB;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/E;AApDS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,2GAqBhB,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AArBzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,GAAA,EAAA,KAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhE9B;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2sBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAsCQ,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAlE3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAAA,QAAA,EAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,IAAA,CAAA,EAAA,UAAA,EAoCW,KAAK,EAAA,MAAA,EAAA,CAAA,2sBAAA,CAAA,EAAA;;0BAuBZ;;0BAAY,MAAM;2BAAC,UAAU;;sBApBjC;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;ACrFL;;;;;;;;AAQG;AACG,SAAU,iBAAiB,CAAC,KAAsB,EAAE,IAAS,EAAA;AAC/D,IAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;;QAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE;AAErC,QAAA,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAA,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;AAElD,QAAA,KAAK,CAAC,OAAO,GAAG,KAAK;;;;AAIpB,QAAA,KAAa,CAAC,cAAc,GAAG,IAAI;QAEpC,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,EAAE;AAChC,YAAA,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAwB,EAAE;gBAClD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;AAC7C,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;oBACrB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE;wBACpC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;AAC7B,4BAAA,KAAK,CAAC,OAAO,GAAG,KAAK;wBACzB;oBACJ;gBACJ;YACJ;QACJ;AAEA,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;YACxB,KAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;QAC5D;AAEA,QAAA,OAAO,KAAK;AAChB,IAAA,CAAC,CAAC;AACN;;ACpCA;;;;AAIG;MACU,yBAAyB,GAAG,IAAI,cAAc,CAAsB,2BAA2B;AAE5G;;;;;;;;;;AAUG;MAEU,wBAAwB,CAAA;IAEjC,WAAA,CACY,IAAgB,EAC+B,SAAqC,EAAA;QADpF,IAAA,CAAA,IAAI,GAAJ,IAAI;QAC2C,IAAA,CAAA,SAAS,GAAT,SAAS;IACjE;;IAGH,IAAI,YAAY,GAAA,EAAc,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEvD;;;;;;;;;;AAUG;AACH,IAAA,KAAK,CAAC,EAA6B,EAAA;AAC/B,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AAExB,QAAA,MAAM,IAAI,GAAG,cAAc,CAAC,EAAS,CAAC;AACtC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QAChD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QAE5D,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;AAC7D,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AAE7B,QAAA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI;;;QAG9D,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,KAAK;eACrB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI;cAC/C,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAC5C,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAC7B;IACL;;AAGA,IAAA,UAAU,CAAC,EAA6B,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;IACtC;AAEA;;;;AAIG;IACH,kBAAkB,CAAC,EAA6B,EAAE,UAAmB,EAAA;QACjE,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IACrF;AAEA;;;;;;;;;;AAUG;IACH,YAAY,CAAC,KAAa,EAAE,WAAqD,EAAA;AAC7E,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE;AACvB,YAAA,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO;YAC7B,IAAI,CAAC,CAAC,EAAE,IAAI;AAAE,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AAC7B,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QACtG;AACA,QAAA,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE;AACxB,YAAA,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,QAAQ;AACjC,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AAC1B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;AAAE,gBAAA,OAAO,EAAE,CAAC,EAAE,CAAC;YACxC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC;AAC1F,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAC3E,YAAA,OAAO,QAAQ,CAAC;AACZ,gBAAA,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;gBACpF,UAAU,EAAE,eAAe,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;AACvG,aAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9G;AACA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACzB;;AAGA,IAAA,yBAAyB,CACrB,KAAa,EACb,WAAqD,EACrD,UAAmB,EAAA;QAEnB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5G;AAhGS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,4CAIT,yBAAyB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAJxC,wBAAwB,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;0BAKQ;;0BAAY,MAAM;2BAAC,yBAAyB;;;MC/BxC,qBAAqB,CAAA;IAM9B,WAAA,CACY,EAA2B,EAC3B,UAA6B,EAAA;QAD7B,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,UAAU,GAAV,UAAU;;QANb,IAAA,CAAA,WAAW,GAA2B,EAAE;;QAExC,IAAA,CAAA,eAAe,GAAkB,IAAI;IAK3C;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,MAAK;AAC1D,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW;AAC7B,YAAA,MAAM,IAAI,GAA4B,OAAO,IAAI,KAAK,QAAQ,GAAG,UAAU,GAAG,UAAU;YACxF,MAAM,WAAW,GAAG,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC;mBACzC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,IAAqB,CAAC,IAAI,CAAC,CAAC;kBACpF,CAAC,CAAC;AACR,YAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE;AACtE,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;IAC9D;+GAxBS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAnC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAArB,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;sBAGI;;sBAEA;;;MC6KQ,wBAAwB,CAAA;IAEjC,IAAI,QAAQ,KAAsB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;AACzD;;;AAG8F;IAC9F,IAAa,QAAQ,CAAC,KAAsB,EAAA;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,IAAI,EAAE;;;;AAI5B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;IACnE;IAqBA,IAAI,MAAM,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAa,MAAM,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO;YAAE;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,IAAI,KAAK,EAAE;YAAE,IAAI,CAAC,SAAS,EAAE;QAAE;aAC1B;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;QAAE;IACnD;;IAGA,IAAI,UAAU,KAAa,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;IACpD,IAAa,UAAU,CAAC,KAAa,EAAA;AACjC,QAAA,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;AACxB,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW;YAAE;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE,IAAI,CAAC,SAAS,EAAE;QAAE;IAC1C;IAEA,IAAI,KAAK,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAa,KAAK,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;YAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE,IAAI,CAAC,SAAS,EAAE;QAAE;IAC1C;AAEA,IAAA,WAAA,CACY,UAA6B,EAC7B,cAA8B,EAC9B,iBAA2C,EAC3C,UAAqC,EACrC,iBAAoC,EACpC,GAAsB,EACtB,iBAA2C,EAAA;QAN3C,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAhErB,IAAA,CAAA,SAAS,GAAoB,EAAE;QAa9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;AAEd,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;QAE7C,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,WAAW,GAAsB,EAAE;QACnC,IAAA,CAAA,SAAS,GAAG,KAAK;;AAGf,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAK,EAAG,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QAE3E,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,MAAM,GAAG,EAAE;AA8DnB;;AAEmG;QAC3F,IAAA,CAAA,SAAS,GAAG,CAAC;IA9BlB;IAEH,QAAQ,GAAA;QACJ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,IAAG;;;;;AAKvD,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC;AAC5B,mBAAA,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,mBAAmB;gBAAE;AAC3D,YAAA,MAAM,WAAW,GAAkB,KAAK,CAAC,IAAI,EAAE,IAAI;YACnD,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE;AACxC,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;gBAChC,IAAI,CAAC,eAAe,EAAE;YAC1B;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE;IAClC;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EACtE,MAAK,EAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF;AAOA;AAC2F;IACnF,SAAS,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AAEnB,QAAA,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;;AAGvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAC5C,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CACxE,CAAC,SAAS,CAAC,KAAK,IAAG;AAChB,YAAA,IAAI,GAAG,KAAK,IAAI,CAAC,SAAS;AAAE,gBAAA,OAAO;AACnC,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;;;AAGxC,YAAA,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACrE,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAC3B,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,YAAY,CAAC,MAAqB,EAAA;QACtC,MAAM,MAAM,GAAG,CAAC,KAAsB,KAClC,KAAK,CAAC,IAAI,CAAC,CAAC,IACR,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;aACjC,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CACpD;AACL,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAChC;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC7C,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACJ;QACA,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAC3C,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CACzC;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEQ,wBAAwB,GAAA;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE;QACpC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;IAClD;AAEA;;AAEiG;IACzF,oBAAoB,CAAC,KAAsB,EAAE,IAAS,EAAA;AAC1D,QAAA,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACvB,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;gBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC;AACjD,gBAAA,IAAI,GAAG,EAAE,YAAY,EAAE;AACnB,oBAAA,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAwB,EAAE;wBAClD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;AAC7C,wBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;4BACrB,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK;wBACnD;oBACJ;AACA,oBAAA,GAAG,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;gBACtD;YACJ;AACA,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;gBACxB,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;YACnD;QACJ;IACJ;AAEA;AAC8F;IAC9F,eAAe,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;IACnE;+GAjLS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAkC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAhC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAM,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApKvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8ET,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,81CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA2B,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAsFQ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAtKpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,QAAA,EACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8ET,IAAA,CAAA,EAAA,UAAA,EAoFW,KAAK,EAAA,MAAA,EAAA,CAAA,81CAAA,CAAA,EAAA;;sBAShB;;sBAOA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBAeA;;sBASA;;sBAQA;;;ACjOL;;;;;;;;;;;;;AAaG;MAuCU,2BAA2B,CAAA;AAcpC,IAAA,WAAA,CACY,KAA8B,EAC9B,UAA6B,EAC7B,GAAsB,EAAA;QAFtB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QAhBN,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAC9B,IAAA,CAAA,KAAK,GAA2B,EAAE;QAClC,IAAA,CAAA,GAAG,GAAmB,QAAQ;QAC9B,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,MAAM,GAAuB,OAAO;QACpC,IAAA,CAAA,IAAI,GAAkC,QAAQ;QAC9C,IAAA,CAAA,MAAM,GAAG,EAAE;QACX,IAAA,CAAA,UAAU,GAAG,EAAE;AAEd,QAAA,IAAA,CAAA,UAAU,GAAQ,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;IAMjD;IAEH,QAAQ,GAAA;;AAEJ,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAC5B,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,CAAC,aAAa,EACxB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,GAAG,EACR,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAC5B;IACL;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IACjF;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/E;+GArCS,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAzC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,wCAAA,EAAA,WAAA,EAAA,qCAAA,EAAA,aAAA,EAAA,uCAAA,EAAA,WAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApC1B;;;;;;;;;;;;AAYT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,qQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAwBQ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAtCvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8CAA8C,EAAA,QAAA,EAC9C;;;;;;;;;;;;KAYT,EAAA,IAAA,EACK;AACF,wBAAA,SAAS,EAAE,wCAAwC;AACnD,wBAAA,aAAa,EAAE,qCAAqC;AACpD,wBAAA,eAAe,EAAE,uCAAuC;AACxD,wBAAA,aAAa,EAAE,2BAA2B;AAC7C,qBAAA,EAAA,UAAA,EAgBW,KAAK,EAAA,MAAA,EAAA,CAAA,qQAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MC6MQ,wBAAwB,CAAA;IAMjC,IAAa,KAAK,CAAC,CAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;YAAE;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;;;;;AAKf,QAAA,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;AACtD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QACzB,IAAI,CAAC,eAAe,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE;IAC5D;IACA,IAAI,KAAK,KAA0B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvD,IAAI,YAAY,KAA0B,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;IACrE,IAAI,cAAc,KAA0B,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;IA4DzE,IAAI,MAAM,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAa,MAAM,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO;YAAE;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,SAAS,EAAE;QACpB;aAAO;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;YACvB,IAAI,CAAC,eAAe,EAAE;QAC1B;IACJ;IAEA,IAAI,KAAK,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAa,KAAK,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;YAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE,IAAI,CAAC,SAAS,EAAE;QAAE;IAC1C;AAoBA,IAAA,WAAA,CACY,UAA6B,EAC7B,GAAsB,EACS,SAAkB,EACrC,cAA8B,EAC9B,iBAAkD,EAClD,UAAqC,EACrC,iBAAoC,EAAA;QANhD,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QAC4B,IAAA,CAAA,SAAS,GAAT,SAAS;QAC5B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QA5HhC,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAE/B,IAAA,CAAA,MAAM,GAAwB,EAAE;QAChC,IAAA,CAAA,aAAa,GAAwB,EAAE;AACvC,QAAA,IAAA,CAAA,eAAe,GAAwB,EAAE,QAAQ,EAAE,UAAU,EAAE;QAiB9D,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;;QAGf,IAAA,CAAA,GAAG,GAAkB,KAAK;QAC1B,IAAA,CAAA,SAAS,GAA8B,YAAY;QACnD,IAAA,CAAA,aAAa,GAAoB,MAAM;QACvC,IAAA,CAAA,cAAc,GAAW,CAAC;;QAE1B,IAAA,CAAA,IAAI,GAAW,KAAK;QACpB,IAAA,CAAA,cAAc,GAAY,KAAK;QAC/B,IAAA,CAAA,YAAY,GAAW,CAAC;QACxB,IAAA,CAAA,YAAY,GAAW,CAAC;QACxB,IAAA,CAAA,UAAU,GAAY,KAAK;QAC3B,IAAA,CAAA,UAAU,GAAY,IAAI;QAC1B,IAAA,CAAA,mBAAmB,GAAY,KAAK;;QAGpC,IAAA,CAAA,MAAM,GAA4E,OAAO;QACzF,IAAA,CAAA,KAAK,GAAW,GAAG;;QAGnB,IAAA,CAAA,gBAAgB,GAAY,KAAK;QACjC,IAAA,CAAA,eAAe,GAAW,EAAE;QAC5B,IAAA,CAAA,cAAc,GAAW,EAAE;;QAG3B,IAAA,CAAA,gBAAgB,GAAY,KAAK;QACjC,IAAA,CAAA,eAAe,GAAW,EAAE;QAC5B,IAAA,CAAA,cAAc,GAA2C,SAAS;QAClE,IAAA,CAAA,mBAAmB,GAAY,IAAI;QACnC,IAAA,CAAA,wBAAwB,GAAY,KAAK;;QAGzC,IAAA,CAAA,cAAc,GAAY,KAAK;QAC/B,IAAA,CAAA,aAAa,GAAW,IAAI;QAC5B,IAAA,CAAA,yBAAyB,GAAY,IAAI;QACzC,IAAA,CAAA,4BAA4B,GAAY,KAAK;;QAG7C,IAAA,CAAA,eAAe,GAAY,KAAK;QAChC,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,cAAc,GAAY,KAAK;QAC/B,IAAA,CAAA,gBAAgB,GAAY,KAAK;QACjC,IAAA,CAAA,UAAU,GAAY,KAAK;QAC3B,IAAA,CAAA,cAAc,GAAY,KAAK;;QAG/B,IAAA,CAAA,UAAU,GAAY,KAAK;QAC3B,IAAA,CAAA,QAAQ,GAAW,CAAC;;QAGpB,IAAA,CAAA,WAAW,GAAW,EAAE;;QAGzB,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,MAAM,GAAG,EAAE;QAsBZ,IAAA,CAAA,KAAK,GAAU,EAAE;QACjB,IAAA,CAAA,aAAa,GAAoB,EAAE;QACnC,IAAA,CAAA,SAAS,GAAG,KAAK;AAEd,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;QAKpD,IAAA,CAAA,OAAO,GAAQ,IAAI;QACX,IAAA,CAAA,UAAU,GAAG,CAAC;AAEd,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AAC3D,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AACpD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAW3B,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;IAChC;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,IAAG;AACxD,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,eAAe;oBAAE;AACpD,gBAAA,MAAM,WAAW,GAAkB,KAAK,CAAC,IAAI,EAAE,IAAI;AACnD,gBAAA,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO;oBAAE;AACzD,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;oBACjC,IAAI,CAAC,eAAe,EAAE;gBAC1B;AACJ,YAAA,CAAC,CAAC;QACN;IACJ;IAEA,eAAe,GAAA;;;AAGX,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;AAC/B,YAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;AACrE,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;;;AAInB,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACrD,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC;YAC9C;QACJ;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;YACxB,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO;AAC/E,YAAA,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY;YACtE,qBAAqB,EAAE,UAAU,EAAE,aAAa;YAChD,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB;AACvD,YAAA,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,0BAA0B;AAC1G,YAAA,iBAAiB,EAAE,gBAAgB;AACnC,YAAA,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB;YAClF,eAAe,EAAE,2BAA2B,EAAE,8BAA8B;YAC5E,UAAU;AACb,SAAA,CAAC;;AAGF,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,UAAU,CAAC,CAAC;AACtD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,GAAG,WAAW,GAAG,QAAQ;QAE5D,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,eAAe,EAAE;YACjB,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;AAC/B,gBAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;AACrE,YAAA,CAAC,CAAC;QACN;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;IACnC;IAEA,aAAa,CAAC,MAAc,EAAE,IAAmB,EAAA;QAC7C,OAAO,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC;IACpC;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;QACtB,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;AAC3E,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;gBAC/B,qBAAqB,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;AACvD,YAAA,CAAC,CAAC;QACN;IACJ;;AAIA;AAC2F;IACnF,SAAS,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AAElE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACvB,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;AAC3F,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;YACxC,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAC3B,QAAA,CAAC,CAAC;IACN;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC7C,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB,IAAI,CAAC,eAAe,EAAE;YACtB;QACJ;QACA,IAAI,CAAC,wBAAwB,EAAE;;AAE/B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAC7C,iBAAiB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CACjD;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACvB,IAAI,CAAC,eAAe,EAAE;IAC1B;IAEQ,wBAAwB,GAAA;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;;AAE5D,QAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IACnD;IAEQ,gBAAgB,CAAC,KAAsB,EAAE,IAAS,EAAA;AACtD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;gBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;AAChD,gBAAA,IAAI,GAAG,EAAE,YAAY,EAAE;AACnB,oBAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAwB,EAAE;wBACjD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;AAC7C,wBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;4BACrB,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK;wBACnD;oBACJ;AACA,oBAAA,GAAG,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;gBACtD;YACJ;AACA,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;gBACvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;YAC9C;QACJ;IACJ;AAEQ,IAAA,aAAa,CAAC,MAAqB,EAAA;QACvC,MAAM,MAAM,GAAG,CAAC,KAAsB,KAClC,KAAK,CAAC,IAAI,CAAC,CAAC,IACR,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;aACjC,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CACpD;AACL,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE;IAEQ,eAAe,GAAA;QACnB,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;AAC/B,YAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;AACrE,QAAA,CAAC,CAAC;IACN;;AAIQ,IAAA,MAAM,WAAW,GAAA;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa;AAC3F,QAAA,IAAI,CAAC,EAAE;YAAE;AAET,QAAA,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC3D,OAAO,QAAQ,CAAC;YAChB,OAAO,gBAAgB,CAAC;AAC3B,SAAA,CAAC;AAEF,QAAA,MAAM,EACF,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAC3C,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EACpD,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,GACnF,GAAG,aAAoB;QAExB,MAAM,OAAO,GAAU,EAAE;QACzB,IAAI,IAAI,CAAC,gBAAgB;AAAG,YAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QACpD,IAAI,IAAI,CAAC,gBAAgB;AAAG,YAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QACpD,IAAI,IAAI,CAAC,eAAe;AAAI,YAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;AAEnD,QAAA,MAAM,MAAM,GAAwB;YAChC,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC;YACjE,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG;;AAExC,YAAA,MAAM,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO;YAC9C,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC9B;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;AAEhB,YAAA,MAAM,CAAC,YAAY,CAAC,GAAY,IAAI,CAAC,UAAU;AAC/C,YAAA,MAAM,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,mBAAmB;YACxD,MAAM,CAAC,MAAM,CAAC,GAAkB,IAAI,CAAC,IAAI,KAAK,MAAM;YACpD,MAAM,CAAC,QAAQ,CAAC,GAAgB,IAAI,CAAC,IAAI,KAAK,QAAQ;AAEtD,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAQ;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAG,gBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI;YAAE;AAC/E,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAG;AACpD,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAG;AACpD,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAC;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAAC;AACrD,YAAA,IAAI,IAAI,CAAC,UAAU,EAAM;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAO;AACpD,YAAA,IAAI,IAAI,CAAC,UAAU,EAAM;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAO;AACpD,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAG;AAEpD,YAAA,MAAM,SAAS,GAAwB;gBACnC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU;gBACpD,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc;aAC3E;AACD,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACnD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC;AAEA,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACvB,gBAAA,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,qBAAqB,EAAE;YAC3F;AACA,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,MAAM,CAAC,YAAY,CAAC,GAAG;AACnB,oBAAA,EAAE,EAAE,oBAAoB;oBACxB,IAAI,EAAE,IAAI,CAAC,cAAc;oBACzB,SAAS,EAAE,IAAI,CAAC,mBAAmB;oBACnC,cAAc,EAAE,IAAI,CAAC,wBAAwB;iBAChD;YACL;YACA,IAAI,IAAI,CAAC,eAAe;AAAG,gBAAA,MAAM,CAAC,WAAW,CAAC,GAAI,EAAE,EAAE,EAAE,mBAAmB,EAAE,SAAS,EAAE,IAAI,EAAE;AAC9F,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACrB,MAAM,CAAC,UAAU,CAAC,GAAG;oBACjB,KAAK,EAAE,IAAI,CAAC,aAAa;oBACzB,iBAAiB,EAAE,IAAI,CAAC,yBAAyB;oBACjD,oBAAoB,EAAE,IAAI,CAAC,4BAA4B;iBAC1D;YACL;YACA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC;gBAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;AAClF,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,IAAI;AAAE,oBAAA,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;gBAAE;AAAE,gBAAA,MAAM,eAAe;YACvF;YAEA,MAAM,CAAC,IAAI,CAAC,GAAG;AACX,gBAAA,WAAW,EAAK,CAAC,MAAW,KAAK,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,MAAM,CAAC;AACjF,gBAAA,cAAc,EAAE,CAAC,MAAW,KAAK,IAAI,CAAC,cAAc,CAAC,sBAAsB,EAAE,MAAM,CAAC;AACpF,gBAAA,QAAQ,EAAQ,CAAC,MAAW,KAAK,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC9E,gBAAA,aAAa,EAAG,CAAC,MAAW,KAAK,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,MAAM,CAAC;AACnF,gBAAA,YAAY,EAAI,CAAC,MAAW,KAAK,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,MAAM,CAAC;aACrF;QACL;aAAO;;AAEH,YAAA,MAAM,CAAC,gBAAgB,CAAC,GAAG,KAAK;AAChC,YAAA,MAAM,CAAC,eAAe,CAAC,GAAI,KAAK;AAEhC,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACvB,gBAAA,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,qBAAqB,EAAE;YAC3F;AACA,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,MAAM,CAAC,YAAY,CAAC,GAAG;AACnB,oBAAA,EAAE,EAAE,oBAAoB;oBACxB,IAAI,EAAE,IAAI,CAAC,cAAc;oBACzB,SAAS,EAAE,IAAI,CAAC,mBAAmB;oBACnC,cAAc,EAAE,IAAI,CAAC,wBAAwB;iBAChD;YACL;YACA,IAAI,IAAI,CAAC,eAAe;AAAE,gBAAA,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,mBAAmB,EAAE,SAAS,EAAE,KAAK,EAAE;QACjG;QAEA,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;AACrC,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;IAC7D;IAEQ,cAAc,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AAChC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QACjD;IACJ;IAEQ,cAAc,CAAC,SAAiB,EAAE,MAAW,EAAA;QACjD,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,SAAgB,CAAC;AAEnE,QAAA,IAAI,SAAS,KAAK,mBAAmB,EAAE;AACnC,YAAA,MAAM,OAAO,GAAW,MAAM,CAAC,aAAa;AAC5C,YAAA,MAAM,SAAS,GAAW,MAAM,CAAC,WAAW;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,QAAQ;YAC1F,IAAI,OAAO,KAAK,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;AAC7C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAG,EAAE,qBAAqB,CAAC;YACvF;AACA,YAAA,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAG,EAAE,mBAAmB,CAAC;YACvF;QACJ;IACJ;AAjaS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,iFAyHT,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAhC,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAkC,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAhC,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAzHzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,GAAA,EAAA,KAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzPvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmJT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ygDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAsGQ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA3PpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,QAAA,EACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmJT,IAAA,CAAA,EAAA,UAAA,EAoGW,KAAK,EAAA,MAAA,EAAA,CAAA,ygDAAA,CAAA,EAAA;;0BA2HZ;;0BAAY,MAAM;2BAAC,UAAU;;0BAC7B;;0BACA;;0BACA;;0BACA;;sBA5HJ;;sBAKA;;sBAgBA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBAGA;;sBAOA;;sBAaA;;sBAUA;;sBACA;;sBACA;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAM,EAAE,MAAM,EAAE,KAAK,EAAE;;sBAC3C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;MC1SnC,oBAAoB,CAAA;IAK7B,IAAa,KAAK,CAAC,CAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;YAAE;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;;;AAGf,QAAA,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;AACtD,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;IAC/B;IACA,IAAI,KAAK,KAA0B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvD,IAAI,cAAc,KAA0B,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;AASzE,IAAA,WAAA,CACY,UAA6B,EAC7B,GAAsB,EACS,SAAkB,EAAA;QAFjD,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QAC4B,IAAA,CAAA,SAAS,GAAT,SAAS;QA1B3C,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAE/B,IAAA,CAAA,MAAM,GAAwB,EAAE;QAChC,IAAA,CAAA,eAAe,GAAwB,EAAE;QAaxC,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;AAEd,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAO;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;AAOhD,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;IAChC;AAEA,IAAA,QAAQ,KAAU;AAClB,IAAA,WAAW,KAAU;AAErB,IAAA,MAAM,CAAC,KAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/E;AArCS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,iFA2BL,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA3BzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3EnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2nBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAX,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAY,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAwCQ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA7EhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,QAAA,EAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCT,IAAA,CAAA,EAAA,UAAA,EAsCW,KAAK,EAAA,MAAA,EAAA,CAAA,2nBAAA,CAAA,EAAA;;0BA6BZ;;0BAAY,MAAM;2BAAC,UAAU;;sBA1BjC;;sBAIA;;sBAYA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MC5GQ,mBAAmB,CAAA;+GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,iNAHlB,2DAA2D,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAG5D,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,2DAA2D;AACrE,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;sBAEI;;sBACA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MCGzB,cAAc,CAAA;AAQvB,IAAA,WAAA,CAAoB,iBAAoC,EAAA;QAApC,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAP9B,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,WAAW,GAAkB,IAAI;AAOpC,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,UAAsB,KAAI;YACnE,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,WAAW,EAAE;AACjD,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;gBACvB;YACJ;AAEA,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,cAAc,IAAI,UAAU,CAAC,IAAI,KAAK,eAAe,CAAC,UAAU,EAAE;AACtG,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,gBAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI;YACtC;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,kBAAkB,KAAU;IAE5B,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE;IAC3B;+GA3BS,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAd,cAAc,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAIN,mBAAmB,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBxC,uSAMM,EAAA,MAAA,EAAA,CAAA,kZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDMO,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cAGT,KAAK,EAAA,QAAA,EAAA,uSAAA,EAAA,MAAA,EAAA,CAAA,kZAAA,CAAA,EAAA;;sBAMhB,eAAe;uBAAC,mBAAmB;;;AEPxC,MAAM,WAAW,GAAG,EAAE;AAEtB;;;;;;AAMG;MAEU,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;QAEY,IAAA,CAAA,KAAK,GAAmB,EAAE;QAC1B,IAAA,CAAA,OAAO,GAAmB,EAAE;AA+BvC,IAAA;AA7BG,IAAA,IAAI,OAAO,GAAA,EAAc,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvD,IAAA,IAAI,OAAO,GAAA,EAAc,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEzD,IAAA,IAAI,CAAC,MAAuB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACtF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;QACtB;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;IACrB;IAEA,IAAI,GAAA;QACA,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAG;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/E;IAEA,IAAI,GAAA;QACA,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAG;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD;IAEA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;IACrB;+GAhCS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;AC4BD;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,GAAG;IACjB,gBAAgB;IAChB,eAAe;IACf,qBAAqB;IACrB,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,yBAAyB;IACzB,+BAA+B;IAC/B,wBAAwB;IACxB,2BAA2B;IAC3B,wBAAwB;IACxB,oBAAoB;IACpB,cAAc;IACd,mBAAmB;IACnB,kBAAkB;CACrB;MAkEY,gBAAgB,CAAA;+GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,iBAlFzB,gBAAgB;YAChB,eAAe;YACf,qBAAqB;YACrB,oBAAoB;YACpB,gBAAgB;YAChB,gBAAgB;YAChB,gBAAgB;YAChB,yBAAyB;YACzB,+BAA+B;YAC/B,wBAAwB;YACxB,2BAA2B;YAC3B,wBAAwB;YACxB,oBAAoB;YACpB,cAAc;YACd,mBAAmB;AACnB,YAAA,kBAAkB,aAMd,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa,CAAA,EAAA,OAAA,EAAA;;YAoBb,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa;;YAEb,gBAAgB;YAChB,eAAe;YACf,qBAAqB;YACrB,oBAAoB;YACpB,gBAAgB;YAChB,gBAAgB;YAChB,gBAAgB;YAChB,yBAAyB;YACzB,+BAA+B;YAC/B,wBAAwB;YACxB,2BAA2B;YAC3B,wBAAwB;YACxB,oBAAoB;YACpB,cAAc;YACd,mBAAmB;YACnB,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAIb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,SAAA,EAjDd;YACP,iBAAiB;YACjB,cAAc;YACd,wBAAwB;YACxB,yBAAyB;YACzB,wBAAwB;YACxB,eAAe;YACf,oBAAoB;YACpB,iBAAiB;YACjB,qBAAqB;YACrB,qBAAqB;YACrB,gCAAgC;YAChC,qBAAqB;YACrB,uBAAuB;YACvB,wBAAwB;AAC3B,SAAA,EAAA,OAAA,EAAA,CA3BG,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa;;YAoBb,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa,CAAA,EAAA,CAAA,CAAA;;4FAqBR,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAhE5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,YAAY;AAC1B,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,eAAe;wBACf,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,YAAY;wBACZ,aAAa;wBACb,YAAY;wBACZ,aAAa;AAChB,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACP,iBAAiB;wBACjB,cAAc;wBACd,wBAAwB;wBACxB,yBAAyB;wBACzB,wBAAwB;wBACxB,eAAe;wBACf,oBAAoB;wBACpB,iBAAiB;wBACjB,qBAAqB;wBACrB,qBAAqB;wBACrB,gCAAgC;wBAChC,qBAAqB;wBACrB,uBAAuB;wBACvB,wBAAwB;AAC3B,qBAAA;AACD,oBAAA,OAAO,EAAE;;wBAEL,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,eAAe;wBACf,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,YAAY;wBACZ,aAAa;wBACb,YAAY;wBACZ,aAAa;;wBAEb,gBAAgB;wBAChB,eAAe;wBACf,qBAAqB;wBACrB,oBAAoB;wBACpB,gBAAgB;wBAChB,gBAAgB;wBAChB,gBAAgB;wBAChB,yBAAyB;wBACzB,+BAA+B;wBAC/B,wBAAwB;wBACxB,2BAA2B;wBAC3B,wBAAwB;wBACxB,oBAAoB;wBACpB,cAAc;wBACd,mBAAmB;wBACnB,kBAAkB;AACrB,qBAAA;oBACD,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC9B,iBAAA;;;ACnID;;;;;;AAMG;AAEH;MACa,gBAAgB,GAAG,IAAI,cAAc,CAAiB,kBAAkB;;ACT/E,MAAO,4BAA6B,SAAQ,eAAe,CAAA;AAC7D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,QAAQ,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,OAAO,CAAC;QACzE,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE;SACZ;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;AAC7E,YAAA,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC;AACpE,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC;SAC3G;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;IAC7C;AACH;;ACfK,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAC3D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,aAAa,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,OAAO,CAAC;AACpF,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,GAAG,EAAK,QAAQ;AAChB,YAAA,IAAI,EAAI,MAAM;AACd,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,IAAI,EAAI,QAAQ;SACnB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,KAAK,EAAK,KAAK,EAAK,cAAc,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC;YACrF,IAAI,WAAW,CAAC,MAAM,EAAI,KAAK,EAAK,cAAc,CAAC,IAAI,EAAI,SAAS,EAAE,EAAE,EAAS,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACtH,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC9H,YAAA,IAAI,WAAW,CAAC,MAAM,EAAI,MAAM,EAAI,cAAc,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SACjJ;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,OAAO,EAAS,aAAa;AAC7B,YAAA,UAAU,EAAM,QAAQ;AACxB,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,GAAG,EAAa,KAAK;AACrB,YAAA,KAAK,EAAW,MAAM;AACtB,YAAA,MAAM,EAAU,MAAM;AACtB,YAAA,OAAO,EAAS,WAAW;AAC3B,YAAA,YAAY,EAAI,KAAK;AACrB,YAAA,MAAM,EAAU,SAAS;AAC5B,SAAA,CAAC;IACN;AACH;;AC7BK,MAAO,mBAAoB,SAAQ,eAAe,CAAA;AACpD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,SAAS,CAAC;QACxD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,WAAW,EAAE;SAChB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC;AAClF,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,iCAAiC,CAAC;AACnH,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,qCAAqC;SACtH;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QAEzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,WAAW,EAAE,iBAAiB;AAC9B,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,eAAe,EAAE,SAAS;AAC7B,SAAA,CAAC;IACN;AACH;;AC1BK,MAAO,+BAAgC,SAAQ,eAAe,CAAA;AAChE,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,WAAW,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,QAAQ,CAAC;AAC1E,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,EACxD,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAClF,KAAK,CAAC;SACb;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,eAAe,EAAE,aAAa;AACjC,SAAA,CAAC;IACN;AACH;;ACjBK,MAAO,6BAA8B,SAAQ,eAAe,CAAA;AAC9D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,SAAS,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,QAAQ,CAAC;AACrE,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,eAAe,EAAE,SAAS;AAC1B,YAAA,MAAM,EAAE,iBAAiB;AAC5B,SAAA,CAAC;IACN;AACH;;ACFD;;;;;;;;;;AAUG;AACG,MAAO,aAAc,SAAQ,eAAe,CAAA;AAC9C,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,mBAAmB,EAAE,OAAO,CAAC;QAE7D,IAAI,CAAC,MAAM,GAAG;;YAEV,IAAI,WAAW,CAAC,eAAe,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC;AACvE,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC;;YAG5E,IAAI,WAAW,CAAC,iBAAiB,EAAE,UAAU,EAAE,cAAc,CAAC,YAAY,CAAC;;YAE3E,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EACrD,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC;;AAE/C,YAAA,IAAI,WAAW,CAAC,cAAc,EAAE,oBAAoB,EAAE,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,cAAc,EAAE,oBAAoB,EAAE,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC;AAC7F,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;SACvF;;QAGD,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,IAAI,wBAAwB,EAAE;AAC9B,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,uBAAuB,EAAE;AAC7B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,0BAA0B,EAAE;SACnC;;;;;;QAOD,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,eAAe,EAAE,SAAS;AAC7B,SAAA,CAAC;IACN;AACH;;AC3DK,MAAO,6BAA8B,SAAQ,eAAe,CAAA;AAC9D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,SAAS,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,OAAO,CAAC;QACrE,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;YAChF,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,EACnD,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;SAClD;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,KAAK,EAAE,MAAM;AAChB,SAAA,CAAC;IACN;AACH;;ACfK,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAC3D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC;SAC1F;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,KAAK,EAAE,SAAS;;;;;AAKhB,YAAA,UAAU,EAAE,GAAG;AAClB,SAAA,CAAC;IACN;AACH;;ACjBK,MAAO,2BAA4B,SAAQ,eAAe,CAAA;AAC5D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,OAAO,CAAC;QAChE,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,GAAG,EAAE,MAAM;SACd;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,yCAAyC,CAAC;AACzH,YAAA,IAAI,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC;;SAE9E;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QAEzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,WAAW,EAAE,KAAK;AACrB,SAAA,CAAC;IACN;AACH;;ACnBK,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAC3D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,MAAM,EAAE,QAAQ;SACnB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC;AAC/E,YAAA,IAAI,WAAW,CACX,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,MAAM,EAC9C,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EACxF,UAAU,CACb;YACD,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAC3E,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAC9C,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAChF,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC1C,IAAI,WAAW,CACX,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EACzC;AACI,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE;AAC3C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE;AAC1C,aAAA,EACD,OAAO,CACV;SACJ;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;IAC7C;AACH;;AClCK,MAAO,4BAA6B,SAAQ,eAAe,CAAA;AAC7D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,iBAAiB,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,QAAQ,CAAC;AAC5F,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,MAAM,EAAE,QAAQ;SACnB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CACX,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,MAAM,EAC9C,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EACxF,UAAU,CACb;YACD,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAC3E,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAC9C,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAChF,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC1C,IAAI,WAAW,CACX,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EACzC;AACI,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE;AAC3C,gBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE;AAC1C,aAAA,EACD,OAAO,CACV;SACJ;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,OAAO,EAAE,OAAO;AACnB,SAAA,CAAC;IACN;AACH;;AClCK,MAAO,8BAA+B,SAAQ,eAAe,CAAA;AAC/D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,UAAU,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,QAAQ,CAAC;QAC9E,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;SACzE;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,eAAe,EAAE,aAAa;AACjC,SAAA,CAAC;IACN;AACH;;AClBK,MAAO,wBAAyB,SAAQ,eAAe,CAAA;AACzD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,OAAO,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,GAAG,EAAE,QAAQ;SAChB;QACD,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC;AACxF,YAAA,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC;SAC3E;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QAEzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,OAAO,EAAE,MAAM;AAClB,SAAA,CAAC;IACN;AACH;;ACJK,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAC3D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QACnE,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;YAC5E,IAAI,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAC3E,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACvC,IAAI,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EACpF,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAC1C;QACD,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,wBAAwB,EAAE;AAC9B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,uBAAuB,EAAE;AAC7B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,uBAAuB,EAAE;SAChC;QACD,IAAI,CAAC,QAAQ,GAAG;YACZ,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,EAAE;SACtB;QACD,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,eAAe,EAAE,aAAa;AAC9B,YAAA,OAAO,EAAE,kBAAkB;AAC9B,SAAA,CAAC;IACN;IAEQ,YAAY,GAAA;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,8BAA8B,EAAE;AACjD,QAAA,MAAM,OAAO,GAAG,IAAI,wBAAwB,EAAE;AAC9C,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;AACnE,QAAA,IAAI,YAAY;AAAE,YAAA,YAAY,CAAC,OAAO,GAAG,WAAW;AACpD,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC;AACzB,QAAA,OAAO,IAAI;IACf;AACH;;ACzDK,MAAO,uBAAwB,SAAQ,eAAe,CAAA;AACxD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,CAAC;AACtE,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,MAAM,GAAG;AACV,YAAA;AACI,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,cAAc,CAAC,MAAM;gBAC3B,OAAO,EAAE,EAAE;AACX,gBAAA,OAAO,EAAE,EAAE;AACI,aAAA;AACnB,YAAA;AACI,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,cAAc,CAAC,MAAM;AAC3B,gBAAA,OAAO,EAAE,EAAE;AACI,aAAA;SACtB;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA,CAAC;IACN;AACH;;ACxBK,MAAO,sBAAuB,SAAQ,eAAe,CAAA;AACvD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,QAAQ,CAAC;AAC5D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,eAAe,EAAE,aAAa;AACjC,SAAA,CAAC;IACN;AACH;;ACLK,MAAO,iBAAkB,SAAQ,eAAe,CAAA;AAClD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,aAAa,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,OAAO,CAAC;AAEzE,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;;AAGlB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAElB,IAAI,CAAC,eAAe,GAAG;YACnB,EAAE,KAAK,EAAE,mBAAmB,EAAI,KAAK,EAAE,2BAA2B,EAAI,IAAI,EAAE,gBAAgB,EAAE;YAC9F,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,6BAA6B,EAAE,IAAI,EAAE,sBAAsB,EAAE;SACvG;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAEhB,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,IAAI,wBAAwB,EAAE;AAC9B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,uBAAuB,EAAE;AAC7B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,0BAA0B,EAAE;SACnC;QAED,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,WAAW,EAAE,OAAO;AACvB,SAAA,CAAC;IACN;AACH;;AC3BK,MAAO,qBAAsB,SAAQ,eAAe,CAAA;AACtD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,OAAO,CAAC;QAEjF,IAAI,CAAC,QAAQ,GAAG;AACZ,YAAA,IAAI,iBAAiB,EAAE;AACvB,YAAA,IAAI,iBAAiB,EAAE;AACvB,YAAA,IAAI,iBAAiB,EAAE;AACvB,YAAA,IAAI,iBAAiB,EAAE;SAC1B;QAED,IAAI,CAAC,eAAe,GAAG;YACnB,EAAE,KAAK,EAAE,mBAAmB,EAAK,KAAK,EAAE,eAAe,EAAQ,IAAI,EAAE,8BAA8B,EAAE;YACrG,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,sBAAsB,EAAE;YAC7F,EAAE,KAAK,EAAE,gBAAgB,EAAQ,KAAK,EAAE,oBAAoB,EAAG,IAAI,EAAE,yBAAyB,EAAE;YAChG,EAAE,KAAK,EAAE,qBAAqB,EAAG,KAAK,EAAE,iBAAiB,EAAM,IAAI,EAAE,iBAAiB,EAAE;YACxF,EAAE,KAAK,EAAE,oBAAoB,EAAI,KAAK,EAAE,gBAAgB,EAAO,IAAI,EAAE,iBAAiB,EAAE;SAC3F;QAED,IAAI,CAAC,gBAAgB,GAAG;AACpB,YAAA,EAAE,KAAK,EAAE,YAAY,EAAW,KAAK,EAAE,YAAY,EAAE;AACrD,YAAA,EAAE,KAAK,EAAE,YAAY,EAAW,KAAK,EAAE,gBAAgB,EAAE;YACzD,EAAE,KAAK,EAAE,iBAAiB,EAAM,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,EAAE;AACnI,YAAA,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,gBAAgB,EAAE;AACzD,YAAA,EAAE,KAAK,EAAE,oBAAoB,EAAG,KAAK,EAAE,eAAe,EAAE;AACxD,YAAA,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,gBAAgB,EAAE;SAC5D;QAED,IAAI,CAAC,MAAM,GAAG;;YAEV,IAAI,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,CAAC,YAAY,CAAC;AAEnE,YAAA;AACI,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,cAAc,CAAC,MAAM;gBAC3B,OAAO,EAAE,EAAE;AACX,gBAAA,OAAO,EAAE,EAAE;AACI,aAAA;AAEnB,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;;YAGvE,IAAI,WAAW,CAAC,eAAe,EAAE,YAAY,EAAE,cAAc,CAAC,YAAY,CAAC;AAE3E,YAAA,IAAI,WAAW,CAAC,KAAK,EAAE,oBAAoB,EAAE,cAAc,CAAC,YAAY,EACpE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAChE,KAAK,CAAC;AAEV,YAAA,IAAI,WAAW,CAAC,WAAW,EAAE,iBAAiB,EAAE,cAAc,CAAC,MAAM,EACjE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EACxF,YAAY,CAAC;YAEjB,IAAI,WAAW,CAAC,eAAe,EAAE,iBAAiB,EAAE,cAAc,CAAC,MAAM,EACrE;AACI,gBAAA,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE;AAC9C,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;AACxB,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;AACxB,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;AACxB,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;AACxB,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;AACxB,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;AAC3B,aAAA,EACD,MAAM,CAAC;AAEX,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAEzF,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,YAAY,EACvD;AACI,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAK,KAAK,EAAE,KAAK,EAAE;AACjC,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAI,KAAK,EAAE,MAAM,EAAE;AAClC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACvC,aAAA,EACD,KAAK,CAAC;AAEV,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;AAE/F,YAAA,IAAI,WAAW,CAAC,cAAc,EAAE,oBAAoB,EAAE,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAEzF,YAAA,IAAI,WAAW,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAEpF,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;AAEvF,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;AAEtF,YAAA,IAAI,WAAW,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;;YAG3G,IAAI,WAAW,CAAC,gBAAgB,EAAE,SAAS,EAAE,cAAc,CAAC,YAAY,CAAC;YAEzE,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EACrD;AACI,gBAAA,EAAE,KAAK,EAAE,OAAO,EAAQ,KAAK,EAAE,OAAO,EAAE;AACxC,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAE;AACvC,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAE;AACvC,gBAAA,EAAE,KAAK,EAAE,WAAW,EAAI,KAAK,EAAE,WAAW,EAAE;AAC5C,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAE;AACvC,gBAAA,EAAE,KAAK,EAAE,OAAO,EAAQ,KAAK,EAAE,OAAO,EAAE;AACxC,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAK,KAAK,EAAE,UAAU,EAAE;AAC9C,aAAA,EACD,OAAO,CAAC;AAEZ,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,0BAA0B,EAAE,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC;;YAG1F,IAAI,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,cAAc,CAAC,YAAY,CAAC;AAExE,YAAA,IAAI,WAAW,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;YAEnG,IAAI,WAAW,CAAC,iBAAiB,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAClF,SAAS,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAE7D,IAAI,WAAW,CAAC,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAC9E,SAAS,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;YAG7D,IAAI,WAAW,CAAC,mBAAmB,EAAE,YAAY,EAAE,cAAc,CAAC,YAAY,CAAC;AAE/E,YAAA,IAAI,WAAW,CAAC,kBAAkB,EAAE,YAAY,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;YAE5F,IAAI,WAAW,CAAC,iBAAiB,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAClF,SAAS,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAE7D,IAAI,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,CAAC,YAAY,EACjE;AACI,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;AAClC,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAI,KAAK,EAAE,aAAa,EAAE;AACtC,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;AACtC,aAAA,EACD,SAAS,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAExE,IAAI,WAAW,CAAC,qBAAqB,EAAE,WAAW,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EACxF,SAAS,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAE7D,IAAI,WAAW,CAAC,0BAA0B,EAAE,iBAAiB,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EACpG,SAAS,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;YAG7D,IAAI,WAAW,CAAC,iBAAiB,EAAE,UAAU,EAAE,cAAc,CAAC,YAAY,CAAC;AAE3E,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;YAExF,IAAI,WAAW,CAAC,eAAe,EAAE,YAAY,EAAE,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAChF,SAAS,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAE3D,IAAI,WAAW,CAAC,2BAA2B,EAAE,gBAAgB,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EACnG,SAAS,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAE3D,IAAI,WAAW,CAAC,8BAA8B,EAAE,qBAAqB,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAC5G,SAAS,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;YAG3D,IAAI,WAAW,CAAC,gBAAgB,EAAE,SAAS,EAAE,cAAc,CAAC,YAAY,CAAC;AAEzE,YAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,WAAW,EAAS,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;AACjG,YAAA,IAAI,WAAW,CAAC,UAAU,EAAS,WAAW,EAAS,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;AACjG,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAG,kBAAkB,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;AACjG,YAAA,IAAI,WAAW,CAAC,kBAAkB,EAAC,YAAY,EAAQ,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;AACjG,YAAA,IAAI,WAAW,CAAC,YAAY,EAAO,MAAM,EAAc,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;AACjG,YAAA,IAAI,WAAW,CAAC,gBAAgB,EAAG,UAAU,EAAU,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;;YAGjG,IAAI,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,CAAC,YAAY,CAAC;AAEnE,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,kBAAkB,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;YAE5F,IAAI,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAClE,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;YAGvD,IAAI,WAAW,CAAC,mBAAmB,EAAE,YAAY,EAAE,cAAc,CAAC,YAAY,CAAC;AAE/E,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,oBAAoB,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC;SAC/F;QAED,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,IAAI,wBAAwB,EAAE;AAC9B,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,uBAAuB,EAAE;AAC7B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,uBAAuB,EAAE;SAChC;AAED,QAAA,IAAI,CAAC,kBAAkB,CAAC,EACvB,CAAC;IACN;AACH;;ACzMK,MAAO,4BAA6B,SAAQ,eAAe,CAAA;AAC7D,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,QAAQ,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,QAAQ,CAAC;AAC7E,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA,CAAC;IACN;AACH;;ACXD;;AAEG;;ACFH;;AAEG;;;;"}