@vectoriox/iox-builder 1.0.9 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"vectoriox-iox-builder.mjs","sources":["../../../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/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/interaction-engine.service.ts","../../../projects/iox-builder/src/lib/services/style-registry.service.ts","../../../projects/iox-builder/src/lib/render/render.directive.ts","../../../projects/iox-builder/src/lib/directives/iox-draggable.directive.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/directives/iox-dropzone.directive.ts","../../../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/components/linked-container/linked-container.component.ts","../../../projects/iox-builder/src/lib/tokens/builder.tokens.ts","../../../projects/iox-builder/src/lib/utils/binding-path.util.ts","../../../projects/iox-builder/src/lib/components/repeater/repeater.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/models/component.model.ts","../../../projects/iox-builder/src/lib/panels/interactions/interactions.component.ts","../../../projects/iox-builder/src/lib/panels/interactions/interactions.component.html","../../../projects/iox-builder/src/lib/iox-builder.module.ts","../../../projects/iox-builder/src/lib/components/button/button.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/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/repeater/repeater.config.ts","../../../projects/iox-builder/src/lib/components/section/section.config.ts","../../../projects/iox-builder/src/lib/components/spacer/spacer.config.ts","../../../projects/iox-builder/src/lib/components/text/text.config.ts","../../../projects/iox-builder/src/public-api.ts","../../../projects/iox-builder/src/vectoriox-iox-builder.ts"],"sourcesContent":["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}\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 PAGE = 'Page',\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 { 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 enter: RouteAnimationPreset;\n leave: RouteAnimationPreset;\n duration: number;\n easing: string;\n}\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 duration: 400,\n easing: 'ease',\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}\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}\n\nexport const DEVICE_OPTIONS: DeviceOption[] = [\n { mode: DeviceMode.Desktop, label: 'Desktop', icon: 'ph-thin ph-desktop', width: 1440 },\n { mode: DeviceMode.Tablet, label: 'Tablet', icon: 'ph-thin ph-device-tablet', width: 768 },\n { mode: DeviceMode.Mobile, label: 'Mobile', icon: 'ph-thin ph-device-mobile', width: 375 },\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\n /** Emits the scroll container element whenever it is registered. */\n public scrollContainer$ = new Subject<HTMLElement>();\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 /**\n * Resolve the inner styled element.\n * Builder components apply [ngStyle] on their first child element,\n * so computed styles (padding, margin) live there — not on the host.\n */\n getStyledElement(host: HTMLElement): HTMLElement {\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 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 private buildBoxModel(host: HTMLElement): OverlayBoxModel {\n const s = window.getComputedStyle(this.getStyledElement(host));\n const px = (v: string) => { const n = Number.parseFloat(v); return Number.isFinite(n) ? n : 0; };\n return {\n margin: { top: px(s.marginTop), right: px(s.marginRight), bottom: px(s.marginBottom), left: px(s.marginLeft) },\n padding: { top: px(s.paddingTop), right: px(s.paddingRight), bottom: px(s.paddingBottom), left: px(s.paddingLeft) },\n border: { top: px(s.borderTopWidth), right: px(s.borderRightWidth), bottom: px(s.borderBottomWidth), left: px(s.borderLeftWidth) },\n };\n }\n\n}","import { ChangeDetectorRef, Injectable } from '@angular/core';\nimport interact from 'interactjs';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { ComponentNode } from '../models/component.model';\nimport { ComponentRegistryService } from './component-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\n@Injectable()\nexport class DragEngineService {\n\n constructor(private registry: ComponentRegistryService) {}\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 config = this.registry.createConfig(payload.data as string);\n if (config) {\n children.splice(insertIndex, 0, config);\n cdr.detectChanges();\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 }\n children.splice(insertIndex, 0, item);\n cdr.detectChanges();\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 }\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\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 // ── 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 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 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\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 const rect = 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 = 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 = 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._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 /** Visual scale factor (0–1+). Canvas is rendered at `width` 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 });\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 20px each side).\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 * 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 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 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","import { Injectable } from '@angular/core';\n\nimport {\n ComponentNode,\n InteractionAction,\n IoxInteraction,\n} from '../models/component.model';\nimport { OverlayService } from '../overlay/overlay.service';\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 constructor(private overlayService: OverlayService) {}\n\n /** Wire all interactions for a node to its rendered DOM element. */\n attach(node: ComponentNode): void {\n if (!node.interactions?.length) return;\n\n const ref = this.overlayService.getNodeRef(node);\n if (!ref) return;\n\n const cleanups: AttachedInteraction[] = [];\n\n for (const ix of node.interactions) {\n const cleanup = this.attachInteraction(node, ix, ref.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 {\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 // Cancelling Web Animations removes fill:'forwards' committed styles,\n // returning the element to its natural CSS state.\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n ref.element.getAnimations().forEach(a => a.cancel());\n }\n }\n\n /** Re-attach interactions after they have been edited in the panel. */\n refresh(node: ComponentNode): void {\n this.detach(node);\n 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 {\n if (!node.interactions?.length) return;\n\n // Cancel any in-progress animations first to reset the element cleanly.\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n ref.element.getAnimations().forEach(a => a.cancel());\n }\n\n for (const ix of node.interactions) {\n this.runActions(node, ix.actions);\n }\n }\n\n // ── Private ──────────────────────────────────────────────\n\n private attachInteraction(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n switch (ix.trigger) {\n case 'pageLoad':\n return this.attachPageLoad(node, ix, element);\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 // Execute immediately (next microtask to let rendering settle)\n const timer = setTimeout(() => {\n this.runActions(node, ix.actions);\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 const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n const key = ix.id;\n if (ix.actions.some(a => a.once) && firedSet.has(key)) continue;\n firedSet.add(key);\n this.runActions(node, ix.actions);\n }\n }\n }, { threshold: 0.1 });\n observer.observe(element);\n return () => observer.disconnect();\n }\n\n private attachClick(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const handler = (e: MouseEvent) => {\n // Don't trigger during builder editing clicks — only in preview mode.\n // For now, we always run it. In the future, check BuilderMode.\n this.runActions(node, ix.actions);\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);\n const leaveHandler = () => {\n // Reverse animations on leave for hover triggers\n for (const action of ix.actions) {\n const target = this.resolveTarget(node, action);\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[]): void {\n for (const action of actions) {\n const target = this.resolveTarget(node, action);\n if (!target) continue;\n this.executeAction(target, action);\n }\n }\n\n private resolveTarget(ownerNode: ComponentNode, action: InteractionAction): HTMLElement | null {\n if (action.target === 'self') {\n const ref = this.overlayService.getNodeRef(ownerNode);\n return ref?.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 element.animate(keyframes, {\n duration: action.duration,\n delay: action.delay,\n easing: action.easing,\n fill: 'forwards',\n });\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\n/**\n * StyleRegistryService — manages a single <style> tag for the builder canvas.\n *\n * Each builder component gets a unique CSS class `.iox-node-{id}` applied to its\n * first inner element. onUpdate() in the style panel calls upsert() to compile\n * the flat style-trait map into a CSS rule and flush it to the stylesheet.\n *\n * This replaces the old [ngStyle] binding, enabling future support for\n * hover states, breakpoints, and pseudo-selectors without DOM modifications.\n *\n * Scoped to PageUiComponent.providers[] — one stylesheet per builder instance.\n */\n@Injectable()\nexport class StyleRegistryService {\n private rules = new Map<string, string>();\n private styleEl: HTMLStyleElement | null = null;\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 upsert(nodeId: string, styles: Record<string, any>): void {\n if (!nodeId) return;\n const css = this.compile(nodeId, styles);\n if (css) {\n this.rules.set(nodeId, css);\n } else {\n this.rules.delete(nodeId);\n }\n this.flush();\n }\n\n remove(nodeId: string): void {\n if (!nodeId) return;\n this.rules.delete(nodeId);\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(nodeId: string, styles: Record<string, any>): string {\n const entries = Object.entries(styles)\n .filter(([, v]) => v !== undefined && v !== null && v !== '')\n .map(([k, v]) => ` ${this.toKebabCase(k)}: ${v};`);\n if (!entries.length) return '';\n return `.iox-node-${nodeId} {\\n${entries.join('\\n')}\\n}`;\n }\n\n private toKebabCase(str: string): string {\n return str.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n }\n\n private flush(): void {\n if (!this.styleEl) return;\n this.styleEl.textContent = Array.from(this.rules.values()).join('\\n');\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n EventEmitter,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewContainerRef\n} from '@angular/core';\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 { StyleRegistryService } from '../services/style-registry.service';\nimport { InteractionEngineService } from '../services/interaction-engine.service';\nimport { PanelEventService, PanelEventTypes } from '../panels/panel-event.service';\n\n// Module-level counter — unique drop-list ID per Section instance across the whole app session.\nlet dropListCounter = 0;\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 @Output() onClick = new EventEmitter<any>();\n @Output() onMouseEnter = new EventEmitter<any>();\n @Output() onMouseLeave = new EventEmitter<any>();\n\n private childSubs: Subscription[] = [];\n\n constructor(\n private vcr: ViewContainerRef,\n private injector: Injector,\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 ) {}\n\n ngOnInit(): void {\n this.render(this.ioxRender);\n }\n\n ngOnDestroy(): void {\n this.childSubs.forEach(s => s.unsubscribe());\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 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 const componentRef = this.vcr.createComponent(componentClass, { injector: this.injector });\n\n // Apply regular trait defaults (title, image, description, etc.)\n // Use setInput() (Angular 14+) — it marks the view dirty and\n // integrates with Angular's CD tracking, unlike direct assignment.\n Object.values(node.traits || {}).forEach((trait: any) => {\n componentRef.setInput(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 rule in the central stylesheet.\n if (cssId) {\n this.styleRegistry.upsert(cssId, initialStyle);\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\n // participates properly in layout and CDK can capture its bounding rect.\n if (nativeEl) {\n nativeEl.style.display = 'block';\n }\n if (nativeEl) {\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 this.onMouseEnter.emit({ element: nativeEl, node });\n });\n nativeEl.addEventListener('mouseleave', (event: MouseEvent) => {\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 this.onClick.emit({ element: nativeEl, node, componentRef });\n });\n }\n\n // Wire up interactions (animations) after the element is in the DOM.\n this.interactionEngine.attach(node);\n }\n\n /** Try setInput(); fall back to direct assignment for non-@Input properties. */\n private safeSetInput(ref: any, name: string, value: any): void {\n try {\n ref.setInput(name, value);\n } catch {\n (ref.instance as any)[name] = value;\n }\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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { OverlayEntry, OverlayService, ToolbarAction } from './overlay.service';\nimport { ViewportService } from '../services/viewport.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' }>();\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 (toolbar ⋯ button)\n public moreMenuVisible = false;\n\n // Right-click context menu\n public contextMenuVisible = false;\n public contextMenuStyle: Record<string, string> = {};\n\n private subs: Subscription[] = [];\n private resizeObserver?: ResizeObserver;\n private containerResizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n private boundUpdate = () => this.updateAll();\n private activeScrollContainer: HTMLElement | null = null;\n\n constructor(\n private overlayService: OverlayService,\n private viewportService: ViewportService,\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 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 requestAnimationFrame(() => this.updateAll());\n })\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.updateAll());\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.boundUpdate);\n this.activeScrollContainer = el;\n el.addEventListener('scroll', this.boundUpdate, { passive: true });\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 window.removeEventListener('resize', this.boundUpdate);\n this.activeScrollContainer?.removeEventListener('scroll', this.boundUpdate);\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 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 this.moreMenuVisible = !this.moreMenuVisible;\n this.cdr.markForCheck();\n }\n\n closeMoreMenu(): void {\n this.moreMenuVisible = false;\n this.cdr.markForCheck();\n }\n\n onContextMenu(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.contextMenuStyle = {\n position: 'fixed',\n top: `${event.clientY}px`,\n left: `${event.clientX}px`,\n };\n this.contextMenuVisible = true;\n this.cdr.markForCheck();\n }\n\n onContextSaveAsBlock(event: MouseEvent): void {\n event.stopPropagation();\n this.closeContextMenu();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.SaveAsBlock, entry: this.selectEntry });\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 closeContextMenu(): void {\n this.contextMenuVisible = false;\n this.cdr.markForCheck();\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 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.updateAll();\n });\n this.resizeObserver.observe(styledEl);\n }\n\n // MutationObserver — catches style attribute changes (margin, padding etc.)\n this.mutationObserver = new MutationObserver(() => this.updateAll());\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?.boxModel) {\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 const { margin, border, padding } = this.hoverEntry.boxModel;\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 (contextmenu)=\"onContextMenu($event)\">\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 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 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 — last -->\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\n <!-- More dropdown (inline, positioned from toolbar) -->\n <div *ngIf=\"moreMenuVisible\" class=\"toolbar-more-dropdown\" (click)=\"$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 <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)=\"onContextSaveAsBlock($event)\">\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 </div>\n </div>\n\n <!-- Backdrop to close more menu or context menu -->\n <div *ngIf=\"moreMenuVisible || contextMenuVisible\" class=\"overlay-context-backdrop\"\n (mousedown)=\"closeMoreMenu(); closeContextMenu()\">\n </div>\n\n <!-- Right-click context menu -->\n <div *ngIf=\"contextMenuVisible\" class=\"overlay-context-menu\"\n [ngStyle]=\"contextMenuStyle\"\n (click)=\"$event.stopPropagation()\">\n <button class=\"context-menu-item\" (mousedown)=\"onContextSaveAsBlock($event)\">\n <i class=\"ph-thin ph-bookmark\"></i>\n Save as reusable block\n </button>\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 /** 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 }\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 /**\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.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 <h3 class=\"panel-title\">Layers</h3>\n </div>\n\n <div 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 <!-- Drag handle indicator -->\n <i class=\"ph-thin ph-dots-six-vertical drag-handle\" cdkDragHandle></i>\n\n <!-- Expand/collapse toggle -->\n <button *ngIf=\"tn.hasChildren\"\n class=\"expand-btn\"\n (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 <!-- Icon + Label -->\n <i [class]=\"tn.icon\" class=\"node-icon\"></i>\n <span class=\"node-label\">{{ tn.label }}</span>\n\n <!-- Actions (visible on hover) -->\n <span class=\"node-actions\">\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 section -->\n <ng-container *ngIf=\"flatGlobalTree.length\">\n <div class=\"tree-section-header\">\n <i class=\"ph-thin ph-globe\"></i>\n <span>Global Elements</span>\n </div>\n <div class=\"tree-body tree-body--global\">\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 <!-- Expand/collapse toggle -->\n <button *ngIf=\"tn.hasChildren\"\n class=\"expand-btn\"\n (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 <!-- Icon + Label -->\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 <!-- Actions (visible on hover) -->\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 </ng-container>\n</div>\n","\n\nimport { AfterViewInit, ApplicationRef, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport Lenis from 'lenis';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode, IoxDataSource } from './models/component.model';\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 { DataSourceRegistryService } from './services/data-source-registry.service';\nimport { InteractionEngineService } from './services/interaction-engine.service';\nimport { ViewportService } from './services/viewport.service';\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 @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 @Output() save = 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\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' = '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 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 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 /** 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 /**\n * The canvas min-height simulates a real browser viewport.\n * We subtract the builder header (~49px) and some padding from window.innerHeight.\n */\n get canvasMinHeight(): number {\n return Math.max(400, window.innerHeight - 80);\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 cdr: ChangeDetectorRef,\n private appRef: ApplicationRef,\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.panelEventService.emit(PanelEventTypes.PANEL_OPEN, PanelTypes.STYLES);\n this.dragEngine.isDragging$.subscribe((v: boolean) => {\n this.isDragging = v;\n this.cdr.markForCheck();\n });\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 // 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(), 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 }\n\n ngAfterViewInit(): void {\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\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 this.initLenis();\n setTimeout(() => this.appRef.tick());\n }\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n this.registrySub?.unsubscribe();\n this.viewportSub?.unsubscribe();\n this.destroyLenis();\n this.canvasRo?.disconnect();\n this.overlayService.setContainer(null);\n this.overlayService.setScrollContainer(null);\n const canvasEl = document.getElementById('canvas-preview');\n if (canvasEl) { this.dragEngine.unregisterDropzone('canvas-preview', canvasEl); }\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 });\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 } else {\n const clone = this.deepCloneWithNewIds(payload.data as ComponentNode);\n this.layout.splice(insertIndex, 0, clone);\n }\n this.cdr.markForCheck();\n return;\n }\n\n const item = payload.data as ComponentNode;\n\n if (payload.sourceId === 'blocks-panel') {\n // Reusable block dragged from blocks panel — deep clone with new IDs.\n const clone = this.deepCloneWithNewIds(item);\n this.layout.splice(insertIndex, 0, clone);\n this.cdr.markForCheck();\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 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 }\n }\n\n /** Resolve the width style-trait value for a node so the cdkDrag wrapper\n * matches the component's actual width (prevents full-canvas-width clones). */\n getNodeWidth(node: ComponentNode): string | undefined {\n if (!node.styleTraits) return undefined;\n for (const group of node.styleTraits) {\n for (const trait of group.traits) {\n if (trait.name === 'width' && trait.default !== undefined) {\n return trait.default;\n }\n }\n }\n return undefined;\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.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node: event.node, componentRef: event.componentRef });\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.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef: 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 } else if (action === NodeAction.Duplicate) {\n const clone = JSON.parse(JSON.stringify(node));\n result.parent.splice(result.index + 1, 0, clone);\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' }): 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);\n if (result) {\n result.parent.splice(result.index, 1);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n break;\n }\n case ToolbarAction.Duplicate: {\n const result = this.findNodeInTree(node, this.layout);\n if (result) {\n const clone = JSON.parse(JSON.stringify(node));\n result.parent.splice(result.index + 1, 0, clone);\n }\n break;\n }\n case ToolbarAction.Play: {\n this.interactionEngine.replay(node);\n break;\n }\n case ToolbarAction.SaveAsBlock: {\n this.pendingBlockNode = node;\n this.saveBlockName = '';\n this.showSaveBlockDialog = true;\n break;\n }\n case ToolbarAction.SelectParent: {\n const parentNode = this.findParentNode(node, this.layout);\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.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node: parentNode, componentRef: 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 }\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 }\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 this.assignNewIds(clone);\n return clone;\n }\n\n private assignNewIds(node: ComponentNode): void {\n node.id = Math.random().toString(36).slice(2, 10);\n if (node.styleId) node.styleId = Math.random().toString(36).slice(2, 10);\n node.children?.forEach(child => this.assignNewIds(child));\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 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 = 'components'\" [class.active]=\"activeSidebar === 'components'\">\n <i class=\"ph-thin ph-cube\"></i>\n </button>\n <button (click)=\"activeSidebar = 'tree'\" [class.active]=\"activeSidebar === 'tree'\">\n <i class=\"ph-thin ph-tree-structure\"></i>\n </button>\n </div>\n <div class=\"panel-switcher\">\n <button (click)=\"selectPanel(panelTypes.BINDINGS)\" [class.active]=\"activePanel === panelTypes.BINDINGS\">\n <i class=\"ph-thin ph-plugs-connected\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.STYLES)\" [class.active]=\"activePanel === panelTypes.STYLES\">\n <i class=\"ph-thin ph-paint-brush\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.PAGE)\" [class.active]=\"activePanel === panelTypes.PAGE\">\n <i class=\"ph-thin ph-file\"></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 === 'components'\" class=\"sidebar-slot\">\n <ng-content select=\"[builderComponents]\"></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 <!-- 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 <div *ngIf=\"globalElements.length\"\n class=\"global-elements-overlay\"\n [style.width.px]=\"viewportWidth\"\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 <!-- Custom Lenis scrollbar — inside .preview-scroll (Lenis wrapper).\n position:absolute shifts with scrollTop, so we counteract with\n transform:translateY(scrollTop) to keep it visually anchored. -->\n <div class=\"canvas-scrollbar\"\n [class.visible]=\"isScrollbarVisible\"\n [style.transform]=\"'translateY(' + scrollbarTranslate + 'px)'\">\n <div class=\"canvas-scrollbar-thumb\"\n [style.height.px]=\"scrollThumbHeight\"\n [style.top.px]=\"scrollThumbTop\">\n </div>\n </div>\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.transform]=\"viewportTransform\">\n\n <div class=\"canvas-viewport\"\n id=\"canvas-preview\"\n [style.min-height.px]=\"canvasMinHeight\">\n\n <div *ngFor=\"let item of layout\"\n class=\"preview-node\"\n [class.is-selected]=\"selectedItem === item\"\n [style.width]=\"getNodeWidth(item)\"\n ioxDraggable\n [ioxDragData]=\"item\"\n [ioxDragSourceId]=\"'canvas-preview'\">\n <ng-container [ioxRender]=\"item\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </div>\n </div>\n </iox-page-component>\n </div>\n </div>\n </main>\n\n <app-toolbar\n [activeMode]=\"activeMode\"\n [activeDevice]=\"activeDevice\"\n [activeZoom]=\"activeZoom\"\n [activeScreenWidth]=\"activeScreenWidth\"\n [isSaving]=\"isSaving\"\n [pageStatus]=\"pageStatus\"\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 </app-toolbar>\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\">\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 { 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 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@Component({\n selector: 'app-section',\n template: `\n <div class=\"section-root\"\n [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\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 <div *ngFor=\"let child of children\"\n class=\"section-child\"\n [style.width]=\"getChildWidth(child)\"\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 .section-root {\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 }\n .section-placeholder i { font-size: 22px; }\n .section-child {\n /* No hardcoded width or align-self here — let the parent flex\n container's align-items / justify-content control alignment.\n Explicit widths come from [style.width]=\"getChildWidth(child)\"\n which reads the node's width styleTraits. */\n min-width: 0;\n }\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 dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {}\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 getChildWidth(node: ComponentNode): string | undefined {\n if (!node.styleTraits) return undefined;\n for (const group of node.styleTraits) {\n for (const trait of group.traits) {\n if (trait.name === 'width' && trait.default !== undefined) return trait.default;\n }\n }\n return undefined;\n }\n\n ngOnDestroy(): void {}\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 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@Component({\n selector: 'app-builder-container',\n template: `\n <div class=\"container-root\"\n [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\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 <div *ngFor=\"let child of children\"\n class=\"container-child\"\n [style.width]=\"getChildWidth(child)\"\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 .container-root {\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 }\n .container-placeholder i { font-size: 18px; }\n .container-child {\n min-width: 0;\n }\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\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 ) {}\n\n ngOnInit(): void {}\n ngOnDestroy(): void {}\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 getChildWidth(node: ComponentNode): string | undefined {\n if (!node.styleTraits) return undefined;\n for (const group of node.styleTraits) {\n for (const trait of group.traits) {\n if (trait.name === 'width' && trait.default !== undefined) return trait.default;\n }\n }\n return undefined;\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 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 <div *ngFor=\"let child of children\"\n class=\"linked-container-child\"\n [style.width]=\"getChildWidth(child)\"\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 </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 }\n .linked-container-placeholder i { font-size: 18px; }\n .linked-container-child {\n min-width: 0;\n }\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 getChildWidth(node: ComponentNode): string | undefined {\n for (const group of (node.styleTraits || [])) {\n for (const trait of group.traits) {\n if (trait.name === 'width' && trait.default !== undefined) return trait.default;\n }\n }\n return undefined;\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Optional CMS content fetcher. Provide from the host app to enable Repeater data preview. */\nexport const IOX_CONTENT_SERVICE = new InjectionToken<IoxContentService>('IOX_CONTENT_SERVICE');\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 IoxContentService {\n getContent(contentType: string, orgId?: string): import('rxjs').Observable<any>;\n}\n\nexport interface IoxFontManager {\n loadFonts(orgId: string): void;\n uploadedFonts$: import('rxjs').Observable<any>;\n getAllFontOptions(): { label: string; value: string }[];\n}\n","import { ComponentNode, IoxBinding } from '../models/component.model';\n\n/**\n * Resolves a dot-notation path (with optional array bracket notation) against an object.\n * Examples: 'title', 'author.name', 'tags[0]', 'items[2].title'\n */\nexport function resolvePath(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n if (current == null) return undefined;\n const bracketMatch = key.match(/^(\\w+)\\[(\\d+)]$/);\n if (bracketMatch) {\n const arr = current[bracketMatch[1]];\n return Array.isArray(arr) ? arr[parseInt(bracketMatch[2], 10)] : undefined;\n }\n return current[key];\n }, obj);\n}\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\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 {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\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 { IOX_CONTENT_SERVICE, IoxContentService } from '../../tokens/builder.tokens';\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-builder-repeater',\n template: `\n <div class=\"repeater-root\" [ngClass]=\"['iox-node-' + nodeId, children.length ? 'has-children' : '']\">\n\n <!-- Badge: always visible when empty, absolute hover-only when has children -->\n <div class=\"repeater-badge\">\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 </div>\n\n <!-- Template drop zone — user designs one item here -->\n <div class=\"repeater-template\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n [ioxDropzonePostDrop]=\"refreshPreviewsBound\"\n (ioxDrop)=\"onDrop($event)\">\n\n <div *ngIf=\"!children.length\" 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\n <div *ngFor=\"let child of children\"\n class=\"repeater-template-child\"\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 <!-- Preview rows for items 2..N — read-only clones with real data -->\n <div *ngFor=\"let row of previewRows\" class=\"repeater-preview-row\">\n <ng-container *ngFor=\"let child of row\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"$event\"\n (onMouseEnter)=\"$event\"\n (onMouseLeave)=\"undefined\">\n </ng-container>\n </ng-container>\n </div>\n </div>\n `,\n styles: [`\n .repeater-root {\n position: relative;\n box-sizing: border-box;\n }\n\n /* ── Empty state: badge sits above the dashed border (normal flow) ── */\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 state: badge becomes absolute, hidden until hover ── */\n .repeater-root.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-root.has-children:hover .repeater-badge {\n opacity: 1;\n }\n\n /* ── Has-children state: remove the template border & radius ── */\n .repeater-root.has-children .repeater-template {\n border: none;\n border-radius: 0;\n padding: 0;\n min-height: unset;\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 /* Empty state template border */\n .repeater-template {\n border: 1px dashed rgba(203, 144, 144, 0.4);\n border-radius: 0 0 4px 4px;\n padding: 4px;\n min-height: 40px;\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 .repeater-template-child {\n min-width: 0;\n }\n\n .repeater-preview-row {\n opacity: 0.55;\n pointer-events: none;\n }\n `],\n standalone: false,\n})\nexport class BuilderRepeaterComponent 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 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 _limit = 10;\n private orgId = 'default';\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 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 @Optional() @Inject(IOX_CONTENT_SERVICE) private contentService: IoxContentService | null,\n private dsRegistry: DataSourceRegistryService,\n private panelEventService: PanelEventService,\n private activatedRoute: ActivatedRoute,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.orgId = this.activatedRoute.snapshot.paramMap.get('orgId') || 'default';\n\n // When a binding is added/removed on any node, regenerate the preview rows.\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) return;\n if (this.children.some(c => c === changedNode || c.id === changedNode.id)) {\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 private fetchData(): void {\n if (!this._source) return;\n const ds = this.dsRegistry.findByAlias(this._source);\n const contentType = ds?.request?.cms?.contentType;\n if (!contentType || !this.contentService) return;\n this.isLoading = true;\n this.cdr.markForCheck();\n this.contentService.getContent(contentType, this.orgId).subscribe({\n next: (data: any) => {\n const all: any[] = Array.isArray(data) ? data : (data?.items || data?.data || []);\n this.items = all.slice(0, this._limit);\n this.refreshPreviews();\n this.isLoading = false;\n this.cdr.markForCheck();\n },\n error: () => {\n this.isLoading = false;\n this.cdr.markForCheck();\n }\n });\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\n for (const child of this.children) {\n if (!child.bindings?.length) continue;\n const ref = this.overlayService.getNodeRef(child);\n if (!ref?.componentRef) continue;\n\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}\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>","export enum StyleCategory {\n Layout = 'Layout',\n Size = 'Size',\n Typography = 'Typography',\n Spacing = 'Spacing',\n Border = 'Border',\n Position = 'Position',\n Background = 'Background',\n Effects = 'Effects',\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}\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 maps a schema field to a URL query string\n * key (e.g. ?status=active → field \"status\").\n * `defaultValue` is used as a fallback in the builder preview.\n */\nexport interface DsFilterByQueryParam {\n field: string;\n queryParam: string;\n defaultValue?: string;\n}\n\nexport interface IoxDataSource {\n id: string;\n type: 'cms' | 'internal-api' | 'external-api' | 'static';\n mode: 'single' | 'query';\n alias: string;\n request: {\n method?: 'GET' | 'POST';\n endpoint?: 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 params?: Record<string, any>;\n };\n}\n\n// ── Interactions / Animations ────────────────────────────────\n\nexport type InteractionTrigger = 'pageLoad' | 'click' | 'hover' | 'viewportEnter' | 'scrollProgress';\n\nexport type InteractionActionType =\n | 'fadeIn' | 'fadeOut'\n | 'moveUp' | 'moveDown' | 'moveLeft' | 'moveRight'\n | 'scaleIn' | 'scaleOut'\n | 'rotate'\n | 'show' | 'hide' | 'toggleVisibility';\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 /** Extra parameters (e.g. { distance: 20 } for move actions). */\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\nexport const TRIGGER_OPTIONS: { value: InteractionTrigger; label: string; icon: string }[] = [\n { value: 'pageLoad', label: 'Page load', icon: 'ph-thin ph-play' },\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];\n\nexport const EASING_OPTIONS = ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out'];\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}\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 Icon = 'icon',\n Media = 'media',\n FontFamily = 'fontFamily'\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 the named sibling trait matches one of the given values. */\nexport interface TraitShowCondition {\n /** name of another trait in the same style group */\n trait: string;\n /** one value or an array of values that make this trait visible */\n values: string | string[];\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\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 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.Icon: return 'icon';\n case TraitInputType.Media: return 'media';\n case TraitInputType.FontFamily: return 'select';\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.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'], 'block'),\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('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' }),\n new TraitConfig('alignItems', 'Align', TraitInputType.SelectButton, [\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-vertical' },\n { value: 'flex-start', label: 'Start', icon: 'ph-thin ph-align-top' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-vertical' },\n { value: 'flex-end', label: 'End', icon: 'ph-thin ph-align-bottom' },\n ], 'stretch', 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 new TraitConfig('gap', 'Gap', TraitInputType.Scrub,\n { min: 0, max: 200, step: 1, units: UNITS_FIXED }, '0px', false,\n { trait: 'display', values: 'flex' }),\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// ─── 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 new TraitConfig('aspectRatio', 'Aspect Ratio', TraitInputType.Select,\n ['auto', '1/1', '4/3', '16/9', '3/2', '2/3', '9/16'], 'auto'),\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_FIXED }, '16px'),\n new TraitConfig('fontWeight', 'Font Weight', TraitInputType.Select,\n ['100', '200', '300', '400', '500', '600', '700', '800', '900'], '400'),\n new TraitConfig('color', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: false, formats: ['hex', 'rgb', 'hsl'] }, '#000000'),\n new TraitConfig('lineHeight', 'Line Height', TraitInputType.Select,\n ['1', '1.2', '1.4', '1.5', '1.75', '2', '2.5'], '1.5'),\n new TraitConfig('letterSpacing', 'Letter Spacing', TraitInputType.Scrub,\n { min: -5, max: 50, step: 0.5, units: UNITS_FIXED }, '0px'),\n new TraitConfig('textAlign', 'Alignment', 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', 'Italic', 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', 'Underline', TraitInputType.SelectButton,\n { items: [{ value: 'underline', icon: 'ph-thin ph-text-underline', label: 'Underline' }], allowEmpty: true, noneValue: 'none' },\n 'none', true),\n ]);\n }\n}\n\nexport class EffectsGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Effects, [\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 }\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}","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport {\n ComponentNode,\n IoxInteraction,\n InteractionAction,\n InteractionTrigger,\n InteractionActionType,\n TRIGGER_OPTIONS,\n ACTION_TYPE_OPTIONS,\n EASING_OPTIONS,\n generateNodeId,\n} from '../../models/component.model';\nimport { OverlayService } from '../../overlay/overlay.service';\n\n@Component({\n selector: 'app-interactions-panel',\n templateUrl: './interactions.component.html',\n styleUrls: ['./interactions.component.scss'],\n standalone: false,\n})\nexport class InteractionsPanelComponent implements OnInit, OnDestroy {\n @Input() node: ComponentNode | null = null;\n\n public triggerOptions = TRIGGER_OPTIONS;\n public actionTypeOptions = ACTION_TYPE_OPTIONS;\n public easingOptions = EASING_OPTIONS;\n public interactions: IoxInteraction[] = [];\n\n /** State for the \"add interaction\" form */\n public isAdding = false;\n public newTrigger: InteractionTrigger = 'pageLoad';\n public newActionType: InteractionActionType = 'fadeIn';\n public newDuration = 600;\n public newDelay = 0;\n public newEasing: string = 'ease-out';\n public newOnce = true;\n\n /** Expanded interaction ID for editing */\n public expandedId: string | null = null;\n\n private selectSub?: Subscription;\n\n constructor(private overlayService: OverlayService) {}\n\n ngOnInit(): void {\n this.selectSub = this.overlayService.select$.subscribe(entry => {\n this.node = entry?.node ?? null;\n this.interactions = this.node?.interactions ?? [];\n this.isAdding = false;\n this.expandedId = null;\n });\n }\n\n ngOnDestroy(): void {\n this.selectSub?.unsubscribe();\n }\n\n getTriggerLabel(trigger: InteractionTrigger): string {\n return this.triggerOptions.find(t => t.value === trigger)?.label ?? trigger;\n }\n\n getTriggerIcon(trigger: InteractionTrigger): string {\n return this.triggerOptions.find(t => t.value === trigger)?.icon ?? 'ph-thin ph-lightning';\n }\n\n getActionLabel(type: InteractionActionType): string {\n return this.actionTypeOptions.find(a => a.value === type)?.label ?? type;\n }\n\n getActionsSummary(interaction: IoxInteraction): string {\n return interaction.actions.map(a => this.getActionLabel(a.type)).join(', ');\n }\n\n toggleExpand(id: string): void {\n this.expandedId = this.expandedId === id ? null : id;\n }\n\n // ── Add interaction ──────────────────────────────────────\n\n startAdd(): void {\n this.isAdding = true;\n this.newTrigger = 'pageLoad';\n this.newActionType = 'fadeIn';\n this.newDuration = 600;\n this.newDelay = 0;\n this.newEasing = 'ease-out';\n this.newOnce = true;\n }\n\n cancelAdd(): void {\n this.isAdding = false;\n }\n\n confirmAdd(): void {\n if (!this.node) return;\n\n const action: InteractionAction = {\n type: this.newActionType,\n target: 'self',\n duration: this.newDuration,\n delay: this.newDelay,\n easing: this.newEasing as InteractionAction['easing'],\n once: this.newOnce,\n };\n\n const interaction: IoxInteraction = {\n id: generateNodeId(),\n trigger: this.newTrigger,\n actions: [action],\n };\n\n if (!this.node.interactions) {\n this.node.interactions = [];\n }\n this.node.interactions.push(interaction);\n this.interactions = this.node.interactions;\n this.isAdding = false;\n }\n\n // ── Remove interaction ───────────────────────────────────\n\n removeInteraction(id: string): void {\n if (!this.node?.interactions) return;\n this.node.interactions = this.node.interactions.filter(i => i.id !== id);\n this.interactions = this.node.interactions;\n if (this.expandedId === id) {\n this.expandedId = null;\n }\n }\n\n // ── Add action to existing interaction ───────────────────\n\n addAction(interaction: IoxInteraction): void {\n interaction.actions.push({\n type: 'fadeIn',\n target: 'self',\n duration: 600,\n delay: 0,\n easing: 'ease-out',\n once: true,\n });\n }\n\n removeAction(interaction: IoxInteraction, index: number): void {\n interaction.actions.splice(index, 1);\n // Remove the interaction if it has no actions left\n if (interaction.actions.length === 0) {\n this.removeInteraction(interaction.id);\n }\n }\n}\n","<div class=\"interactions-panel\">\n <!-- No element selected -->\n <div *ngIf=\"!node\" class=\"section-empty\">\n Select an element to manage interactions\n </div>\n\n <ng-container *ngIf=\"node\">\n <!-- Interaction cards -->\n <div *ngFor=\"let ix of interactions\" class=\"ix-card\" [class.is-expanded]=\"expandedId === ix.id\">\n <!-- Summary row -->\n <div class=\"ix-card-header\" (click)=\"toggleExpand(ix.id)\">\n <i [class]=\"getTriggerIcon(ix.trigger)\" class=\"ix-trigger-icon\"></i>\n <div class=\"ix-card-summary\">\n <span class=\"ix-trigger-label\">{{ getTriggerLabel(ix.trigger) }}</span>\n <span class=\"ix-arrow\">→</span>\n <span class=\"ix-action-label\">{{ getActionsSummary(ix) }}</span>\n </div>\n <button class=\"ix-remove-btn\" title=\"Remove\" (click)=\"removeInteraction(ix.id); $event.stopPropagation()\">\n <i class=\"ph-thin ph-x\"></i>\n </button>\n </div>\n\n <!-- Expanded detail -->\n <div *ngIf=\"expandedId === ix.id\" class=\"ix-card-body\">\n <div class=\"ix-field\">\n <label>Trigger</label>\n <select [(ngModel)]=\"ix.trigger\">\n <option *ngFor=\"let t of triggerOptions\" [value]=\"t.value\">{{ t.label }}</option>\n </select>\n </div>\n\n <div *ngFor=\"let action of ix.actions; let ai = index\" class=\"ix-action-row\">\n <div class=\"ix-action-header\">\n <span class=\"ix-action-index\">Action {{ ai + 1 }}</span>\n <button *ngIf=\"ix.actions.length > 1\"\n class=\"ix-remove-btn small\"\n title=\"Remove action\"\n (click)=\"removeAction(ix, ai)\">\n <i class=\"ph-thin ph-x\"></i>\n </button>\n </div>\n\n <div class=\"ix-field\">\n <label>Type</label>\n <select [(ngModel)]=\"action.type\">\n <option *ngFor=\"let a of actionTypeOptions\" [value]=\"a.value\">{{ a.label }}</option>\n </select>\n </div>\n\n <div class=\"ix-field-row\">\n <div class=\"ix-field\">\n <label>Duration (ms)</label>\n <input type=\"number\" [(ngModel)]=\"action.duration\" min=\"0\" step=\"50\">\n </div>\n <div class=\"ix-field\">\n <label>Delay (ms)</label>\n <input type=\"number\" [(ngModel)]=\"action.delay\" min=\"0\" step=\"50\">\n </div>\n </div>\n\n <div class=\"ix-field\">\n <label>Easing</label>\n <select [(ngModel)]=\"action.easing\">\n <option *ngFor=\"let e of easingOptions\" [value]=\"e\">{{ e }}</option>\n </select>\n </div>\n\n <div class=\"ix-field ix-checkbox-field\">\n <label>\n <input type=\"checkbox\" [(ngModel)]=\"action.once\">\n Play once\n </label>\n </div>\n </div>\n\n <button class=\"ix-add-action-btn\" (click)=\"addAction(ix)\">\n <i class=\"ph-thin ph-plus\"></i> Add action\n </button>\n </div>\n </div>\n\n <!-- Add interaction form -->\n <div *ngIf=\"isAdding\" class=\"ix-add-form\">\n <div class=\"ix-field\">\n <label>Trigger</label>\n <select [(ngModel)]=\"newTrigger\">\n <option *ngFor=\"let t of triggerOptions\" [value]=\"t.value\">{{ t.label }}</option>\n </select>\n </div>\n <div class=\"ix-field\">\n <label>Action</label>\n <select [(ngModel)]=\"newActionType\">\n <option *ngFor=\"let a of actionTypeOptions\" [value]=\"a.value\">{{ a.label }}</option>\n </select>\n </div>\n <div class=\"ix-field-row\">\n <div class=\"ix-field\">\n <label>Duration (ms)</label>\n <input type=\"number\" [(ngModel)]=\"newDuration\" min=\"0\" step=\"50\">\n </div>\n <div class=\"ix-field\">\n <label>Delay (ms)</label>\n <input type=\"number\" [(ngModel)]=\"newDelay\" min=\"0\" step=\"50\">\n </div>\n </div>\n <div class=\"ix-field\">\n <label>Easing</label>\n <select [(ngModel)]=\"newEasing\">\n <option *ngFor=\"let e of easingOptions\" [value]=\"e\">{{ e }}</option>\n </select>\n </div>\n <div class=\"ix-field ix-checkbox-field\">\n <label>\n <input type=\"checkbox\" [(ngModel)]=\"newOnce\">\n Play once\n </label>\n </div>\n <div class=\"ix-form-actions\">\n <button class=\"ix-btn ix-btn--secondary\" (click)=\"cancelAdd()\">Cancel</button>\n <button class=\"ix-btn ix-btn--primary\" (click)=\"confirmAdd()\">Add</button>\n </div>\n </div>\n\n <!-- Add button -->\n <button *ngIf=\"!isAdding\" class=\"ix-add-btn\" (click)=\"startAdd()\">\n <i class=\"ph-thin ph-plus\"></i> Add interaction\n </button>\n </ng-container>\n</div>\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 { 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';\nimport { InteractionsPanelComponent } from './panels/interactions/interactions.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';\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 PanelComponent,\n PanelChildComponent,\n LayerTreeComponent,\n InteractionsPanelComponent,\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 ],\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 PanelComponent,\n PanelChildComponent,\n LayerTreeComponent,\n InteractionsPanelComponent,\n ],\n schemas: [NO_ERRORS_SCHEMA],\n})\nexport class IoxBuilderModule {}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n TypographyGroupStyleConfig\n} 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 = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType\n} 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 = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\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 {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n} 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 this.styleTraits = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.applyStyleDefaults({\n width: '100%',\n height: 'auto',\n minHeight: '200px',\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n} 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 = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.applyStyleDefaults({\n width: '100%',\n height: '1px',\n backgroundColor: '#cccccc',\n margin: '8px 0px 8px 0px',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n TypographyGroupStyleConfig,\n} 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 = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.applyStyleDefaults({\n fontSize: '32px',\n fontWeight: '700',\n width: 'auto',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n GroupStyleConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n StyleCategory,\n TraitConfig,\n TraitInputType,\n UNITS_FIXED,\n} 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 = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new GroupStyleConfig(StyleCategory.Typography, [\n new TraitConfig('fontSize', 'Size', TraitInputType.Scrub,\n { min: 8, max: 200, step: 1, units: UNITS_FIXED }, '24px'),\n new TraitConfig('color', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: false, formats: ['hex', 'rgb', 'hsl'] }, '#374151'),\n ]),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType\n} 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 objectFit: 'select'\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 new TraitConfig('objectFit', 'Object Fit', TraitInputType.Select, ['cover', 'contain', 'fill', 'none'], 'cover'),\n ];\n this.styleTraits = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n ];\n\n this.applyStyleDefaults({\n width: '300px',\n aspectRatio: '1/1',\n });\n }\n}\n","import {\n ComponentConfig,\n EffectsGroupStyleConfig,\n PositionGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n TypographyGroupStyleConfig,\n} 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 = [\n new PositionGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n} 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 = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.applyStyleDefaults({\n width: 'auto',\n height: 'auto',\n minHeight: '80px',\n display: 'block',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n ComponentTrait,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitInputType,\n} 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 = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.applyStyleDefaults({\n width: '100%',\n height: 'auto',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n} 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 = []; // marks this config as a layout component — RenderDirective checks `node.children !== undefined`\n this.traits = [];\n this.styleTraits = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\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 EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n SizeGroupStyleConfig,\n} 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 = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.applyStyleDefaults({\n width: '100%',\n height: '40px',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n TypographyGroupStyleConfig\n} 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 = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n\n this.applyStyleDefaults({\n width: '200px',\n height: 'auto',\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, DsFilterByRouteParam, DsFilterByQueryParam, IoxDataSource, InteractionTrigger, InteractionActionType, InteractionAction, IoxInteraction, TRIGGER_OPTIONS, ACTION_TYPE_OPTIONS, 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 } from './lib/models/component.model';\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/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/panels/interactions/interactions.component';\nexport * from './lib/services/interaction-engine.service';\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';\n\n// Component configs\nexport * from './lib/components/button/button.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/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/repeater/repeater.config';\nexport * from './lib/components/section/section.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","i1.OverlayService","i2.OverlayService","i3.StyleRegistryService","i4.InteractionEngineService","i5.PanelEventService","i1.DragEngineService","i2.ViewportService","i3","i1","i2","i3.PanelEventService","i4.DragEngineService","i5.DataSourceRegistryService","i6.ViewportService","i7.InteractionEngineService","i8","i9","i12.RenderDirective","i13.IoxDraggableDirective","i14.OverlayComponent","i15.ToolbarComponent","i16.LayerTreeComponent","i3.RenderDirective","i4.IoxDraggableDirective","i5.IoxDropzoneDirective","i3.DataSourceRegistryService","i4.PanelEventService","i6","i7.RenderDirective","i8.IoxDraggableDirective","i9.IoxDropzoneDirective","i1.PanelEventService"],"mappings":"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"}
1
+ {"version":3,"file":"vectoriox-iox-builder.mjs","sources":["../../../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/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/interaction-engine.service.ts","../../../projects/iox-builder/src/lib/services/style-registry.service.ts","../../../projects/iox-builder/src/lib/render/render.directive.ts","../../../projects/iox-builder/src/lib/directives/iox-draggable.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/directives/iox-dropzone.directive.ts","../../../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/components/linked-container/linked-container.component.ts","../../../projects/iox-builder/src/lib/tokens/builder.tokens.ts","../../../projects/iox-builder/src/lib/utils/binding-path.util.ts","../../../projects/iox-builder/src/lib/components/repeater/repeater.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/models/component.model.ts","../../../projects/iox-builder/src/lib/panels/interactions/interactions.component.ts","../../../projects/iox-builder/src/lib/panels/interactions/interactions.component.html","../../../projects/iox-builder/src/lib/iox-builder.module.ts","../../../projects/iox-builder/src/lib/components/button/button.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/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/repeater/repeater.config.ts","../../../projects/iox-builder/src/lib/components/section/section.config.ts","../../../projects/iox-builder/src/lib/components/spacer/spacer.config.ts","../../../projects/iox-builder/src/lib/components/text/text.config.ts","../../../projects/iox-builder/src/public-api.ts","../../../projects/iox-builder/src/vectoriox-iox-builder.ts"],"sourcesContent":["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}\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 PAGE = 'Page',\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 { 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 enter: RouteAnimationPreset;\n leave: RouteAnimationPreset;\n duration: number;\n easing: string;\n}\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 duration: 400,\n easing: 'ease',\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}\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}\n\nexport const DEVICE_OPTIONS: DeviceOption[] = [\n { mode: DeviceMode.Desktop, label: 'Desktop', icon: 'ph-thin ph-desktop', width: 1440 },\n { mode: DeviceMode.Tablet, label: 'Tablet', icon: 'ph-thin ph-device-tablet', width: 768 },\n { mode: DeviceMode.Mobile, label: 'Mobile', icon: 'ph-thin ph-device-mobile', width: 375 },\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\n /** Emits the scroll container element whenever it is registered. */\n public scrollContainer$ = new Subject<HTMLElement>();\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 /**\n * Resolve the inner styled element.\n * Builder components apply [ngStyle] on their first child element,\n * so computed styles (padding, margin) live there — not on the host.\n */\n getStyledElement(host: HTMLElement): HTMLElement {\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 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 private buildBoxModel(host: HTMLElement): OverlayBoxModel {\n const s = window.getComputedStyle(this.getStyledElement(host));\n const px = (v: string) => { const n = Number.parseFloat(v); return Number.isFinite(n) ? n : 0; };\n return {\n margin: { top: px(s.marginTop), right: px(s.marginRight), bottom: px(s.marginBottom), left: px(s.marginLeft) },\n padding: { top: px(s.paddingTop), right: px(s.paddingRight), bottom: px(s.paddingBottom), left: px(s.paddingLeft) },\n border: { top: px(s.borderTopWidth), right: px(s.borderRightWidth), bottom: px(s.borderBottomWidth), left: px(s.borderLeftWidth) },\n };\n }\n\n}","import { ChangeDetectorRef, Injectable } from '@angular/core';\nimport interact from 'interactjs';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { ComponentNode } from '../models/component.model';\nimport { ComponentRegistryService } from './component-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\n@Injectable()\nexport class DragEngineService {\n\n constructor(private registry: ComponentRegistryService) {}\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 config = this.registry.createConfig(payload.data as string);\n if (config) {\n children.splice(insertIndex, 0, config);\n cdr.detectChanges();\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 }\n children.splice(insertIndex, 0, item);\n cdr.detectChanges();\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 }\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\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 // ── 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 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 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\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 const rect = 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 = 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 = 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._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 /** Visual scale factor (0–1+). Canvas is rendered at `width` 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 });\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 20px each side).\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 * 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 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 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","import { Injectable } from '@angular/core';\n\nimport {\n ComponentNode,\n InteractionAction,\n IoxInteraction,\n} from '../models/component.model';\nimport { OverlayService } from '../overlay/overlay.service';\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 constructor(private overlayService: OverlayService) {}\n\n /** Wire all interactions for a node to its rendered DOM element. */\n attach(node: ComponentNode): void {\n if (!node.interactions?.length) return;\n\n const ref = this.overlayService.getNodeRef(node);\n if (!ref) return;\n\n const cleanups: AttachedInteraction[] = [];\n\n for (const ix of node.interactions) {\n const cleanup = this.attachInteraction(node, ix, ref.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 {\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 // Cancelling Web Animations removes fill:'forwards' committed styles,\n // returning the element to its natural CSS state.\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n ref.element.getAnimations().forEach(a => a.cancel());\n }\n }\n\n /** Re-attach interactions after they have been edited in the panel. */\n refresh(node: ComponentNode): void {\n this.detach(node);\n 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 {\n if (!node.interactions?.length) return;\n\n // Cancel any in-progress animations first to reset the element cleanly.\n const ref = this.overlayService.getNodeRef(node);\n if (ref) {\n ref.element.getAnimations().forEach(a => a.cancel());\n }\n\n for (const ix of node.interactions) {\n this.runActions(node, ix.actions);\n }\n }\n\n // ── Private ──────────────────────────────────────────────\n\n private attachInteraction(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n switch (ix.trigger) {\n case 'pageLoad':\n return this.attachPageLoad(node, ix, element);\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 // Execute immediately (next microtask to let rendering settle)\n const timer = setTimeout(() => {\n this.runActions(node, ix.actions);\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 const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n const key = ix.id;\n if (ix.actions.some(a => a.once) && firedSet.has(key)) continue;\n firedSet.add(key);\n this.runActions(node, ix.actions);\n }\n }\n }, { threshold: 0.1 });\n observer.observe(element);\n return () => observer.disconnect();\n }\n\n private attachClick(node: ComponentNode, ix: IoxInteraction, element: HTMLElement): () => void {\n const handler = (e: MouseEvent) => {\n // Don't trigger during builder editing clicks — only in preview mode.\n // For now, we always run it. In the future, check BuilderMode.\n this.runActions(node, ix.actions);\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);\n const leaveHandler = () => {\n // Reverse animations on leave for hover triggers\n for (const action of ix.actions) {\n const target = this.resolveTarget(node, action);\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[]): void {\n for (const action of actions) {\n const target = this.resolveTarget(node, action);\n if (!target) continue;\n this.executeAction(target, action);\n }\n }\n\n private resolveTarget(ownerNode: ComponentNode, action: InteractionAction): HTMLElement | null {\n if (action.target === 'self') {\n const ref = this.overlayService.getNodeRef(ownerNode);\n return ref?.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 element.animate(keyframes, {\n duration: action.duration,\n delay: action.delay,\n easing: action.easing,\n fill: 'forwards',\n });\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\n/**\n * StyleRegistryService — manages a single <style> tag for the builder canvas.\n *\n * Each builder component gets a unique CSS class `.iox-node-{id}` applied to its\n * first inner element. onUpdate() in the style panel calls upsert() to compile\n * the flat style-trait map into a CSS rule and flush it to the stylesheet.\n *\n * This replaces the old [ngStyle] binding, enabling future support for\n * hover states, breakpoints, and pseudo-selectors without DOM modifications.\n *\n * Scoped to PageUiComponent.providers[] — one stylesheet per builder instance.\n */\n@Injectable()\nexport class StyleRegistryService {\n private rules = new Map<string, string>();\n private styleEl: HTMLStyleElement | null = null;\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 upsert(nodeId: string, styles: Record<string, any>): void {\n if (!nodeId) return;\n const css = this.compile(nodeId, styles);\n if (css) {\n this.rules.set(nodeId, css);\n } else {\n this.rules.delete(nodeId);\n }\n this.flush();\n }\n\n remove(nodeId: string): void {\n if (!nodeId) return;\n this.rules.delete(nodeId);\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(nodeId: string, styles: Record<string, any>): string {\n const entries = Object.entries(styles)\n .filter(([, v]) => v !== undefined && v !== null && v !== '')\n .map(([k, v]) => ` ${this.toKebabCase(k)}: ${v};`);\n if (!entries.length) return '';\n return `.iox-node-${nodeId} {\\n${entries.join('\\n')}\\n}`;\n }\n\n private toKebabCase(str: string): string {\n return str.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n }\n\n private flush(): void {\n if (!this.styleEl) return;\n this.styleEl.textContent = Array.from(this.rules.values()).join('\\n');\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n EventEmitter,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewContainerRef\n} from '@angular/core';\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 { StyleRegistryService } from '../services/style-registry.service';\nimport { InteractionEngineService } from '../services/interaction-engine.service';\nimport { PanelEventService, PanelEventTypes } from '../panels/panel-event.service';\n\n// Module-level counter — unique drop-list ID per Section instance across the whole app session.\nlet dropListCounter = 0;\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 @Output() onClick = new EventEmitter<any>();\n @Output() onMouseEnter = new EventEmitter<any>();\n @Output() onMouseLeave = new EventEmitter<any>();\n\n private childSubs: Subscription[] = [];\n\n constructor(\n private vcr: ViewContainerRef,\n private injector: Injector,\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 ) {}\n\n ngOnInit(): void {\n this.render(this.ioxRender);\n }\n\n ngOnDestroy(): void {\n this.childSubs.forEach(s => s.unsubscribe());\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 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 const componentRef = this.vcr.createComponent(componentClass, { injector: this.injector });\n\n // Apply regular trait defaults (title, image, description, etc.)\n // Use setInput() (Angular 14+) — it marks the view dirty and\n // integrates with Angular's CD tracking, unlike direct assignment.\n Object.values(node.traits || {}).forEach((trait: any) => {\n componentRef.setInput(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 rule in the central stylesheet.\n if (cssId) {\n this.styleRegistry.upsert(cssId, initialStyle);\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\n // participates properly in layout and CDK can capture its bounding rect.\n if (nativeEl) {\n nativeEl.style.display = 'block';\n }\n if (nativeEl) {\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 this.onMouseEnter.emit({ element: nativeEl, node });\n });\n nativeEl.addEventListener('mouseleave', (event: MouseEvent) => {\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 this.onClick.emit({ element: nativeEl, node, componentRef });\n });\n }\n\n // Wire up interactions (animations) after the element is in the DOM.\n this.interactionEngine.attach(node);\n }\n\n /** Try setInput(); fall back to direct assignment for non-@Input properties. */\n private safeSetInput(ref: any, name: string, value: any): void {\n try {\n ref.setInput(name, value);\n } catch {\n (ref.instance as any)[name] = value;\n }\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 { 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 { ViewportService } from '../services/viewport.service';\nimport { PresetRegistryService } from '../services/preset-registry.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' }>();\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 (toolbar ⋯ button)\n public moreMenuVisible = false;\n\n // Right-click context menu\n public contextMenuVisible = false;\n public contextMenuStyle: Record<string, string> = {};\n\n private subs: Subscription[] = [];\n private resizeObserver?: ResizeObserver;\n private containerResizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n private boundUpdate = () => this.updateAll();\n private activeScrollContainer: HTMLElement | null = null;\n\n constructor(\n private overlayService: OverlayService,\n private viewportService: ViewportService,\n private presetRegistry: PresetRegistryService,\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 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 requestAnimationFrame(() => this.updateAll());\n })\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.updateAll());\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.boundUpdate);\n this.activeScrollContainer = el;\n el.addEventListener('scroll', this.boundUpdate, { passive: true });\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 window.removeEventListener('resize', this.boundUpdate);\n this.activeScrollContainer?.removeEventListener('scroll', this.boundUpdate);\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 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 this.moreMenuVisible = !this.moreMenuVisible;\n this.cdr.markForCheck();\n }\n\n closeMoreMenu(): void {\n this.moreMenuVisible = false;\n this.cdr.markForCheck();\n }\n\n onContextMenu(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.contextMenuStyle = {\n position: 'fixed',\n top: `${event.clientY}px`,\n left: `${event.clientX}px`,\n };\n this.contextMenuVisible = true;\n this.cdr.markForCheck();\n }\n\n onContextSaveAsBlock(event: MouseEvent): void {\n event.stopPropagation();\n this.closeContextMenu();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.SaveAsBlock, entry: this.selectEntry });\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 closeContextMenu(): void {\n this.contextMenuVisible = false;\n this.cdr.markForCheck();\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 onEditPreset(event: MouseEvent): void {\n event.stopPropagation();\n if (this.selectEntry) this.toolbarAction.emit({ action: ToolbarAction.EditPreset, 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.updateAll();\n });\n this.resizeObserver.observe(styledEl);\n }\n\n // MutationObserver — catches style attribute changes (margin, padding etc.)\n this.mutationObserver = new MutationObserver(() => this.updateAll());\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?.boxModel) {\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 const { margin, border, padding } = this.hoverEntry.boxModel;\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 (contextmenu)=\"onContextMenu($event)\">\n\n <!-- Preset badge — centered below the outline, shown when a preset is applied -->\n <div *ngIf=\"selectedPresetName\" class=\"preset-badge\" (mousedown)=\"onEditPreset($event)\">\n <i class=\"ph-fill ph-paint-bucket\"></i>\n <span>{{ selectedPresetName }}</span>\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 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 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 — last -->\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\n <!-- More dropdown (inline, positioned from toolbar) -->\n <div *ngIf=\"moreMenuVisible\" class=\"toolbar-more-dropdown\" (click)=\"$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 <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)=\"onContextSaveAsBlock($event)\">\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 </div>\n </div>\n\n <!-- Backdrop to close more menu or context menu -->\n <div *ngIf=\"moreMenuVisible || contextMenuVisible\" class=\"overlay-context-backdrop\"\n (mousedown)=\"closeMoreMenu(); closeContextMenu()\">\n </div>\n\n <!-- Right-click context menu -->\n <div *ngIf=\"contextMenuVisible\" class=\"overlay-context-menu\"\n [ngStyle]=\"contextMenuStyle\"\n (click)=\"$event.stopPropagation()\">\n <button class=\"context-menu-item\" (mousedown)=\"onContextSaveAsBlock($event)\">\n <i class=\"ph-thin ph-bookmark\"></i>\n Save as reusable block\n </button>\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 /** 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 }\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 /**\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.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 <h3 class=\"panel-title\">Layers</h3>\n </div>\n\n <div 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 <!-- Drag handle indicator -->\n <i class=\"ph-thin ph-dots-six-vertical drag-handle\" cdkDragHandle></i>\n\n <!-- Expand/collapse toggle -->\n <button *ngIf=\"tn.hasChildren\"\n class=\"expand-btn\"\n (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 <!-- Icon + Label -->\n <i [class]=\"tn.icon\" class=\"node-icon\"></i>\n <span class=\"node-label\">{{ tn.label }}</span>\n\n <!-- Actions (visible on hover) -->\n <span class=\"node-actions\">\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 section -->\n <ng-container *ngIf=\"flatGlobalTree.length\">\n <div class=\"tree-section-header\">\n <i class=\"ph-thin ph-globe\"></i>\n <span>Global Elements</span>\n </div>\n <div class=\"tree-body tree-body--global\">\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 <!-- Expand/collapse toggle -->\n <button *ngIf=\"tn.hasChildren\"\n class=\"expand-btn\"\n (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 <!-- Icon + Label -->\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 <!-- Actions (visible on hover) -->\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 </ng-container>\n</div>\n","\n\nimport { AfterViewInit, ApplicationRef, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport Lenis from 'lenis';\nimport { Subscription } from 'rxjs';\n\nimport { ComponentNode, IoxDataSource } from './models/component.model';\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 { DataSourceRegistryService } from './services/data-source-registry.service';\nimport { InteractionEngineService } from './services/interaction-engine.service';\nimport { ViewportService } from './services/viewport.service';\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 @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 @Output() save = 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\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' = '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 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 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 /** 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 /**\n * The canvas min-height simulates a real browser viewport.\n * We subtract the builder header (~49px) and some padding from window.innerHeight.\n */\n get canvasMinHeight(): number {\n return Math.max(400, window.innerHeight - 80);\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 cdr: ChangeDetectorRef,\n private appRef: ApplicationRef,\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.panelEventService.emit(PanelEventTypes.PANEL_OPEN, PanelTypes.STYLES);\n this.dragEngine.isDragging$.subscribe((v: boolean) => {\n this.isDragging = v;\n this.cdr.markForCheck();\n });\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 // 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(), 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 }\n\n ngAfterViewInit(): void {\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\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 this.initLenis();\n setTimeout(() => this.appRef.tick());\n }\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n this.registrySub?.unsubscribe();\n this.viewportSub?.unsubscribe();\n this.destroyLenis();\n this.canvasRo?.disconnect();\n this.overlayService.setContainer(null);\n this.overlayService.setScrollContainer(null);\n const canvasEl = document.getElementById('canvas-preview');\n if (canvasEl) { this.dragEngine.unregisterDropzone('canvas-preview', canvasEl); }\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 });\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 } else {\n const clone = this.deepCloneWithNewIds(payload.data as ComponentNode);\n this.layout.splice(insertIndex, 0, clone);\n }\n this.cdr.markForCheck();\n return;\n }\n\n const item = payload.data as ComponentNode;\n\n if (payload.sourceId === 'blocks-panel') {\n // Reusable block dragged from blocks panel — deep clone with new IDs.\n const clone = this.deepCloneWithNewIds(item);\n this.layout.splice(insertIndex, 0, clone);\n this.cdr.markForCheck();\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 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 }\n }\n\n /** Resolve the width style-trait value for a node so the cdkDrag wrapper\n * matches the component's actual width (prevents full-canvas-width clones). */\n getNodeWidth(node: ComponentNode): string | undefined {\n if (!node.styleTraits) return undefined;\n for (const group of node.styleTraits) {\n for (const trait of group.traits) {\n if (trait.name === 'width' && trait.default !== undefined) {\n return trait.default;\n }\n }\n }\n return undefined;\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.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node: event.node, componentRef: event.componentRef });\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.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node, componentRef: 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 } else if (action === NodeAction.Duplicate) {\n const clone = JSON.parse(JSON.stringify(node));\n result.parent.splice(result.index + 1, 0, clone);\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' }): 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);\n if (result) {\n result.parent.splice(result.index, 1);\n this.selectedItem = null;\n this.overlayService.clearSelect();\n }\n break;\n }\n case ToolbarAction.Duplicate: {\n const result = this.findNodeInTree(node, this.layout);\n if (result) {\n const clone = JSON.parse(JSON.stringify(node));\n result.parent.splice(result.index + 1, 0, clone);\n }\n break;\n }\n case ToolbarAction.Play: {\n this.interactionEngine.replay(node);\n break;\n }\n case ToolbarAction.SaveAsBlock: {\n this.pendingBlockNode = node;\n this.saveBlockName = '';\n this.showSaveBlockDialog = true;\n break;\n }\n case ToolbarAction.SelectParent: {\n const parentNode = this.findParentNode(node, this.layout);\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.panelEventService.emit(PanelEventTypes.ELEMENT_SELECT, { node: parentNode, componentRef: 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 }\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 }\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 }\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 this.assignNewIds(clone);\n return clone;\n }\n\n private assignNewIds(node: ComponentNode): void {\n node.id = Math.random().toString(36).slice(2, 10);\n if (node.styleId) node.styleId = Math.random().toString(36).slice(2, 10);\n node.children?.forEach(child => this.assignNewIds(child));\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 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 = 'components'\" [class.active]=\"activeSidebar === 'components'\">\n <i class=\"ph-thin ph-cube\"></i>\n </button>\n <button (click)=\"activeSidebar = 'tree'\" [class.active]=\"activeSidebar === 'tree'\">\n <i class=\"ph-thin ph-tree-structure\"></i>\n </button>\n </div>\n <div class=\"panel-switcher\">\n <button (click)=\"selectPanel(panelTypes.BINDINGS)\" [class.active]=\"activePanel === panelTypes.BINDINGS\">\n <i class=\"ph-thin ph-plugs-connected\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.STYLES)\" [class.active]=\"activePanel === panelTypes.STYLES\">\n <i class=\"ph-thin ph-paint-brush\"></i>\n </button>\n <button (click)=\"selectPanel(panelTypes.PAGE)\" [class.active]=\"activePanel === panelTypes.PAGE\">\n <i class=\"ph-thin ph-file\"></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 === 'components'\" class=\"sidebar-slot\">\n <ng-content select=\"[builderComponents]\"></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 <!-- 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 <div *ngIf=\"globalElements.length\"\n class=\"global-elements-overlay\"\n [style.width.px]=\"viewportWidth\"\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 <!-- Custom Lenis scrollbar — inside .preview-scroll (Lenis wrapper).\n position:absolute shifts with scrollTop, so we counteract with\n transform:translateY(scrollTop) to keep it visually anchored. -->\n <div class=\"canvas-scrollbar\"\n [class.visible]=\"isScrollbarVisible\"\n [style.transform]=\"'translateY(' + scrollbarTranslate + 'px)'\">\n <div class=\"canvas-scrollbar-thumb\"\n [style.height.px]=\"scrollThumbHeight\"\n [style.top.px]=\"scrollThumbTop\">\n </div>\n </div>\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.transform]=\"viewportTransform\">\n\n <div class=\"canvas-viewport\"\n id=\"canvas-preview\"\n [style.min-height.px]=\"canvasMinHeight\">\n\n <div *ngFor=\"let item of layout\"\n class=\"preview-node\"\n [class.is-selected]=\"selectedItem === item\"\n [style.width]=\"getNodeWidth(item)\"\n ioxDraggable\n [ioxDragData]=\"item\"\n [ioxDragSourceId]=\"'canvas-preview'\">\n <ng-container [ioxRender]=\"item\"\n (onClick)=\"handleClick($event)\"\n (onMouseEnter)=\"handleMouseEnter($event)\"\n (onMouseLeave)=\"handleMouseLeave()\">\n </ng-container>\n </div>\n </div>\n </iox-page-component>\n </div>\n </div>\n </main>\n\n <app-toolbar\n [activeMode]=\"activeMode\"\n [activeDevice]=\"activeDevice\"\n [activeZoom]=\"activeZoom\"\n [activeScreenWidth]=\"activeScreenWidth\"\n [isSaving]=\"isSaving\"\n [pageStatus]=\"pageStatus\"\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 </app-toolbar>\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\">\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 { 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 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@Component({\n selector: 'app-section',\n template: `\n <div class=\"section-root\"\n [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\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 <div *ngFor=\"let child of children\"\n class=\"section-child\"\n [style.width]=\"getChildWidth(child)\"\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 .section-root {\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 }\n .section-placeholder i { font-size: 22px; }\n .section-child {\n /* No hardcoded width or align-self here — let the parent flex\n container's align-items / justify-content control alignment.\n Explicit widths come from [style.width]=\"getChildWidth(child)\"\n which reads the node's width styleTraits. */\n min-width: 0;\n }\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 dragEngine: DragEngineService,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {}\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 getChildWidth(node: ComponentNode): string | undefined {\n if (!node.styleTraits) return undefined;\n for (const group of node.styleTraits) {\n for (const trait of group.traits) {\n if (trait.name === 'width' && trait.default !== undefined) return trait.default;\n }\n }\n return undefined;\n }\n\n ngOnDestroy(): void {}\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 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@Component({\n selector: 'app-builder-container',\n template: `\n <div class=\"container-root\"\n [ngClass]=\"['iox-node-' + nodeId, listOrientation === 'horizontal' ? 'is-horizontal' : '']\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n (ioxDrop)=\"onDrop($event)\">\n\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 <div *ngFor=\"let child of children\"\n class=\"container-child\"\n [style.width]=\"getChildWidth(child)\"\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 .container-root {\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 }\n .container-placeholder i { font-size: 18px; }\n .container-child {\n min-width: 0;\n }\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\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 ) {}\n\n ngOnInit(): void {}\n ngOnDestroy(): void {}\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 getChildWidth(node: ComponentNode): string | undefined {\n if (!node.styleTraits) return undefined;\n for (const group of node.styleTraits) {\n for (const trait of group.traits) {\n if (trait.name === 'width' && trait.default !== undefined) return trait.default;\n }\n }\n return undefined;\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 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 <div *ngFor=\"let child of children\"\n class=\"linked-container-child\"\n [style.width]=\"getChildWidth(child)\"\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 </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 }\n .linked-container-placeholder i { font-size: 18px; }\n .linked-container-child {\n min-width: 0;\n }\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 getChildWidth(node: ComponentNode): string | undefined {\n for (const group of (node.styleTraits || [])) {\n for (const trait of group.traits) {\n if (trait.name === 'width' && trait.default !== undefined) return trait.default;\n }\n }\n return undefined;\n }\n\n onDrop(event: IoxDropEvent): void {\n this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Optional CMS content fetcher. Provide from the host app to enable Repeater data preview. */\nexport const IOX_CONTENT_SERVICE = new InjectionToken<IoxContentService>('IOX_CONTENT_SERVICE');\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 IoxContentService {\n getContent(contentType: string, orgId?: string): import('rxjs').Observable<any>;\n}\n\nexport interface IoxFontManager {\n loadFonts(orgId: string): void;\n uploadedFonts$: import('rxjs').Observable<any>;\n getAllFontOptions(): { label: string; value: string }[];\n}\n","import { ComponentNode, IoxBinding } from '../models/component.model';\n\n/**\n * Resolves a dot-notation path (with optional array bracket notation) against an object.\n * Examples: 'title', 'author.name', 'tags[0]', 'items[2].title'\n */\nexport function resolvePath(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n if (current == null) return undefined;\n const bracketMatch = key.match(/^(\\w+)\\[(\\d+)]$/);\n if (bracketMatch) {\n const arr = current[bracketMatch[1]];\n return Array.isArray(arr) ? arr[parseInt(bracketMatch[2], 10)] : undefined;\n }\n return current[key];\n }, obj);\n}\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\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 {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\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 { IOX_CONTENT_SERVICE, IoxContentService } from '../../tokens/builder.tokens';\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-builder-repeater',\n template: `\n <div class=\"repeater-root\" [ngClass]=\"['iox-node-' + nodeId, children.length ? 'has-children' : '']\">\n\n <!-- Badge: always visible when empty, absolute hover-only when has children -->\n <div class=\"repeater-badge\">\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 </div>\n\n <!-- Template drop zone — user designs one item here -->\n <div class=\"repeater-template\"\n ioxDropzone\n [ioxDropzoneId]=\"dropListId\"\n [ioxDropzoneData]=\"children\"\n [ioxDropzonePostDrop]=\"refreshPreviewsBound\"\n (ioxDrop)=\"onDrop($event)\">\n\n <div *ngIf=\"!children.length\" 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\n <div *ngFor=\"let child of children\"\n class=\"repeater-template-child\"\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 <!-- Preview rows for items 2..N — read-only clones with real data -->\n <div *ngFor=\"let row of previewRows\" class=\"repeater-preview-row\">\n <ng-container *ngFor=\"let child of row\">\n <ng-container\n [ioxRender]=\"child\"\n (onClick)=\"$event\"\n (onMouseEnter)=\"$event\"\n (onMouseLeave)=\"undefined\">\n </ng-container>\n </ng-container>\n </div>\n </div>\n `,\n styles: [`\n .repeater-root {\n position: relative;\n box-sizing: border-box;\n }\n\n /* ── Empty state: badge sits above the dashed border (normal flow) ── */\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 state: badge becomes absolute, hidden until hover ── */\n .repeater-root.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-root.has-children:hover .repeater-badge {\n opacity: 1;\n }\n\n /* ── Has-children state: remove the template border & radius ── */\n .repeater-root.has-children .repeater-template {\n border: none;\n border-radius: 0;\n padding: 0;\n min-height: unset;\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 /* Empty state template border */\n .repeater-template {\n border: 1px dashed rgba(203, 144, 144, 0.4);\n border-radius: 0 0 4px 4px;\n padding: 4px;\n min-height: 40px;\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 .repeater-template-child {\n min-width: 0;\n }\n\n .repeater-preview-row {\n opacity: 0.55;\n pointer-events: none;\n }\n `],\n standalone: false,\n})\nexport class BuilderRepeaterComponent 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 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 _limit = 10;\n private orgId = 'default';\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 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 @Optional() @Inject(IOX_CONTENT_SERVICE) private contentService: IoxContentService | null,\n private dsRegistry: DataSourceRegistryService,\n private panelEventService: PanelEventService,\n private activatedRoute: ActivatedRoute,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.orgId = this.activatedRoute.snapshot.paramMap.get('orgId') || 'default';\n\n // When a binding is added/removed on any node, regenerate the preview rows.\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) return;\n if (this.children.some(c => c === changedNode || c.id === changedNode.id)) {\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 private fetchData(): void {\n if (!this._source) return;\n const ds = this.dsRegistry.findByAlias(this._source);\n const contentType = ds?.request?.cms?.contentType;\n if (!contentType || !this.contentService) return;\n this.isLoading = true;\n this.cdr.markForCheck();\n this.contentService.getContent(contentType, this.orgId).subscribe({\n next: (data: any) => {\n const all: any[] = Array.isArray(data) ? data : (data?.items || data?.data || []);\n this.items = all.slice(0, this._limit);\n this.refreshPreviews();\n this.isLoading = false;\n this.cdr.markForCheck();\n },\n error: () => {\n this.isLoading = false;\n this.cdr.markForCheck();\n }\n });\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\n for (const child of this.children) {\n if (!child.bindings?.length) continue;\n const ref = this.overlayService.getNodeRef(child);\n if (!ref?.componentRef) continue;\n\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}\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>","export enum StyleCategory {\n Layout = 'Layout',\n Size = 'Size',\n Typography = 'Typography',\n Spacing = 'Spacing',\n Border = 'Border',\n Position = 'Position',\n Background = 'Background',\n Effects = 'Effects',\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}\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 maps a schema field to a URL query string\n * key (e.g. ?status=active → field \"status\").\n * `defaultValue` is used as a fallback in the builder preview.\n */\nexport interface DsFilterByQueryParam {\n field: string;\n queryParam: string;\n defaultValue?: string;\n}\n\nexport interface IoxDataSource {\n id: string;\n type: 'cms' | 'internal-api' | 'external-api' | 'static';\n mode: 'single' | 'query';\n alias: string;\n request: {\n method?: 'GET' | 'POST';\n endpoint?: 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 params?: Record<string, any>;\n };\n}\n\n// ── Interactions / Animations ────────────────────────────────\n\nexport type InteractionTrigger = 'pageLoad' | 'click' | 'hover' | 'viewportEnter' | 'scrollProgress';\n\nexport type InteractionActionType =\n | 'fadeIn' | 'fadeOut'\n | 'moveUp' | 'moveDown' | 'moveLeft' | 'moveRight'\n | 'scaleIn' | 'scaleOut'\n | 'rotate'\n | 'show' | 'hide' | 'toggleVisibility';\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 /** Extra parameters (e.g. { distance: 20 } for move actions). */\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\nexport const TRIGGER_OPTIONS: { value: InteractionTrigger; label: string; icon: string }[] = [\n { value: 'pageLoad', label: 'Page load', icon: 'ph-thin ph-play' },\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];\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}\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\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 Icon = 'icon',\n Media = 'media',\n FontFamily = 'fontFamily'\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 the named sibling trait matches one of the given values. */\nexport interface TraitShowCondition {\n /** name of another trait in the same style group */\n trait: string;\n /** one value or an array of values that make this trait visible */\n values: string | string[];\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\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 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.Icon: return 'icon';\n case TraitInputType.Media: return 'media';\n case TraitInputType.FontFamily: return 'select';\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.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'], 'block'),\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('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' }),\n new TraitConfig('alignItems', 'Align', TraitInputType.SelectButton, [\n { value: 'stretch', label: 'Stretch', icon: 'ph-thin ph-arrows-vertical' },\n { value: 'flex-start', label: 'Start', icon: 'ph-thin ph-align-top' },\n { value: 'center', label: 'Center', icon: 'ph-thin ph-align-center-vertical' },\n { value: 'flex-end', label: 'End', icon: 'ph-thin ph-align-bottom' },\n ], 'stretch', 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 new TraitConfig('gap', 'Gap', TraitInputType.Scrub,\n { min: 0, max: 200, step: 1, units: UNITS_FIXED }, '0px', false,\n { trait: 'display', values: 'flex' }),\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// ─── 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 new TraitConfig('aspectRatio', 'Aspect Ratio', TraitInputType.Select,\n ['auto', '1/1', '4/3', '16/9', '3/2', '2/3', '9/16'], 'auto'),\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_FIXED }, '16px'),\n new TraitConfig('fontWeight', 'Font Weight', TraitInputType.Select,\n ['100', '200', '300', '400', '500', '600', '700', '800', '900'], '400'),\n new TraitConfig('color', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: false, formats: ['hex', 'rgb', 'hsl'] }, '#000000'),\n new TraitConfig('lineHeight', 'Line Height', TraitInputType.Select,\n ['1', '1.2', '1.4', '1.5', '1.75', '2', '2.5'], '1.5'),\n new TraitConfig('letterSpacing', 'Letter Spacing', TraitInputType.Scrub,\n { min: -5, max: 50, step: 0.5, units: UNITS_FIXED }, '0px'),\n new TraitConfig('textAlign', 'Alignment', 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', 'Italic', 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', 'Underline', TraitInputType.SelectButton,\n { items: [{ value: 'underline', icon: 'ph-thin ph-text-underline', label: 'Underline' }], allowEmpty: true, noneValue: 'none' },\n 'none', true),\n ]);\n }\n}\n\nexport class EffectsGroupStyleConfig extends GroupStyleConfig {\n constructor() {\n super(StyleCategory.Effects, [\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 }\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}","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport {\n ComponentNode,\n IoxInteraction,\n InteractionAction,\n InteractionTrigger,\n InteractionActionType,\n TRIGGER_OPTIONS,\n ACTION_TYPE_OPTIONS,\n EASING_OPTIONS,\n generateNodeId,\n} from '../../models/component.model';\nimport { OverlayService } from '../../overlay/overlay.service';\n\n@Component({\n selector: 'app-interactions-panel',\n templateUrl: './interactions.component.html',\n styleUrls: ['./interactions.component.scss'],\n standalone: false,\n})\nexport class InteractionsPanelComponent implements OnInit, OnDestroy {\n @Input() node: ComponentNode | null = null;\n\n public triggerOptions = TRIGGER_OPTIONS;\n public actionTypeOptions = ACTION_TYPE_OPTIONS;\n public easingOptions = EASING_OPTIONS;\n public interactions: IoxInteraction[] = [];\n\n /** State for the \"add interaction\" form */\n public isAdding = false;\n public newTrigger: InteractionTrigger = 'pageLoad';\n public newActionType: InteractionActionType = 'fadeIn';\n public newDuration = 600;\n public newDelay = 0;\n public newEasing: string = 'ease-out';\n public newOnce = true;\n\n /** Expanded interaction ID for editing */\n public expandedId: string | null = null;\n\n private selectSub?: Subscription;\n\n constructor(private overlayService: OverlayService) {}\n\n ngOnInit(): void {\n this.selectSub = this.overlayService.select$.subscribe(entry => {\n this.node = entry?.node ?? null;\n this.interactions = this.node?.interactions ?? [];\n this.isAdding = false;\n this.expandedId = null;\n });\n }\n\n ngOnDestroy(): void {\n this.selectSub?.unsubscribe();\n }\n\n getTriggerLabel(trigger: InteractionTrigger): string {\n return this.triggerOptions.find(t => t.value === trigger)?.label ?? trigger;\n }\n\n getTriggerIcon(trigger: InteractionTrigger): string {\n return this.triggerOptions.find(t => t.value === trigger)?.icon ?? 'ph-thin ph-lightning';\n }\n\n getActionLabel(type: InteractionActionType): string {\n return this.actionTypeOptions.find(a => a.value === type)?.label ?? type;\n }\n\n getActionsSummary(interaction: IoxInteraction): string {\n return interaction.actions.map(a => this.getActionLabel(a.type)).join(', ');\n }\n\n toggleExpand(id: string): void {\n this.expandedId = this.expandedId === id ? null : id;\n }\n\n // ── Add interaction ──────────────────────────────────────\n\n startAdd(): void {\n this.isAdding = true;\n this.newTrigger = 'pageLoad';\n this.newActionType = 'fadeIn';\n this.newDuration = 600;\n this.newDelay = 0;\n this.newEasing = 'ease-out';\n this.newOnce = true;\n }\n\n cancelAdd(): void {\n this.isAdding = false;\n }\n\n confirmAdd(): void {\n if (!this.node) return;\n\n const action: InteractionAction = {\n type: this.newActionType,\n target: 'self',\n duration: this.newDuration,\n delay: this.newDelay,\n easing: this.newEasing as InteractionAction['easing'],\n once: this.newOnce,\n };\n\n const interaction: IoxInteraction = {\n id: generateNodeId(),\n trigger: this.newTrigger,\n actions: [action],\n };\n\n if (!this.node.interactions) {\n this.node.interactions = [];\n }\n this.node.interactions.push(interaction);\n this.interactions = this.node.interactions;\n this.isAdding = false;\n }\n\n // ── Remove interaction ───────────────────────────────────\n\n removeInteraction(id: string): void {\n if (!this.node?.interactions) return;\n this.node.interactions = this.node.interactions.filter(i => i.id !== id);\n this.interactions = this.node.interactions;\n if (this.expandedId === id) {\n this.expandedId = null;\n }\n }\n\n // ── Add action to existing interaction ───────────────────\n\n addAction(interaction: IoxInteraction): void {\n interaction.actions.push({\n type: 'fadeIn',\n target: 'self',\n duration: 600,\n delay: 0,\n easing: 'ease-out',\n once: true,\n });\n }\n\n removeAction(interaction: IoxInteraction, index: number): void {\n interaction.actions.splice(index, 1);\n // Remove the interaction if it has no actions left\n if (interaction.actions.length === 0) {\n this.removeInteraction(interaction.id);\n }\n }\n}\n","<div class=\"interactions-panel\">\n <!-- No element selected -->\n <div *ngIf=\"!node\" class=\"section-empty\">\n Select an element to manage interactions\n </div>\n\n <ng-container *ngIf=\"node\">\n <!-- Interaction cards -->\n <div *ngFor=\"let ix of interactions\" class=\"ix-card\" [class.is-expanded]=\"expandedId === ix.id\">\n <!-- Summary row -->\n <div class=\"ix-card-header\" (click)=\"toggleExpand(ix.id)\">\n <i [class]=\"getTriggerIcon(ix.trigger)\" class=\"ix-trigger-icon\"></i>\n <div class=\"ix-card-summary\">\n <span class=\"ix-trigger-label\">{{ getTriggerLabel(ix.trigger) }}</span>\n <span class=\"ix-arrow\">→</span>\n <span class=\"ix-action-label\">{{ getActionsSummary(ix) }}</span>\n </div>\n <button class=\"ix-remove-btn\" title=\"Remove\" (click)=\"removeInteraction(ix.id); $event.stopPropagation()\">\n <i class=\"ph-thin ph-x\"></i>\n </button>\n </div>\n\n <!-- Expanded detail -->\n <div *ngIf=\"expandedId === ix.id\" class=\"ix-card-body\">\n <div class=\"ix-field\">\n <label>Trigger</label>\n <select [(ngModel)]=\"ix.trigger\">\n <option *ngFor=\"let t of triggerOptions\" [value]=\"t.value\">{{ t.label }}</option>\n </select>\n </div>\n\n <div *ngFor=\"let action of ix.actions; let ai = index\" class=\"ix-action-row\">\n <div class=\"ix-action-header\">\n <span class=\"ix-action-index\">Action {{ ai + 1 }}</span>\n <button *ngIf=\"ix.actions.length > 1\"\n class=\"ix-remove-btn small\"\n title=\"Remove action\"\n (click)=\"removeAction(ix, ai)\">\n <i class=\"ph-thin ph-x\"></i>\n </button>\n </div>\n\n <div class=\"ix-field\">\n <label>Type</label>\n <select [(ngModel)]=\"action.type\">\n <option *ngFor=\"let a of actionTypeOptions\" [value]=\"a.value\">{{ a.label }}</option>\n </select>\n </div>\n\n <div class=\"ix-field-row\">\n <div class=\"ix-field\">\n <label>Duration (ms)</label>\n <input type=\"number\" [(ngModel)]=\"action.duration\" min=\"0\" step=\"50\">\n </div>\n <div class=\"ix-field\">\n <label>Delay (ms)</label>\n <input type=\"number\" [(ngModel)]=\"action.delay\" min=\"0\" step=\"50\">\n </div>\n </div>\n\n <div class=\"ix-field\">\n <label>Easing</label>\n <select [(ngModel)]=\"action.easing\">\n <option *ngFor=\"let e of easingOptions\" [value]=\"e\">{{ e }}</option>\n </select>\n </div>\n\n <div class=\"ix-field ix-checkbox-field\">\n <label>\n <input type=\"checkbox\" [(ngModel)]=\"action.once\">\n Play once\n </label>\n </div>\n </div>\n\n <button class=\"ix-add-action-btn\" (click)=\"addAction(ix)\">\n <i class=\"ph-thin ph-plus\"></i> Add action\n </button>\n </div>\n </div>\n\n <!-- Add interaction form -->\n <div *ngIf=\"isAdding\" class=\"ix-add-form\">\n <div class=\"ix-field\">\n <label>Trigger</label>\n <select [(ngModel)]=\"newTrigger\">\n <option *ngFor=\"let t of triggerOptions\" [value]=\"t.value\">{{ t.label }}</option>\n </select>\n </div>\n <div class=\"ix-field\">\n <label>Action</label>\n <select [(ngModel)]=\"newActionType\">\n <option *ngFor=\"let a of actionTypeOptions\" [value]=\"a.value\">{{ a.label }}</option>\n </select>\n </div>\n <div class=\"ix-field-row\">\n <div class=\"ix-field\">\n <label>Duration (ms)</label>\n <input type=\"number\" [(ngModel)]=\"newDuration\" min=\"0\" step=\"50\">\n </div>\n <div class=\"ix-field\">\n <label>Delay (ms)</label>\n <input type=\"number\" [(ngModel)]=\"newDelay\" min=\"0\" step=\"50\">\n </div>\n </div>\n <div class=\"ix-field\">\n <label>Easing</label>\n <select [(ngModel)]=\"newEasing\">\n <option *ngFor=\"let e of easingOptions\" [value]=\"e\">{{ e }}</option>\n </select>\n </div>\n <div class=\"ix-field ix-checkbox-field\">\n <label>\n <input type=\"checkbox\" [(ngModel)]=\"newOnce\">\n Play once\n </label>\n </div>\n <div class=\"ix-form-actions\">\n <button class=\"ix-btn ix-btn--secondary\" (click)=\"cancelAdd()\">Cancel</button>\n <button class=\"ix-btn ix-btn--primary\" (click)=\"confirmAdd()\">Add</button>\n </div>\n </div>\n\n <!-- Add button -->\n <button *ngIf=\"!isAdding\" class=\"ix-add-btn\" (click)=\"startAdd()\">\n <i class=\"ph-thin ph-plus\"></i> Add interaction\n </button>\n </ng-container>\n</div>\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 { 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';\nimport { InteractionsPanelComponent } from './panels/interactions/interactions.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';\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 PanelComponent,\n PanelChildComponent,\n LayerTreeComponent,\n InteractionsPanelComponent,\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 ],\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 PanelComponent,\n PanelChildComponent,\n LayerTreeComponent,\n InteractionsPanelComponent,\n ],\n schemas: [NO_ERRORS_SCHEMA],\n})\nexport class IoxBuilderModule {}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n TypographyGroupStyleConfig\n} 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 = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType\n} 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 = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\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 {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n} 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 this.styleTraits = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.applyStyleDefaults({\n width: '100%',\n height: 'auto',\n minHeight: '200px',\n display: 'block',\n backgroundColor: 'transparent',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n} 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 = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.applyStyleDefaults({\n width: '100%',\n height: '1px',\n backgroundColor: '#cccccc',\n margin: '8px 0px 8px 0px',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n TypographyGroupStyleConfig,\n} 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 = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.applyStyleDefaults({\n fontSize: '32px',\n fontWeight: '700',\n width: 'auto',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n GroupStyleConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n StyleCategory,\n TraitConfig,\n TraitInputType,\n UNITS_FIXED,\n} 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 = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new GroupStyleConfig(StyleCategory.Typography, [\n new TraitConfig('fontSize', 'Size', TraitInputType.Scrub,\n { min: 8, max: 200, step: 1, units: UNITS_FIXED }, '24px'),\n new TraitConfig('color', 'Color', TraitInputType.Color,\n { allowGradient: false, allowTransparent: false, formats: ['hex', 'rgb', 'hsl'] }, '#374151'),\n ]),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType\n} 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 objectFit: 'select'\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 new TraitConfig('objectFit', 'Object Fit', TraitInputType.Select, ['cover', 'contain', 'fill', 'none'], 'cover'),\n ];\n this.styleTraits = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n ];\n\n this.applyStyleDefaults({\n width: '300px',\n aspectRatio: '1/1',\n });\n }\n}\n","import {\n ComponentConfig,\n EffectsGroupStyleConfig,\n PositionGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n TypographyGroupStyleConfig,\n} 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 = [\n new PositionGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n} 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 = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.applyStyleDefaults({\n width: 'auto',\n height: 'auto',\n minHeight: '80px',\n display: 'block',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n ComponentTrait,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitInputType,\n} 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 = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.applyStyleDefaults({\n width: '100%',\n height: 'auto',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n} 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 = []; // marks this config as a layout component — RenderDirective checks `node.children !== undefined`\n this.traits = [];\n this.styleTraits = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\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 EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n SizeGroupStyleConfig,\n} 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 = [\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n this.applyStyleDefaults({\n width: '100%',\n height: '40px',\n });\n }\n}\n","import {\n BackgroundGroupStyleConfig,\n BorderGroupStyleConfig,\n ComponentConfig,\n EffectsGroupStyleConfig,\n LayoutGroupStyleConfig,\n PositionGroupStyleConfig,\n SizeGroupStyleConfig,\n SpacingGroupStyleConfig,\n TraitConfig,\n TraitInputType,\n TypographyGroupStyleConfig\n} 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 = [\n new PositionGroupStyleConfig(),\n new LayoutGroupStyleConfig(),\n new SizeGroupStyleConfig(),\n new TypographyGroupStyleConfig(),\n new SpacingGroupStyleConfig(),\n new BorderGroupStyleConfig(),\n new BackgroundGroupStyleConfig(),\n new EffectsGroupStyleConfig(),\n ];\n\n this.applyStyleDefaults({\n width: '200px',\n height: 'auto',\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, DsFilterByRouteParam, DsFilterByQueryParam, IoxDataSource, InteractionTrigger, InteractionActionType, InteractionAction, IoxInteraction, TRIGGER_OPTIONS, ACTION_TYPE_OPTIONS, 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 } from './lib/models/component.model';\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/panels/interactions/interactions.component';\nexport * from './lib/services/interaction-engine.service';\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';\n\n// Component configs\nexport * from './lib/components/button/button.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/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/repeater/repeater.config';\nexport * from './lib/components/section/section.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","i1.OverlayService","i2.OverlayService","i3.StyleRegistryService","i4.InteractionEngineService","i5.PanelEventService","i1.DragEngineService","i2.ViewportService","i3.PresetRegistryService","i4","i1","i2","i3","i3.PanelEventService","i4.DragEngineService","i5.DataSourceRegistryService","i6.ViewportService","i7.InteractionEngineService","i8","i9","i12.RenderDirective","i13.IoxDraggableDirective","i14.OverlayComponent","i15.ToolbarComponent","i16.LayerTreeComponent","i3.RenderDirective","i4.IoxDraggableDirective","i5.IoxDropzoneDirective","i3.DataSourceRegistryService","i4.PanelEventService","i6","i7.RenderDirective","i8.IoxDraggableDirective","i9.IoxDropzoneDirective","i1.PanelEventService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;IAGY;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;AACtC,CAAC,EAZW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;MAoBd,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;;;ICtBW;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,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EAJW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;AAiBf,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,MAAMA,gBAAc,GAAuC;AAC9D,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;;SAoCzD,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;AACb,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,MAAM,EAAE,MAAM;AACjB,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;AAC9B,CAAC,EATW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;IAWb;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;AAaf,MAAM,cAAc,GAAmB;AAC1C,IAAA,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE;AACvF,IAAA,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,GAAG,EAAE;AAC1F,IAAA,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,GAAG,EAAE;;AAQvF,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;;;MC9JrB,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;;AAGlD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAe;AAiGvD,IAAA;AA/FG,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;AAEA;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,IAAiB,EAAA;AAC9B,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,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;AAEQ,IAAA,aAAa,CAAC,IAAiB,EAAA;AACnC,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC9D,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,CAAC,CAAC,SAAS,CAAC,EAAQ,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,EAAQ,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,EAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE;AACjI,YAAA,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAO,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,EAAO,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,EAAO,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE;AAClI,YAAA,MAAM,EAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,EAAG,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAG,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE;SACzI;IACL;+GA3GS,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;;;MCXY,iBAAiB,CAAA;AAE1B,IAAA,WAAA,CAAoB,QAAkC,EAAA;QAAlC,IAAA,CAAA,QAAQ,GAAR,QAAQ;;QAoDpB,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,GAAU,IAAI,eAAe,CAAW,EAAE,CAAC;AAC/C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACjD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;;QAI9D,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;;QAOD,IAAA,CAAA,cAAc,GAAG,EAAE;QAC5B,IAAA,CAAA,oBAAoB,GAAkB,IAAI;IA/GO;;IAIzD,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,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,IAAc,CAAC;YACjE,IAAI,MAAM,EAAE;gBACR,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC;gBACvC,GAAG,CAAC,aAAa,EAAE;YACvB;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;YACJ;YACA,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;YACrC,GAAG,CAAC,aAAa,EAAE;YACnB,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;QACvB;QACA,SAAS,IAAI;IACjB;;IA0DA,QAAQ,CAAC,KAAa,EAAA,EAAU,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;;;;AAW7C,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;AACnB,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,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;IACJ;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;AAClC,YAAA,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE;YACvC,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,KAAK,CAAC,qBAAqB,EAAE;gBACvC,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,EAAE,CAAC,qBAAqB,EAAE;gBACvC,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;AACvB,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;+GAprBS,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,wBAAA,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;;;ACfD;;;;;;;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;;;ACAD,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;AAkFnD,IAAA;IAhFG,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,CAAC;IAChD;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;;;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,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;AACtF,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;+GArFS,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;;;ACAD;;;;;;AAMG;MAEU,wBAAwB,CAAA;AAGjC,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAA,CAAA,cAAc,GAAd,cAAc;AAF1B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAwC;IAEb;;AAGrD,IAAA,MAAM,CAAC,IAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM;YAAE;QAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,GAAG;YAAE;QAEV,MAAM,QAAQ,GAA0B,EAAE;AAE1C,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC;AAC7D,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;QACtB,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;;;QAI1B,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;QACxD;IACJ;;AAGA,IAAA,OAAO,CAAC,IAAmB,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACrB;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,IAAmB,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM;YAAE;;QAGhC,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;QACxD;AAEA,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;YAChC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;QACrC;IACJ;;AAIQ,IAAA,iBAAiB,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;AACnF,QAAA,QAAQ,EAAE,CAAC,OAAO;AACd,YAAA,KAAK,UAAU;gBACX,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;AACjD,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;;AAEhF,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAK;YAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;QACrC,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;QAClC,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,CAAC,OAAO,KAAI;AAClD,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AACzB,gBAAA,IAAI,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE;oBACjB,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,CAAC;gBACrC;YACJ;AACJ,QAAA,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AACtB,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;AACzB,QAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;IACtC;AAEQ,IAAA,WAAW,CAAC,IAAmB,EAAE,EAAkB,EAAE,OAAoB,EAAA;AAC7E,QAAA,MAAM,OAAO,GAAG,CAAC,CAAa,KAAI;;;YAG9B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC;AACrC,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,CAAC;QAC5D,MAAM,YAAY,GAAG,MAAK;;AAEtB,YAAA,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;gBAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/C,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;;IAIQ,UAAU,CAAC,IAAmB,EAAE,OAA4B,EAAA;AAChE,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/C,YAAA,IAAI,CAAC,MAAM;gBAAE;AACb,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;QACtC;IACJ;IAEQ,aAAa,CAAC,SAAwB,EAAE,MAAyB,EAAA;AACrE,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC;AACrD,YAAA,OAAO,GAAG,EAAE,OAAO,IAAI,IAAI;QAC/B;;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;AAEvB,QAAA,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,IAAI,EAAE,UAAU;AACnB,SAAA,CAAC;IACN;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;+GA9OS,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;;;ACpBD;;;;;;;;;;;AAWG;MAEU,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAkB;QACjC,IAAA,CAAA,OAAO,GAA4B,IAAI;AAiDlD,IAAA;IA/CG,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;IAEA,MAAM,CAAC,MAAc,EAAE,MAA2B,EAAA;AAC9C,QAAA,IAAI,CAAC,MAAM;YAAE;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;QACxC,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;QAC/B;aAAO;AACH,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B;QACA,IAAI,CAAC,KAAK,EAAE;IAChB;AAEA,IAAA,MAAM,CAAC,MAAc,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QACzB,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,MAAc,EAAE,MAA2B,EAAA;AACvD,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,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,CAAG,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;QAC9B,OAAO,CAAA,UAAA,EAAa,MAAM,CAAA,IAAA,EAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,CAAK;IAC5D;AAEQ,IAAA,WAAW,CAAC,GAAW,EAAA;AAC3B,QAAA,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA,CAAE,CAAC;IAC5D;IAEQ,KAAK,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;QACnB,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACzE;+GAlDS,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;;;ACMD;AACA,IAAI,eAAe,GAAG,CAAC;AAEvB;;;;;;;;;;;;;;AAcG;MAKU,eAAe,CAAA;AAQxB,IAAA,WAAA,CACY,GAAqB,EACrB,QAAkB,EAClB,eAAyC,EACzC,cAA8B,EAC9B,aAAmC,EACnC,iBAA2C,EAC3C,GAAsB,EACtB,iBAAoC,EAAA;QAPpC,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,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;QAfpB,IAAA,CAAA,SAAS,GAAyB,IAAI;AACrC,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;IAWnC;IAEH,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,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;AACK,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;;;AAIrB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;;;;AAK1F,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;YACpD,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;AACpD,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;YACP,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC;QAClD;;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;;;QAIjF,IAAI,QAAQ,EAAE;AACV,YAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;QACpC;QACA,IAAI,QAAQ,EAAE;;YAEV,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,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;;;;AAI1D,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,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAChE,YAAA,CAAC,CAAC;QACN;;AAGA,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;IACvC;;AAGQ,IAAA,YAAY,CAAC,GAAQ,EAAE,IAAY,EAAE,KAAU,EAAA;AACnD,QAAA,IAAI;AACA,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;QAC7B;AAAE,QAAA,MAAM;AACH,YAAA,GAAG,CAAC,QAAgB,CAAC,IAAI,CAAC,GAAG,KAAK;QACvC;IACJ;+GAjLS,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,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,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAf,eAAe,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,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;;sBAEI;;sBACA;;sBACA;;sBACA;;;MCrCQ,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,EAAAC,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;;;ACTL;;;;;;;;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;;;MCCY,gBAAgB,CAAA;AA4BzB,IAAA,WAAA,CACY,cAA8B,EAC9B,eAAgC,EAChC,cAAqC,EACrC,GAAsB,EAAA;QAHtB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,GAAG,GAAH,GAAG;AA/BL,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAiF;QAEpH,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;;QAG/C,IAAA,CAAA,eAAe,GAAG,KAAK;;QAGvB,IAAA,CAAA,kBAAkB,GAAG,KAAK;QAC1B,IAAA,CAAA,gBAAgB,GAA2B,EAAE;QAE5C,IAAA,CAAA,IAAI,GAAmB,EAAE;QAIzB,IAAA,CAAA,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;QACpC,IAAA,CAAA,qBAAqB,GAAuB,IAAI;IAOrD;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;YACxB,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,qBAAqB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACjD,CAAC,CAAC,CACL;;;QAID,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACpD,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;AACvC,gBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACzE,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,WAAW,CAAC;AAC3E,YAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,YAAA,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtE,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;QACnC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;QACtD,IAAI,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;AAC3E,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;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;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe;AAC5C,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;IAEA,aAAa,GAAA;AACT,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,gBAAgB,GAAG;AACpB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAA,EAAA,CAAI;AACzB,YAAA,IAAI,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAA,EAAA,CAAI;SAC7B;AACD,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;AAEA,IAAA,oBAAoB,CAAC,KAAiB,EAAA;QAClC,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,gBAAgB,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;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;IAEA,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;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,YAAY,CAAC,KAAiB,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;QACvB,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;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,SAAS,EAAE;AACpB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzC;;AAGA,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACpE,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,QAAQ,EAAE;AAC5B,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;AAC7C,QAAA,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ;;;;;;;QAQ5D,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;+GA7SS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAM,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,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,qHCd7B,suKAyGA,EAAA,MAAA,EAAA,CAAA,i6GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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;;4FD3Fa,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,suKAAA,EAAA,MAAA,EAAA,CAAA,i6GAAA,CAAA,EAAA;;sBAG9C;;;MEIQ,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,mnHAAA,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,mnHAAA,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;IAmB3B,WAAA,CACY,QAAkC,EAClC,cAA8B,EAAA;QAD9B,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,cAAc,GAAd,cAAc;QApBjB,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;;AAGlC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAkB;;QAGnC,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,UAAU,GAAG,EAAE;AAkIf,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAmB;IA7H/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;IAC1C;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;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;gBACtD,KAAK,EAAE,IAAI,CAAC,IAAI;gBAChB,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;+GA1LS,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAX,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,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,+7HA2FA,EAAA,MAAA,EAAA,CAAA,+oHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,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;;4FDxDa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,+7HAAA,EAAA,MAAA,EAAA,CAAA,+oHAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;;MElBQ,gBAAgB,CAAA;;AAwDzB,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;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;AAEA;;;AAGG;AACH,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;IACjD;AAKA,IAAA,WAAA,CACY,QAAkC,EAClC,cAA8B,EAC9B,iBAAoC,EACpC,UAA6B,EAC7B,UAAqC,EACrC,eAAgC,EAChC,iBAA2C,EAC3C,GAAsB,EACtB,MAAsB,EAAA;QARtB,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,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,MAAM,GAAN,MAAM;QArIT,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;AACnC,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;QAK7D,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,GAA0B,YAAY;QACnD,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;QACP,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;QAKhB,IAAA,CAAA,mBAAmB,GAAG,CAAC;QAohBvB,IAAA,CAAA,eAAe,GAAyC,IAAI;IAlcjE;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,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;QAC1E,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAU,KAAI;AACjD,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAC3B,QAAA,CAAC,CAAC;AACF,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;;;AAGrC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;;;AAGpB,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC;AAC9D,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;;;YAGzB,IAAI,CAAC,SAAS,EAAE;QACpB;IACJ;IAEA,eAAe,GAAA;AACX,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;;QAGnF,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;QAEA,IAAI,CAAC,SAAS,EAAE;QAChB,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACxC;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;QAC/B,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;QAC1D,IAAI,QAAQ,EAAE;YAAE,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,QAAQ,CAAC;QAAE;IACpF;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;AACzC,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;YAC9C;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;YAC7C;AACA,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACJ;AAEA,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAqB;AAE1C,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,cAAc,EAAE;;YAErC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;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;YACvB;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;QAC3B;IACJ;AAEA;AACgF;AAChF,IAAA,YAAY,CAAC,IAAmB,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,SAAS;AACvC,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AAC9B,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;oBACvD,OAAO,KAAK,CAAC,OAAO;gBACxB;YACJ;QACJ;AACA,QAAA,OAAO,SAAS;IACpB;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,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;IACvH;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;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;QACzG;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;QACrC;AAAO,aAAA,IAAI,MAAM,KAAK,UAAU,CAAC,SAAS,EAAE;AACxC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9C,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;QACpD;IACJ;IAEA,cAAc,GAAA;;;AAGV,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACrC;;AAGA,IAAA,eAAe,CAAC,KAAoF,EAAA;AAChG,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;AACvB,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,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;gBACrC;gBACA;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,SAAS,EAAE;AAC1B,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;gBACrD,IAAI,MAAM,EAAE;AACR,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9C,oBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;gBACpD;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,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;gBAC/B;YACJ;AACA,YAAA,KAAK,aAAa,CAAC,YAAY,EAAE;AAC7B,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;gBACzD,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,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;oBACrH;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;gBAC3B;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;gBAC3B;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;;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;AAC7D,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACxB,QAAA,OAAO,KAAK;IAChB;AAEQ,IAAA,YAAY,CAAC,IAAmB,EAAA;AACpC,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACxE,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7D;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;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;+GA1oBS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAZ,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,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,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,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,w3BCtB7B,gkPA4JM,EAAA,MAAA,EAAA,CAAA,i4IAAA,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,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,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,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,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;;4FDtIO,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,gkPAAA,EAAA,MAAA,EAAA,CAAA,i4IAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA,SAAS;uBAAC,eAAe;;sBACzB,SAAS;uBAAC,eAAe;;sBACzB,SAAS;uBAAC,cAAc;;;MEjChB,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,EAAAlB,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;;;MC6DQ,gBAAgB,CAAA;IAUzB,WAAA,CACY,UAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QAXN,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;IAKjD;AAEH,IAAA,QAAQ,KAAU;AAElB,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,aAAa,CAAC,IAAmB,EAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,SAAS;AACvC,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;gBAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;oBAAE,OAAO,KAAK,CAAC,OAAO;YACnF;QACJ;AACA,QAAA,OAAO,SAAS;IACpB;AAEA,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;+GAxCS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,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,aAAA,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,EA5Df;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,oaAAA,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,EAAAmB,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,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;;4FAiCQ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA9D5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,QAAA,EACb;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BT,IAAA,CAAA,EAAA,UAAA,EA+BW,KAAK,EAAA,MAAA,EAAA,CAAA,oaAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MCZQ,yBAAyB,CAAA;IAUlC,WAAA,CACY,UAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QAXN,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;IAKjD;AAEH,IAAA,QAAQ,KAAU;AAClB,IAAA,WAAW,KAAU;AAErB,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,aAAa,CAAC,IAAmB,EAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,SAAS;AACvC,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;gBAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;oBAAE,OAAO,KAAK,CAAC,OAAO;YACnF;QACJ;AACA,QAAA,OAAO,SAAS;IACpB;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;+GAvCS,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAArB,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,uBAAA,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,EAxDxB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4aAAA,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,EAAAmB,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,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;;4FA6BQ,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA1DrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,QAAA,EACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BT,IAAA,CAAA,EAAA,UAAA,EA2BW,KAAK,EAAA,MAAA,EAAA,CAAA,4aAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MCEQ,+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,aAAa,CAAC,IAAmB,EAAA;QAC7B,KAAK,MAAM,KAAK,KAAK,IAAI,CAAC,WAAW,IAAI,EAAE,GAAG;AAC1C,YAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;gBAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;oBAAE,OAAO,KAAK,CAAC,OAAO;YACnF;QACJ;AACA,QAAA,OAAO,SAAS;IACpB;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;AA7DS,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,EA9D9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8fAAA,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,EAAAF,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,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;;4FAgCQ,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAhE3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAAA,QAAA,EAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,IAAA,CAAA,EAAA,UAAA,EA8BW,KAAK,EAAA,MAAA,EAAA,CAAA,8fAAA,CAAA,EAAA;;0BAuBZ;;0BAAY,MAAM;2BAAC,UAAU;;sBApBjC;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;AC5FL;MACa,mBAAmB,GAAG,IAAI,cAAc,CAAoB,qBAAqB;AAE9F;MACa,gBAAgB,GAAG,IAAI,cAAc,CAAiB,kBAAkB;;ACJrF;;;AAGG;AACG,SAAU,WAAW,CAAC,GAAQ,EAAE,IAAY,EAAA;AAC9C,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,KAAI;QAC3C,IAAI,OAAO,IAAI,IAAI;AAAE,YAAA,OAAO,SAAS;QACrC,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACjD,IAAI,YAAY,EAAE;YACd,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpC,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS;QAC9E;AACA,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC;IACvB,CAAC,EAAE,GAAG,CAAC;AACX;AAEA;;;;;;;;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;QAErB,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;;MCsGa,wBAAwB,CAAA;IAsBjC,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;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,EACW,cAAwC,EACjF,UAAqC,EACrC,iBAAoC,EACpC,cAA8B,EAC9B,GAAsB,EAAA;QANtB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,cAAc,GAAd,cAAc;QAC2B,IAAA,CAAA,cAAc,GAAd,cAAc;QACvD,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,GAAG,GAAH,GAAG;QA3CN,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;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,MAAM,GAAG,EAAE;QACX,IAAA,CAAA,KAAK,GAAG,SAAS;IA0BtB;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS;;QAG5E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,IAAG;AACvD,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,eAAe;gBAAE;AACpD,YAAA,MAAM,WAAW,GAAkB,KAAK,CAAC,IAAI,EAAE,IAAI;YACnD,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE;YACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,CAAC,EAAE;gBACvE,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;IAEQ,SAAS,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QACpD,MAAM,WAAW,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW;AACjD,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAC9D,YAAA,IAAI,EAAE,CAAC,IAAS,KAAI;gBAChB,MAAM,GAAG,GAAU,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;AACjF,gBAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;gBACtC,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YAC3B,CAAC;YACD,KAAK,EAAE,MAAK;AACR,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YAC3B;AACH,SAAA,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,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;AAEpC,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM;gBAAE;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC;YACjD,IAAI,CAAC,GAAG,EAAE,YAAY;gBAAE;AAExB,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,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK;gBACnD;YACJ;AACA,YAAA,GAAG,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;QACtD;IACJ;AA1HS,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,2EAwCT,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAxClC,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,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,EAtIvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,o2CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,EAAAC,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,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;;4FAmFQ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAxIpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,QAAA,EACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDT,IAAA,CAAA,EAAA,UAAA,EAiFW,KAAK,EAAA,MAAA,EAAA,CAAA,o2CAAA,CAAA,EAAA;;0BA0CZ;;0BAAY,MAAM;2BAAC,mBAAmB;;sBAvC1C;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBAeA;;sBAQA;;;MCtLQ,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;;;IEhB5B;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,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;;AAEnB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AAC7B,CAAC,EAXW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AAiGlB,MAAM,eAAe,GAAiE;IACzF,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAClE,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;;AAGtD,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC;AA4CtF;;;;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,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AAC7B,CAAC,EAZW,cAAc,KAAd,cAAc,GAAA,EAAA,CAAA,CAAA;SAyDV,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;IAaxB,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;AACtD,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,IAAI,EAAa,OAAO,MAAM;AAClD,QAAA,KAAK,cAAc,CAAC,KAAK,EAAY,OAAO,OAAO;AACnD,QAAA,KAAK,cAAc,CAAC,UAAU,EAAO,OAAO,QAAQ;AACpD,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,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,CAAC,EAAE,OAAO,CAAC;YACzD,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,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,MAAM,EAAE,CAAC;YAC7D,IAAI,WAAW,CAAC,YAAY,EAAE,OAAO,EAAE,cAAc,CAAC,YAAY,EAAE;gBAChE,EAAE,KAAK,EAAE,SAAS,EAAK,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,4BAA4B,EAAE;gBAC7E,EAAE,KAAK,EAAE,YAAY,EAAE,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,UAAU,EAAI,KAAK,EAAE,KAAK,EAAM,IAAI,EAAE,yBAAyB,EAAE;AAC7E,aAAA,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC1D,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;AACzD,YAAA,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,MAAM,EAAE,CAAC;YACzC,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;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;YAC5I,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,MAAM,EAChE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC;AACpE,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,WAAW,EAAE,EAAE,MAAM,CAAC;AAC9D,YAAA,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,MAAM,EAC9D,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC;AAC3E,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;YACjG,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,MAAM,EAC9D,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC;AAC1D,YAAA,IAAI,WAAW,CAAC,eAAe,EAAE,gBAAgB,EAAE,cAAc,CAAC,KAAK,EACnE,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,WAAW,EAAE,cAAc,CAAC,YAAY,EAAE;AACnE,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,QAAQ,EAAE,cAAc,CAAC,YAAY,EAC9D,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,WAAW,EAAE,cAAc,CAAC,YAAY,EACtE,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;AACpB,SAAA,CAAC;IACN;AACH;AAEK,MAAO,uBAAwB,SAAQ,gBAAgB,CAAA;AACzD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE;AACzB,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;AACb,SAAA,CAAC;IACN;AACH;SAEe,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;;MC1jBa,0BAA0B,CAAA;AAsBnC,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAA,CAAA,cAAc,GAAd,cAAc;QArBzB,IAAA,CAAA,IAAI,GAAyB,IAAI;QAEnC,IAAA,CAAA,cAAc,GAAG,eAAe;QAChC,IAAA,CAAA,iBAAiB,GAAG,mBAAmB;QACvC,IAAA,CAAA,aAAa,GAAG,cAAc;QAC9B,IAAA,CAAA,YAAY,GAAqB,EAAE;;QAGnC,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,UAAU,GAAuB,UAAU;QAC3C,IAAA,CAAA,aAAa,GAA0B,QAAQ;QAC/C,IAAA,CAAA,WAAW,GAAG,GAAG;QACjB,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAW,UAAU;QAC9B,IAAA,CAAA,OAAO,GAAG,IAAI;;QAGd,IAAA,CAAA,UAAU,GAAkB,IAAI;IAIc;IAErD,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAG;YAC3D,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI;YAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,IAAI,EAAE;AACjD,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAC1B,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE;IACjC;AAEA,IAAA,eAAe,CAAC,OAA2B,EAAA;QACvC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,KAAK,IAAI,OAAO;IAC/E;AAEA,IAAA,cAAc,CAAC,OAA2B,EAAA;QACtC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,IAAI,IAAI,sBAAsB;IAC7F;AAEA,IAAA,cAAc,CAAC,IAA2B,EAAA;QACtC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI;IAC5E;AAEA,IAAA,iBAAiB,CAAC,WAA2B,EAAA;QACzC,OAAO,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/E;AAEA,IAAA,YAAY,CAAC,EAAU,EAAA;AACnB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,KAAK,EAAE,GAAG,IAAI,GAAG,EAAE;IACxD;;IAIA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACvB;IAEA,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACzB;IAEA,UAAU,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAEhB,QAAA,MAAM,MAAM,GAAsB;YAC9B,IAAI,EAAE,IAAI,CAAC,aAAa;AACxB,YAAA,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,IAAI,CAAC,WAAW;YAC1B,KAAK,EAAE,IAAI,CAAC,QAAQ;YACpB,MAAM,EAAE,IAAI,CAAC,SAAwC;YACrD,IAAI,EAAE,IAAI,CAAC,OAAO;SACrB;AAED,QAAA,MAAM,WAAW,GAAmB;YAChC,EAAE,EAAE,cAAc,EAAE;YACpB,OAAO,EAAE,IAAI,CAAC,UAAU;YACxB,OAAO,EAAE,CAAC,MAAM,CAAC;SACpB;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE;QAC/B;QACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACzB;;AAIA,IAAA,iBAAiB,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY;YAAE;QAC9B,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QACxE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY;AAC1C,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QAC1B;IACJ;;AAIA,IAAA,SAAS,CAAC,WAA2B,EAAA;AACjC,QAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,IAAI,EAAE,IAAI;AACb,SAAA,CAAC;IACN;IAEA,YAAY,CAAC,WAA2B,EAAE,KAAa,EAAA;QACnD,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;QAEpC,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1C;IACJ;+GAjIS,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAjC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,6GCtBvC,+5LAiIA,EAAA,MAAA,EAAA,CAAA,28GAAA,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,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,CAAA,EAAA,CAAA,CAAA;;4FD3Ga,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,cAGtB,KAAK,EAAA,QAAA,EAAA,+5LAAA,EAAA,MAAA,EAAA,CAAA,28GAAA,CAAA,EAAA;;sBAGhB;;;AEgBL;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,cAAc;IACd,mBAAmB;IACnB,kBAAkB;IAClB,0BAA0B;CAC7B;MA2DY,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,iBAzEzB,gBAAgB;YAChB,eAAe;YACf,qBAAqB;YACrB,oBAAoB;YACpB,gBAAgB;YAChB,gBAAgB;YAChB,gBAAgB;YAChB,yBAAyB;YACzB,+BAA+B;YAC/B,wBAAwB;YACxB,cAAc;YACd,mBAAmB;YACnB,kBAAkB;AAClB,YAAA,0BAA0B,aAMtB,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;;YAeb,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,cAAc;YACd,mBAAmB;YACnB,kBAAkB;YAClB,0BAA0B,CAAA,EAAA,CAAA,CAAA;AAIrB,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,EA1Cd;YACP,iBAAiB;YACjB,cAAc;YACd,wBAAwB;YACxB,yBAAyB;YACzB,wBAAwB;YACxB,eAAe;YACf,oBAAoB;YACpB,iBAAiB;YACjB,qBAAqB;AACxB,SAAA,EAAA,OAAA,EAAA,CAtBG,YAAY;YACZ,WAAW;YACX,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,aAAa;;YAeb,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;;4FAmBR,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAzD5B,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;AACxB,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,cAAc;wBACd,mBAAmB;wBACnB,kBAAkB;wBAClB,0BAA0B;AAC7B,qBAAA;oBACD,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC9B,iBAAA;;;ACpGK,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;QACD,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,IAAI,wBAAwB,EAAE;AAC9B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,uBAAuB,EAAE;AAC7B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,uBAAuB,EAAE;SAChC;IACL;AACH;;ACzBK,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;QACD,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,uBAAuB,EAAE;SAChC;QAED,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;;ACrCK,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;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,IAAI,CAAC,WAAW,GAAG;AACf,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,uBAAuB,EAAE;SAChC;QACD,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;;ACrBK,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;QAChB,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,uBAAuB,EAAE;AAC7B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,uBAAuB,EAAE;SAChC;QACD,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,eAAe,EAAE,SAAS;AAC1B,YAAA,MAAM,EAAE,iBAAiB;AAC5B,SAAA,CAAC;IACN;AACH;;ACfK,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;QACD,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,IAAI,wBAAwB,EAAE;AAC9B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,uBAAuB,EAAE;AAC7B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,uBAAuB,EAAE;SAChC;QACD,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,KAAK,EAAE,MAAM;AAChB,SAAA,CAAC;IACN;AACH;;ACtBK,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;QACD,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,IAAI,wBAAwB,EAAE;AAC9B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,gBAAgB,CAAC,aAAa,CAAC,UAAU,EAAE;AAC3C,gBAAA,IAAI,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,EACpD,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC;AAC9D,gBAAA,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;aACpG,CAAC;AACF,YAAA,IAAI,uBAAuB,EAAE;AAC7B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,uBAAuB,EAAE;SAChC;IACL;AACH;;AC1BK,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;AACX,YAAA,SAAS,EAAE;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;YAC3E,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC;SACnH;QACD,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;SACnC;QAED,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,WAAW,EAAE,KAAK;AACrB,SAAA,CAAC;IACN;AACH;;AC7BK,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;QACD,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,IAAI,wBAAwB,EAAE;AAC9B,YAAA,IAAI,uBAAuB,EAAE;AAC7B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,uBAAuB,EAAE;SAChC;IACL;AACH;;ACpCK,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;QACD,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,uBAAuB,EAAE;SAChC;QACD,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;;AChDK,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;QACD,IAAI,CAAC,WAAW,GAAG;AACf,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,uBAAuB,EAAE;SAChC;QACD,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA,CAAC;IACN;AACH;;AClCK,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,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAChB,IAAI,CAAC,WAAW,GAAG;AACf,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,uBAAuB,EAAE;SAChC;QACD,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;;ACxBK,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;QAChB,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,uBAAuB,EAAE;SAChC;QACD,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA,CAAC;IACN;AACH;;ACPK,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;QACD,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,IAAI,wBAAwB,EAAE;AAC9B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,oBAAoB,EAAE;AAC1B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,uBAAuB,EAAE;AAC7B,YAAA,IAAI,sBAAsB,EAAE;AAC5B,YAAA,IAAI,0BAA0B,EAAE;AAChC,YAAA,IAAI,uBAAuB,EAAE;SAChC;QAED,IAAI,CAAC,kBAAkB,CAAC;AACpB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA,CAAC;IACN;AACH;;ACzCD;;AAEG;;ACFH;;AAEG;;;;"}