@memberjunction/ng-flow-editor 6.1.0-edge.2 → 6.1.0-edge.4

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":"flow-editor.component.js","sourceRoot":"","sources":["../../../src/lib/components/flow-editor.component.ts","../../../src/lib/components/flow-editor.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component, Input, Output, EventEmitter, ViewChild, OnInit, OnDestroy,\n ChangeDetectorRef, ElementRef, ViewEncapsulation, ChangeDetectionStrategy, HostListener\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { FFlowComponent, FCanvasComponent, FZoomDirective, FCreateConnectionEvent,\n FCreateNodeEvent, FSelectionChangeEvent, FCanvasChangeEvent, FMoveNodesEvent,\n FReassignConnectionEvent } from '@foblex/flow';\nimport {\n FlowNode, FlowConnection, FlowNodeTypeConfig, FlowNodeAddedEvent,\n FlowNodeMovedEvent, FlowConnectionCreatedEvent, FlowConnectionReassignedEvent,\n FlowSelectionChangedEvent,\n FlowCanvasClickEvent, FlowPosition, FlowLayoutDirection,\n FlowContextMenuTarget, FlowContextMenuAction\n} from '../interfaces/flow-types';\nimport { FlowStateService } from '../services/flow-state.service';\nimport { FlowLayoutService } from '../services/flow-layout.service';\nimport { UUIDsEqual, NormalizeUUID } from '@memberjunction/global';\n\n/**\n * Generic, entity-agnostic visual flow editor component.\n * Wraps Foblex Flow to provide a clean MJ-style API.\n *\n * Usage:\n * ```html\n * <mj-flow-editor\n * [Nodes]=\"myNodes\"\n * [Connections]=\"myConnections\"\n * [NodeTypes]=\"myNodeTypes\"\n * (NodeSelected)=\"onNodeSelected($event)\"\n * (ConnectionCreated)=\"onConnectionCreated($event)\">\n * </mj-flow-editor>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-flow-editor',\n templateUrl: './flow-editor.component.html',\n styleUrls: ['./flow-editor.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n providers: [FlowStateService, FlowLayoutService]\n})\nexport class FlowEditorComponent implements OnInit, OnDestroy {\n // ── Inputs ──────────────────────────────────────────────────\n @Input() Nodes: FlowNode[] = [];\n @Input() Connections: FlowConnection[] = [];\n @Input() NodeTypes: FlowNodeTypeConfig[] = [];\n @Input() ReadOnly = false;\n @Input() ShowMinimap = true;\n @Input() ShowPalette = true;\n @Input() ShowGrid = true;\n @Input() ShowStatusBar = true;\n @Input() ShowToolbar = true;\n @Input() ShowLegend = true;\n @Input() GridSize = 20;\n @Input() AutoLayoutDirection: FlowLayoutDirection = 'vertical';\n /** Background color for connection labels */\n // Design tokens, not literals — the canvas renders on both themes, and a near-white pill on a\n // dark canvas made the least important element the most visually dominant thing on screen.\n @Input() ConnectionLabelBackground = 'var(--mj-bg-surface)';\n /** Border color for connection labels */\n @Input() ConnectionLabelBorderColor = 'var(--mj-border-default)';\n /** Text color for connection labels */\n @Input() ConnectionLabelTextColor = 'var(--mj-text-secondary)';\n\n /** Title for the canvas empty-state overlay — depends on read-only mode. */\n public get EmptyStateTitle(): string {\n return this.ReadOnly\n ? 'No steps defined for this flow'\n : 'Click a step in the palette — or drag one onto the canvas — to start building your flow';\n }\n\n // ── Outputs ─────────────────────────────────────────────────\n @Output() NodeSelected = new EventEmitter<FlowNode | null>();\n @Output() NodeAdded = new EventEmitter<FlowNodeAddedEvent>();\n @Output() NodeRemoved = new EventEmitter<FlowNode>();\n @Output() NodeMoved = new EventEmitter<FlowNodeMovedEvent>();\n @Output() ConnectionCreated = new EventEmitter<FlowConnectionCreatedEvent>();\n @Output() ConnectionRemoved = new EventEmitter<FlowConnection>();\n @Output() ConnectionReassigned = new EventEmitter<FlowConnectionReassignedEvent>();\n @Output() ConnectionSelected = new EventEmitter<FlowConnection | null>();\n @Output() SelectionChanged = new EventEmitter<FlowSelectionChangedEvent>();\n @Output() CanvasClicked = new EventEmitter<FlowCanvasClickEvent>();\n @Output() NodesChanged = new EventEmitter<FlowNode[]>();\n @Output() ConnectionsChanged = new EventEmitter<FlowConnection[]>();\n @Output() NodeEditRequested = new EventEmitter<FlowNode>();\n @Output() ConnectionEditRequested = new EventEmitter<FlowConnection>();\n @Output() GridToggled = new EventEmitter<boolean>();\n @Output() MinimapToggled = new EventEmitter<boolean>();\n @Output() LegendToggled = new EventEmitter<boolean>();\n\n // ── View Children ───────────────────────────────────────────\n @ViewChild(FFlowComponent) protected fFlow: FFlowComponent | undefined;\n @ViewChild(FCanvasComponent) protected fCanvas: FCanvasComponent | undefined;\n @ViewChild('fZoomRef') protected fZoom: FZoomDirective | undefined;\n @ViewChild('canvasArea') protected canvasArea: ElementRef<HTMLElement> | undefined;\n\n // ── Internal State ──────────────────────────────────────────\n protected zoomLevel = 100;\n protected canvasPosition = { x: 0, y: 0 };\n protected canvasScale = 1;\n protected selectedNodeIDs: string[] = [];\n protected selectedConnectionIDs: string[] = [];\n protected panMode = false;\n\n /** Trigger function for canvas panning — only allows panning in pan mode */\n protected canvasMoveTriggerFn = (_event: MouseEvent | TouchEvent): boolean => {\n return this.panMode;\n };\n\n /* Context menu state */\n protected contextMenuVisible = false;\n protected contextMenuX = 0;\n protected contextMenuY = 0;\n protected contextMenuTargetType: FlowContextMenuTarget = 'node';\n protected contextMenuNode: FlowNode | null = null;\n protected contextMenuConnection: FlowConnection | null = null;\n\n private destroy$ = new Subject<void>();\n private initialized = false;\n private lastConnectionClickTime = 0;\n\n /** How many click-placed nodes are cascaded before the offset wraps back to the viewport centre. */\n private static readonly CLICK_CASCADE_STEPS = 6;\n /** Pixels (canvas units) each cascaded click-placed node is offset by. */\n private static readonly CLICK_CASCADE_OFFSET = 40;\n private clickPlacementIndex = 0;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private stateService: FlowStateService,\n private layoutService: FlowLayoutService\n ) {}\n\n // ── Lifecycle ───────────────────────────────────────────────\n\n ngOnInit(): void {\n this.initialized = true;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ── Public Methods ──────────────────────────────────────────\n\n /** Fit all nodes within the viewport */\n ZoomToFit(): void {\n this.fCanvas?.fitToScreen({ x: 150, y: 150 }, true);\n }\n\n /** Zoom in one step */\n ZoomIn(): void {\n if (this.fZoom) {\n this.fZoom.zoomIn();\n } else {\n const newScale = Math.min(this.canvasScale + 0.15, 3);\n this.fCanvas?.setScale(newScale);\n this.updateZoomLevel(newScale);\n }\n }\n\n /** Zoom out one step */\n ZoomOut(): void {\n if (this.fZoom) {\n this.fZoom.zoomOut();\n } else {\n const newScale = Math.max(this.canvasScale - 0.15, 0.1);\n this.fCanvas?.setScale(newScale);\n this.updateZoomLevel(newScale);\n }\n }\n\n /** Run auto-layout using dagre */\n AutoArrange(direction?: FlowLayoutDirection): void {\n const dir = direction ?? this.AutoLayoutDirection;\n this.pushUndoState();\n const result = this.layoutService.CalculateLayout(this.Nodes, this.Connections, dir);\n for (const node of this.Nodes) {\n const newPos = result.Positions.get(node.ID);\n if (newPos) {\n node.Position = { ...newPos };\n }\n }\n this.NodesChanged.emit(this.Nodes);\n this.cdr.detectChanges();\n // Fit to screen after layout\n setTimeout(() => this.ZoomToFit(), 100);\n }\n\n /** Center the canvas on a specific node */\n CenterOnNode(nodeId: string): void {\n this.fCanvas?.centerGroupOrNode(nodeId, true);\n }\n\n /** Programmatically select a node */\n SelectNode(nodeId: string): void {\n this.fFlow?.select([nodeId], []);\n const node = this.Nodes.find(n => UUIDsEqual(n.ID, nodeId)) ?? null;\n this.NodeSelected.emit(node);\n }\n\n /** Clear all selection */\n ClearSelection(): void {\n this.fFlow?.clearSelection();\n this.selectedNodeIDs = [];\n this.selectedConnectionIDs = [];\n this.NodeSelected.emit(null);\n this.ConnectionSelected.emit(null);\n }\n\n /** Update a node's visual status */\n SetNodeStatus(nodeId: string, status: FlowNode['Status'], message?: string): void {\n const node = this.Nodes.find(n => UUIDsEqual(n.ID, nodeId));\n if (node) {\n node.Status = status;\n node.StatusMessage = message;\n this.cdr.detectChanges();\n }\n }\n\n /** Update a node's visual properties and push a new object reference so\n * OnPush child components (FlowNodeComponent) detect the change. */\n UpdateNode(nodeId: string, changes: Partial<Pick<FlowNode, 'Label' | 'Subtitle' | 'Icon' | 'Status' | 'StatusMessage' | 'IsStartNode' | 'Badges' | 'Data'>>): void {\n const idx = this.Nodes.findIndex(n => UUIDsEqual(n.ID, nodeId));\n if (idx === -1) return;\n // Create a new object reference so the OnPush FlowNodeComponent picks up the change\n this.Nodes[idx] = { ...this.Nodes[idx], ...changes };\n this.cdr.detectChanges();\n }\n\n /** Update a connection's visual properties in-place (label, color, style, etc.) */\n UpdateConnection(connId: string, changes: Partial<Pick<FlowConnection, 'Label' | 'LabelIcon' | 'LabelIconColor' | 'LabelDetail' | 'Color' | 'Style' | 'Animated'>>): void {\n const conn = this.Connections.find(c => UUIDsEqual(c.ID, connId));\n if (!conn) return;\n Object.assign(conn, changes);\n this.cdr.detectChanges();\n }\n\n /** Highlight a sequence of nodes (e.g., execution path) */\n HighlightPath(nodeIds: string[]): void {\n for (const node of this.Nodes) {\n if (nodeIds.some(id => UUIDsEqual(id, node.ID))) {\n node.Status = 'running';\n }\n }\n // Highlight connections along the path\n for (const conn of this.Connections) {\n const srcIdx = nodeIds.findIndex(id => UUIDsEqual(id, conn.SourceNodeID));\n const tgtIdx = nodeIds.findIndex(id => UUIDsEqual(id, conn.TargetNodeID));\n if (srcIdx >= 0 && tgtIdx >= 0 && tgtIdx === srcIdx + 1) {\n conn.Animated = true;\n }\n }\n this.cdr.detectChanges();\n }\n\n /** Clear all node status highlights */\n ClearHighlights(): void {\n for (const node of this.Nodes) {\n node.Status = 'default';\n node.StatusMessage = undefined;\n }\n for (const conn of this.Connections) {\n conn.Animated = false;\n }\n this.cdr.detectChanges();\n }\n\n /** Undo the last operation */\n Undo(): void {\n const snapshot = this.stateService.Undo(this.Nodes, this.Connections);\n if (snapshot) {\n this.Nodes = snapshot.Nodes;\n this.Connections = snapshot.Connections;\n this.NodesChanged.emit(this.Nodes);\n this.ConnectionsChanged.emit(this.Connections);\n this.cdr.detectChanges();\n }\n }\n\n /** Redo the last undone operation */\n Redo(): void {\n const snapshot = this.stateService.Redo(this.Nodes, this.Connections);\n if (snapshot) {\n this.Nodes = snapshot.Nodes;\n this.Connections = snapshot.Connections;\n this.NodesChanged.emit(this.Nodes);\n this.ConnectionsChanged.emit(this.Connections);\n this.cdr.detectChanges();\n }\n }\n\n get CanUndo(): boolean {\n return this.stateService.CanUndo;\n }\n\n get CanRedo(): boolean {\n return this.stateService.CanRedo;\n }\n\n /** Delete the currently selected nodes and connections */\n DeleteSelected(): void {\n if (this.ReadOnly || (this.selectedNodeIDs.length === 0 && this.selectedConnectionIDs.length === 0)) {\n return;\n }\n this.pushUndoState();\n this.removeSelectedItems();\n this.ClearSelection();\n }\n\n // ── Foblex Event Handlers ──────────────────────────────────\n\n /** Called when Foblex flow finishes loading */\n protected onFlowLoaded(): void {\n if (this.Nodes.length > 0) {\n setTimeout(() => this.ZoomToFit(), 200);\n }\n }\n\n /** Canvas zoom/pan changed */\n protected onCanvasChange(event: FCanvasChangeEvent): void {\n this.canvasPosition = event.position;\n this.canvasScale = event.scale;\n this.updateZoomLevel(event.scale);\n }\n\n /** User drew a new connection */\n protected onCreateConnection(event: FCreateConnectionEvent): void {\n if (!event.fInputId || this.ReadOnly) return;\n this.pushUndoState();\n\n // Derive node IDs from port IDs (ports are named nodeID-input / nodeID-output)\n const sourceNodeID = this.findNodeByPortId(event.fOutputId);\n const targetNodeID = this.findNodeByPortId(event.fInputId);\n\n if (!sourceNodeID || !targetNodeID) return;\n\n // Resolve actual port IDs — when fConnectOnNode is enabled, Foblex may\n // send the node ID itself instead of a port ID. Map to the correct port.\n const sourcePortID = this.resolvePortId(event.fOutputId, sourceNodeID, 'output');\n const targetPortID = this.resolvePortId(event.fInputId, targetNodeID, 'input');\n\n // Prevent duplicate connections\n const exists = this.Connections.some(\n c => UUIDsEqual(c.SourcePortID, sourcePortID) && UUIDsEqual(c.TargetPortID, targetPortID)\n );\n if (exists) return;\n\n this.ConnectionCreated.emit({\n SourceNodeID: sourceNodeID,\n SourcePortID: sourcePortID,\n TargetNodeID: targetNodeID,\n TargetPortID: targetPortID\n });\n }\n\n /** User reassigned (dragged) an existing connection endpoint to a new node */\n protected onReassignConnection(event: FReassignConnectionEvent): void {\n if (this.ReadOnly) return;\n\n const conn = this.Connections.find(c => UUIDsEqual(c.ID, event.connectionId));\n if (!conn) return;\n\n // If dropped on empty space (no new target/source), discard the reassignment\n if (event.isTargetReassign && !event.newTargetId) return;\n if (event.isSourceReassign && !event.newSourceId) return;\n\n this.pushUndoState();\n\n const oldSourceNodeID = conn.SourceNodeID;\n const oldSourcePortID = conn.SourcePortID;\n const oldTargetNodeID = conn.TargetNodeID;\n const oldTargetPortID = conn.TargetPortID;\n\n // Resolve new endpoints\n let newSourceNodeID = oldSourceNodeID;\n let newSourcePortID = oldSourcePortID;\n let newTargetNodeID = oldTargetNodeID;\n let newTargetPortID = oldTargetPortID;\n\n if (event.isSourceReassign && event.newSourceId) {\n newSourceNodeID = this.findNodeByPortId(event.newSourceId) ?? oldSourceNodeID;\n newSourcePortID = this.resolvePortId(event.newSourceId, newSourceNodeID, 'output');\n }\n\n if (event.isTargetReassign && event.newTargetId) {\n newTargetNodeID = this.findNodeByPortId(event.newTargetId) ?? oldTargetNodeID;\n newTargetPortID = this.resolvePortId(event.newTargetId, newTargetNodeID, 'input');\n }\n\n // Prevent self-connections\n if (newSourceNodeID === newTargetNodeID) return;\n\n // Prevent duplicates\n const duplicate = this.Connections.some(\n c => !UUIDsEqual(c.ID, conn.ID) &&\n UUIDsEqual(c.SourcePortID, newSourcePortID) &&\n UUIDsEqual(c.TargetPortID, newTargetPortID)\n );\n if (duplicate) return;\n\n // Update the connection in-place\n conn.SourceNodeID = newSourceNodeID;\n conn.SourcePortID = newSourcePortID;\n conn.TargetNodeID = newTargetNodeID;\n conn.TargetPortID = newTargetPortID;\n\n this.ConnectionReassigned.emit({\n ConnectionID: conn.ID,\n OldSourceNodeID: oldSourceNodeID,\n OldSourcePortID: oldSourcePortID,\n OldTargetNodeID: oldTargetNodeID,\n OldTargetPortID: oldTargetPortID,\n NewSourceNodeID: newSourceNodeID,\n NewSourcePortID: newSourcePortID,\n NewTargetNodeID: newTargetNodeID,\n NewTargetPortID: newTargetPortID\n });\n\n this.ConnectionsChanged.emit(this.Connections);\n this.cdr.detectChanges();\n }\n\n /** External item dropped from palette */\n protected onCreateNode(event: FCreateNodeEvent): void {\n const config = this.NodeTypes.find(nt => nt.Type === (event.data as string));\n if (!config) return;\n\n // event.rect is already normalized to canvas coordinates by Foblex's\n // GetNormalizedElementRectExecution (via RoundedRect.fromCenter).\n // Do NOT pass it through getPositionInFlow() again — that double-normalizes\n // and places the node far from the actual drop point.\n // Use the center of the preview rect (≈ cursor position at drop time).\n this.addNodeFromPalette(config, {\n X: event.rect.x + event.rect.width / 2,\n Y: event.rect.y + event.rect.height / 2\n });\n }\n\n /**\n * A palette entry was clicked (or activated from the keyboard) rather than dragged.\n *\n * Deliberately routed into the SAME `addNodeFromPalette` the drop path uses. A separate\n * click-only creation path would be a second way for a node to come into existence, and the two\n * would drift — which is exactly the failure this fixes, one level up.\n */\n protected onPaletteNodeTypeActivated(config: FlowNodeTypeConfig): void {\n this.addNodeFromPalette(config, this.nextClickDropPosition());\n }\n\n /** The one place a palette-originated node is created and announced. */\n private addNodeFromPalette(config: FlowNodeTypeConfig, dropPosition: FlowPosition): void {\n if (this.ReadOnly) return;\n this.pushUndoState();\n const newNode = this.createDefaultNode(config, dropPosition);\n this.NodeAdded.emit({ Node: newNode, DropPosition: dropPosition });\n }\n\n /**\n * Where a clicked step lands: the middle of what the author is currently looking at, cascaded so\n * consecutive clicks don't bury each other under one box.\n *\n * A click carries no coordinates, so *some* position has to be invented. The viewport centre is\n * the only choice that is guaranteed on screen at any zoom or pan — placing at the canvas origin\n * would drop steps off-screen the moment the author has scrolled anywhere.\n */\n private nextClickDropPosition(): FlowPosition {\n const rect = this.canvasArea?.nativeElement.getBoundingClientRect();\n const scale = this.canvasScale || 1;\n const centerX = ((rect?.width ?? 800) / 2 - this.canvasPosition.x) / scale;\n const centerY = ((rect?.height ?? 600) / 2 - this.canvasPosition.y) / scale;\n\n const step = (this.clickPlacementIndex++ % FlowEditorComponent.CLICK_CASCADE_STEPS) * FlowEditorComponent.CLICK_CASCADE_OFFSET;\n return { X: Math.round(centerX + step), Y: Math.round(centerY + step) };\n }\n\n /** Selection changed in Foblex */\n protected onSelectionChange(event: FSelectionChangeEvent): void {\n const timeSinceClick = Date.now() - this.lastConnectionClickTime;\n\n // If a direct connection click just fired, skip this Foblex callback\n // to avoid double-processing / overwriting the direct click result.\n if (timeSinceClick < 200) {\n return;\n }\n\n this.selectedNodeIDs = event.fNodeIds ?? [];\n this.selectedConnectionIDs = event.fConnectionIds ?? [];\n\n this.SelectionChanged.emit({\n SelectedNodeIDs: this.selectedNodeIDs,\n SelectedConnectionIDs: this.selectedConnectionIDs\n });\n\n // Emit specific node/connection selection events.\n // IMPORTANT: When selecting a connection, emit NodeSelected(null) FIRST so\n // that consumers clear their node state before the connection event opens\n // the connection properties panel.\n if (this.selectedNodeIDs.length === 1) {\n const node = this.Nodes.find(n => UUIDsEqual(n.ID, this.selectedNodeIDs[0]));\n this.ConnectionSelected.emit(null);\n this.NodeSelected.emit(node ?? null);\n } else if (this.selectedConnectionIDs.length === 1) {\n const conn = this.Connections.find(c => UUIDsEqual(c.ID, this.selectedConnectionIDs[0]));\n this.NodeSelected.emit(null);\n this.ConnectionSelected.emit(conn ?? null);\n } else if (this.selectedNodeIDs.length === 0 && this.selectedConnectionIDs.length === 0) {\n this.NodeSelected.emit(null);\n this.ConnectionSelected.emit(null);\n }\n }\n\n /** Nodes moved on canvas */\n protected onNodesMoved(event: FMoveNodesEvent): void {\n if (this.ReadOnly || !event.fNodes || event.fNodes.length === 0) return;\n this.pushUndoState();\n\n for (const moved of event.fNodes) {\n const node = this.Nodes.find(n => UUIDsEqual(n.ID, moved.id));\n if (node) {\n const oldPosition = { ...node.Position };\n node.Position = { X: moved.position.x, Y: moved.position.y };\n this.NodeMoved.emit({\n NodeID: node.ID,\n OldPosition: oldPosition,\n NewPosition: node.Position\n });\n }\n }\n this.NodesChanged.emit(this.Nodes);\n }\n\n // ── Toolbar Event Handlers ─────────────────────────────────\n\n protected onGridToggled(show: boolean): void {\n this.ShowGrid = show;\n this.GridToggled.emit(show);\n this.cdr.detectChanges();\n }\n\n protected onMinimapToggled(show: boolean): void {\n this.ShowMinimap = show;\n this.MinimapToggled.emit(show);\n this.cdr.detectChanges();\n }\n\n protected onLegendToggled(show: boolean): void {\n this.ShowLegend = show;\n this.LegendToggled.emit(show);\n this.cdr.detectChanges();\n }\n\n protected onPanModeToggled(enabled: boolean): void {\n this.panMode = enabled;\n this.cdr.detectChanges();\n }\n\n // ── Context Menu ───────────────────────────────────────────\n\n protected onNodeContextMenu(event: MouseEvent, node: FlowNode): void {\n if (this.ReadOnly) return;\n event.preventDefault();\n event.stopPropagation();\n this.showContextMenu(event, 'node', node, null);\n }\n\n /** Direct click on a connection — ensures ConnectionSelected fires reliably */\n protected onConnectionClicked(event: MouseEvent, conn: FlowConnection): void {\n // Do NOT stopPropagation — let Foblex handle its own visual selection.\n // Record the time so onSelectionChange can skip double-processing.\n this.lastConnectionClickTime = Date.now();\n this.selectedConnectionIDs = [conn.ID];\n this.selectedNodeIDs = [];\n this.NodeSelected.emit(null);\n this.ConnectionSelected.emit(conn);\n this.cdr.detectChanges();\n }\n\n protected onConnectionContextMenu(event: MouseEvent, conn: FlowConnection): void {\n if (this.ReadOnly) return;\n event.preventDefault();\n event.stopPropagation();\n this.showContextMenu(event, 'connection', null, conn);\n }\n\n protected onContextMenuAction(action: FlowContextMenuAction): void {\n // Capture the target BEFORE closing: hideContextMenu() nulls contextMenuNode and\n // contextMenuConnection, so reading them afterwards found nothing and every branch below fell\n // through — the menu closed and neither Remove nor Edit did anything, for nodes or connections.\n const targetType = this.contextMenuTargetType;\n const node = this.contextMenuNode;\n const connection = this.contextMenuConnection;\n\n this.hideContextMenu();\n\n if (action === 'edit') {\n if (targetType === 'node' && node) {\n this.NodeEditRequested.emit(node);\n } else if (targetType === 'connection' && connection) {\n this.ConnectionEditRequested.emit(connection);\n }\n } else if (action === 'remove') {\n if (targetType === 'node' && node) {\n this.pushUndoState();\n this.removeNodeById(node.ID);\n } else if (targetType === 'connection' && connection) {\n this.pushUndoState();\n this.removeConnectionById(connection.ID);\n }\n // pushUndoState moved inside the branches: pushing before knowing there IS a target left an\n // undo entry for an action that never happened, so the next Ctrl+Z did nothing visible.\n }\n }\n\n @HostListener('document:click')\n protected onDocumentClick(): void {\n if (this.contextMenuVisible) {\n this.hideContextMenu();\n }\n }\n\n private showContextMenu(\n event: MouseEvent,\n targetType: FlowContextMenuTarget,\n node: FlowNode | null,\n connection: FlowConnection | null\n ): void {\n this.contextMenuTargetType = targetType;\n this.contextMenuNode = node;\n this.contextMenuConnection = connection;\n this.contextMenuX = event.clientX;\n this.contextMenuY = event.clientY;\n this.contextMenuVisible = true;\n this.cdr.detectChanges();\n }\n\n private hideContextMenu(): void {\n this.contextMenuVisible = false;\n this.contextMenuNode = null;\n this.contextMenuConnection = null;\n this.cdr.detectChanges();\n }\n\n private removeNodeById(nodeId: string): void {\n const node = this.Nodes.find(n => UUIDsEqual(n.ID, nodeId));\n if (!node) return;\n\n this.Nodes = this.Nodes.filter(n => !UUIDsEqual(n.ID, nodeId));\n\n /* Remove connections attached to this node */\n const orphaned = this.Connections.filter(\n c => UUIDsEqual(c.SourceNodeID, nodeId) || UUIDsEqual(c.TargetNodeID, nodeId)\n );\n this.Connections = this.Connections.filter(\n c => !UUIDsEqual(c.SourceNodeID, nodeId) && !UUIDsEqual(c.TargetNodeID, nodeId)\n );\n for (const conn of orphaned) {\n this.ConnectionRemoved.emit(conn);\n }\n this.NodeRemoved.emit(node);\n this.NodesChanged.emit(this.Nodes);\n this.ConnectionsChanged.emit(this.Connections);\n this.cdr.detectChanges();\n }\n\n private removeConnectionById(connId: string): void {\n const conn = this.Connections.find(c => UUIDsEqual(c.ID, connId));\n if (!conn) return;\n\n this.Connections = this.Connections.filter(c => !UUIDsEqual(c.ID, connId));\n this.ConnectionRemoved.emit(conn);\n this.ConnectionsChanged.emit(this.Connections);\n this.cdr.detectChanges();\n }\n\n // ── Keyboard Shortcuts ─────────────────────────────────────\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(event: KeyboardEvent): void {\n if (this.ReadOnly) return;\n\n const isCtrlOrMeta = event.ctrlKey || event.metaKey;\n\n if (event.key === 'Delete' || event.key === 'Backspace') {\n // Don't delete if user is typing in an input\n const target = event.target as HTMLElement;\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.tagName === 'SELECT') {\n return;\n }\n event.preventDefault();\n this.DeleteSelected();\n } else if (isCtrlOrMeta && event.key === 'z' && !event.shiftKey) {\n event.preventDefault();\n this.Undo();\n } else if (isCtrlOrMeta && (event.key === 'y' || (event.key === 'z' && event.shiftKey))) {\n event.preventDefault();\n this.Redo();\n } else if (isCtrlOrMeta && event.key === 'a') {\n event.preventDefault();\n this.fFlow?.selectAll();\n }\n }\n\n // ── TrackBy Functions ───────────────────────────────────────\n\n protected trackNodeById(_index: number, node: FlowNode): string {\n return node.ID;\n }\n\n protected trackConnectionById(_index: number, conn: FlowConnection): string {\n return conn.ID;\n }\n\n // ── Helper Methods ─────────────────────────────────────────\n\n GetTypeConfig(type: string): FlowNodeTypeConfig | null {\n return this.NodeTypes.find(nt => nt.Type === type) ?? null;\n }\n\n /** Get the connectable side string for Foblex based on port side */\n GetConnectableSide(side: string | undefined): string {\n switch (side) {\n case 'left': return 'left';\n case 'right': return 'right';\n case 'top': return 'top';\n case 'bottom': return 'bottom';\n default: return 'auto';\n }\n }\n\n get selectedCount(): number {\n return this.selectedNodeIDs.length + this.selectedConnectionIDs.length;\n }\n\n private pushUndoState(): void {\n this.stateService.PushState(this.Nodes, this.Connections);\n }\n\n private updateZoomLevel(scale: number): void {\n this.zoomLevel = Math.round(scale * 100);\n this.cdr.detectChanges();\n }\n\n private findNodeByPortId(portId: string): string | null {\n for (const node of this.Nodes) {\n for (const port of node.Ports) {\n if (UUIDsEqual(port.ID, portId)) {\n return node.ID;\n }\n }\n }\n // When fConnectOnNode is enabled, Foblex may send the node ID itself\n // instead of a port ID. Check for a direct node ID match as fallback.\n const directMatch = this.Nodes.find(n => UUIDsEqual(n.ID, portId));\n if (directMatch) {\n return directMatch.ID;\n }\n return null;\n }\n\n /**\n * When fConnectOnNode is enabled, Foblex may send a node ID instead of a port ID.\n * This resolves the raw ID to the correct port ID for the given direction.\n */\n private resolvePortId(rawId: string, nodeId: string, direction: 'input' | 'output'): string {\n const node = this.Nodes.find(n => UUIDsEqual(n.ID, nodeId));\n if (!node) return rawId;\n\n // If the rawId already matches a port on this node, use it as-is\n const exactPort = node.Ports.find(p => UUIDsEqual(p.ID, rawId));\n if (exactPort) return rawId;\n\n // Otherwise, find the first port matching the expected direction\n const dirPort = node.Ports.find(p => p.Direction === direction);\n return dirPort ? dirPort.ID : rawId;\n }\n\n private createDefaultNode(config: FlowNodeTypeConfig, position: FlowPosition): FlowNode {\n const id = this.generateId();\n const defaultPorts = config.DefaultPorts ?? [\n { ID: `${id}-input`, Direction: 'input' as const, Side: 'top' as const, Multiple: true },\n { ID: `${id}-output`, Direction: 'output' as const, Side: 'bottom' as const, Multiple: true }\n ];\n\n return {\n ID: id,\n Type: config.Type,\n Label: config.Label,\n Icon: config.Icon,\n Status: 'default',\n Position: position,\n Ports: defaultPorts.map(p => ({\n ...p,\n ID: p.ID.startsWith(id) ? p.ID : `${id}-${p.ID}`\n }))\n };\n }\n\n private removeSelectedItems(): void {\n // Remove selected connections\n const removedConnections = this.Connections.filter(c => this.selectedConnectionIDs.some(id => UUIDsEqual(id, c.ID)));\n this.Connections = this.Connections.filter(c => !this.selectedConnectionIDs.some(id => UUIDsEqual(id, c.ID)));\n for (const conn of removedConnections) {\n this.ConnectionRemoved.emit(conn);\n }\n\n // Remove selected nodes and their connections\n const removedNodes = this.Nodes.filter(n => this.selectedNodeIDs.some(id => UUIDsEqual(id, n.ID)));\n this.Nodes = this.Nodes.filter(n => !this.selectedNodeIDs.some(id => UUIDsEqual(id, n.ID)));\n\n // Also remove connections attached to deleted nodes\n const deletedNodeIDs = new Set(this.selectedNodeIDs.map(id => NormalizeUUID(id)));\n const orphanedConnections = this.Connections.filter(\n c => deletedNodeIDs.has(NormalizeUUID(c.SourceNodeID)) || deletedNodeIDs.has(NormalizeUUID(c.TargetNodeID))\n );\n this.Connections = this.Connections.filter(\n c => !deletedNodeIDs.has(NormalizeUUID(c.SourceNodeID)) && !deletedNodeIDs.has(NormalizeUUID(c.TargetNodeID))\n );\n\n for (const conn of orphanedConnections) {\n this.ConnectionRemoved.emit(conn);\n }\n for (const node of removedNodes) {\n this.NodeRemoved.emit(node);\n }\n\n this.NodesChanged.emit(this.Nodes);\n this.ConnectionsChanged.emit(this.Connections);\n this.cdr.detectChanges();\n }\n\n private generateId(): string {\n return 'flow-' + Math.random().toString(36).substring(2, 11);\n }\n}\n","<div class=\"mj-flow-editor\" [class.mj-flow-editor--readonly]=\"ReadOnly\" tabindex=\"0\">\n\n <!-- Canvas Toolbar -->\n @if (ShowToolbar) {\n <div class=\"mj-flow-editor-toolbar-area\">\n <mj-flow-toolbar\n [ZoomLevel]=\"zoomLevel\"\n [ShowGrid]=\"ShowGrid\"\n [ShowMinimap]=\"ShowMinimap\"\n [ShowLegend]=\"ShowLegend\"\n [ReadOnly]=\"ReadOnly\"\n [PanMode]=\"panMode\"\n (ZoomInClicked)=\"ZoomIn()\"\n (ZoomOutClicked)=\"ZoomOut()\"\n (FitToScreenClicked)=\"ZoomToFit()\"\n (AutoLayoutClicked)=\"AutoArrange()\"\n (GridToggled)=\"onGridToggled($event)\"\n (MinimapToggled)=\"onMinimapToggled($event)\"\n (LegendToggled)=\"onLegendToggled($event)\"\n (PanModeToggled)=\"onPanModeToggled($event)\">\n </mj-flow-toolbar>\n </div>\n }\n\n <!-- Main Canvas Area -->\n <div class=\"mj-flow-editor-canvas-area\">\n\n <!-- Palette Sidebar -->\n @if (ShowPalette && !ReadOnly) {\n <mj-flow-palette\n [NodeTypes]=\"NodeTypes\"\n (NodeTypeActivated)=\"onPaletteNodeTypeActivated($event)\">\n </mj-flow-palette>\n }\n\n <!-- Foblex Canvas -->\n <div class=\"mj-flow-editor-canvas\" #canvasArea\n [class.mj-flow-editor-canvas--pan-mode]=\"panMode\">\n <f-flow fDraggable\n [fDraggableDisabled]=\"false\"\n [fCanvasMoveTrigger]=\"canvasMoveTriggerFn\"\n [vCellSize]=\"GridSize\"\n [hCellSize]=\"GridSize\"\n [fCellSizeWhileDragging]=\"ShowGrid\"\n (fLoaded)=\"onFlowLoaded()\"\n (fCreateConnection)=\"onCreateConnection($event)\"\n (fReassignConnection)=\"onReassignConnection($event)\"\n (fCreateNode)=\"onCreateNode($event)\"\n (fSelectionChange)=\"onSelectionChange($event)\"\n (fMoveNodes)=\"onNodesMoved($event)\">\n\n <!-- Background grid — MUST be direct child of f-flow (Foblex content projection requires it) -->\n @if (ShowGrid) {\n <f-background>\n <f-circle-pattern [color]=\"'#94a3b8'\" [radius]=\"24\"></f-circle-pattern>\n </f-background>\n }\n\n <!-- Alignment snap lines — direct child of f-flow -->\n @if (!ReadOnly) {\n <f-line-alignment [fAlignThreshold]=\"10\"></f-line-alignment>\n }\n\n <f-canvas fZoom #fZoomRef=\"fComponent\"\n [fZoomMinimum]=\"0.15\"\n [fZoomMaximum]=\"3\"\n [fZoomStep]=\"0.1\"\n [position]=\"canvasPosition\"\n [scale]=\"canvasScale\"\n (fCanvasChange)=\"onCanvasChange($event)\">\n\n <!-- Interactive connection drawing -->\n @if (!ReadOnly) {\n <f-connection-for-create\n fType=\"bezier\"\n [fRadius]=\"8\"\n [fOffset]=\"12\">\n <svg viewBox=\"0 0 10 10\" fMarker type=\"end\"\n orient=\"auto\" [refX]=\"9\" [refY]=\"5\" [height]=\"10\" [width]=\"10\">\n <path d=\"M0 0L10 5L0 10Z\" fill=\"#94a3b8\"/>\n </svg>\n </f-connection-for-create>\n }\n\n <!-- Connections -->\n @for (conn of Connections; track trackConnectionById($index, conn)) {\n <f-connection\n [fConnectionId]=\"conn.ID\"\n [fOutputId]=\"conn.SourcePortID\"\n [fInputId]=\"conn.TargetPortID\"\n fType=\"bezier\"\n fBehavior=\"fixed\"\n [fRadius]=\"8\"\n [fOffset]=\"12\"\n [fSelectionDisabled]=\"false\"\n [fReassignDisabled]=\"ReadOnly\"\n [style.--connection-color]=\"conn.Color || '#94a3b8'\"\n [class.mj-flow-connection-colored]=\"!!conn.Color\"\n [class.mj-flow-connection-dashed]=\"conn.Style === 'dashed'\"\n [class.mj-flow-connection-dotted]=\"conn.Style === 'dotted'\"\n (click)=\"onConnectionClicked($event, conn)\"\n (contextmenu)=\"onConnectionContextMenu($event, conn)\">\n <!-- Arrow marker -->\n <svg viewBox=\"0 0 10 10\" fMarker type=\"end\"\n orient=\"auto\" [refX]=\"9\" [refY]=\"5\" [height]=\"10\" [width]=\"10\">\n <path d=\"M0 0L10 5L0 10Z\" [attr.fill]=\"conn.Color || '#94a3b8'\"/>\n </svg>\n <!-- Connection label -->\n @if (conn.Label) {\n <div fConnectionContent [position]=\"0.5\"\n class=\"mj-flow-connection-label\"\n [style.backgroundColor]=\"ConnectionLabelBackground\"\n [style.borderColor]=\"ConnectionLabelBorderColor\"\n [style.color]=\"ConnectionLabelTextColor\"\n [title]=\"conn.LabelDetail || conn.Label || ''\">\n @if (conn.LabelIcon) {\n <i\n class=\"fa-solid mj-flow-connection-label-icon\"\n [ngClass]=\"conn.LabelIcon\"\n [style.color]=\"conn.LabelIconColor || 'inherit'\"></i>\n }\n {{ conn.Label }}\n </div>\n }\n </f-connection>\n }\n\n <!-- Nodes -->\n @for (node of Nodes; track trackNodeById($index, node)) {\n <mj-flow-node\n fNode\n fDragHandle\n [fNodeId]=\"node.ID\"\n [fNodePosition]=\"{ x: node.Position.X, y: node.Position.Y }\"\n [fNodeDraggingDisabled]=\"ReadOnly || panMode || node.Locked === true\"\n [fNodeSelectionDisabled]=\"panMode\"\n [fConnectOnNode]=\"!ReadOnly && !panMode\"\n [Node]=\"node\"\n [TypeConfig]=\"GetTypeConfig(node.Type)\"\n [ReadOnly]=\"ReadOnly\"\n (contextmenu)=\"onNodeContextMenu($event, node)\">\n </mj-flow-node>\n }\n\n </f-canvas>\n\n <!-- Rubber-band selection — direct child of f-flow -->\n @if (!ReadOnly) {\n <f-selection-area></f-selection-area>\n }\n\n <!-- Minimap -->\n @if (ShowMinimap) {\n <div class=\"mj-flow-editor-minimap\" fDragBlocker>\n <f-minimap [fMinSize]=\"1500\"></f-minimap>\n </div>\n }\n </f-flow>\n\n <!-- Legend -->\n @if (ShowLegend && Nodes.length > 0) {\n <div class=\"mj-flow-editor-legend\">\n <div class=\"mj-flow-editor-legend-title\">Legend</div>\n <div class=\"mj-flow-editor-legend-section\">\n <div class=\"mj-flow-editor-legend-heading\">Connections</div>\n <div class=\"mj-flow-editor-legend-item\">\n <svg class=\"mj-flow-editor-legend-line-svg\" width=\"28\" height=\"10\"><line x1=\"0\" y1=\"5\" x2=\"28\" y2=\"5\" stroke=\"#64748b\" stroke-width=\"2\"/></svg>\n <span>Only exit path</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <svg class=\"mj-flow-editor-legend-line-svg\" width=\"28\" height=\"10\"><line x1=\"0\" y1=\"5\" x2=\"28\" y2=\"5\" stroke=\"#16a34a\" stroke-width=\"2\"/></svg>\n <i class=\"fa-solid fa-circle-check\" style=\"color:#16a34a;font-size:10px;\"></i>\n <span>Default (fallback)</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <svg class=\"mj-flow-editor-legend-line-svg\" width=\"28\" height=\"10\"><line x1=\"0\" y1=\"5\" x2=\"28\" y2=\"5\" stroke=\"#f59e0b\" stroke-width=\"2\" stroke-dasharray=\"5 3\"/></svg>\n <span>Conditional</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <svg class=\"mj-flow-editor-legend-line-svg\" width=\"28\" height=\"10\"><line x1=\"0\" y1=\"5\" x2=\"28\" y2=\"5\" stroke=\"#ef4444\" stroke-width=\"2\"/></svg>\n <i class=\"fa-solid fa-triangle-exclamation\" style=\"color:#ef4444;font-size:10px;\"></i>\n <span>Duplicate defaults</span>\n </div>\n </div>\n <div class=\"mj-flow-editor-legend-section\">\n <div class=\"mj-flow-editor-legend-heading\">Step Types</div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-swatch\" style=\"background:#3B82F6\"></span>\n <span>Action</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-swatch\" style=\"background:#8B5CF6\"></span>\n <span>Prompt</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-swatch\" style=\"background:#10B981\"></span>\n <span>Sub-Agent</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-swatch\" style=\"background:#F59E0B\"></span>\n <span>For Each</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-swatch\" style=\"background:#F97316\"></span>\n <span>While</span>\n </div>\n </div>\n <div class=\"mj-flow-editor-legend-section\">\n <div class=\"mj-flow-editor-legend-heading\">Borders</div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-box\" style=\"border-color:#16a34a;background:#f0fdf4;\"></span>\n <span>Start node</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-box\" style=\"border-color:#ef4444;background:#fef2f2;\"></span>\n <i class=\"fa-solid fa-triangle-exclamation\" style=\"color:#ea580c;font-size:10px;\"></i>\n <span>Missing config</span>\n </div>\n </div>\n </div>\n }\n\n <!-- Empty state overlay -->\n @if (Nodes.length === 0) {\n <div class=\"mj-flow-editor-empty\">\n <mj-empty-state\n Icon=\"fa-solid fa-diagram-project\"\n [Title]=\"EmptyStateTitle\">\n @if (!ReadOnly) {\n <p class=\"mj-flow-editor-empty-subtitle\">\n Or use auto-layout after adding steps to arrange them automatically\n </p>\n }\n </mj-empty-state>\n </div>\n }\n </div>\n </div>\n\n <!-- Context Menu -->\n @if (contextMenuVisible) {\n <div\n class=\"mj-flow-context-menu\"\n [style.left.px]=\"contextMenuX\"\n [style.top.px]=\"contextMenuY\"\n (click)=\"$event.stopPropagation()\">\n <button class=\"mj-flow-context-menu-item\" (click)=\"onContextMenuAction('edit')\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n <span>Edit {{ contextMenuTargetType === 'node' ? 'Node' : 'Connection' }}</span>\n </button>\n <div class=\"mj-flow-context-menu-divider\"></div>\n <button class=\"mj-flow-context-menu-item mj-flow-context-menu-item--danger\" (click)=\"onContextMenuAction('remove')\">\n <i class=\"fa-solid fa-trash-can\"></i>\n <span>Remove {{ contextMenuTargetType === 'node' ? 'Node' : 'Connection' }}</span>\n </button>\n </div>\n }\n\n <!-- Status Bar -->\n @if (ShowStatusBar) {\n <mj-flow-status-bar\n [NodeCount]=\"Nodes.length\"\n [ConnectionCount]=\"Connections.length\"\n [SelectedCount]=\"selectedCount\"\n [ZoomLevel]=\"zoomLevel\">\n </mj-flow-status-bar>\n }\n</div>\n"]}
1
+ {"version":3,"file":"flow-editor.component.js","sourceRoot":"","sources":["../../../src/lib/components/flow-editor.component.ts","../../../src/lib/components/flow-editor.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAClB,iBAAiB,EAAE,uBAAuB,EAAE,YAAY,EACxF,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAEN,MAAM,cAAc,CAAC;AACxD,OAAO,EAML,8BAA8B,EAAE,mCAAmC,GAEpE,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;;;;;;;;;;;;;;;;;ICd7D,AADF,8BAA0E,0BAiBvB;IAA/C,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,gNAAiB,eAAQ,KAAC,qMACR,gBAAS,KAAC,6MACN,kBAAW,KAAC,2MACb,oBAAa,KAAC,qMACpB,4BAAqB,KAAC,2MACnB,+BAAwB,KAAC,yMAC1B,8BAAuB,KAAC,2MACvB,+BAAwB,KAAC,uMACxB,4BAAqB,WAAW,CAAC,KAAC,+LACtC,4BAAqB,QAAQ,CAAC,KAAC;IAElD,AADE,iBAAkB,EACd;;;;IAjBF,cAAuB;IAKvB,AADA,AADA,AADA,AADA,AADA,4CAAuB,6BACF,mCACM,iCACF,6BACJ,2BACF;;;;IAcvB,kCAEiE;IADzD,uLAAS,4BAAqB,OAAO,CAAC,KAAC;IAE7C,wBAAqD;IACvD,iBAAS;;;;;;;IAET,kCAEiE;IADzD,uLAAS,4BAAqB,OAAO,CAAC,KAAC;IAE7C,wBAAuD;IACzD,iBAAS;;;;;;;IAQP,2CAE2D;IAAzD,8NAAqB,yCAAkC,KAAC;IAC1D,iBAAkB;;;IAFhB,4CAAuB;;;IAuBrB,oCAAc;IACZ,uCAAuE;IACzE,iBAAe;;IADK,cAAmB;IAAC,AAApB,iCAAmB,cAAc;;;IAMrD,uCAA4D;;IAA1C,oCAAsB;;;IAatC,mDAGiB;;IACf,+BACiE;IAC/D,2BAA0C;IAE9C,AADE,iBAAM,EACkB;;IALxB,AADA,2BAAa,eACC;IAEE,cAAU;IAA0B,AAAd,AAAX,AAAX,wBAAU,WAAW,cAAc,aAAa;;;IA0C1D,wBAGqD;;;IAArD,4DAAgD;IAD9C,2CAA0B;;;IAThC,+BAKiD;IAC/C,yGAAsB;IAMtB,YACF;IAAA,iBAAM;;;;IATJ,AADA,AADA,oEAAmD,mDACH,0CACR;IACxC,AALsB,8BAAgB,qDAKQ;IAC9C,cAKC;IALD,4CAKC;IACD,cACF;IADE,8CACF;;;;IAxCJ,wCAiBwD;IAAtD,AADA,sNAAS,2CAAiC,KAAC,qNAC5B,+CAAqC,KAAC;;IAErD,+BAGoC;IAClC,2BAAiE;IACnE,iBAAM;IAEN,8FAAkB;IAgBpB,iBAAe;;;;IA/Bb,AADA,gEAAoD,sDACC;IAIrD,AADA,AADA,AADA,6DAAiD,yDACU,yDACA,mDACN;IANrD,AADA,AADA,AADA,AAHA,AADA,AADA,0CAAyB,mCACM,kCACD,cAGjB,eACC,6BACc,sCACE;IAWd,cAAU;IAExB,AADA,AADyB,AAAX,wBAAU,WAAW,sCACD,qCACD;IACP,cAAqC;;IAGjE,cAeC;IAfD,wCAeC;;;;IAMH,wCAWkD;IAAhD,mOAAe,0CAA+B,KAAC;IACjD,iBAAe;;;;IAFb,AADA,AADA,AADA,AADA,AADA,AADA,AADA,qCAAmB,uFACyC,wFACS,0CACnC,uDACM,kBAC3B,mDAC0B,6BAClB;;;IASzB,mCAAqC;;;IAKrC,+BAAiD;IAC/C,gCAAyC;IAC3C,iBAAM;;IADO,cAAiB;IAAjB,+BAAiB;;;IAQ9B,AADF,+BAAmC,cACQ;IAAA,sBAAM;IAAA,iBAAM;IAEnD,AADF,+BAA2C,cACE;IAAA,2BAAW;IAAA,iBAAM;IAC5D,+BAAwC;;IACtC,+BAAmE;IAAA,2BAAsE;IAAA,iBAAM;;IAC/I,4BAAM;IAAA,+BAAc;IACtB,AADsB,iBAAO,EACvB;IACN,gCAAwC;;IACtC,gCAAmE;IAAA,4BAAsE;IAAA,iBAAM;;IAC/I,yBAA8E;IAC9E,6BAAM;IAAA,mCAAkB;IAC1B,AAD0B,iBAAO,EAC3B;IACN,gCAAwC;;IACtC,gCAAmE;IAAA,4BAA6F;IAAA,iBAAM;;IACtK,6BAAM;IAAA,4BAAW;IACnB,AADmB,iBAAO,EACpB;IACN,gCAAwC;;IACtC,gCAAmE;IAAA,4BAAsE;IAAA,iBAAM;;IAC/I,yBAAsF;IACtF,6BAAM;IAAA,mCAAkB;IAE5B,AADE,AAD0B,iBAAO,EAC3B,EACF;IAEJ,AADF,gCAA2C,eACE;IAAA,2BAAU;IAAA,iBAAM;IAC3D,gCAAwC;IACtC,4BAA6E;IAC7E,6BAAM;IAAA,uBAAM;IACd,AADc,iBAAO,EACf;IACN,gCAAwC;IACtC,4BAA6E;IAC7E,6BAAM;IAAA,uBAAM;IACd,AADc,iBAAO,EACf;IACN,gCAAwC;IACtC,4BAA6E;IAC7E,6BAAM;IAAA,0BAAS;IACjB,AADiB,iBAAO,EAClB;IACN,gCAAwC;IACtC,4BAA6E;IAC7E,6BAAM;IAAA,yBAAQ;IAChB,AADgB,iBAAO,EACjB;IACN,gCAAwC;IACtC,4BAA6E;IAC7E,6BAAM;IAAA,sBAAK;IAEf,AADE,AADa,iBAAO,EACd,EACF;IAEJ,AADF,gCAA2C,eACE;IAAA,wBAAO;IAAA,iBAAM;IACxD,gCAAwC;IACtC,4BAAgG;IAChG,6BAAM;IAAA,2BAAU;IAClB,AADkB,iBAAO,EACnB;IACN,gCAAwC;IAEtC,AADA,4BAAgG,aACV;IACtF,6BAAM;IAAA,+BAAc;IAG1B,AADE,AADE,AADsB,iBAAO,EACvB,EACF,EACF;;;IAUA,6BAAyC;IACvC,qFACF;IAAA,iBAAI;;;IANR,AADF,+BAAkC,yBAGJ;IAC1B,mGAAiB;IAMrB,AADE,iBAAiB,EACb;;;IAPF,cAAyB;IAAzB,8CAAyB;IACzB,cAIC;IAJD,2CAIC;;;IAoBD,wBAA8C;;;IAA1B,uCAAqB;;;IAIzC,+BAA2C;IAAA,YAAmB;IAAA,iBAAM;;;IAAzB,cAAmB;IAAnB,uCAAmB;;;IAIhE,0BAAgD;;;;IAblD,kCAG+C;IAAvC,2NAAS,uCAA4B,KAAC;IAC5C,yGAAiB;IAGjB,4BAAM;IAAA,YAAgB;IAAA,iBAAO;IAC7B,2GAAqB;IAGvB,iBAAS;IACT,2GAAqE;;;;;;;IAX7D,oEAAuD;IACvD,4CAA0B;IAEhC,cAEC;IAFD,wCAEC;IACK,eAAgB;IAAhB,oCAAgB;IACtB,cAEC;IAFD,4CAEC;IAEH,cAEC;IAFD,sMAEC;;;;IApBL,+BAIqC;IAAnC,yJAAS,wBAAwB,KAAC;IAClC,uGAgBC;IACH,iBAAM;;;IAnBJ,AADA,iDAA8B,kCACD;IAE7B,cAgBC;IAhBD,sCAgBC;;;IAMH,yCAKqB;;;IADnB,AADA,AADA,AADA,+CAA0B,8CACY,uCACP,+BACR;;AD7Q7B;;;;;;;;;;;;;;GAcG;AAUH,MAAM,OAAO,mBAAmB;IAsHpB;IACA;IACA;IAvHV,+DAA+D;IACtD,KAAK,GAAe,EAAE,CAAC;IACvB,WAAW,GAAqB,EAAE,CAAC;IACnC,SAAS,GAAyB,EAAE,CAAC;IACrC,QAAQ,GAAG,KAAK,CAAC;IACjB,WAAW,GAAG,IAAI,CAAC;IACnB,WAAW,GAAG,IAAI,CAAC;IACnB,QAAQ,GAAG,IAAI,CAAC;IAChB,aAAa,GAAG,IAAI,CAAC;IAC9B;;;OAGG;IACM,WAAW,GAAG,IAAI,CAAC;IAC5B,uFAAuF;IAC9E,iBAAiB,GAA0B,OAAO,CAAC;IAC5D,yDAAyD;IAChD,YAAY,GAAqB,QAAQ,CAAC;IAC1C,UAAU,GAAG,IAAI,CAAC;IAClB,QAAQ,GAAG,EAAE,CAAC;IACd,mBAAmB,GAAwB,UAAU,CAAC;IAC/D,6CAA6C;IAC7C,8FAA8F;IAC9F,2FAA2F;IAClF,yBAAyB,GAAG,sBAAsB,CAAC;IAC5D,yCAAyC;IAChC,0BAA0B,GAAG,0BAA0B,CAAC;IACjE,uCAAuC;IAC9B,wBAAwB,GAAG,0BAA0B,CAAC;IAE/D,4EAA4E;IAC5E,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,QAAQ;YAClB,CAAC,CAAC,gCAAgC;YAClC,CAAC,CAAC,yFAAyF,CAAC;IAChG,CAAC;IAED,+DAA+D;IACrD,YAAY,GAAG,IAAI,YAAY,EAAmB,CAAC;IACnD,SAAS,GAAG,IAAI,YAAY,EAAsB,CAAC;IACnD,WAAW,GAAG,IAAI,YAAY,EAAY,CAAC;IAC3C,SAAS,GAAG,IAAI,YAAY,EAAsB,CAAC;IACnD,iBAAiB,GAAG,IAAI,YAAY,EAA8B,CAAC;IACnE,iBAAiB,GAAG,IAAI,YAAY,EAAkB,CAAC;IACvD,oBAAoB,GAAG,IAAI,YAAY,EAAiC,CAAC;IACzE,kBAAkB,GAAG,IAAI,YAAY,EAAyB,CAAC;IAC/D,gBAAgB,GAAG,IAAI,YAAY,EAA6B,CAAC;IACjE,aAAa,GAAG,IAAI,YAAY,EAAwB,CAAC;IACzD,YAAY,GAAG,IAAI,YAAY,EAAc,CAAC;IAC9C,kBAAkB,GAAG,IAAI,YAAY,EAAoB,CAAC;IAC1D,iBAAiB,GAAG,IAAI,YAAY,EAAY,CAAC;IACjD,uBAAuB,GAAG,IAAI,YAAY,EAAkB,CAAC;IACvE,mGAAmG;IACzF,iBAAiB,GAAG,IAAI,YAAY,EAAkC,CAAC;IACvE,sBAAsB,GAAG,IAAI,YAAY,EAAuC,CAAC;IACjF,WAAW,GAAG,IAAI,YAAY,EAAW,CAAC;IAC1C,cAAc,GAAG,IAAI,YAAY,EAAW,CAAC;IAC7C,aAAa,GAAG,IAAI,YAAY,EAAW,CAAC;IACtD,4EAA4E;IAClE,wBAAwB,GAAG,IAAI,YAAY,EAAyB,CAAC;IAE/E,kFAAkF;IAClF,IAAW,0BAA0B;QACnC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC9D,CAAC;IAEM,oBAAoB,CAAC,IAA2B;QACrD,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI;YAAE,OAAO;QAC5C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,+DAA+D;IAC1B,KAAK,CAA6B;IAChC,OAAO,CAA+B;IAC5C,KAAK,CAA6B;IAChC,UAAU,CAAsC;IAEnF,+DAA+D;IACrD,SAAS,GAAG,GAAG,CAAC;IAChB,cAAc,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAChC,WAAW,GAAG,CAAC,CAAC;IAC1B,sFAAsF;IAC9E,aAAa,GAAG,KAAK,CAAC;IAC9B,8FAA8F;IACtF,mBAAmB,GAAG,KAAK,CAAC;IAC5B,4BAA4B,GAAG,KAAK,CAAC;IACnC,eAAe,GAAa,EAAE,CAAC;IAC/B,qBAAqB,GAAa,EAAE,CAAC;IACrC,OAAO,GAAG,KAAK,CAAC;IAE1B,4EAA4E;IAClE,mBAAmB,GAAG,CAAC,MAA+B,EAAW,EAAE;QAC3E,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC,CAAC;IAEF,wBAAwB;IACd,kBAAkB,GAAG,KAAK,CAAC;IAC3B,YAAY,GAAG,CAAC,CAAC;IACjB,YAAY,GAAG,CAAC,CAAC;IACjB,qBAAqB,GAA0B,MAAM,CAAC;IACtD,eAAe,GAAoB,IAAI,CAAC;IACxC,qBAAqB,GAA0B,IAAI,CAAC;IACpD,gBAAgB,GAA0B,EAAE,CAAC;IAE/C,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAC/B,WAAW,GAAG,KAAK,CAAC;IACpB,uBAAuB,GAAG,CAAC,CAAC;IAEpC,oGAAoG;IAC5F,MAAM,CAAU,mBAAmB,GAAG,CAAC,CAAC;IAChD,0EAA0E;IAClE,MAAM,CAAU,oBAAoB,GAAG,EAAE,CAAC;IAC1C,mBAAmB,GAAG,CAAC,CAAC;IAEhC,YACU,GAAsB,EACtB,YAA8B,EAC9B,aAAgC;QAFhC,QAAG,GAAH,GAAG,CAAmB;QACtB,iBAAY,GAAZ,YAAY,CAAkB;QAC9B,kBAAa,GAAb,aAAa,CAAmB;IACvC,CAAC;IAEJ,+DAA+D;IAE/D,QAAQ;QACN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,+DAA+D;IAE/D,wCAAwC;IACxC,SAAS;QACP,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,cAAc,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,uBAAuB;IACvB,MAAM;QACJ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,OAAO;QACL,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;YACxD,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,WAAW,CAAC,SAA+B;QACzC,MAAM,GAAG,GAAG,SAAS,IAAI,IAAI,CAAC,mBAAmB,CAAC;QAClD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACrF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;YAChC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,6BAA6B;QAC7B,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,2CAA2C;IAC3C,YAAY,CAAC,MAAc;QACzB,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,qCAAqC;IACrC,UAAU,CAAC,MAAc;QACvB,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC;QACpE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,0BAA0B;IAC1B,cAAc;QACZ,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,oCAAoC;IACpC,aAAa,CAAC,MAAc,EAAE,MAA0B,EAAE,OAAgB;QACxE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5D,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;yEACqE;IACrE,UAAU,CAAC,MAAc,EAAE,OAAgI;QACzJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO;QACvB,oFAAoF;QACpF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;QACrD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,mFAAmF;IACnF,gBAAgB,CAAC,MAAc,EAAE,OAAiJ;QAChL,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,2DAA2D;IAC3D,aAAa,CAAC,OAAiB;QAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,uCAAuC;QACvC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC1E,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,KAAK,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,uCAAuC;IACvC,eAAe;QACb,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QACjC,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,8BAA8B;IAC9B,IAAI;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACtE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,IAAI;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACtE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IACnC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IACnC,CAAC;IAED,0DAA0D;IAC1D,cAAc;QACZ,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YACpG,OAAO;QACT,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,8DAA8D;IAE9D,+CAA+C;IACrC,YAAY;QACpB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACpC,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACnD,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,8BAA8B;IACpB,cAAc,CAAC,KAAyB;QAChD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,4BAA4B;YAAE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAC1E,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxC,cAAc,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,iCAAiC;IACvB,kBAAkB,CAAC,KAA6B;QACxD,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,+EAA+E;QAC/E,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE3D,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY;YAAE,OAAO;QAE3C,uEAAuE;QACvE,yEAAyE;QACzE,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QACjF,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAE/E,gCAAgC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAC1F,CAAC;QACF,IAAI,MAAM;YAAE,OAAO;QAEnB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC1B,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,YAAY;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IACpE,oBAAoB,CAAC,KAA+B;QAC5D,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,6EAA6E;QAC7E,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW;YAAE,OAAO;QACzD,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW;YAAE,OAAO;QAEzD,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC;QAE1C,wBAAwB;QACxB,IAAI,eAAe,GAAG,eAAe,CAAC;QACtC,IAAI,eAAe,GAAG,eAAe,CAAC;QACtC,IAAI,eAAe,GAAG,eAAe,CAAC;QACtC,IAAI,eAAe,GAAG,eAAe,CAAC;QAEtC,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YAChD,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC;YAC9E,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QACrF,CAAC;QAED,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YAChD,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC;YAC9E,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;QACpF,CAAC;QAED,2BAA2B;QAC3B,IAAI,eAAe,KAAK,eAAe;YAAE,OAAO;QAEhD,qBAAqB;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1B,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,eAAe,CAAC;YAC3C,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,eAAe,CAAC,CACjD,CAAC;QACF,IAAI,SAAS;YAAE,OAAO;QAEtB,iCAAiC;QACjC,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC;QAEpC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAC7B,YAAY,EAAE,IAAI,CAAC,EAAE;YACrB,eAAe,EAAE,eAAe;YAChC,eAAe,EAAE,eAAe;YAChC,eAAe,EAAE,eAAe;YAChC,eAAe,EAAE,eAAe;YAChC,eAAe,EAAE,eAAe;YAChC,eAAe,EAAE,eAAe;YAChC,eAAe,EAAE,eAAe;YAChC,eAAe,EAAE,eAAe;SACjC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,yCAAyC;IAC/B,YAAY,CAAC,KAAuB;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAM,KAAK,CAAC,IAAe,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,qEAAqE;QACrE,kEAAkE;QAClE,4EAA4E;QAC5E,sDAAsD;QACtD,uEAAuE;QACvE,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;YAC9B,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;YACtC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACO,0BAA0B,CAAC,MAA0B;QAC7D,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,wEAAwE;IAChE,kBAAkB,CAAC,MAA0B,EAAE,YAA0B;QAC/E,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC7D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;;OAOG;IACK,qBAAqB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACpE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAC3E,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAE5E,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC,oBAAoB,CAAC;QAC/H,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1E,CAAC;IAED,kCAAkC;IACxB,iBAAiB,CAAC,KAA4B;QACtD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC;QAEjE,qEAAqE;QACrE,oEAAoE;QACpE,IAAI,cAAc,GAAG,GAAG,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC;QAExD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACzB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;SAClD,CAAC,CAAC;QAEH,kDAAkD;QAClD,2EAA2E;QAC3E,0EAA0E;QAC1E,mCAAmC;QACnC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,4BAA4B;IAClB,YAAY,CAAC,KAAsB;QAC3C,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACxE,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9D,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;gBAC7D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAClB,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,WAAW,EAAE,WAAW;oBACxB,WAAW,EAAE,IAAI,CAAC,QAAQ;iBAC3B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,8DAA8D;IAEpD,aAAa,CAAC,IAAa;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAES,gBAAgB,CAAC,IAAa;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAES,eAAe,CAAC,IAAa;QACrC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAES,gBAAgB,CAAC,OAAgB;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,8DAA8D;IAEpD,iBAAiB,CAAC,KAAiB,EAAE,IAAc;QAC3D,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,+EAA+E;IACrE,mBAAmB,CAAC,KAAiB,EAAE,IAAoB;QACnE,uEAAuE;QACvE,mEAAmE;QACnE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1C,IAAI,CAAC,qBAAqB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAES,uBAAuB,CAAC,KAAiB,EAAE,IAAoB;QACvE,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAES,mBAAmB,CAAC,MAA6B;QACzD,iFAAiF;QACjF,8FAA8F;QAC9F,gGAAgG;QAChG,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAE9C,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACxC,IAAI,UAAU,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC;gBAClC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;iBAAM,IAAI,UAAU,KAAK,YAAY,IAAI,UAAU,EAAE,CAAC;gBACrD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjD,IAAI,UAAU,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC;gBAClC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,CAAC;iBAAM,IAAI,UAAU,KAAK,YAAY,IAAI,UAAU,EAAE,CAAC;gBACrD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAC9B,IAAI,mCAAmC,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,CAC9E,CAAC;IACJ,CAAC;IAGS,eAAe;QACvB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,eAAe,CACrB,KAAiB,EACjB,UAAiC,EACjC,IAAqB,EACrB,UAAiC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,8BAA8B,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEvD,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC;QACxC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC;QACxC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAEO,cAAc,CAAC,MAAc;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAE/D,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,CAC9E,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,CAChF,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAEO,oBAAoB,CAAC,MAAc;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,8DAA8D;IAGpD,SAAS,CAAC,KAAoB;QACtC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;QAEpD,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YACxD,6CAA6C;YAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;YAC3C,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC/F,OAAO;YACT,CAAC;YACD,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;aAAM,IAAI,YAAY,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChE,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;aAAM,IAAI,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACxF,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;aAAM,IAAI,YAAY,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC7C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,+DAA+D;IAErD,aAAa,CAAC,MAAc,EAAE,IAAc;QACpD,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAES,mBAAmB,CAAC,MAAc,EAAE,IAAoB;QAChE,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,8DAA8D;IAE9D,aAAa,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;IAC7D,CAAC;IAED,oEAAoE;IACpE,kBAAkB,CAAC,IAAwB;QACzC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC;YAC3B,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;YAC7B,KAAK,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC;YACzB,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC/B,OAAO,CAAC,CAAC,OAAO,MAAM,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;IACzE,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5D,CAAC;IAEO,eAAe,CAAC,KAAa;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAEO,gBAAgB,CAAC,MAAc;QACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;oBAChC,OAAO,IAAI,CAAC,EAAE,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QACD,qEAAqE;QACrE,sEAAsE;QACtE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QACnE,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC,EAAE,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,aAAa,CAAC,KAAa,EAAE,MAAc,EAAE,SAA6B;QAChF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,iEAAiE;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAChE,IAAI,SAAS;YAAE,OAAO,KAAK,CAAC;QAE5B,iEAAiE;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAChE,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACtC,CAAC;IAEO,iBAAiB,CAAC,MAA0B,EAAE,QAAsB;QAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI;YAC1C,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAgB,EAAE,IAAI,EAAE,KAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;YACxF,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,QAAiB,EAAE,IAAI,EAAE,QAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC9F,CAAC;QAEF,OAAO;YACL,EAAE,EAAE,EAAE;YACN,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC5B,GAAG,CAAC;gBACJ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE;aACjD,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAEO,mBAAmB;QACzB,8BAA8B;QAC9B,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9G,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;YACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QAED,8CAA8C;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE5F,oDAAoD;QACpD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAC5G,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAC9G,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;YACvC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAEO,UAAU;QAChB,OAAO,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/D,CAAC;6GA/0BU,mBAAmB;6DAAnB,mBAAmB;2BA2EnB,cAAc,KACd,gBAAgB;;;;;;;;YA5EhB,wFAAA,qBAAiB,0BAAE,qFAAnB,qBAAiB,IAAE;k3CAFnB,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;;YC3ClD,8BAAqF;YA8BjF,AANA,AArBF,qFAA6D,kEAqBW,kEAMH;YASrE,8BAAwC;YAGtC,iGAAgC;YAU9B,AAFF,iCACoD,gBAYZ;YAApC,AADA,AADA,AADA,AADA,AADA,0IAAW,kBAAc,KAAC,uJACL,8BAA0B,KAAC,2JACzB,gCAA4B,KAAC,2IACrC,wBAAoB,KAAC,qJAChB,6BAAyB,KAAC,yIAChC,wBAAoB,KAAC;YAGnC,2FAAgB;YAOhB,qGAAiB;YAIjB,wCAM2C;YAAzC,+JAAiB,0BAAsB,KAAC;YAGxC,4GAAiB;YAajB,sHA4CC;YAGD,gHAcC;YAEH,iBAAW;YAGX,iGAAiB;YAKjB,wFAAmB;YAKrB,iBAAS;YAGT,yFAAsC;YA+DtC,wFAA0B;YAc9B,AADE,iBAAM,EACF;YAGN,wFAA0B;YA2B1B,uGAAqB;YAQvB,iBAAM;;YArSsB,wDAA2C;YAGrE,cAiCC;YAjCD,qOAiCC;YAMC,eAKC;YALD,2DAKC;YAIC,cAAiD;YAAjD,8DAAiD;YAE/C,eAA4B;YAI5B,AADA,AADA,AADA,AADA,0CAA4B,+CACc,2BACpB,2BACA,wCACa;YASnC,cAIC;YAJD,uCAIC;YAGD,cAEC;YAFD,yCAEC;YAGC,cAAqB;YAIrB,AADA,AADA,AADA,AADA,mCAAqB,mBACH,kBACD,gCACU,0BACN;YAIrB,eAUC;YAVD,yCAUC;YAGD,cA4CC;YA5CD,8BA4CC;YAGD,eAcC;YAdD,wBAcC;YAKH,eAEC;YAFD,yCAEC;YAGD,cAIC;YAJD,2CAIC;YAIH,cA4DC;YA5DD,kEA4DC;YAGD,cAYC;YAZD,kDAYC;YAKL,cAwBC;YAxBD,kDAwBC;YAGD,cAOC;YAPD,6CAOC;;;iFDvPU,mBAAmB;cAT/B,SAAS;6BACI,KAAK,YACP,gBAAgB,iBAGX,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,OAAO,aACrC,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;;kBAI/C,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAKL,KAAK;;kBAEL,KAAK;;kBAEL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAIL,KAAK;;kBAEL,KAAK;;kBAEL,KAAK;;kBAUL,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBAEN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBAEN,MAAM;;kBAeN,SAAS;mBAAC,cAAc;;kBACxB,SAAS;mBAAC,gBAAgB;;kBAC1B,SAAS;mBAAC,UAAU;;kBACpB,SAAS;mBAAC,YAAY;;kBAgiBtB,YAAY;mBAAC,gBAAgB;;kBAqE7B,YAAY;mBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;kFAnrBxB,mBAAmB;AAk1BhC,SAAS,uBAAuB,CAAC,MAA6B;IAC1D,MAAM,IAAI,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;IACvD,OAAO;QACH,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;QAC/D,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE;KAChF,CAAC;AACN,CAAC","sourcesContent":["import {\n Component, Input, Output, EventEmitter, ViewChild, OnInit, OnDestroy,\n ChangeDetectorRef, ElementRef, ViewEncapsulation, ChangeDetectionStrategy, HostListener\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { FFlowComponent, FCanvasComponent, FZoomDirective, FCreateConnectionEvent,\n FCreateNodeEvent, FSelectionChangeEvent, FCanvasChangeEvent, FMoveNodesEvent,\n FReassignConnectionEvent } from '@foblex/flow';\nimport {\n FlowNode, FlowConnection, FlowNodeTypeConfig, FlowNodeAddedEvent,\n FlowNodeMovedEvent, FlowConnectionCreatedEvent, FlowConnectionReassignedEvent,\n FlowSelectionChangedEvent,\n FlowCanvasClickEvent, FlowPosition, FlowLayoutDirection,\n FlowContextMenuTarget, FlowContextMenuAction, FlowContextMenuItem,\n FlowBeforeContextMenuEventArgs, FlowAfterContextMenuActionEventArgs,\n FlowToolbarAlign, FlowToolbarVisibility,\n} from '../interfaces/flow-types';\nimport { FlowStateService } from '../services/flow-state.service';\nimport { FlowLayoutService } from '../services/flow-layout.service';\nimport { UUIDsEqual, NormalizeUUID } from '@memberjunction/global';\n\n/**\n * Generic, entity-agnostic visual flow editor component.\n * Wraps Foblex Flow to provide a clean MJ-style API.\n *\n * Usage:\n * ```html\n * <mj-flow-editor\n * [Nodes]=\"myNodes\"\n * [Connections]=\"myConnections\"\n * [NodeTypes]=\"myNodeTypes\"\n * (NodeSelected)=\"onNodeSelected($event)\"\n * (ConnectionCreated)=\"onConnectionCreated($event)\">\n * </mj-flow-editor>\n * ```\n */\n@Component({\n standalone: false,\n selector: 'mj-flow-editor',\n templateUrl: './flow-editor.component.html',\n styleUrls: ['./flow-editor.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n providers: [FlowStateService, FlowLayoutService]\n})\nexport class FlowEditorComponent implements OnInit, OnDestroy {\n // ── Inputs ──────────────────────────────────────────────────\n @Input() Nodes: FlowNode[] = [];\n @Input() Connections: FlowConnection[] = [];\n @Input() NodeTypes: FlowNodeTypeConfig[] = [];\n @Input() ReadOnly = false;\n @Input() ShowMinimap = true;\n @Input() ShowPalette = true;\n @Input() ShowGrid = true;\n @Input() ShowStatusBar = true;\n /**\n * Legacy on/off. `false` forces the toolbar fully off (no recover tab). Prefer\n * `ToolbarVisibility` when the host wants shown / minimized / hidden with a way back.\n */\n @Input() ShowToolbar = true;\n /** Full bar, a restore chip, or a recover tab. Ignored when `ShowToolbar` is false. */\n @Input() ToolbarVisibility: FlowToolbarVisibility = 'shown';\n /** Left / center / right along the top of the canvas. */\n @Input() ToolbarAlign: FlowToolbarAlign = 'center';\n @Input() ShowLegend = true;\n @Input() GridSize = 20;\n @Input() AutoLayoutDirection: FlowLayoutDirection = 'vertical';\n /** Background color for connection labels */\n // Design tokens, not literals — the canvas renders on both themes, and a near-white pill on a\n // dark canvas made the least important element the most visually dominant thing on screen.\n @Input() ConnectionLabelBackground = 'var(--mj-bg-surface)';\n /** Border color for connection labels */\n @Input() ConnectionLabelBorderColor = 'var(--mj-border-default)';\n /** Text color for connection labels */\n @Input() ConnectionLabelTextColor = 'var(--mj-text-secondary)';\n\n /** Title for the canvas empty-state overlay — depends on read-only mode. */\n public get EmptyStateTitle(): string {\n return this.ReadOnly\n ? 'No steps defined for this flow'\n : 'Click a step in the palette — or drag one onto the canvas — to start building your flow';\n }\n\n // ── Outputs ─────────────────────────────────────────────────\n @Output() NodeSelected = new EventEmitter<FlowNode | null>();\n @Output() NodeAdded = new EventEmitter<FlowNodeAddedEvent>();\n @Output() NodeRemoved = new EventEmitter<FlowNode>();\n @Output() NodeMoved = new EventEmitter<FlowNodeMovedEvent>();\n @Output() ConnectionCreated = new EventEmitter<FlowConnectionCreatedEvent>();\n @Output() ConnectionRemoved = new EventEmitter<FlowConnection>();\n @Output() ConnectionReassigned = new EventEmitter<FlowConnectionReassignedEvent>();\n @Output() ConnectionSelected = new EventEmitter<FlowConnection | null>();\n @Output() SelectionChanged = new EventEmitter<FlowSelectionChangedEvent>();\n @Output() CanvasClicked = new EventEmitter<FlowCanvasClickEvent>();\n @Output() NodesChanged = new EventEmitter<FlowNode[]>();\n @Output() ConnectionsChanged = new EventEmitter<FlowConnection[]>();\n @Output() NodeEditRequested = new EventEmitter<FlowNode>();\n @Output() ConnectionEditRequested = new EventEmitter<FlowConnection>();\n /** Host may replace `Items` or `Cancel` the menu. Debug attaches here — the canvas stays blind. */\n @Output() BeforeContextMenu = new EventEmitter<FlowBeforeContextMenuEventArgs>();\n @Output() AfterContextMenuAction = new EventEmitter<FlowAfterContextMenuActionEventArgs>();\n @Output() GridToggled = new EventEmitter<boolean>();\n @Output() MinimapToggled = new EventEmitter<boolean>();\n @Output() LegendToggled = new EventEmitter<boolean>();\n /** The person changed shown / minimized / hidden from the canvas chrome. */\n @Output() ToolbarVisibilityChanged = new EventEmitter<FlowToolbarVisibility>();\n\n /** What the template actually paints — `ShowToolbar === false` is a hard hide. */\n public get EffectiveToolbarVisibility(): FlowToolbarVisibility {\n return this.ShowToolbar ? this.ToolbarVisibility : 'hidden';\n }\n\n public SetToolbarVisibility(next: FlowToolbarVisibility): void {\n if (!this.ShowToolbar) return;\n if (this.ToolbarVisibility === next) return;\n this.ToolbarVisibility = next;\n this.ToolbarVisibilityChanged.emit(next);\n }\n\n // ── View Children ───────────────────────────────────────────\n @ViewChild(FFlowComponent) protected fFlow: FFlowComponent | undefined;\n @ViewChild(FCanvasComponent) protected fCanvas: FCanvasComponent | undefined;\n @ViewChild('fZoomRef') protected fZoom: FZoomDirective | undefined;\n @ViewChild('canvasArea') protected canvasArea: ElementRef<HTMLElement> | undefined;\n\n // ── Internal State ──────────────────────────────────────────\n protected zoomLevel = 100;\n protected canvasPosition = { x: 0, y: 0 };\n protected canvasScale = 1;\n /** After the first auto-fit, later fLoaded events must not snap the viewport back. */\n private hasAutoFitted = false;\n /** True once the person zooms or pans — remounts restore this viewport instead of fitting. */\n private viewportOwnedByUser = false;\n private applyingProgrammaticViewport = false;\n protected selectedNodeIDs: string[] = [];\n protected selectedConnectionIDs: string[] = [];\n protected panMode = false;\n\n /** Trigger function for canvas panning — only allows panning in pan mode */\n protected canvasMoveTriggerFn = (_event: MouseEvent | TouchEvent): boolean => {\n return this.panMode;\n };\n\n /* Context menu state */\n protected contextMenuVisible = false;\n protected contextMenuX = 0;\n protected contextMenuY = 0;\n protected contextMenuTargetType: FlowContextMenuTarget = 'node';\n protected contextMenuNode: FlowNode | null = null;\n protected contextMenuConnection: FlowConnection | null = null;\n protected contextMenuItems: FlowContextMenuItem[] = [];\n\n private destroy$ = new Subject<void>();\n private initialized = false;\n private lastConnectionClickTime = 0;\n\n /** How many click-placed nodes are cascaded before the offset wraps back to the viewport centre. */\n private static readonly CLICK_CASCADE_STEPS = 6;\n /** Pixels (canvas units) each cascaded click-placed node is offset by. */\n private static readonly CLICK_CASCADE_OFFSET = 40;\n private clickPlacementIndex = 0;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private stateService: FlowStateService,\n private layoutService: FlowLayoutService\n ) {}\n\n // ── Lifecycle ───────────────────────────────────────────────\n\n ngOnInit(): void {\n this.initialized = true;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ── Public Methods ──────────────────────────────────────────\n\n /** Fit all nodes within the viewport */\n ZoomToFit(): void {\n this.applyingProgrammaticViewport = true;\n this.fCanvas?.fitToScreen({ x: 150, y: 150 }, true);\n this.hasAutoFitted = true;\n queueMicrotask(() => { this.applyingProgrammaticViewport = false; });\n }\n\n /** Zoom in one step */\n ZoomIn(): void {\n this.viewportOwnedByUser = true;\n if (this.fZoom) {\n this.fZoom.zoomIn();\n } else {\n const newScale = Math.min(this.canvasScale + 0.15, 3);\n this.fCanvas?.setScale(newScale);\n this.updateZoomLevel(newScale);\n }\n }\n\n /** Zoom out one step */\n ZoomOut(): void {\n this.viewportOwnedByUser = true;\n if (this.fZoom) {\n this.fZoom.zoomOut();\n } else {\n const newScale = Math.max(this.canvasScale - 0.15, 0.1);\n this.fCanvas?.setScale(newScale);\n this.updateZoomLevel(newScale);\n }\n }\n\n /** Run auto-layout using dagre */\n AutoArrange(direction?: FlowLayoutDirection): void {\n const dir = direction ?? this.AutoLayoutDirection;\n this.pushUndoState();\n const result = this.layoutService.CalculateLayout(this.Nodes, this.Connections, dir);\n for (const node of this.Nodes) {\n const newPos = result.Positions.get(node.ID);\n if (newPos) {\n node.Position = { ...newPos };\n }\n }\n this.NodesChanged.emit(this.Nodes);\n this.cdr.detectChanges();\n // Fit to screen after layout\n setTimeout(() => this.ZoomToFit(), 100);\n }\n\n /** Center the canvas on a specific node */\n CenterOnNode(nodeId: string): void {\n this.fCanvas?.centerGroupOrNode(nodeId, true);\n }\n\n /** Programmatically select a node */\n SelectNode(nodeId: string): void {\n this.fFlow?.select([nodeId], []);\n const node = this.Nodes.find(n => UUIDsEqual(n.ID, nodeId)) ?? null;\n this.NodeSelected.emit(node);\n }\n\n /** Clear all selection */\n ClearSelection(): void {\n this.fFlow?.clearSelection();\n this.selectedNodeIDs = [];\n this.selectedConnectionIDs = [];\n this.NodeSelected.emit(null);\n this.ConnectionSelected.emit(null);\n }\n\n /** Update a node's visual status */\n SetNodeStatus(nodeId: string, status: FlowNode['Status'], message?: string): void {\n const node = this.Nodes.find(n => UUIDsEqual(n.ID, nodeId));\n if (node) {\n node.Status = status;\n node.StatusMessage = message;\n this.cdr.detectChanges();\n }\n }\n\n /** Update a node's visual properties and push a new object reference so\n * OnPush child components (FlowNodeComponent) detect the change. */\n UpdateNode(nodeId: string, changes: Partial<Pick<FlowNode, 'Label' | 'Subtitle' | 'Icon' | 'Status' | 'StatusMessage' | 'IsStartNode' | 'Badges' | 'Data'>>): void {\n const idx = this.Nodes.findIndex(n => UUIDsEqual(n.ID, nodeId));\n if (idx === -1) return;\n // Create a new object reference so the OnPush FlowNodeComponent picks up the change\n this.Nodes[idx] = { ...this.Nodes[idx], ...changes };\n this.cdr.detectChanges();\n }\n\n /** Update a connection's visual properties in-place (label, color, style, etc.) */\n UpdateConnection(connId: string, changes: Partial<Pick<FlowConnection, 'Label' | 'LabelIcon' | 'LabelIconColor' | 'LabelDetail' | 'Color' | 'StrokeWidth' | 'Style' | 'Animated'>>): void {\n const conn = this.Connections.find(c => UUIDsEqual(c.ID, connId));\n if (!conn) return;\n Object.assign(conn, changes);\n this.cdr.detectChanges();\n }\n\n /** Highlight a sequence of nodes (e.g., execution path) */\n HighlightPath(nodeIds: string[]): void {\n for (const node of this.Nodes) {\n if (nodeIds.some(id => UUIDsEqual(id, node.ID))) {\n node.Status = 'running';\n }\n }\n // Highlight connections along the path\n for (const conn of this.Connections) {\n const srcIdx = nodeIds.findIndex(id => UUIDsEqual(id, conn.SourceNodeID));\n const tgtIdx = nodeIds.findIndex(id => UUIDsEqual(id, conn.TargetNodeID));\n if (srcIdx >= 0 && tgtIdx >= 0 && tgtIdx === srcIdx + 1) {\n conn.Animated = true;\n }\n }\n this.cdr.detectChanges();\n }\n\n /** Clear all node status highlights */\n ClearHighlights(): void {\n for (const node of this.Nodes) {\n node.Status = 'default';\n node.StatusMessage = undefined;\n }\n for (const conn of this.Connections) {\n conn.Animated = false;\n }\n this.cdr.detectChanges();\n }\n\n /** Undo the last operation */\n Undo(): void {\n const snapshot = this.stateService.Undo(this.Nodes, this.Connections);\n if (snapshot) {\n this.Nodes = snapshot.Nodes;\n this.Connections = snapshot.Connections;\n this.NodesChanged.emit(this.Nodes);\n this.ConnectionsChanged.emit(this.Connections);\n this.cdr.detectChanges();\n }\n }\n\n /** Redo the last undone operation */\n Redo(): void {\n const snapshot = this.stateService.Redo(this.Nodes, this.Connections);\n if (snapshot) {\n this.Nodes = snapshot.Nodes;\n this.Connections = snapshot.Connections;\n this.NodesChanged.emit(this.Nodes);\n this.ConnectionsChanged.emit(this.Connections);\n this.cdr.detectChanges();\n }\n }\n\n get CanUndo(): boolean {\n return this.stateService.CanUndo;\n }\n\n get CanRedo(): boolean {\n return this.stateService.CanRedo;\n }\n\n /** Delete the currently selected nodes and connections */\n DeleteSelected(): void {\n if (this.ReadOnly || (this.selectedNodeIDs.length === 0 && this.selectedConnectionIDs.length === 0)) {\n return;\n }\n this.pushUndoState();\n this.removeSelectedItems();\n this.ClearSelection();\n }\n\n // ── Foblex Event Handlers ──────────────────────────────────\n\n /** Called when Foblex flow finishes loading */\n protected onFlowLoaded(): void {\n if (this.Nodes.length === 0) return;\n if (this.viewportOwnedByUser || this.hasAutoFitted) {\n this.restoreViewport();\n return;\n }\n this.hasAutoFitted = true;\n setTimeout(() => this.ZoomToFit(), 200);\n }\n\n /** Canvas zoom/pan changed */\n protected onCanvasChange(event: FCanvasChangeEvent): void {\n this.canvasPosition = event.position;\n this.canvasScale = event.scale;\n this.updateZoomLevel(event.scale);\n if (!this.applyingProgrammaticViewport) this.viewportOwnedByUser = true;\n }\n\n private restoreViewport(): void {\n if (!this.fCanvas) return;\n this.applyingProgrammaticViewport = true;\n this.fCanvas.setScale(this.canvasScale);\n queueMicrotask(() => { this.applyingProgrammaticViewport = false; });\n }\n\n /** User drew a new connection */\n protected onCreateConnection(event: FCreateConnectionEvent): void {\n if (!event.fInputId || this.ReadOnly) return;\n this.pushUndoState();\n\n // Derive node IDs from port IDs (ports are named nodeID-input / nodeID-output)\n const sourceNodeID = this.findNodeByPortId(event.fOutputId);\n const targetNodeID = this.findNodeByPortId(event.fInputId);\n\n if (!sourceNodeID || !targetNodeID) return;\n\n // Resolve actual port IDs — when fConnectOnNode is enabled, Foblex may\n // send the node ID itself instead of a port ID. Map to the correct port.\n const sourcePortID = this.resolvePortId(event.fOutputId, sourceNodeID, 'output');\n const targetPortID = this.resolvePortId(event.fInputId, targetNodeID, 'input');\n\n // Prevent duplicate connections\n const exists = this.Connections.some(\n c => UUIDsEqual(c.SourcePortID, sourcePortID) && UUIDsEqual(c.TargetPortID, targetPortID)\n );\n if (exists) return;\n\n this.ConnectionCreated.emit({\n SourceNodeID: sourceNodeID,\n SourcePortID: sourcePortID,\n TargetNodeID: targetNodeID,\n TargetPortID: targetPortID\n });\n }\n\n /** User reassigned (dragged) an existing connection endpoint to a new node */\n protected onReassignConnection(event: FReassignConnectionEvent): void {\n if (this.ReadOnly) return;\n\n const conn = this.Connections.find(c => UUIDsEqual(c.ID, event.connectionId));\n if (!conn) return;\n\n // If dropped on empty space (no new target/source), discard the reassignment\n if (event.isTargetReassign && !event.newTargetId) return;\n if (event.isSourceReassign && !event.newSourceId) return;\n\n this.pushUndoState();\n\n const oldSourceNodeID = conn.SourceNodeID;\n const oldSourcePortID = conn.SourcePortID;\n const oldTargetNodeID = conn.TargetNodeID;\n const oldTargetPortID = conn.TargetPortID;\n\n // Resolve new endpoints\n let newSourceNodeID = oldSourceNodeID;\n let newSourcePortID = oldSourcePortID;\n let newTargetNodeID = oldTargetNodeID;\n let newTargetPortID = oldTargetPortID;\n\n if (event.isSourceReassign && event.newSourceId) {\n newSourceNodeID = this.findNodeByPortId(event.newSourceId) ?? oldSourceNodeID;\n newSourcePortID = this.resolvePortId(event.newSourceId, newSourceNodeID, 'output');\n }\n\n if (event.isTargetReassign && event.newTargetId) {\n newTargetNodeID = this.findNodeByPortId(event.newTargetId) ?? oldTargetNodeID;\n newTargetPortID = this.resolvePortId(event.newTargetId, newTargetNodeID, 'input');\n }\n\n // Prevent self-connections\n if (newSourceNodeID === newTargetNodeID) return;\n\n // Prevent duplicates\n const duplicate = this.Connections.some(\n c => !UUIDsEqual(c.ID, conn.ID) &&\n UUIDsEqual(c.SourcePortID, newSourcePortID) &&\n UUIDsEqual(c.TargetPortID, newTargetPortID)\n );\n if (duplicate) return;\n\n // Update the connection in-place\n conn.SourceNodeID = newSourceNodeID;\n conn.SourcePortID = newSourcePortID;\n conn.TargetNodeID = newTargetNodeID;\n conn.TargetPortID = newTargetPortID;\n\n this.ConnectionReassigned.emit({\n ConnectionID: conn.ID,\n OldSourceNodeID: oldSourceNodeID,\n OldSourcePortID: oldSourcePortID,\n OldTargetNodeID: oldTargetNodeID,\n OldTargetPortID: oldTargetPortID,\n NewSourceNodeID: newSourceNodeID,\n NewSourcePortID: newSourcePortID,\n NewTargetNodeID: newTargetNodeID,\n NewTargetPortID: newTargetPortID\n });\n\n this.ConnectionsChanged.emit(this.Connections);\n this.cdr.detectChanges();\n }\n\n /** External item dropped from palette */\n protected onCreateNode(event: FCreateNodeEvent): void {\n const config = this.NodeTypes.find(nt => nt.Type === (event.data as string));\n if (!config) return;\n\n // event.rect is already normalized to canvas coordinates by Foblex's\n // GetNormalizedElementRectExecution (via RoundedRect.fromCenter).\n // Do NOT pass it through getPositionInFlow() again — that double-normalizes\n // and places the node far from the actual drop point.\n // Use the center of the preview rect (≈ cursor position at drop time).\n this.addNodeFromPalette(config, {\n X: event.rect.x + event.rect.width / 2,\n Y: event.rect.y + event.rect.height / 2\n });\n }\n\n /**\n * A palette entry was clicked (or activated from the keyboard) rather than dragged.\n *\n * Deliberately routed into the SAME `addNodeFromPalette` the drop path uses. A separate\n * click-only creation path would be a second way for a node to come into existence, and the two\n * would drift — which is exactly the failure this fixes, one level up.\n */\n protected onPaletteNodeTypeActivated(config: FlowNodeTypeConfig): void {\n this.addNodeFromPalette(config, this.nextClickDropPosition());\n }\n\n /** The one place a palette-originated node is created and announced. */\n private addNodeFromPalette(config: FlowNodeTypeConfig, dropPosition: FlowPosition): void {\n if (this.ReadOnly) return;\n this.pushUndoState();\n const newNode = this.createDefaultNode(config, dropPosition);\n this.NodeAdded.emit({ Node: newNode, DropPosition: dropPosition });\n }\n\n /**\n * Where a clicked step lands: the middle of what the author is currently looking at, cascaded so\n * consecutive clicks don't bury each other under one box.\n *\n * A click carries no coordinates, so *some* position has to be invented. The viewport centre is\n * the only choice that is guaranteed on screen at any zoom or pan — placing at the canvas origin\n * would drop steps off-screen the moment the author has scrolled anywhere.\n */\n private nextClickDropPosition(): FlowPosition {\n const rect = this.canvasArea?.nativeElement.getBoundingClientRect();\n const scale = this.canvasScale || 1;\n const centerX = ((rect?.width ?? 800) / 2 - this.canvasPosition.x) / scale;\n const centerY = ((rect?.height ?? 600) / 2 - this.canvasPosition.y) / scale;\n\n const step = (this.clickPlacementIndex++ % FlowEditorComponent.CLICK_CASCADE_STEPS) * FlowEditorComponent.CLICK_CASCADE_OFFSET;\n return { X: Math.round(centerX + step), Y: Math.round(centerY + step) };\n }\n\n /** Selection changed in Foblex */\n protected onSelectionChange(event: FSelectionChangeEvent): void {\n const timeSinceClick = Date.now() - this.lastConnectionClickTime;\n\n // If a direct connection click just fired, skip this Foblex callback\n // to avoid double-processing / overwriting the direct click result.\n if (timeSinceClick < 200) {\n return;\n }\n\n this.selectedNodeIDs = event.fNodeIds ?? [];\n this.selectedConnectionIDs = event.fConnectionIds ?? [];\n\n this.SelectionChanged.emit({\n SelectedNodeIDs: this.selectedNodeIDs,\n SelectedConnectionIDs: this.selectedConnectionIDs\n });\n\n // Emit specific node/connection selection events.\n // IMPORTANT: When selecting a connection, emit NodeSelected(null) FIRST so\n // that consumers clear their node state before the connection event opens\n // the connection properties panel.\n if (this.selectedNodeIDs.length === 1) {\n const node = this.Nodes.find(n => UUIDsEqual(n.ID, this.selectedNodeIDs[0]));\n this.ConnectionSelected.emit(null);\n this.NodeSelected.emit(node ?? null);\n } else if (this.selectedConnectionIDs.length === 1) {\n const conn = this.Connections.find(c => UUIDsEqual(c.ID, this.selectedConnectionIDs[0]));\n this.NodeSelected.emit(null);\n this.ConnectionSelected.emit(conn ?? null);\n } else if (this.selectedNodeIDs.length === 0 && this.selectedConnectionIDs.length === 0) {\n this.NodeSelected.emit(null);\n this.ConnectionSelected.emit(null);\n }\n }\n\n /** Nodes moved on canvas */\n protected onNodesMoved(event: FMoveNodesEvent): void {\n if (this.ReadOnly || !event.fNodes || event.fNodes.length === 0) return;\n this.pushUndoState();\n\n for (const moved of event.fNodes) {\n const node = this.Nodes.find(n => UUIDsEqual(n.ID, moved.id));\n if (node) {\n const oldPosition = { ...node.Position };\n node.Position = { X: moved.position.x, Y: moved.position.y };\n this.NodeMoved.emit({\n NodeID: node.ID,\n OldPosition: oldPosition,\n NewPosition: node.Position\n });\n }\n }\n this.NodesChanged.emit(this.Nodes);\n }\n\n // ── Toolbar Event Handlers ─────────────────────────────────\n\n protected onGridToggled(show: boolean): void {\n this.ShowGrid = show;\n this.GridToggled.emit(show);\n this.cdr.detectChanges();\n }\n\n protected onMinimapToggled(show: boolean): void {\n this.ShowMinimap = show;\n this.MinimapToggled.emit(show);\n this.cdr.detectChanges();\n }\n\n protected onLegendToggled(show: boolean): void {\n this.ShowLegend = show;\n this.LegendToggled.emit(show);\n this.cdr.detectChanges();\n }\n\n protected onPanModeToggled(enabled: boolean): void {\n this.panMode = enabled;\n this.cdr.detectChanges();\n }\n\n // ── Context Menu ───────────────────────────────────────────\n\n protected onNodeContextMenu(event: MouseEvent, node: FlowNode): void {\n event.preventDefault();\n event.stopPropagation();\n this.openContextMenu(event, 'node', node, null);\n }\n\n /** Direct click on a connection — ensures ConnectionSelected fires reliably */\n protected onConnectionClicked(event: MouseEvent, conn: FlowConnection): void {\n // Do NOT stopPropagation — let Foblex handle its own visual selection.\n // Record the time so onSelectionChange can skip double-processing.\n this.lastConnectionClickTime = Date.now();\n this.selectedConnectionIDs = [conn.ID];\n this.selectedNodeIDs = [];\n this.NodeSelected.emit(null);\n this.ConnectionSelected.emit(conn);\n this.cdr.detectChanges();\n }\n\n protected onConnectionContextMenu(event: MouseEvent, conn: FlowConnection): void {\n event.preventDefault();\n event.stopPropagation();\n this.openContextMenu(event, 'connection', null, conn);\n }\n\n protected onContextMenuAction(action: FlowContextMenuAction): void {\n // Capture the target BEFORE closing: hideContextMenu() nulls contextMenuNode and\n // contextMenuConnection, so reading them afterwards found nothing and every branch below fell\n // through — the menu closed and neither Remove nor Edit did anything, for nodes or connections.\n const targetType = this.contextMenuTargetType;\n const node = this.contextMenuNode;\n const connection = this.contextMenuConnection;\n\n this.hideContextMenu();\n\n if (!this.ReadOnly && action === 'edit') {\n if (targetType === 'node' && node) {\n this.NodeEditRequested.emit(node);\n } else if (targetType === 'connection' && connection) {\n this.ConnectionEditRequested.emit(connection);\n }\n } else if (!this.ReadOnly && action === 'remove') {\n if (targetType === 'node' && node) {\n this.pushUndoState();\n this.removeNodeById(node.ID);\n } else if (targetType === 'connection' && connection) {\n this.pushUndoState();\n this.removeConnectionById(connection.ID);\n }\n }\n\n this.AfterContextMenuAction.emit(\n new FlowAfterContextMenuActionEventArgs(action, targetType, node, connection),\n );\n }\n\n @HostListener('document:click')\n protected onDocumentClick(): void {\n if (this.contextMenuVisible) {\n this.hideContextMenu();\n }\n }\n\n private openContextMenu(\n event: MouseEvent,\n targetType: FlowContextMenuTarget,\n node: FlowNode | null,\n connection: FlowConnection | null\n ): void {\n const defaults = this.ReadOnly ? [] : defaultContextMenuItems(targetType);\n const before = new FlowBeforeContextMenuEventArgs(targetType, node, connection, event, defaults);\n this.BeforeContextMenu.emit(before);\n if (before.Cancel || before.Items.length === 0) return;\n\n this.contextMenuTargetType = targetType;\n this.contextMenuNode = node;\n this.contextMenuConnection = connection;\n this.contextMenuItems = before.Items;\n this.contextMenuX = event.clientX;\n this.contextMenuY = event.clientY;\n this.contextMenuVisible = true;\n this.cdr.detectChanges();\n }\n\n private hideContextMenu(): void {\n this.contextMenuVisible = false;\n this.contextMenuNode = null;\n this.contextMenuConnection = null;\n this.cdr.detectChanges();\n }\n\n private removeNodeById(nodeId: string): void {\n const node = this.Nodes.find(n => UUIDsEqual(n.ID, nodeId));\n if (!node) return;\n\n this.Nodes = this.Nodes.filter(n => !UUIDsEqual(n.ID, nodeId));\n\n /* Remove connections attached to this node */\n const orphaned = this.Connections.filter(\n c => UUIDsEqual(c.SourceNodeID, nodeId) || UUIDsEqual(c.TargetNodeID, nodeId)\n );\n this.Connections = this.Connections.filter(\n c => !UUIDsEqual(c.SourceNodeID, nodeId) && !UUIDsEqual(c.TargetNodeID, nodeId)\n );\n for (const conn of orphaned) {\n this.ConnectionRemoved.emit(conn);\n }\n this.NodeRemoved.emit(node);\n this.NodesChanged.emit(this.Nodes);\n this.ConnectionsChanged.emit(this.Connections);\n this.cdr.detectChanges();\n }\n\n private removeConnectionById(connId: string): void {\n const conn = this.Connections.find(c => UUIDsEqual(c.ID, connId));\n if (!conn) return;\n\n this.Connections = this.Connections.filter(c => !UUIDsEqual(c.ID, connId));\n this.ConnectionRemoved.emit(conn);\n this.ConnectionsChanged.emit(this.Connections);\n this.cdr.detectChanges();\n }\n\n // ── Keyboard Shortcuts ─────────────────────────────────────\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(event: KeyboardEvent): void {\n if (this.ReadOnly) return;\n\n const isCtrlOrMeta = event.ctrlKey || event.metaKey;\n\n if (event.key === 'Delete' || event.key === 'Backspace') {\n // Don't delete if user is typing in an input\n const target = event.target as HTMLElement;\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.tagName === 'SELECT') {\n return;\n }\n event.preventDefault();\n this.DeleteSelected();\n } else if (isCtrlOrMeta && event.key === 'z' && !event.shiftKey) {\n event.preventDefault();\n this.Undo();\n } else if (isCtrlOrMeta && (event.key === 'y' || (event.key === 'z' && event.shiftKey))) {\n event.preventDefault();\n this.Redo();\n } else if (isCtrlOrMeta && event.key === 'a') {\n event.preventDefault();\n this.fFlow?.selectAll();\n }\n }\n\n // ── TrackBy Functions ───────────────────────────────────────\n\n protected trackNodeById(_index: number, node: FlowNode): string {\n return node.ID;\n }\n\n protected trackConnectionById(_index: number, conn: FlowConnection): string {\n return conn.ID;\n }\n\n // ── Helper Methods ─────────────────────────────────────────\n\n GetTypeConfig(type: string): FlowNodeTypeConfig | null {\n return this.NodeTypes.find(nt => nt.Type === type) ?? null;\n }\n\n /** Get the connectable side string for Foblex based on port side */\n GetConnectableSide(side: string | undefined): string {\n switch (side) {\n case 'left': return 'left';\n case 'right': return 'right';\n case 'top': return 'top';\n case 'bottom': return 'bottom';\n default: return 'auto';\n }\n }\n\n get selectedCount(): number {\n return this.selectedNodeIDs.length + this.selectedConnectionIDs.length;\n }\n\n private pushUndoState(): void {\n this.stateService.PushState(this.Nodes, this.Connections);\n }\n\n private updateZoomLevel(scale: number): void {\n this.zoomLevel = Math.round(scale * 100);\n this.cdr.detectChanges();\n }\n\n private findNodeByPortId(portId: string): string | null {\n for (const node of this.Nodes) {\n for (const port of node.Ports) {\n if (UUIDsEqual(port.ID, portId)) {\n return node.ID;\n }\n }\n }\n // When fConnectOnNode is enabled, Foblex may send the node ID itself\n // instead of a port ID. Check for a direct node ID match as fallback.\n const directMatch = this.Nodes.find(n => UUIDsEqual(n.ID, portId));\n if (directMatch) {\n return directMatch.ID;\n }\n return null;\n }\n\n /**\n * When fConnectOnNode is enabled, Foblex may send a node ID instead of a port ID.\n * This resolves the raw ID to the correct port ID for the given direction.\n */\n private resolvePortId(rawId: string, nodeId: string, direction: 'input' | 'output'): string {\n const node = this.Nodes.find(n => UUIDsEqual(n.ID, nodeId));\n if (!node) return rawId;\n\n // If the rawId already matches a port on this node, use it as-is\n const exactPort = node.Ports.find(p => UUIDsEqual(p.ID, rawId));\n if (exactPort) return rawId;\n\n // Otherwise, find the first port matching the expected direction\n const dirPort = node.Ports.find(p => p.Direction === direction);\n return dirPort ? dirPort.ID : rawId;\n }\n\n private createDefaultNode(config: FlowNodeTypeConfig, position: FlowPosition): FlowNode {\n const id = this.generateId();\n const defaultPorts = config.DefaultPorts ?? [\n { ID: `${id}-input`, Direction: 'input' as const, Side: 'top' as const, Multiple: true },\n { ID: `${id}-output`, Direction: 'output' as const, Side: 'bottom' as const, Multiple: true }\n ];\n\n return {\n ID: id,\n Type: config.Type,\n Label: config.Label,\n Icon: config.Icon,\n Status: 'default',\n Position: position,\n Ports: defaultPorts.map(p => ({\n ...p,\n ID: p.ID.startsWith(id) ? p.ID : `${id}-${p.ID}`\n }))\n };\n }\n\n private removeSelectedItems(): void {\n // Remove selected connections\n const removedConnections = this.Connections.filter(c => this.selectedConnectionIDs.some(id => UUIDsEqual(id, c.ID)));\n this.Connections = this.Connections.filter(c => !this.selectedConnectionIDs.some(id => UUIDsEqual(id, c.ID)));\n for (const conn of removedConnections) {\n this.ConnectionRemoved.emit(conn);\n }\n\n // Remove selected nodes and their connections\n const removedNodes = this.Nodes.filter(n => this.selectedNodeIDs.some(id => UUIDsEqual(id, n.ID)));\n this.Nodes = this.Nodes.filter(n => !this.selectedNodeIDs.some(id => UUIDsEqual(id, n.ID)));\n\n // Also remove connections attached to deleted nodes\n const deletedNodeIDs = new Set(this.selectedNodeIDs.map(id => NormalizeUUID(id)));\n const orphanedConnections = this.Connections.filter(\n c => deletedNodeIDs.has(NormalizeUUID(c.SourceNodeID)) || deletedNodeIDs.has(NormalizeUUID(c.TargetNodeID))\n );\n this.Connections = this.Connections.filter(\n c => !deletedNodeIDs.has(NormalizeUUID(c.SourceNodeID)) && !deletedNodeIDs.has(NormalizeUUID(c.TargetNodeID))\n );\n\n for (const conn of orphanedConnections) {\n this.ConnectionRemoved.emit(conn);\n }\n for (const node of removedNodes) {\n this.NodeRemoved.emit(node);\n }\n\n this.NodesChanged.emit(this.Nodes);\n this.ConnectionsChanged.emit(this.Connections);\n this.cdr.detectChanges();\n }\n\n private generateId(): string {\n return 'flow-' + Math.random().toString(36).substring(2, 11);\n }\n}\n\nfunction defaultContextMenuItems(target: FlowContextMenuTarget): FlowContextMenuItem[] {\n const noun = target === 'node' ? 'Node' : 'Connection';\n return [\n { ID: 'edit', Label: `Edit ${noun}`, Icon: 'fa-pen-to-square' },\n { ID: 'remove', Label: `Remove ${noun}`, Icon: 'fa-trash-can', Danger: true },\n ];\n}\n","<div class=\"mj-flow-editor\" [class.mj-flow-editor--readonly]=\"ReadOnly\" tabindex=\"0\">\n\n <!-- Canvas Toolbar — shown / minimized / hidden (recover tab). Align is left/center/right. -->\n @if (ShowToolbar && EffectiveToolbarVisibility === 'shown') {\n <div class=\"mj-flow-editor-toolbar-area\" [attr.data-align]=\"ToolbarAlign\">\n <mj-flow-toolbar\n [ZoomLevel]=\"zoomLevel\"\n [ShowGrid]=\"ShowGrid\"\n [ShowMinimap]=\"ShowMinimap\"\n [ShowLegend]=\"ShowLegend\"\n [ReadOnly]=\"ReadOnly\"\n [PanMode]=\"panMode\"\n (ZoomInClicked)=\"ZoomIn()\"\n (ZoomOutClicked)=\"ZoomOut()\"\n (FitToScreenClicked)=\"ZoomToFit()\"\n (AutoLayoutClicked)=\"AutoArrange()\"\n (GridToggled)=\"onGridToggled($event)\"\n (MinimapToggled)=\"onMinimapToggled($event)\"\n (LegendToggled)=\"onLegendToggled($event)\"\n (PanModeToggled)=\"onPanModeToggled($event)\"\n (MinimizeClicked)=\"SetToolbarVisibility('minimized')\"\n (HideClicked)=\"SetToolbarVisibility('hidden')\">\n </mj-flow-toolbar>\n </div>\n } @else if (ShowToolbar && EffectiveToolbarVisibility === 'minimized') {\n <button type=\"button\" class=\"mj-flow-editor-toolbar-chip\" [attr.data-align]=\"ToolbarAlign\"\n (click)=\"SetToolbarVisibility('shown')\"\n title=\"Show canvas tools\" aria-label=\"Show canvas tools\">\n <i class=\"fa-solid fa-wrench\" aria-hidden=\"true\"></i>\n </button>\n } @else if (ShowToolbar && EffectiveToolbarVisibility === 'hidden') {\n <button type=\"button\" class=\"mj-flow-editor-toolbar-tab\" [attr.data-align]=\"ToolbarAlign\"\n (click)=\"SetToolbarVisibility('shown')\"\n title=\"Show canvas tools\" aria-label=\"Show canvas tools\">\n <i class=\"fa-solid fa-ellipsis\" aria-hidden=\"true\"></i>\n </button>\n }\n\n <!-- Main Canvas Area -->\n <div class=\"mj-flow-editor-canvas-area\">\n\n <!-- Palette Sidebar -->\n @if (ShowPalette && !ReadOnly) {\n <mj-flow-palette\n [NodeTypes]=\"NodeTypes\"\n (NodeTypeActivated)=\"onPaletteNodeTypeActivated($event)\">\n </mj-flow-palette>\n }\n\n <!-- Foblex Canvas -->\n <div class=\"mj-flow-editor-canvas\" #canvasArea\n [class.mj-flow-editor-canvas--pan-mode]=\"panMode\">\n <f-flow fDraggable\n [fDraggableDisabled]=\"false\"\n [fCanvasMoveTrigger]=\"canvasMoveTriggerFn\"\n [vCellSize]=\"GridSize\"\n [hCellSize]=\"GridSize\"\n [fCellSizeWhileDragging]=\"ShowGrid\"\n (fLoaded)=\"onFlowLoaded()\"\n (fCreateConnection)=\"onCreateConnection($event)\"\n (fReassignConnection)=\"onReassignConnection($event)\"\n (fCreateNode)=\"onCreateNode($event)\"\n (fSelectionChange)=\"onSelectionChange($event)\"\n (fMoveNodes)=\"onNodesMoved($event)\">\n\n <!-- Background grid — MUST be direct child of f-flow (Foblex content projection requires it) -->\n @if (ShowGrid) {\n <f-background>\n <f-circle-pattern [color]=\"'#94a3b8'\" [radius]=\"24\"></f-circle-pattern>\n </f-background>\n }\n\n <!-- Alignment snap lines — direct child of f-flow -->\n @if (!ReadOnly) {\n <f-line-alignment [fAlignThreshold]=\"10\"></f-line-alignment>\n }\n\n <f-canvas fZoom #fZoomRef=\"fComponent\"\n [fZoomMinimum]=\"0.15\"\n [fZoomMaximum]=\"3\"\n [fZoomStep]=\"0.1\"\n [position]=\"canvasPosition\"\n [scale]=\"canvasScale\"\n (fCanvasChange)=\"onCanvasChange($event)\">\n\n <!-- Interactive connection drawing -->\n @if (!ReadOnly) {\n <f-connection-for-create\n fType=\"bezier\"\n [fRadius]=\"8\"\n [fOffset]=\"12\">\n <svg viewBox=\"0 0 10 10\" fMarker type=\"end\"\n orient=\"auto\" [refX]=\"9\" [refY]=\"5\" [height]=\"10\" [width]=\"10\">\n <path d=\"M0 0L10 5L0 10Z\" fill=\"#94a3b8\"/>\n </svg>\n </f-connection-for-create>\n }\n\n <!-- Connections -->\n @for (conn of Connections; track trackConnectionById($index, conn)) {\n <f-connection\n [fConnectionId]=\"conn.ID\"\n [fOutputId]=\"conn.SourcePortID\"\n [fInputId]=\"conn.TargetPortID\"\n fType=\"bezier\"\n fBehavior=\"fixed\"\n [fRadius]=\"8\"\n [fOffset]=\"12\"\n [fSelectionDisabled]=\"false\"\n [fReassignDisabled]=\"ReadOnly\"\n [style.--connection-color]=\"conn.Color || '#94a3b8'\"\n [style.--connection-width.px]=\"conn.StrokeWidth || 2\"\n [class.mj-flow-connection-colored]=\"!!conn.Color\"\n [class.mj-flow-connection-dashed]=\"conn.Style === 'dashed'\"\n [class.mj-flow-connection-dotted]=\"conn.Style === 'dotted'\"\n [class.mj-flow-connection-animated]=\"!!conn.Animated\"\n (click)=\"onConnectionClicked($event, conn)\"\n (contextmenu)=\"onConnectionContextMenu($event, conn)\">\n <!-- Arrow marker -->\n <svg viewBox=\"0 0 10 10\" fMarker type=\"end\"\n orient=\"auto\" [refX]=\"9\" [refY]=\"5\"\n [height]=\"conn.Animated ? 16 : 10\"\n [width]=\"conn.Animated ? 16 : 10\">\n <path d=\"M0 0L10 5L0 10Z\" [attr.fill]=\"conn.Color || '#94a3b8'\"/>\n </svg>\n <!-- Connection label -->\n @if (conn.Label) {\n <div fConnectionContent [position]=\"0.5\"\n class=\"mj-flow-connection-label\"\n [style.backgroundColor]=\"ConnectionLabelBackground\"\n [style.borderColor]=\"ConnectionLabelBorderColor\"\n [style.color]=\"ConnectionLabelTextColor\"\n [title]=\"conn.LabelDetail || conn.Label || ''\">\n @if (conn.LabelIcon) {\n <i\n class=\"fa-solid mj-flow-connection-label-icon\"\n [ngClass]=\"conn.LabelIcon\"\n [style.color]=\"conn.LabelIconColor || 'inherit'\"></i>\n }\n {{ conn.Label }}\n </div>\n }\n </f-connection>\n }\n\n <!-- Nodes -->\n @for (node of Nodes; track trackNodeById($index, node)) {\n <mj-flow-node\n fNode\n fDragHandle\n [fNodeId]=\"node.ID\"\n [fNodePosition]=\"{ x: node.Position.X, y: node.Position.Y }\"\n [fNodeDraggingDisabled]=\"ReadOnly || panMode || node.Locked === true\"\n [fNodeSelectionDisabled]=\"panMode\"\n [fConnectOnNode]=\"!ReadOnly && !panMode\"\n [Node]=\"node\"\n [TypeConfig]=\"GetTypeConfig(node.Type)\"\n [ReadOnly]=\"ReadOnly\"\n (contextmenu)=\"onNodeContextMenu($event, node)\">\n </mj-flow-node>\n }\n\n </f-canvas>\n\n <!-- Rubber-band selection — direct child of f-flow -->\n @if (!ReadOnly) {\n <f-selection-area></f-selection-area>\n }\n\n <!-- Minimap -->\n @if (ShowMinimap) {\n <div class=\"mj-flow-editor-minimap\" fDragBlocker>\n <f-minimap [fMinSize]=\"1500\"></f-minimap>\n </div>\n }\n </f-flow>\n\n <!-- Legend -->\n @if (ShowLegend && Nodes.length > 0) {\n <div class=\"mj-flow-editor-legend\">\n <div class=\"mj-flow-editor-legend-title\">Legend</div>\n <div class=\"mj-flow-editor-legend-section\">\n <div class=\"mj-flow-editor-legend-heading\">Connections</div>\n <div class=\"mj-flow-editor-legend-item\">\n <svg class=\"mj-flow-editor-legend-line-svg\" width=\"28\" height=\"10\"><line x1=\"0\" y1=\"5\" x2=\"28\" y2=\"5\" stroke=\"#64748b\" stroke-width=\"2\"/></svg>\n <span>Only exit path</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <svg class=\"mj-flow-editor-legend-line-svg\" width=\"28\" height=\"10\"><line x1=\"0\" y1=\"5\" x2=\"28\" y2=\"5\" stroke=\"#16a34a\" stroke-width=\"2\"/></svg>\n <i class=\"fa-solid fa-circle-check\" style=\"color:#16a34a;font-size:10px;\"></i>\n <span>Default (fallback)</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <svg class=\"mj-flow-editor-legend-line-svg\" width=\"28\" height=\"10\"><line x1=\"0\" y1=\"5\" x2=\"28\" y2=\"5\" stroke=\"#f59e0b\" stroke-width=\"2\" stroke-dasharray=\"5 3\"/></svg>\n <span>Conditional</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <svg class=\"mj-flow-editor-legend-line-svg\" width=\"28\" height=\"10\"><line x1=\"0\" y1=\"5\" x2=\"28\" y2=\"5\" stroke=\"#ef4444\" stroke-width=\"2\"/></svg>\n <i class=\"fa-solid fa-triangle-exclamation\" style=\"color:#ef4444;font-size:10px;\"></i>\n <span>Duplicate defaults</span>\n </div>\n </div>\n <div class=\"mj-flow-editor-legend-section\">\n <div class=\"mj-flow-editor-legend-heading\">Step Types</div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-swatch\" style=\"background:#3B82F6\"></span>\n <span>Action</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-swatch\" style=\"background:#8B5CF6\"></span>\n <span>Prompt</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-swatch\" style=\"background:#10B981\"></span>\n <span>Sub-Agent</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-swatch\" style=\"background:#F59E0B\"></span>\n <span>For Each</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-swatch\" style=\"background:#F97316\"></span>\n <span>While</span>\n </div>\n </div>\n <div class=\"mj-flow-editor-legend-section\">\n <div class=\"mj-flow-editor-legend-heading\">Borders</div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-box\" style=\"border-color:#16a34a;background:#f0fdf4;\"></span>\n <span>Start node</span>\n </div>\n <div class=\"mj-flow-editor-legend-item\">\n <span class=\"mj-flow-editor-legend-box\" style=\"border-color:#ef4444;background:#fef2f2;\"></span>\n <i class=\"fa-solid fa-triangle-exclamation\" style=\"color:#ea580c;font-size:10px;\"></i>\n <span>Missing config</span>\n </div>\n </div>\n </div>\n }\n\n <!-- Empty state overlay -->\n @if (Nodes.length === 0) {\n <div class=\"mj-flow-editor-empty\">\n <mj-empty-state\n Icon=\"fa-solid fa-diagram-project\"\n [Title]=\"EmptyStateTitle\">\n @if (!ReadOnly) {\n <p class=\"mj-flow-editor-empty-subtitle\">\n Or use auto-layout after adding steps to arrange them automatically\n </p>\n }\n </mj-empty-state>\n </div>\n }\n </div>\n </div>\n\n <!-- Context Menu -->\n @if (contextMenuVisible) {\n <div\n class=\"mj-flow-context-menu\"\n [style.left.px]=\"contextMenuX\"\n [style.top.px]=\"contextMenuY\"\n (click)=\"$event.stopPropagation()\">\n @for (item of contextMenuItems; track item.ID; let last = $last) {\n <button type=\"button\" class=\"mj-flow-context-menu-item\"\n [class.mj-flow-context-menu-item--danger]=\"item.Danger\"\n [disabled]=\"item.Disabled\"\n (click)=\"onContextMenuAction(item.ID)\">\n @if (item.Icon) {\n <i class=\"fa-solid\" [ngClass]=\"item.Icon\"></i>\n }\n <span>{{ item.Label }}</span>\n @if (item.Shortcut) {\n <kbd class=\"mj-flow-context-menu-shortcut\">{{ item.Shortcut }}</kbd>\n }\n </button>\n @if (!last && item.Danger !== contextMenuItems[$index + 1]?.Danger) {\n <div class=\"mj-flow-context-menu-divider\"></div>\n }\n }\n </div>\n }\n\n <!-- Status Bar -->\n @if (ShowStatusBar) {\n <mj-flow-status-bar\n [NodeCount]=\"Nodes.length\"\n [ConnectionCount]=\"Connections.length\"\n [SelectedCount]=\"selectedCount\"\n [ZoomLevel]=\"zoomLevel\">\n </mj-flow-status-bar>\n }\n</div>\n"]}
@@ -16,6 +16,11 @@ export declare class FlowNodeComponent {
16
16
  get statusClass(): string;
17
17
  get statusIcon(): string;
18
18
  get hasStatus(): boolean;
19
+ /** Debugger chrome: this step is waiting for Continue / Step, not executing. */
20
+ get isAwaitingUser(): boolean;
21
+ /** Prerequisites are done; the dispatcher has not claimed it yet. */
22
+ get isQueued(): boolean;
23
+ get isExecuting(): boolean;
19
24
  get inputPort(): {
20
25
  ID: string;
21
26
  Side: string;
@@ -1 +1 @@
1
- {"version":3,"file":"flow-node.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/flow-node.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;;AAExE;;;;GAIG;AACH,qBAQa,iBAAiB;IACnB,IAAI,EAAG,QAAQ,CAAC;IAChB,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAQ;IAC7C,QAAQ,UAAS;IACjB,OAAO,UAAS;IAEzB,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,UAAU,IAAI,MAAM,CAUvB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,SAAS,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CASzF;IAED,IAAI,UAAU,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAS1F;IAID,6DAA6D;IAC7D,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,mEAAmE;IACnE,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,CAEhC;IAED,+CAA+C;IAC/C,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,CAEhC;IAED,kCAAkC;IAClC,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,mCAAmC;IACnC,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,wEAAwE;IACxE,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAED,0CAA0C;IAC1C,IAAI,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGrC;IAED,8BAA8B;IAC9B,IAAI,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAEpC;yCArGU,iBAAiB;2CAAjB,iBAAiB;CAsG7B"}
1
+ {"version":3,"file":"flow-node.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/flow-node.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;;AAExE;;;;GAIG;AACH,qBAQa,iBAAiB;IACnB,IAAI,EAAG,QAAQ,CAAC;IAChB,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAQ;IAC7C,QAAQ,UAAS;IACjB,OAAO,UAAS;IAEzB,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,UAAU,IAAI,MAAM,CAUvB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,gFAAgF;IAChF,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,qEAAqE;IACrE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,SAAS,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CASzF;IAED,IAAI,UAAU,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAS1F;IAID,6DAA6D;IAC7D,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,mEAAmE;IACnE,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,CAEhC;IAED,+CAA+C;IAC/C,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,CAEhC;IAED,kCAAkC;IAClC,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,mCAAmC;IACnC,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,wEAAwE;IACxE,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAED,0CAA0C;IAC1C,IAAI,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGrC;IAED,8BAA8B;IAC9B,IAAI,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAEpC;yCAnHU,iBAAiB;2CAAjB,iBAAiB;CAoH7B"}