@redvars/peacock 3.6.0 → 3.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/code-highlighter.js +1 -1
- package/dist/code-highlighter.js.map +1 -1
- package/dist/custom-elements-jsdocs.json +928 -96
- package/dist/custom-elements.json +1294 -379
- package/dist/{flow-designer-dZnLJOQT.js → flow-designer-DvTUrDp5.js} +3 -3
- package/dist/{flow-designer-dZnLJOQT.js.map → flow-designer-DvTUrDp5.js.map} +1 -1
- package/dist/{flow-designer-node-XMe-jlKg.js → flow-designer-node-BWrPuxAR.js} +2 -2
- package/dist/flow-designer-node-BWrPuxAR.js.map +1 -0
- package/dist/flow-designer-node.js +1 -1
- package/dist/flow-designer.js +2 -2
- package/dist/html-editor.js +27245 -87
- package/dist/html-editor.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/modal.js +1 -7
- package/dist/modal.js.map +1 -1
- package/dist/{navigation-rail-DyO0oAZU.js → navigation-rail-DTTkqohi.js} +763 -214
- package/dist/navigation-rail-DTTkqohi.js.map +1 -0
- package/dist/peacock-loader.js +12 -3
- package/dist/peacock-loader.js.map +1 -1
- package/dist/src/html-editor/html-editor.d.ts +44 -11
- package/dist/src/index.d.ts +2 -0
- package/dist/src/list/index.d.ts +2 -0
- package/dist/src/list/list-item.d.ts +35 -0
- package/dist/src/list/list.d.ts +28 -0
- package/dist/src/modal/modal.d.ts +1 -7
- package/dist/src/navigation-rail/navigation-rail.d.ts +3 -7
- package/dist/src/number-field/number-field.d.ts +2 -2
- package/dist/src/svg/index.d.ts +1 -0
- package/dist/src/svg/svg.d.ts +38 -0
- package/dist/src/toolbar/toolbar.d.ts +3 -3
- package/dist/toolbar.js +3 -3
- package/dist/toolbar.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -1
- package/readme.md +3 -3
- package/src/code-highlighter/code-highlighter.ts +1 -1
- package/src/flow-designer/flow-designer-node.ts +1 -1
- package/src/html-editor/html-editor.scss +44 -2
- package/src/html-editor/html-editor.ts +309 -94
- package/src/index.ts +2 -1
- package/src/list/index.ts +2 -0
- package/src/list/list-item.scss +111 -0
- package/src/list/list-item.ts +175 -0
- package/src/list/list.scss +24 -0
- package/src/list/list.ts +51 -0
- package/src/modal/modal.ts +1 -7
- package/src/navigation-rail/navigation-rail-item.scss +7 -38
- package/src/navigation-rail/navigation-rail-item.ts +1 -2
- package/src/navigation-rail/navigation-rail.scss +17 -21
- package/src/navigation-rail/navigation-rail.ts +6 -9
- package/src/number-field/number-field.ts +2 -2
- package/src/peacock-loader.ts +12 -0
- package/src/svg/index.ts +1 -0
- package/src/svg/svg.scss +91 -0
- package/src/svg/svg.ts +160 -0
- package/src/toolbar/toolbar.ts +3 -3
- package/dist/flow-designer-node-XMe-jlKg.js.map +0 -1
- package/dist/navigation-rail-DyO0oAZU.js.map +0 -1
|
@@ -6,7 +6,7 @@ import './toolbar.js';
|
|
|
6
6
|
import './icon-button-CK1ZuE-2.js';
|
|
7
7
|
import { e } from './directive-ZPhl09Yt.js';
|
|
8
8
|
import { e as e$1 } from './unsafe-html-BsGUjx94.js';
|
|
9
|
-
import { c as css_248z$1 } from './flow-designer-node-
|
|
9
|
+
import { c as css_248z$1 } from './flow-designer-node-BWrPuxAR.js';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* @license
|
|
@@ -1652,5 +1652,5 @@ FlowDesigner = __decorate([
|
|
|
1652
1652
|
IndividualComponent
|
|
1653
1653
|
], FlowDesigner);
|
|
1654
1654
|
|
|
1655
|
-
export { FlowDesigner as F, Icon as I };
|
|
1656
|
-
//# sourceMappingURL=flow-designer-
|
|
1655
|
+
export { FlowDesigner as F, Icon as I, fetchSVG as f, o, sanitizeSvg as s };
|
|
1656
|
+
//# sourceMappingURL=flow-designer-DvTUrDp5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-designer-dZnLJOQT.js","sources":["../node_modules/lit-html/directives/unsafe-svg.js","../../src/__utils/sanitize-svg.ts","../../src/__utils/cache-fetch.ts","../../src/icon/datasource.ts","../../src/icon/icon.ts","../../src/flow-designer/workflow-utils.ts","../../src/flow-designer/commands.ts","../../src/flow-designer/layout.ts","../../src/flow-designer/validation.ts","../../src/flow-designer/flow-designer.ts"],"sourcesContent":["import{directive as s}from\"../directive.js\";import{UnsafeHTMLDirective as e}from\"./unsafe-html.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class t extends e{}t.directiveName=\"unsafeSVG\",t.resultType=2;const o=s(t);export{o as unsafeSVG};\n//# sourceMappingURL=unsafe-svg.js.map\n","// Basic sanitization: remove <script>, <foreignObject>, event handler attributes (on*), and iframes\nexport function sanitizeSvg(rawSvg: string) {\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(rawSvg, 'image/svg+xml');\n\n const scripts = Array.from(doc.querySelectorAll('script'));\n scripts.forEach(n => n.remove());\n\n const foreigns = Array.from(doc.querySelectorAll('foreignObject, iframe'));\n foreigns.forEach(n => n.remove());\n\n const all = Array.from(doc.querySelectorAll('*'));\n all.forEach(el => {\n const attrs = Array.from(el.attributes).filter(a => /^on/i.test(a.name));\n attrs.forEach(a => el.removeAttribute(a.name));\n });\n\n const el = doc.documentElement;\n if (!el) return '';\n\n const serializer = new XMLSerializer();\n return serializer.serializeToString(el);\n } catch (e) {\n return '';\n }\n}","export async function createCacheFetch(name: string) {\n let cache: Cache | null = null;\n // This map tracks requests currently being processed\n const inFlightRequests = new Map<string, Promise<string>>();\n\n try {\n cache = await window.caches.open(name);\n } catch (e) {\n console.warn('window.caches access not allowed');\n }\n\n return async (url: string): Promise<string> => {\n if (inFlightRequests.has(url)) {\n return inFlightRequests.get(url)!;\n }\n\n const fetchPromise = (async () => {\n const request = new Request(url);\n\n if (cache) {\n const cachedResponse = await cache.match(request);\n if (cachedResponse) {\n return cachedResponse.text();\n }\n }\n\n const urlObj = new URL(request.url);\n const isSameOrigin = urlObj.origin === window.location.origin;\n\n const response = await fetch(request.url, {\n method: 'GET',\n mode: isSameOrigin ? 'no-cors' : 'cors',\n credentials: isSameOrigin ? 'same-origin' : 'omit',\n });\n\n if (response.status === 404) {\n console.error(`[Fetch Error] Resource not found (404): ${url}`);\n return '';\n }\n\n const result = await response.text();\n\n if (cache && response.status === 200) {\n await cache.put(\n request,\n new Response(result, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n }),\n );\n }\n\n return result;\n })();\n\n inFlightRequests.set(url, fetchPromise);\n\n try {\n return await fetchPromise;\n } finally {\n inFlightRequests.delete(url);\n }\n };\n}","import { createCacheFetch } from '@/__utils/cache-fetch.js';\n\nconst PROVIDERS: Record<string, (name: string) => string> = {\n 'material-symbols': (name: string) =>\n `https://cdn.jsdelivr.net/npm/@material-symbols/svg-500@0.40.1/outlined/${name}.svg`,\n carbon: (name: string) =>\n `https://cdn.jsdelivr.net/npm/@carbon/icons@11.41.0/svg/32/${name}.svg`,\n};\n\nconst cacheFetch = await createCacheFetch('svg-cache');\n\nexport async function fetchSVG(url: string) {\n if (!url) return '';\n return cacheFetch(url);\n}\n\nexport async function fetchIcon(\n name: string,\n provider: string = 'material-symbols',\n) {\n if (!name) return '';\n\n if (!PROVIDERS[provider]) {\n throw new Error(`Provider '${provider}' not found`);\n }\n\n return fetchSVG(PROVIDERS[provider](name));\n}\n","import { html, LitElement } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\n\nimport { sanitizeSvg } from '@/__utils/sanitize-svg.js';\n\nimport { fetchIcon, fetchSVG } from './datasource.js';\nimport styles from './icon.scss';\n\nexport type IconProvider = 'material-symbols' | 'material-icons';\n/**\n * @label Icon\n * @tag wc-icon\n * @rawTag icon\n * @summary Icons are visual symbols used to represent ideas, objects, or actions.\n * @overview Icons are visual symbols used to represent ideas, objects, or actions. They communicate messages at a glance, afford interactivity, and draw attention to important information.\n *\n * @cssprop --icon-color - Controls the color of the icon.\n * @cssprop [--icon-size=1rem] - Controls the size of the icon. Defaults to \"1rem\"\n *\n * @example\n * ```html\n * <wc-icon name=\"home\" style=\"--icon-size: 2rem;\"></wc-icon>\n * ```\n *\n */\nexport class Icon extends LitElement {\n static styles = [styles];\n\n /**\n * The identifier for the icon.\n * This name corresponds to a specific SVG asset in the icon set.\n */\n @property({ type: String, reflect: true }) name?: string;\n\n @property({ type: String, reflect: true }) src?: string;\n\n @property({ type: String }) provider: IconProvider = 'material-symbols';\n\n @state()\n private svgContent: string = '';\n\n // loading + error states for consumers/tests\n @state() // @ts-ignore\n private loading: boolean = false;\n\n @state()\n private error: Error | null = null;\n\n // token to avoid race conditions when multiple fetches overlap\n private _fetchId = 0;\n\n // optional debounce for rapid property changes\n private _debounceTimer: number | undefined;\n\n firstUpdated() {\n // perform initial fetch once component is connected and rendered\n this.__scheduleUpdate();\n }\n\n updated(changedProperties: any) {\n // only refetch when name or src changed\n if (changedProperties.has('name') || changedProperties.has('src')) {\n this.__scheduleUpdate();\n }\n }\n\n render() {\n // accessible wrapper; consumers can provide a fallback via <slot name=\"fallback\">.\n return html` <div class=\"icon\">\n ${this.svgContent\n ? unsafeSVG(this.svgContent)\n : html`<slot name=\"fallback\"></slot>`}\n </div>`;\n }\n\n // small debounce to coalesce rapid changes (50ms)\n private __scheduleUpdate() {\n if (this._debounceTimer) {\n clearTimeout(this._debounceTimer as any);\n }\n // @ts-ignore - setTimeout in DOM returns number\n this._debounceTimer = window.setTimeout(() => this.__updateSvg(), 50);\n }\n\n /**\n * @internal\n */\n private async __updateSvg() {\n this._fetchId += 1;\n const currentId = this._fetchId;\n this.loading = true;\n this.error = null;\n\n try {\n let raw: string | undefined;\n\n if (this.name) {\n raw = await fetchIcon(this.name, this.provider);\n } else if (this.src) {\n raw = await fetchSVG(this.src);\n } else {\n raw = '';\n }\n\n // If another fetch started after this one, ignore this result\n if (currentId !== this._fetchId) return;\n\n if (raw) {\n this.svgContent = sanitizeSvg(raw);\n } else {\n this.svgContent = '';\n }\n } catch (err: any) {\n // capture and surface error, but avoid throwing\n this.error = err instanceof Error ? err : new Error(String(err));\n this.svgContent = '';\n // bubble an event so consumers can react\n this.dispatchEvent(\n new CustomEvent('icon-error', {\n detail: { name: this.name, src: this.src, error: this.error },\n bubbles: true,\n composed: true,\n }),\n );\n } finally {\n // ensure loading is cleared unless another fetch started\n if (currentId === this._fetchId) {\n this.loading = false;\n }\n }\n }\n}\n","import type { Workflow, WorkflowNode } from './types.js';\n\n/**\n * Workflow utility functions for tree traversal and manipulation\n */\n\n/**\n * Deep clone a workflow to ensure immutability\n */\nexport function cloneWorkflow(workflow: Workflow): Workflow {\n return JSON.parse(JSON.stringify(workflow));\n}\n\n/**\n * Deep clone a workflow node\n */\nexport function cloneNode(node: WorkflowNode): WorkflowNode {\n return JSON.parse(JSON.stringify(node));\n}\n\n/**\n * Find a node by ID anywhere in the workflow tree\n */\nexport function findNodeById(\n node: WorkflowNode,\n id: string\n): WorkflowNode | null {\n if (node.id === id) return node;\n\n // Search children\n if (node.children) {\n for (const child of node.children) {\n const found = findNodeById(child, id);\n if (found) return found;\n }\n }\n\n // Search tasks\n if (node.tasks) {\n for (const task of node.tasks) {\n const found = findNodeById(task, id);\n if (found) return found;\n }\n }\n\n // Search branches\n if (node.branches) {\n for (const branchNodes of Object.values(node.branches)) {\n for (const branchNode of branchNodes) {\n const found = findNodeById(branchNode, id);\n if (found) return found;\n }\n }\n }\n\n // Search join\n if (node.join) {\n const found = findNodeById(node.join, id);\n if (found) return found;\n }\n\n return null;\n}\n\n/**\n * Remove a node by ID from the workflow tree\n */\nexport function removeNodeById(\n node: WorkflowNode,\n id: string\n): WorkflowNode {\n const result = cloneNode(node);\n\n // Remove from children\n if (result.children) {\n result.children = result.children.filter((child) => {\n if (child.id === id) return false;\n removeNodeById(child, id);\n return true;\n });\n }\n\n // Remove from tasks\n if (result.tasks) {\n result.tasks = result.tasks.filter((task) => {\n if (task.id === id) return false;\n removeNodeById(task, id);\n return true;\n });\n }\n\n // Remove from branches\n if (result.branches) {\n for (const [branchKey, branchNodes] of Object.entries(result.branches)) {\n result.branches[branchKey] = branchNodes.filter((branchNode) => {\n if (branchNode.id === id) return false;\n removeNodeById(branchNode, id);\n return true;\n });\n }\n }\n\n // Recursively clean empty nodes\n for (const branchNode of result.children || []) {\n removeNodeById(branchNode, id);\n }\n for (const taskNode of result.tasks || []) {\n removeNodeById(taskNode, id);\n }\n for (const branchNodes of Object.values(result.branches || {})) {\n for (const branchNode of branchNodes) {\n removeNodeById(branchNode, id);\n }\n }\n\n return result;\n}\n\n/**\n * Insert a node into the workflow tree at a specific location\n */\nexport function insertNodeIntoWorkflow(\n parent: WorkflowNode,\n nodeToInsert: WorkflowNode,\n connectionType: 'child' | 'branch' | 'task' = 'child',\n branchKey?: string\n): void {\n switch (connectionType) {\n case 'child':\n if (!parent.children) parent.children = [];\n parent.children.push(cloneNode(nodeToInsert));\n break;\n\n case 'task':\n if (!parent.tasks) parent.tasks = [];\n parent.tasks.push(cloneNode(nodeToInsert));\n break;\n\n case 'branch':\n if (!parent.branches) parent.branches = {};\n if (!branchKey) branchKey = 'default';\n if (!parent.branches[branchKey]) parent.branches[branchKey] = [];\n parent.branches[branchKey].push(cloneNode(nodeToInsert));\n break;\n }\n}\n\n/**\n * Collect all nodes in the workflow (depth-first)\n */\nexport function getAllNodes(node: WorkflowNode): WorkflowNode[] {\n const result: WorkflowNode[] = [node];\n\n if (node.children) {\n for (const child of node.children) {\n result.push(...getAllNodes(child));\n }\n }\n\n if (node.tasks) {\n for (const task of node.tasks) {\n result.push(...getAllNodes(task));\n }\n }\n\n if (node.branches) {\n for (const branchNodes of Object.values(node.branches)) {\n for (const branchNode of branchNodes) {\n result.push(...getAllNodes(branchNode));\n }\n }\n }\n\n if (node.join) {\n result.push(...getAllNodes(node.join));\n }\n\n return result;\n}\n\n/**\n * Get all parent node IDs for a given node (path from root to node)\n */\nexport function getNodePath(\n rootNode: WorkflowNode,\n targetId: string\n): string[] {\n const path: string[] = [];\n\n function traverse(node: WorkflowNode): boolean {\n path.push(node.id);\n\n if (node.id === targetId) return true;\n\n // Search children\n if (node.children) {\n for (const child of node.children) {\n if (traverse(child)) return true;\n }\n }\n\n // Search tasks\n if (node.tasks) {\n for (const task of node.tasks) {\n if (traverse(task)) return true;\n }\n }\n\n // Search branches\n if (node.branches) {\n for (const branchNodes of Object.values(node.branches)) {\n for (const branchNode of branchNodes) {\n if (traverse(branchNode)) return true;\n }\n }\n }\n\n // Search join\n if (node.join) {\n if (traverse(node.join)) return true;\n }\n\n path.pop();\n return false;\n }\n\n traverse(rootNode);\n return path;\n}\n\n/**\n * Check if a node is a descendant of another node\n */\nexport function isDescendant(\n rootNode: WorkflowNode,\n potentialParentId: string,\n nodeId: string\n): boolean {\n const path = getNodePath(rootNode, nodeId);\n return path.includes(potentialParentId);\n}\n\n/**\n * Replace a node in the tree\n */\nexport function replaceNode(\n node: WorkflowNode,\n targetId: string,\n replacement: WorkflowNode\n): WorkflowNode {\n if (node.id === targetId) {\n return cloneNode(replacement);\n }\n\n const result = cloneNode(node);\n\n if (result.children) {\n result.children = result.children.map((child) =>\n replaceNode(child, targetId, replacement)\n );\n }\n\n if (result.tasks) {\n result.tasks = result.tasks.map((task) =>\n replaceNode(task, targetId, replacement)\n );\n }\n\n if (result.branches) {\n for (const [branchKey, branchNodes] of Object.entries(result.branches)) {\n result.branches[branchKey] = branchNodes.map((branchNode) =>\n replaceNode(branchNode, targetId, replacement)\n );\n }\n }\n\n if (result.join) {\n result.join = replaceNode(result.join, targetId, replacement);\n }\n\n return result;\n}\n","import type { Workflow, WorkflowNode, WorkflowCommand } from './types.js';\nimport {\n findNodeById,\n cloneWorkflow,\n removeNodeById,\n insertNodeIntoWorkflow,\n} from './workflow-utils.js';\n\n/**\n * Add Node Command\n */\nexport class AddNodeCommand implements WorkflowCommand {\n description = 'Add node';\n\n constructor(\n private nodeToAdd: WorkflowNode,\n private parentNodeId: string,\n private connectionType: 'child' | 'branch' | 'task' = 'child',\n private branchKey?: string\n ) {}\n\n execute(workflow: Workflow): Workflow {\n const result = cloneWorkflow(workflow);\n const parent = findNodeById(result.nodes, this.parentNodeId);\n if (!parent) return workflow; // Validation in parent component\n\n insertNodeIntoWorkflow(parent, this.nodeToAdd, this.connectionType, this.branchKey);\n return result;\n }\n\n undo(workflow: Workflow): Workflow {\n const result = cloneWorkflow(workflow);\n removeNodeById(result.nodes, this.nodeToAdd.id);\n return result;\n }\n}\n\n/**\n * Delete Node Command\n */\nexport class DeleteNodeCommand implements WorkflowCommand {\n description = 'Delete node';\n private deletedNode: WorkflowNode | null = null;\n private parentReference: {\n parentId: string;\n connectionType: 'child' | 'branch' | 'task';\n branchKey?: string;\n } | null = null;\n\n constructor(\n private nodeId: string,\n workflow?: Workflow\n ) {\n if (workflow) {\n this.captureNodeContext(workflow);\n }\n }\n\n private captureNodeContext(workflow: Workflow) {\n const node = findNodeById(workflow.nodes, this.nodeId);\n if (!node) return;\n this.deletedNode = cloneWorkflow({ workflow_id: '', nodes: node }).nodes;\n\n // Find parent reference\n this.findParentReference(workflow.nodes);\n }\n\n private findParentReference(node: WorkflowNode) {\n if (node.children) {\n const idx = node.children.findIndex((n) => n.id === this.nodeId);\n if (idx !== -1) {\n this.parentReference = {\n parentId: node.id,\n connectionType: 'child',\n };\n return;\n }\n for (const child of node.children) {\n this.findParentReference(child);\n }\n }\n\n if (node.tasks) {\n const idx = node.tasks.findIndex((n) => n.id === this.nodeId);\n if (idx !== -1) {\n this.parentReference = {\n parentId: node.id,\n connectionType: 'task',\n };\n return;\n }\n for (const task of node.tasks) {\n this.findParentReference(task);\n }\n }\n\n if (node.branches) {\n for (const [branchKey, branchNodes] of Object.entries(node.branches)) {\n const idx = branchNodes.findIndex((n) => n.id === this.nodeId);\n if (idx !== -1) {\n this.parentReference = {\n parentId: node.id,\n connectionType: 'branch',\n branchKey,\n };\n return;\n }\n for (const branchNode of branchNodes) {\n this.findParentReference(branchNode);\n }\n }\n }\n }\n\n execute(workflow: Workflow): Workflow {\n const result = cloneWorkflow(workflow);\n removeNodeById(result.nodes, this.nodeId);\n return result;\n }\n\n undo(workflow: Workflow): Workflow {\n if (!this.deletedNode || !this.parentReference) return workflow;\n const result = cloneWorkflow(workflow);\n const parent = findNodeById(result.nodes, this.parentReference.parentId);\n if (!parent) return workflow;\n\n insertNodeIntoWorkflow(\n parent,\n this.deletedNode,\n this.parentReference.connectionType,\n this.parentReference.branchKey\n );\n return result;\n }\n}\n\n/**\n * Edit Node Command\n */\nexport class EditNodeCommand implements WorkflowCommand {\n description = 'Edit node';\n private previousState: Record<string, any> = {};\n\n constructor(\n private nodeId: string,\n private updates: Partial<WorkflowNode>,\n workflow?: Workflow\n ) {\n if (workflow) {\n const node = findNodeById(workflow.nodes, nodeId);\n if (node) {\n // Store only edited fields\n Object.keys(updates).forEach((key) => {\n this.previousState[key] = (node as Record<string, any>)[key];\n });\n }\n }\n }\n\n execute(workflow: Workflow): Workflow {\n const result = cloneWorkflow(workflow);\n const node = findNodeById(result.nodes, this.nodeId);\n if (!node) return workflow;\n\n Object.assign(node, this.updates);\n return result;\n }\n\n undo(workflow: Workflow): Workflow {\n const result = cloneWorkflow(workflow);\n const node = findNodeById(result.nodes, this.nodeId);\n if (!node) return workflow;\n\n Object.assign(node, this.previousState);\n return result;\n }\n}\n\n/**\n * Move Node Command - reorder in array or change parent\n */\nexport class MoveNodeCommand implements WorkflowCommand {\n description = 'Move node';\n private previousState: {\n parentId: string;\n index: number;\n connectionType: 'child' | 'branch' | 'task';\n branchKey?: string;\n } | null = null;\n\n constructor(\n private nodeId: string,\n private newParentId: string,\n private newIndex: number,\n private newConnectionType: 'child' | 'branch' | 'task' = 'child',\n private newBranchKey?: string,\n workflow?: Workflow\n ) {\n if (workflow) {\n this.captureCurrentPosition(workflow);\n }\n }\n\n private captureCurrentPosition(workflow: Workflow) {\n // Store current parent/position for undo\n // Implementation depends on finding current parent location\n }\n\n execute(workflow: Workflow): Workflow {\n // Remove from old parent, insert at new parent\n let result = cloneWorkflow(workflow);\n result.nodes = removeNodeById(result.nodes, this.nodeId);\n const newParent = findNodeById(result.nodes, this.newParentId);\n if (!newParent) return workflow;\n\n const node = findNodeById(workflow.nodes, this.nodeId);\n if (!node) return workflow;\n\n insertNodeIntoWorkflow(\n newParent,\n node,\n this.newConnectionType,\n this.newBranchKey\n );\n return result;\n }\n\n undo(workflow: Workflow): Workflow {\n // Restore to previous position\n if (!this.previousState) return workflow;\n let result = cloneWorkflow(workflow);\n result.nodes = removeNodeById(result.nodes, this.nodeId);\n const prevParent = findNodeById(result.nodes, this.previousState.parentId);\n if (!prevParent) return workflow;\n\n const node = findNodeById(workflow.nodes, this.nodeId);\n if (!node) return workflow;\n\n insertNodeIntoWorkflow(\n prevParent,\n node,\n this.previousState.connectionType,\n this.previousState.branchKey\n );\n return result;\n }\n}\n\n/**\n * Batch Command - combine multiple commands into one undo/redo step\n */\nexport class BatchCommand implements WorkflowCommand {\n description: string;\n\n constructor(\n private commands: WorkflowCommand[],\n description: string = `Batch operation (${commands.length} steps)`\n ) {\n this.description = description;\n }\n\n execute(workflow: Workflow): Workflow {\n let result = workflow;\n for (const command of this.commands) {\n result = command.execute(result);\n }\n return result;\n }\n\n undo(workflow: Workflow): Workflow {\n let result = workflow;\n // Execute commands in reverse order to undo\n for (let i = this.commands.length - 1; i >= 0; i--) {\n result = this.commands[i].undo(result);\n }\n return result;\n }\n}\n","import type { WorkflowNode, PositionedNode, SwimlaneConfig } from './types.js';\nimport { getAllNodes } from './workflow-utils.js';\n\n/**\n * Swimlane layout algorithm for flow designer\n * Positions nodes in left-to-right swimlanes for parallel/branching flows\n */\n\ninterface LayoutNode {\n node: WorkflowNode;\n parent: WorkflowNode | null;\n lane: string;\n depth: number;\n branchPath?: string;\n width: number;\n height: number;\n}\n\nconst NODE_WIDTH = 200;\nconst NODE_HEIGHT = 100;\nconst HORIZONTAL_GAP = 60; // Gap between depth levels (columns)\nconst VERTICAL_GAP = 40; // Gap between lanes\nconst LANE_HEIGHT = 140; // Height of each swimlane row\nconst LANE_HEADER_HEIGHT = 84; // Top offset so first row is not clipped by floating UI\n\nexport class SwimlaneLayout {\n /**\n * Calculate layout positions for all nodes in a workflow\n */\n static calculateLayout(rootNode: WorkflowNode): PositionedNode[] {\n const layoutNodes: LayoutNode[] = [];\n const lanes = new Map<string, LayoutNode[]>(); // lane -> nodes in that lane\n const depthMap = new Map<string, number>(); // Track max depth per lane\n\n // First pass: assign lanes and depths\n this._traverseAndAssignLanes(rootNode, null, 'main', 0, layoutNodes, lanes);\n\n // Second pass: calculate positions\n const positionedNodes: PositionedNode[] = [];\n const nodePositions = new Map<string, { x: number; y: number }>();\n\n for (const layoutNode of layoutNodes) {\n const x =\n layoutNode.depth * (NODE_WIDTH + HORIZONTAL_GAP) + HORIZONTAL_GAP;\n const laneIndex = Array.from(lanes.keys()).indexOf(layoutNode.lane);\n const y = laneIndex * (LANE_HEIGHT + VERTICAL_GAP) + LANE_HEADER_HEIGHT;\n\n nodePositions.set(layoutNode.node.id, { x, y });\n\n const positioned: PositionedNode = {\n node: layoutNode.node,\n x,\n y,\n width: NODE_WIDTH,\n height: NODE_HEIGHT,\n lane: layoutNode.lane,\n depth: layoutNode.depth,\n branchPath: layoutNode.branchPath,\n parentId: layoutNode.parent?.id,\n connectorPoints: [],\n };\n\n positionedNodes.push(positioned);\n }\n\n // Third pass: calculate connector points\n this._calculateConnectors(positionedNodes, nodePositions);\n\n return positionedNodes;\n }\n\n /**\n * Traverse workflow tree and assign lane/depth to each node\n */\n private static _traverseAndAssignLanes(\n node: WorkflowNode,\n parent: WorkflowNode | null,\n baseLane: string,\n depth: number,\n layoutNodes: LayoutNode[],\n lanes: Map<string, LayoutNode[]>\n ): void {\n const layoutNode: LayoutNode = {\n node,\n parent,\n lane: baseLane,\n depth,\n width: NODE_WIDTH,\n height: NODE_HEIGHT,\n };\n\n // Add to layout nodes\n layoutNodes.push(layoutNode);\n\n // Register in lanes map\n if (!lanes.has(baseLane)) {\n lanes.set(baseLane, []);\n }\n lanes.get(baseLane)!.push(layoutNode);\n\n // Process children\n if (node.children && node.children.length > 0) {\n for (const child of node.children) {\n this._traverseAndAssignLanes(\n child,\n node,\n baseLane,\n depth + 1,\n layoutNodes,\n lanes\n );\n }\n }\n\n // Process decision branches into separate swimlanes\n if (node.branches) {\n let branchIndex = 0;\n for (const [branchKey, branchNodes] of Object.entries(node.branches)) {\n const branchLane = `${baseLane}_${branchKey}_${branchIndex}`;\n\n for (const branchNode of branchNodes) {\n this._traverseAndAssignLanes(\n branchNode,\n node,\n branchLane,\n depth + 1,\n layoutNodes,\n lanes\n );\n }\n branchIndex++;\n }\n }\n\n // Process fork into parallel lanes\n if (node.type === 'fork' && node.tasks) {\n let taskIndex = 0;\n for (const task of node.tasks) {\n const parallelLane = `${baseLane}_parallel_${taskIndex}`;\n this._traverseAndAssignLanes(\n task,\n node,\n parallelLane,\n depth + 1,\n layoutNodes,\n lanes\n );\n taskIndex++;\n }\n }\n\n // Process fork join node\n if (node.type === 'fork' && node.join) {\n // Join node goes back to main lane at next depth\n this._traverseAndAssignLanes(\n node.join,\n node,\n baseLane,\n depth + 2,\n layoutNodes,\n lanes\n );\n }\n\n // Process task nodes (used in forks)\n if (node.tasks && node.type !== 'fork') {\n for (const task of node.tasks) {\n this._traverseAndAssignLanes(\n task,\n node,\n baseLane,\n depth + 1,\n layoutNodes,\n lanes\n );\n }\n }\n }\n\n /**\n * Calculate SVG connector points between nodes\n */\n private static _calculateConnectors(\n positionedNodes: PositionedNode[],\n nodePositions: Map<string, { x: number; y: number }>\n ): void {\n const nodeMap = new Map<string, PositionedNode>(\n positionedNodes.map((n) => [n.node.id, n])\n );\n\n for (const positioned of positionedNodes) {\n const connectors: PositionedNode['connectorPoints'] = [];\n const nodeMiddleRight = {\n x: positioned.x + positioned.width,\n y: positioned.y + positioned.height / 2,\n };\n\n // Connect to children (sequential)\n if (positioned.node.children && positioned.node.children.length > 0) {\n for (const child of positioned.node.children) {\n const childPos = nodeMap.get(child.id);\n if (childPos) {\n connectors.push({\n from: nodeMiddleRight,\n to: {\n x: childPos.x,\n y: childPos.y + childPos.height / 2,\n },\n type: 'straight',\n });\n }\n }\n }\n\n // Connect to branches (decision)\n if (positioned.node.branches) {\n for (const branchNodes of Object.values(positioned.node.branches)) {\n\n for (const branchNode of branchNodes) {\n const childPos = nodeMap.get(branchNode.id);\n if (childPos) {\n // Curved path to branch\n connectors.push({\n from: nodeMiddleRight,\n to: {\n x: childPos.x,\n y: childPos.y + childPos.height / 2,\n },\n type: 'branch',\n });\n }\n }\n }\n }\n\n // Connect fork to parallel tasks\n if (positioned.node.type === 'fork' && positioned.node.tasks) {\n for (const task of positioned.node.tasks) {\n const taskPos = nodeMap.get(task.id);\n if (taskPos) {\n connectors.push({\n from: nodeMiddleRight,\n to: {\n x: taskPos.x,\n y: taskPos.y + taskPos.height / 2,\n },\n type: 'fork',\n });\n }\n }\n }\n\n // Connect to join\n if (positioned.node.type === 'fork' && positioned.node.join) {\n const joinPos = nodeMap.get(positioned.node.join.id);\n if (joinPos) {\n connectors.push({\n from: nodeMiddleRight,\n to: {\n x: joinPos.x,\n y: joinPos.y + joinPos.height / 2,\n },\n type: 'join',\n });\n }\n }\n\n // Connect loop back\n if (positioned.node.type === 'loop_end' && positioned.node.target_id) {\n const targetPos = nodeMap.get(positioned.node.target_id);\n if (targetPos) {\n connectors.push({\n from: {\n x: positioned.x + positioned.width,\n y: positioned.y + positioned.height / 2,\n },\n to: {\n x: targetPos.x,\n y: targetPos.y + targetPos.height / 2,\n },\n type: 'curved',\n });\n }\n }\n\n positioned.connectorPoints = connectors;\n }\n }\n\n /**\n * Get swimlane configurations for rendering\n */\n static getSwimlanes(positionedNodes: PositionedNode[]): SwimlaneConfig[] {\n const swimlanesMap = new Map<string, PositionedNode[]>();\n\n for (const node of positionedNodes) {\n if (!swimlanesMap.has(node.lane)) {\n swimlanesMap.set(node.lane, []);\n }\n swimlanesMap.get(node.lane)!.push(node);\n }\n\n const swimlanes: SwimlaneConfig[] = [];\n for (const [laneId, nodes] of swimlanesMap.entries()) {\n const isParallel = laneId.includes('parallel');\n const name = this._getSwimlaneName(laneId);\n\n swimlanes.push({\n id: laneId,\n name,\n nodes,\n isParallel,\n });\n }\n\n return swimlanes;\n }\n\n /**\n * Generate human-readable swimlane name\n */\n private static _getSwimlaneName(laneId: string): string {\n if (laneId === 'main') return 'Main Flow';\n if (laneId.includes('yes')) return 'Yes Path';\n if (laneId.includes('no')) return 'No Path';\n if (laneId.includes('parallel')) {\n const match = laneId.match(/parallel_(\\d+)/);\n if (match) return `Parallel Task ${parseInt(match[1]) + 1}`;\n }\n return laneId;\n }\n\n /**\n * Calculate canvas bounds for sizing\n */\n static getCanvasBounds(positionedNodes: PositionedNode[]): {\n width: number;\n height: number;\n } {\n if (positionedNodes.length === 0) {\n return { width: 600, height: 400 };\n }\n\n let maxX = 0;\n let maxY = 0;\n\n for (const node of positionedNodes) {\n maxX = Math.max(maxX, node.x + node.width + HORIZONTAL_GAP);\n maxY = Math.max(maxY, node.y + node.height + VERTICAL_GAP);\n }\n\n return {\n width: Math.max(600, maxX),\n height: Math.max(400, maxY),\n };\n }\n}\n","import type { Workflow, WorkflowNode, ValidationError } from './types.js';\nimport {\n findNodeById,\n getAllNodes,\n getNodePath,\n isDescendant,\n} from './workflow-utils.js';\n\n/**\n * Workflow validation - checks for common errors and inconsistencies\n */\n\nexport class WorkflowValidator {\n /**\n * Validate entire workflow\n */\n static validate(workflow: Workflow): ValidationError[] {\n const errors: ValidationError[] = [];\n\n // Check root node exists and is a trigger\n if (!workflow.nodes) {\n errors.push({\n nodeId: 'root',\n type: 'orphaned_node',\n message: 'Workflow has no root node',\n severity: 'error',\n });\n return errors;\n }\n\n // Validate all nodes\n const allNodes = getAllNodes(workflow.nodes);\n\n // Check for circular loops\n errors.push(...this._checkCircularLoops(workflow.nodes, allNodes));\n\n // Check for orphaned nodes\n errors.push(...this._checkOrphanedNodes(workflow.nodes, allNodes));\n\n // Check valid branches\n errors.push(...this._checkValidBranches(workflow.nodes, allNodes));\n\n // Check missing targets\n errors.push(...this._checkMissingTargets(workflow, allNodes));\n\n // Check invalid fork/join pairs\n errors.push(...this._checkForkJoinPairs(workflow.nodes, allNodes));\n\n return errors;\n }\n\n /**\n * Detect circular loop references\n * A loop_end cannot point to a node that is its own descendant (after the loop_start)\n */\n private static _checkCircularLoops(\n rootNode: WorkflowNode,\n allNodes: WorkflowNode[]\n ): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const node of allNodes) {\n // Only check loop_end nodes\n if (node.type !== 'loop_end') continue;\n\n const targetId = node.target_id;\n if (!targetId) continue;\n\n // Check if target exists\n const targetNode = findNodeById(rootNode, targetId);\n if (!targetNode) continue;\n\n // If loop_end is a descendant of its target, it's circular\n if (isDescendant(rootNode, targetId, node.id)) {\n // This is the intended behavior - loop_end should be a descendant of loop_start\n // So this is actually valid. Skip this check.\n }\n\n // However, if the loop_end's target is a descendant of the loop_end, that's circular\n if (isDescendant(rootNode, node.id, targetId)) {\n errors.push({\n nodeId: node.id,\n type: 'circular_loop',\n message: `Loop cannot point to a node (${targetId}) that executes after the loop_end`,\n severity: 'error',\n });\n }\n }\n\n return errors;\n }\n\n /**\n * Check for orphaned nodes (not reachable from root)\n */\n private static _checkOrphanedNodes(\n rootNode: WorkflowNode,\n allNodes: WorkflowNode[]\n ): ValidationError[] {\n const errors: ValidationError[] = [];\n const paths = new Map<string, string[]>();\n\n for (const node of allNodes) {\n const path = getNodePath(rootNode, node.id);\n if (path.length === 0 && node.id !== rootNode.id) {\n errors.push({\n nodeId: node.id,\n type: 'orphaned_node',\n message: `Node \"${node.label}\" is not reachable from the root trigger`,\n severity: 'error',\n });\n }\n paths.set(node.id, path);\n }\n\n // Check nodes in branches - all branch paths must be reachable\n // This is typically valid by structure, but warn if branch has no exit\n for (const node of allNodes) {\n if (!node.branches) continue;\n\n for (const [branchKey, branchNodes] of Object.entries(node.branches)) {\n if (branchNodes.length === 0) {\n errors.push({\n nodeId: node.id,\n type: 'invalid_branch',\n message: `Branch \"${branchKey}\" is empty - no nodes to execute`,\n severity: 'warning',\n });\n }\n }\n }\n\n return errors;\n }\n\n /**\n * Check that decision nodes have valid branches\n */\n private static _checkValidBranches(\n rootNode: WorkflowNode,\n allNodes: WorkflowNode[]\n ): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const node of allNodes) {\n if (node.type !== 'decision') continue;\n\n if (!node.branches) {\n errors.push({\n nodeId: node.id,\n type: 'invalid_branch',\n message: `Decision node \"${node.label}\" has no branches defined`,\n severity: 'error',\n });\n continue;\n }\n\n // Standard decision should have \"yes\" and \"no\"\n const branchKeys = Object.keys(node.branches);\n if (!branchKeys.includes('yes') || !branchKeys.includes('no')) {\n errors.push({\n nodeId: node.id,\n type: 'invalid_branch',\n message: `Decision node \"${node.label}\" should have \"yes\" and \"no\" branches`,\n severity: 'warning',\n });\n }\n\n // Check for empty branches\n for (const [branchKey, branchNodes] of Object.entries(node.branches)) {\n if (branchNodes.length === 0) {\n errors.push({\n nodeId: node.id,\n type: 'invalid_branch',\n message: `Decision branch \"${branchKey}\" is empty`,\n severity: 'warning',\n });\n }\n }\n }\n\n return errors;\n }\n\n /**\n * Check that loop_end nodes reference valid loop_start nodes\n */\n private static _checkMissingTargets(\n workflow: Workflow,\n allNodes: WorkflowNode[]\n ): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const node of allNodes) {\n if (node.type === 'loop_end') {\n if (!node.target_id) {\n errors.push({\n nodeId: node.id,\n type: 'missing_target',\n message: `Loop end \"${node.label}\" does not specify a target loop_start`,\n severity: 'error',\n });\n } else {\n const target = findNodeById(workflow.nodes, node.target_id);\n if (!target || target.type !== 'loop_start') {\n errors.push({\n nodeId: node.id,\n type: 'missing_target',\n message: `Loop end \"${node.label}\" references non-existent or non-loop_start node \"${node.target_id}\"`,\n severity: 'error',\n });\n }\n }\n }\n }\n\n return errors;\n }\n\n /**\n * Check that fork nodes have corresponding join nodes\n */\n private static _checkForkJoinPairs(\n rootNode: WorkflowNode,\n allNodes: WorkflowNode[]\n ): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const node of allNodes) {\n if (node.type === 'fork') {\n if (!node.join) {\n errors.push({\n nodeId: node.id,\n type: 'invalid_fork_join',\n message: `Fork node \"${node.label}\" does not have a corresponding join node`,\n severity: 'error',\n });\n } else if (node.join.type !== 'join') {\n errors.push({\n nodeId: node.id,\n type: 'invalid_fork_join',\n message: `Fork node \"${node.label}\" join is not a join node`,\n severity: 'error',\n });\n }\n\n if (!node.tasks || node.tasks.length === 0) {\n errors.push({\n nodeId: node.id,\n type: 'invalid_fork_join',\n message: `Fork node \"${node.label}\" has no parallel tasks`,\n severity: 'warning',\n });\n }\n }\n }\n\n return errors;\n }\n\n /**\n * Check if workflow would create a valid execution path\n */\n static isExecutable(workflow: Workflow): boolean {\n const errors = this.validate(workflow);\n return errors.filter((e) => e.severity === 'error').length === 0;\n }\n\n /**\n * Get validation warnings only\n */\n static getWarnings(workflow: Workflow): ValidationError[] {\n const errors = this.validate(workflow);\n return errors.filter((e) => e.severity === 'warning');\n }\n\n /**\n * Get validation errors only\n */\n static getErrors(workflow: Workflow): ValidationError[] {\n const errors = this.validate(workflow);\n return errors.filter((e) => e.severity === 'error');\n }\n}\n","import { html, LitElement, nothing } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport IndividualComponent from '@/IndividualComponent.js';\n\nimport '../toolbar/toolbar.js';\nimport '../button/icon-button/icon-button.js';\nimport '../icon/icon.js';\nimport './flow-designer-node.js';\n\nimport styles from './flow-designer.scss';\nimport type {\n Workflow,\n WorkflowNode,\n PositionedNode,\n WorkflowChangeEvent,\n HistoryEntry,\n EditorState,\n WorkflowCommand,\n} from './types.js';\nimport {\n AddNodeCommand,\n DeleteNodeCommand,\n EditNodeCommand,\n MoveNodeCommand,\n} from './commands.js';\nimport { SwimlaneLayout } from './layout.js';\nimport { WorkflowValidator } from './validation.js';\nimport { cloneWorkflow } from './workflow-utils.js';\n\n/**\n * @label Flow Designer\n * @tag wc-flow-designer\n * @rawTag flow-designer\n * @summary Low-code business process flow designer with swimlane layout, undo/redo, and interactive editing.\n *\n * @cssprop --flow-designer-height - Height of the flow designer container. Defaults to 400px.\n * @cssprop --flow-designer-border-color - Border color of the flow designer. Defaults to outline-variant.\n * @cssprop --flow-designer-background - Background color of the designer. Defaults to surface.\n * @cssprop --flow-designer-border-radius - Corner radius. Defaults to medium shape.\n * @cssprop --flow-designer-action-bar-bg - Background color of the action bar. Defaults to surface-container.\n *\n * @example\n * ```html\n * <wc-flow-designer id=\"editor\"></wc-flow-designer>\n * <script>\n * const workflow = {\n * workflow_id: \"demo\",\n * nodes: {\n * id: \"node_1\",\n * type: \"trigger\",\n * label: \"Start\"\n * }\n * };\n * document.querySelector('#editor').workflow = workflow;\n * </script>\n * ```\n */\n@IndividualComponent\nexport class FlowDesigner extends LitElement {\n static styles = [styles];\n\n /**\n * The workflow definition to display and edit\n */\n @property({ type: Object })\n workflow: Workflow = { workflow_id: '', nodes: { id: 'root', type: 'trigger', label: 'Start' } };\n\n /**\n * Whether the flow designer is in read-only mode\n */\n @property({ type: Boolean, reflect: true, attribute: 'readonly' })\n readonly: boolean = false;\n\n /**\n * Whether the flow designer is disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled: boolean = false;\n\n /**\n * Show validation errors/warnings\n */\n @property({ type: Boolean, attribute: 'show-validation' })\n showValidation: boolean = false;\n\n @state()\n private _editor: EditorState = {\n selectedNodeId: null,\n isEditing: false,\n editingNode: null,\n hoveredNodeId: null,\n isDragging: false,\n draggedNodeId: null,\n zoom: 1,\n panX: 0,\n panY: 0,\n };\n\n @state()\n private _positionedNodes: PositionedNode[] = [];\n\n @state()\n private _history: HistoryEntry[] = [];\n\n @state()\n private _historyIndex: number = -1;\n\n @query('.flow-designer')\n private scrollElm?: HTMLElement;\n\n private _isDragScrolling: boolean = false;\n private _dragStartX: number = 0;\n private _dragStartY: number = 0;\n private _scrollStartX: number = 0;\n private _scrollStartY: number = 0;\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener('mouseup', this._handleMouseUp);\n window.addEventListener('keydown', this._handleKeyDown);\n this._recalculateLayout();\n }\n\n disconnectedCallback() {\n window.removeEventListener('mouseup', this._handleMouseUp);\n window.removeEventListener('keydown', this._handleKeyDown);\n super.disconnectedCallback();\n }\n\n protected willUpdate() {\n this._recalculateLayout();\n }\n\n /**\n * Recalculate layout when workflow changes\n */\n private _recalculateLayout() {\n if (!this.workflow?.nodes) return;\n this._positionedNodes = SwimlaneLayout.calculateLayout(this.workflow.nodes);\n }\n\n /**\n * Add a new node\n */\n addNode(\n newNode: WorkflowNode,\n parentNodeId: string,\n connectionType: 'child' | 'branch' | 'task' = 'child',\n branchKey?: string\n ): void {\n const command = new AddNodeCommand(\n newNode,\n parentNodeId,\n connectionType,\n branchKey\n );\n this._executeCommand(command);\n }\n\n /**\n * Delete a node by ID\n */\n deleteNode(nodeId: string): void {\n const command = new DeleteNodeCommand(nodeId, this.workflow);\n this._executeCommand(command);\n }\n\n /**\n * Edit a node\n */\n editNode(nodeId: string, updates: Partial<WorkflowNode>): void {\n const command = new EditNodeCommand(nodeId, updates, this.workflow);\n this._executeCommand(command);\n }\n\n /**\n * Move a node to a different parent/position\n */\n moveNode(\n nodeId: string,\n newParentId: string,\n newIndex: number,\n connectionType: 'child' | 'branch' | 'task' = 'child',\n branchKey?: string\n ): void {\n const command = new MoveNodeCommand(\n nodeId,\n newParentId,\n newIndex,\n connectionType,\n branchKey,\n this.workflow\n );\n this._executeCommand(command);\n }\n\n /**\n * Execute a command and add to history\n */\n private _executeCommand(command: WorkflowCommand): void {\n const newWorkflow = command.execute(this.workflow);\n\n // Validate workflow after change\n const errors = WorkflowValidator.validate(newWorkflow);\n const hasErrors = errors.some((e) => e.severity === 'error');\n\n if (hasErrors && !confirm('Workflow has errors. Continue anyway?')) {\n return;\n }\n\n // Add to history\n this._history = this._history.slice(0, this._historyIndex + 1);\n this._history.push({\n command,\n workflow: newWorkflow,\n timestamp: Date.now(),\n });\n this._historyIndex++;\n\n // Update workflow\n this.workflow = newWorkflow;\n\n // Emit change event\n this._emitWorkflowChange('node-edited', undefined);\n }\n\n /**\n * Undo last operation\n */\n undo(): void {\n if (this._historyIndex <= 0) return;\n\n this._historyIndex--;\n const entry = this._history[this._historyIndex];\n this.workflow = cloneWorkflow(entry.workflow);\n this._emitWorkflowChange('undo', undefined);\n }\n\n /**\n * Redo last undone operation\n */\n redo(): void {\n if (this._historyIndex >= this._history.length - 1) return;\n\n this._historyIndex++;\n const entry = this._history[this._historyIndex];\n this.workflow = cloneWorkflow(entry.workflow);\n this._emitWorkflowChange('redo', undefined);\n }\n\n /**\n * Check if undo is available\n */\n canUndo(): boolean {\n return this._historyIndex > 0;\n }\n\n /**\n * Check if redo is available\n */\n canRedo(): boolean {\n return this._historyIndex < this._history.length - 1;\n }\n\n /**\n * Export current workflow as JSON\n */\n exportWorkflow(): string {\n return JSON.stringify(this.workflow, null, 2);\n }\n\n /**\n * Validate workflow\n */\n validate(): void {\n const errors = WorkflowValidator.validate(this.workflow);\n this.dispatchEvent(\n new CustomEvent('validation-result', {\n detail: { errors },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _emitWorkflowChange(\n type: WorkflowChangeEvent['type'],\n nodeId?: string\n ): void {\n this.dispatchEvent(\n new CustomEvent('workflow-changed', {\n detail: {\n type,\n nodeId,\n workflow: this.workflow,\n } as WorkflowChangeEvent,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleKeyDown = (event: KeyboardEvent) => {\n if (this.disabled || this.readonly) return;\n\n if (event.ctrlKey || event.metaKey) {\n if (event.key === 'z') {\n event.preventDefault();\n this.undo();\n } else if (event.key === 'y') {\n event.preventDefault();\n this.redo();\n }\n }\n\n if (event.key === 'Delete' && this._editor.selectedNodeId) {\n event.preventDefault();\n this.deleteNode(this._editor.selectedNodeId);\n }\n };\n\n private _handleMouseUp = () => {\n this._isDragScrolling = false;\n };\n\n private _handleCanvasMouseDown = (e: MouseEvent) => {\n if (this.disabled) return;\n\n if (e.target === this.scrollElm || (e.target as HTMLElement).classList.contains('canvas-container')) {\n this._isDragScrolling = true;\n this._dragStartX = e.clientX;\n this._dragStartY = e.clientY;\n if (this.scrollElm) {\n this._scrollStartX = this.scrollElm.scrollLeft;\n this._scrollStartY = this.scrollElm.scrollTop;\n }\n }\n };\n\n private _handleCanvasMouseMove = (e: MouseEvent) => {\n if (!this._isDragScrolling || !this.scrollElm) return;\n\n const deltaX = e.clientX - this._dragStartX;\n const deltaY = e.clientY - this._dragStartY;\n\n this.scrollElm.scrollLeft = this._scrollStartX - deltaX;\n this.scrollElm.scrollTop = this._scrollStartY - deltaY;\n };\n\n private _handleNodeClick = (e: CustomEvent) => {\n const nodeId = e.detail.nodeId;\n this._editor.selectedNodeId = nodeId;\n this.requestUpdate();\n };\n\n private _handleNodeDelete = (e: CustomEvent) => {\n const nodeId = e.detail.nodeId;\n this.deleteNode(nodeId);\n };\n\n private _handleNodeEdit = (e: CustomEvent) => {\n const nodeId = e.detail.nodeId;\n this._editor.selectedNodeId = nodeId;\n this._editor.isEditing = true;\n this.requestUpdate();\n };\n\n private _handleZoomIn = () => {\n this._editor.zoom = Math.min(2, this._editor.zoom + 0.1);\n this.requestUpdate();\n };\n\n private _handleZoomOut = () => {\n this._editor.zoom = Math.max(0.5, this._editor.zoom - 0.1);\n this.requestUpdate();\n };\n\n protected render() {\n if (!this.workflow?.nodes) {\n return html`<div class=\"flow-designer-container\">\n <p class=\"empty-state\">No workflow loaded</p>\n </div>`;\n }\n\n const validationErrors = this.showValidation\n ? WorkflowValidator.validate(this.workflow)\n : [];\n const canvasBounds = SwimlaneLayout.getCanvasBounds(this._positionedNodes);\n\n return html`\n <div class=\"flow-designer-container\">\n <wc-toolbar\n class=\"editor-toolbar\"\n variant=\"floating\"\n orientation=\"horizontal\"\n elevated\n >\n <wc-icon-button\n variant=\"text\"\n ?disabled=${this._editor.zoom <= 0.5}\n @click=${this._handleZoomOut}\n title=\"Zoom Out (Ctrl+-)\"\n >\n <wc-icon name=\"remove\"></wc-icon>\n </wc-icon-button>\n <span class=\"zoom-display\">${Math.round(this._editor.zoom * 100)}%</span>\n <wc-icon-button\n variant=\"text\"\n ?disabled=${this._editor.zoom >= 2}\n @click=${this._handleZoomIn}\n title=\"Zoom In (Ctrl++)\"\n >\n <wc-icon name=\"add\"></wc-icon>\n </wc-icon-button>\n <wc-icon-button\n variant=\"text\"\n ?disabled=${!this.canUndo()}\n @click=${() => this.undo()}\n title=\"Undo (Ctrl+Z)\"\n >\n <wc-icon name=\"undo\"></wc-icon>\n </wc-icon-button>\n <wc-icon-button\n variant=\"text\"\n ?disabled=${!this.canRedo()}\n @click=${() => this.redo()}\n title=\"Redo (Ctrl+Y)\"\n >\n <wc-icon name=\"redo\"></wc-icon>\n </wc-icon-button>\n ${!this.readonly\n ? html`\n <wc-icon-button\n variant=\"text\"\n @click=${() => this.validate()}\n title=\"Validate Workflow\"\n >\n <wc-icon name=\"check_circle\"></wc-icon>\n </wc-icon-button>\n `\n : nothing}\n </wc-toolbar>\n\n <!-- Validation messages -->\n ${validationErrors.length > 0\n ? html`\n <div class=\"validation-panel\">\n ${validationErrors.map(\n (error) =>\n html`\n <div class=\"validation-item ${error.severity}\">\n <wc-icon\n name=${error.severity === 'error' ? 'error' : 'warning'}\n ></wc-icon>\n <span>${error.message}</span>\n </div>\n `\n )}\n </div>\n `\n : nothing}\n\n <!-- Flow canvas -->\n <div\n class=\"flow-designer\"\n @mousedown=${this._handleCanvasMouseDown}\n @mousemove=${this._handleCanvasMouseMove}\n >\n <div\n class=\"canvas-container\"\n style=\"\n transform: scale(${this._editor.zoom});\n width: ${canvasBounds.width}px;\n height: ${canvasBounds.height}px;\n \"\n >\n <!-- SVG Connectors -->\n <svg\n class=\"connectors-layer\"\n width=\"${canvasBounds.width}\"\n height=\"${canvasBounds.height}\"\n viewBox=\"0 0 ${canvasBounds.width} ${canvasBounds.height}\"\n >\n <defs>\n <marker\n id=\"arrowhead\"\n markerWidth=\"10\"\n markerHeight=\"10\"\n refX=\"9\"\n refY=\"3\"\n orient=\"auto\"\n >\n <polygon points=\"0 0, 10 3, 0 6\" fill=\"currentColor\"></polygon>\n </marker>\n </defs>\n ${this._renderConnectors()}\n </svg>\n\n <!-- Swimlane backgrounds -->\n <div class=\"swimlanes-container\">\n ${this._renderSwimlanes()}\n </div>\n\n <!-- Positioned nodes -->\n <div class=\"nodes-layer\">\n ${this._renderNodes()}\n </div>\n </div>\n </div>\n </div>\n `;\n }\n\n private _renderConnectors() {\n return this._positionedNodes.flatMap((node) => {\n if (!node.connectorPoints) return [];\n\n return node.connectorPoints.map((connector, idx) => {\n const { from, to, type } = connector;\n const isLoopback = type === 'curved';\n\n if (isLoopback) {\n // Render curved path for loop back\n const midY = (from.y + to.y) / 2;\n const d =\n `M ${from.x} ${from.y} ` +\n `L ${from.x + 30} ${from.y} ` +\n `Q ${from.x + 60} ${midY} ${to.x - 30} ${to.y} ` +\n `L ${to.x} ${to.y}`;\n\n return html`\n <path\n key=${`${node.node.id}-connector-${idx}`}\n d=${d}\n class=\"connector ${type}\"\n marker-end=\"url(#arrowhead)\"\n vector-effect=\"non-scaling-stroke\"\n ></path>\n `;\n }\n\n // Render straight connector\n const d = `M ${from.x} ${from.y} L ${to.x} ${to.y}`;\n return html`\n <path\n key=${`${node.node.id}-connector-${idx}`}\n d=${d}\n class=\"connector ${type}\"\n marker-end=\"url(#arrowhead)\"\n vector-effect=\"non-scaling-stroke\"\n ></path>\n `;\n });\n });\n }\n\n private _renderSwimlanes() {\n const swimlanes = SwimlaneLayout.getSwimlanes(this._positionedNodes);\n\n return swimlanes.map(\n (lane) => {\n const laneTop = Math.min(...lane.nodes.map((n) => n.y)) - 14;\n const laneBottom = Math.max(...lane.nodes.map((n) => n.y + n.height)) + 14;\n const laneHeight = Math.max(120, laneBottom - laneTop);\n\n return html`\n <div\n class=\"swimlane ${lane.isParallel ? 'parallel' : ''}\"\n style=\"top: ${laneTop}px; height: ${laneHeight}px;\"\n >\n <div class=\"swimlane-header\">${lane.name}</div>\n </div>\n `;\n }\n );\n }\n\n private _renderNodes() {\n return this._positionedNodes.map(\n (posNode) =>\n html`\n <div\n class=\"positioned-node\"\n style=\"\n left: ${posNode.x}px;\n top: ${posNode.y}px;\n width: ${posNode.width}px;\n height: ${posNode.height}px;\n \"\n >\n <wc-flow-designer-node\n .node=${posNode.node}\n ?selected=${posNode.node.id === this._editor.selectedNodeId}\n ?editing=${this._editor.isEditing &&\n posNode.node.id === this._editor.selectedNodeId}\n ?disabled=${this.disabled}\n @node-click=${this._handleNodeClick}\n @node-delete=${this._handleNodeDelete}\n @node-edit-start=${this._handleNodeEdit}\n ></wc-flow-designer-node>\n </div>\n `\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'wc-flow-designer': FlowDesigner;\n }\n}\n"],"names":["e","s","LitElement","html","unsafeSVG","styles","property","state","nothing","query"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"flow-designer-DvTUrDp5.js","sources":["../node_modules/lit-html/directives/unsafe-svg.js","../../src/__utils/sanitize-svg.ts","../../src/__utils/cache-fetch.ts","../../src/icon/datasource.ts","../../src/icon/icon.ts","../../src/flow-designer/workflow-utils.ts","../../src/flow-designer/commands.ts","../../src/flow-designer/layout.ts","../../src/flow-designer/validation.ts","../../src/flow-designer/flow-designer.ts"],"sourcesContent":["import{directive as s}from\"../directive.js\";import{UnsafeHTMLDirective as e}from\"./unsafe-html.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class t extends e{}t.directiveName=\"unsafeSVG\",t.resultType=2;const o=s(t);export{o as unsafeSVG};\n//# sourceMappingURL=unsafe-svg.js.map\n","// Basic sanitization: remove <script>, <foreignObject>, event handler attributes (on*), and iframes\nexport function sanitizeSvg(rawSvg: string) {\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(rawSvg, 'image/svg+xml');\n\n const scripts = Array.from(doc.querySelectorAll('script'));\n scripts.forEach(n => n.remove());\n\n const foreigns = Array.from(doc.querySelectorAll('foreignObject, iframe'));\n foreigns.forEach(n => n.remove());\n\n const all = Array.from(doc.querySelectorAll('*'));\n all.forEach(el => {\n const attrs = Array.from(el.attributes).filter(a => /^on/i.test(a.name));\n attrs.forEach(a => el.removeAttribute(a.name));\n });\n\n const el = doc.documentElement;\n if (!el) return '';\n\n const serializer = new XMLSerializer();\n return serializer.serializeToString(el);\n } catch (e) {\n return '';\n }\n}","export async function createCacheFetch(name: string) {\n let cache: Cache | null = null;\n // This map tracks requests currently being processed\n const inFlightRequests = new Map<string, Promise<string>>();\n\n try {\n cache = await window.caches.open(name);\n } catch (e) {\n console.warn('window.caches access not allowed');\n }\n\n return async (url: string): Promise<string> => {\n if (inFlightRequests.has(url)) {\n return inFlightRequests.get(url)!;\n }\n\n const fetchPromise = (async () => {\n const request = new Request(url);\n\n if (cache) {\n const cachedResponse = await cache.match(request);\n if (cachedResponse) {\n return cachedResponse.text();\n }\n }\n\n const urlObj = new URL(request.url);\n const isSameOrigin = urlObj.origin === window.location.origin;\n\n const response = await fetch(request.url, {\n method: 'GET',\n mode: isSameOrigin ? 'no-cors' : 'cors',\n credentials: isSameOrigin ? 'same-origin' : 'omit',\n });\n\n if (response.status === 404) {\n console.error(`[Fetch Error] Resource not found (404): ${url}`);\n return '';\n }\n\n const result = await response.text();\n\n if (cache && response.status === 200) {\n await cache.put(\n request,\n new Response(result, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n }),\n );\n }\n\n return result;\n })();\n\n inFlightRequests.set(url, fetchPromise);\n\n try {\n return await fetchPromise;\n } finally {\n inFlightRequests.delete(url);\n }\n };\n}","import { createCacheFetch } from '@/__utils/cache-fetch.js';\n\nconst PROVIDERS: Record<string, (name: string) => string> = {\n 'material-symbols': (name: string) =>\n `https://cdn.jsdelivr.net/npm/@material-symbols/svg-500@0.40.1/outlined/${name}.svg`,\n carbon: (name: string) =>\n `https://cdn.jsdelivr.net/npm/@carbon/icons@11.41.0/svg/32/${name}.svg`,\n};\n\nconst cacheFetch = await createCacheFetch('svg-cache');\n\nexport async function fetchSVG(url: string) {\n if (!url) return '';\n return cacheFetch(url);\n}\n\nexport async function fetchIcon(\n name: string,\n provider: string = 'material-symbols',\n) {\n if (!name) return '';\n\n if (!PROVIDERS[provider]) {\n throw new Error(`Provider '${provider}' not found`);\n }\n\n return fetchSVG(PROVIDERS[provider](name));\n}\n","import { html, LitElement } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\n\nimport { sanitizeSvg } from '@/__utils/sanitize-svg.js';\n\nimport { fetchIcon, fetchSVG } from './datasource.js';\nimport styles from './icon.scss';\n\nexport type IconProvider = 'material-symbols' | 'material-icons';\n/**\n * @label Icon\n * @tag wc-icon\n * @rawTag icon\n * @summary Icons are visual symbols used to represent ideas, objects, or actions.\n * @overview Icons are visual symbols used to represent ideas, objects, or actions. They communicate messages at a glance, afford interactivity, and draw attention to important information.\n *\n * @cssprop --icon-color - Controls the color of the icon.\n * @cssprop [--icon-size=1rem] - Controls the size of the icon. Defaults to \"1rem\"\n *\n * @example\n * ```html\n * <wc-icon name=\"home\" style=\"--icon-size: 2rem;\"></wc-icon>\n * ```\n *\n */\nexport class Icon extends LitElement {\n static styles = [styles];\n\n /**\n * The identifier for the icon.\n * This name corresponds to a specific SVG asset in the icon set.\n */\n @property({ type: String, reflect: true }) name?: string;\n\n @property({ type: String, reflect: true }) src?: string;\n\n @property({ type: String }) provider: IconProvider = 'material-symbols';\n\n @state()\n private svgContent: string = '';\n\n // loading + error states for consumers/tests\n @state() // @ts-ignore\n private loading: boolean = false;\n\n @state()\n private error: Error | null = null;\n\n // token to avoid race conditions when multiple fetches overlap\n private _fetchId = 0;\n\n // optional debounce for rapid property changes\n private _debounceTimer: number | undefined;\n\n firstUpdated() {\n // perform initial fetch once component is connected and rendered\n this.__scheduleUpdate();\n }\n\n updated(changedProperties: any) {\n // only refetch when name or src changed\n if (changedProperties.has('name') || changedProperties.has('src')) {\n this.__scheduleUpdate();\n }\n }\n\n render() {\n // accessible wrapper; consumers can provide a fallback via <slot name=\"fallback\">.\n return html` <div class=\"icon\">\n ${this.svgContent\n ? unsafeSVG(this.svgContent)\n : html`<slot name=\"fallback\"></slot>`}\n </div>`;\n }\n\n // small debounce to coalesce rapid changes (50ms)\n private __scheduleUpdate() {\n if (this._debounceTimer) {\n clearTimeout(this._debounceTimer as any);\n }\n // @ts-ignore - setTimeout in DOM returns number\n this._debounceTimer = window.setTimeout(() => this.__updateSvg(), 50);\n }\n\n /**\n * @internal\n */\n private async __updateSvg() {\n this._fetchId += 1;\n const currentId = this._fetchId;\n this.loading = true;\n this.error = null;\n\n try {\n let raw: string | undefined;\n\n if (this.name) {\n raw = await fetchIcon(this.name, this.provider);\n } else if (this.src) {\n raw = await fetchSVG(this.src);\n } else {\n raw = '';\n }\n\n // If another fetch started after this one, ignore this result\n if (currentId !== this._fetchId) return;\n\n if (raw) {\n this.svgContent = sanitizeSvg(raw);\n } else {\n this.svgContent = '';\n }\n } catch (err: any) {\n // capture and surface error, but avoid throwing\n this.error = err instanceof Error ? err : new Error(String(err));\n this.svgContent = '';\n // bubble an event so consumers can react\n this.dispatchEvent(\n new CustomEvent('icon-error', {\n detail: { name: this.name, src: this.src, error: this.error },\n bubbles: true,\n composed: true,\n }),\n );\n } finally {\n // ensure loading is cleared unless another fetch started\n if (currentId === this._fetchId) {\n this.loading = false;\n }\n }\n }\n}\n","import type { Workflow, WorkflowNode } from './types.js';\n\n/**\n * Workflow utility functions for tree traversal and manipulation\n */\n\n/**\n * Deep clone a workflow to ensure immutability\n */\nexport function cloneWorkflow(workflow: Workflow): Workflow {\n return JSON.parse(JSON.stringify(workflow));\n}\n\n/**\n * Deep clone a workflow node\n */\nexport function cloneNode(node: WorkflowNode): WorkflowNode {\n return JSON.parse(JSON.stringify(node));\n}\n\n/**\n * Find a node by ID anywhere in the workflow tree\n */\nexport function findNodeById(\n node: WorkflowNode,\n id: string\n): WorkflowNode | null {\n if (node.id === id) return node;\n\n // Search children\n if (node.children) {\n for (const child of node.children) {\n const found = findNodeById(child, id);\n if (found) return found;\n }\n }\n\n // Search tasks\n if (node.tasks) {\n for (const task of node.tasks) {\n const found = findNodeById(task, id);\n if (found) return found;\n }\n }\n\n // Search branches\n if (node.branches) {\n for (const branchNodes of Object.values(node.branches)) {\n for (const branchNode of branchNodes) {\n const found = findNodeById(branchNode, id);\n if (found) return found;\n }\n }\n }\n\n // Search join\n if (node.join) {\n const found = findNodeById(node.join, id);\n if (found) return found;\n }\n\n return null;\n}\n\n/**\n * Remove a node by ID from the workflow tree\n */\nexport function removeNodeById(\n node: WorkflowNode,\n id: string\n): WorkflowNode {\n const result = cloneNode(node);\n\n // Remove from children\n if (result.children) {\n result.children = result.children.filter((child) => {\n if (child.id === id) return false;\n removeNodeById(child, id);\n return true;\n });\n }\n\n // Remove from tasks\n if (result.tasks) {\n result.tasks = result.tasks.filter((task) => {\n if (task.id === id) return false;\n removeNodeById(task, id);\n return true;\n });\n }\n\n // Remove from branches\n if (result.branches) {\n for (const [branchKey, branchNodes] of Object.entries(result.branches)) {\n result.branches[branchKey] = branchNodes.filter((branchNode) => {\n if (branchNode.id === id) return false;\n removeNodeById(branchNode, id);\n return true;\n });\n }\n }\n\n // Recursively clean empty nodes\n for (const branchNode of result.children || []) {\n removeNodeById(branchNode, id);\n }\n for (const taskNode of result.tasks || []) {\n removeNodeById(taskNode, id);\n }\n for (const branchNodes of Object.values(result.branches || {})) {\n for (const branchNode of branchNodes) {\n removeNodeById(branchNode, id);\n }\n }\n\n return result;\n}\n\n/**\n * Insert a node into the workflow tree at a specific location\n */\nexport function insertNodeIntoWorkflow(\n parent: WorkflowNode,\n nodeToInsert: WorkflowNode,\n connectionType: 'child' | 'branch' | 'task' = 'child',\n branchKey?: string\n): void {\n switch (connectionType) {\n case 'child':\n if (!parent.children) parent.children = [];\n parent.children.push(cloneNode(nodeToInsert));\n break;\n\n case 'task':\n if (!parent.tasks) parent.tasks = [];\n parent.tasks.push(cloneNode(nodeToInsert));\n break;\n\n case 'branch':\n if (!parent.branches) parent.branches = {};\n if (!branchKey) branchKey = 'default';\n if (!parent.branches[branchKey]) parent.branches[branchKey] = [];\n parent.branches[branchKey].push(cloneNode(nodeToInsert));\n break;\n }\n}\n\n/**\n * Collect all nodes in the workflow (depth-first)\n */\nexport function getAllNodes(node: WorkflowNode): WorkflowNode[] {\n const result: WorkflowNode[] = [node];\n\n if (node.children) {\n for (const child of node.children) {\n result.push(...getAllNodes(child));\n }\n }\n\n if (node.tasks) {\n for (const task of node.tasks) {\n result.push(...getAllNodes(task));\n }\n }\n\n if (node.branches) {\n for (const branchNodes of Object.values(node.branches)) {\n for (const branchNode of branchNodes) {\n result.push(...getAllNodes(branchNode));\n }\n }\n }\n\n if (node.join) {\n result.push(...getAllNodes(node.join));\n }\n\n return result;\n}\n\n/**\n * Get all parent node IDs for a given node (path from root to node)\n */\nexport function getNodePath(\n rootNode: WorkflowNode,\n targetId: string\n): string[] {\n const path: string[] = [];\n\n function traverse(node: WorkflowNode): boolean {\n path.push(node.id);\n\n if (node.id === targetId) return true;\n\n // Search children\n if (node.children) {\n for (const child of node.children) {\n if (traverse(child)) return true;\n }\n }\n\n // Search tasks\n if (node.tasks) {\n for (const task of node.tasks) {\n if (traverse(task)) return true;\n }\n }\n\n // Search branches\n if (node.branches) {\n for (const branchNodes of Object.values(node.branches)) {\n for (const branchNode of branchNodes) {\n if (traverse(branchNode)) return true;\n }\n }\n }\n\n // Search join\n if (node.join) {\n if (traverse(node.join)) return true;\n }\n\n path.pop();\n return false;\n }\n\n traverse(rootNode);\n return path;\n}\n\n/**\n * Check if a node is a descendant of another node\n */\nexport function isDescendant(\n rootNode: WorkflowNode,\n potentialParentId: string,\n nodeId: string\n): boolean {\n const path = getNodePath(rootNode, nodeId);\n return path.includes(potentialParentId);\n}\n\n/**\n * Replace a node in the tree\n */\nexport function replaceNode(\n node: WorkflowNode,\n targetId: string,\n replacement: WorkflowNode\n): WorkflowNode {\n if (node.id === targetId) {\n return cloneNode(replacement);\n }\n\n const result = cloneNode(node);\n\n if (result.children) {\n result.children = result.children.map((child) =>\n replaceNode(child, targetId, replacement)\n );\n }\n\n if (result.tasks) {\n result.tasks = result.tasks.map((task) =>\n replaceNode(task, targetId, replacement)\n );\n }\n\n if (result.branches) {\n for (const [branchKey, branchNodes] of Object.entries(result.branches)) {\n result.branches[branchKey] = branchNodes.map((branchNode) =>\n replaceNode(branchNode, targetId, replacement)\n );\n }\n }\n\n if (result.join) {\n result.join = replaceNode(result.join, targetId, replacement);\n }\n\n return result;\n}\n","import type { Workflow, WorkflowNode, WorkflowCommand } from './types.js';\nimport {\n findNodeById,\n cloneWorkflow,\n removeNodeById,\n insertNodeIntoWorkflow,\n} from './workflow-utils.js';\n\n/**\n * Add Node Command\n */\nexport class AddNodeCommand implements WorkflowCommand {\n description = 'Add node';\n\n constructor(\n private nodeToAdd: WorkflowNode,\n private parentNodeId: string,\n private connectionType: 'child' | 'branch' | 'task' = 'child',\n private branchKey?: string\n ) {}\n\n execute(workflow: Workflow): Workflow {\n const result = cloneWorkflow(workflow);\n const parent = findNodeById(result.nodes, this.parentNodeId);\n if (!parent) return workflow; // Validation in parent component\n\n insertNodeIntoWorkflow(parent, this.nodeToAdd, this.connectionType, this.branchKey);\n return result;\n }\n\n undo(workflow: Workflow): Workflow {\n const result = cloneWorkflow(workflow);\n removeNodeById(result.nodes, this.nodeToAdd.id);\n return result;\n }\n}\n\n/**\n * Delete Node Command\n */\nexport class DeleteNodeCommand implements WorkflowCommand {\n description = 'Delete node';\n private deletedNode: WorkflowNode | null = null;\n private parentReference: {\n parentId: string;\n connectionType: 'child' | 'branch' | 'task';\n branchKey?: string;\n } | null = null;\n\n constructor(\n private nodeId: string,\n workflow?: Workflow\n ) {\n if (workflow) {\n this.captureNodeContext(workflow);\n }\n }\n\n private captureNodeContext(workflow: Workflow) {\n const node = findNodeById(workflow.nodes, this.nodeId);\n if (!node) return;\n this.deletedNode = cloneWorkflow({ workflow_id: '', nodes: node }).nodes;\n\n // Find parent reference\n this.findParentReference(workflow.nodes);\n }\n\n private findParentReference(node: WorkflowNode) {\n if (node.children) {\n const idx = node.children.findIndex((n) => n.id === this.nodeId);\n if (idx !== -1) {\n this.parentReference = {\n parentId: node.id,\n connectionType: 'child',\n };\n return;\n }\n for (const child of node.children) {\n this.findParentReference(child);\n }\n }\n\n if (node.tasks) {\n const idx = node.tasks.findIndex((n) => n.id === this.nodeId);\n if (idx !== -1) {\n this.parentReference = {\n parentId: node.id,\n connectionType: 'task',\n };\n return;\n }\n for (const task of node.tasks) {\n this.findParentReference(task);\n }\n }\n\n if (node.branches) {\n for (const [branchKey, branchNodes] of Object.entries(node.branches)) {\n const idx = branchNodes.findIndex((n) => n.id === this.nodeId);\n if (idx !== -1) {\n this.parentReference = {\n parentId: node.id,\n connectionType: 'branch',\n branchKey,\n };\n return;\n }\n for (const branchNode of branchNodes) {\n this.findParentReference(branchNode);\n }\n }\n }\n }\n\n execute(workflow: Workflow): Workflow {\n const result = cloneWorkflow(workflow);\n removeNodeById(result.nodes, this.nodeId);\n return result;\n }\n\n undo(workflow: Workflow): Workflow {\n if (!this.deletedNode || !this.parentReference) return workflow;\n const result = cloneWorkflow(workflow);\n const parent = findNodeById(result.nodes, this.parentReference.parentId);\n if (!parent) return workflow;\n\n insertNodeIntoWorkflow(\n parent,\n this.deletedNode,\n this.parentReference.connectionType,\n this.parentReference.branchKey\n );\n return result;\n }\n}\n\n/**\n * Edit Node Command\n */\nexport class EditNodeCommand implements WorkflowCommand {\n description = 'Edit node';\n private previousState: Record<string, any> = {};\n\n constructor(\n private nodeId: string,\n private updates: Partial<WorkflowNode>,\n workflow?: Workflow\n ) {\n if (workflow) {\n const node = findNodeById(workflow.nodes, nodeId);\n if (node) {\n // Store only edited fields\n Object.keys(updates).forEach((key) => {\n this.previousState[key] = (node as Record<string, any>)[key];\n });\n }\n }\n }\n\n execute(workflow: Workflow): Workflow {\n const result = cloneWorkflow(workflow);\n const node = findNodeById(result.nodes, this.nodeId);\n if (!node) return workflow;\n\n Object.assign(node, this.updates);\n return result;\n }\n\n undo(workflow: Workflow): Workflow {\n const result = cloneWorkflow(workflow);\n const node = findNodeById(result.nodes, this.nodeId);\n if (!node) return workflow;\n\n Object.assign(node, this.previousState);\n return result;\n }\n}\n\n/**\n * Move Node Command - reorder in array or change parent\n */\nexport class MoveNodeCommand implements WorkflowCommand {\n description = 'Move node';\n private previousState: {\n parentId: string;\n index: number;\n connectionType: 'child' | 'branch' | 'task';\n branchKey?: string;\n } | null = null;\n\n constructor(\n private nodeId: string,\n private newParentId: string,\n private newIndex: number,\n private newConnectionType: 'child' | 'branch' | 'task' = 'child',\n private newBranchKey?: string,\n workflow?: Workflow\n ) {\n if (workflow) {\n this.captureCurrentPosition(workflow);\n }\n }\n\n private captureCurrentPosition(workflow: Workflow) {\n // Store current parent/position for undo\n // Implementation depends on finding current parent location\n }\n\n execute(workflow: Workflow): Workflow {\n // Remove from old parent, insert at new parent\n let result = cloneWorkflow(workflow);\n result.nodes = removeNodeById(result.nodes, this.nodeId);\n const newParent = findNodeById(result.nodes, this.newParentId);\n if (!newParent) return workflow;\n\n const node = findNodeById(workflow.nodes, this.nodeId);\n if (!node) return workflow;\n\n insertNodeIntoWorkflow(\n newParent,\n node,\n this.newConnectionType,\n this.newBranchKey\n );\n return result;\n }\n\n undo(workflow: Workflow): Workflow {\n // Restore to previous position\n if (!this.previousState) return workflow;\n let result = cloneWorkflow(workflow);\n result.nodes = removeNodeById(result.nodes, this.nodeId);\n const prevParent = findNodeById(result.nodes, this.previousState.parentId);\n if (!prevParent) return workflow;\n\n const node = findNodeById(workflow.nodes, this.nodeId);\n if (!node) return workflow;\n\n insertNodeIntoWorkflow(\n prevParent,\n node,\n this.previousState.connectionType,\n this.previousState.branchKey\n );\n return result;\n }\n}\n\n/**\n * Batch Command - combine multiple commands into one undo/redo step\n */\nexport class BatchCommand implements WorkflowCommand {\n description: string;\n\n constructor(\n private commands: WorkflowCommand[],\n description: string = `Batch operation (${commands.length} steps)`\n ) {\n this.description = description;\n }\n\n execute(workflow: Workflow): Workflow {\n let result = workflow;\n for (const command of this.commands) {\n result = command.execute(result);\n }\n return result;\n }\n\n undo(workflow: Workflow): Workflow {\n let result = workflow;\n // Execute commands in reverse order to undo\n for (let i = this.commands.length - 1; i >= 0; i--) {\n result = this.commands[i].undo(result);\n }\n return result;\n }\n}\n","import type { WorkflowNode, PositionedNode, SwimlaneConfig } from './types.js';\nimport { getAllNodes } from './workflow-utils.js';\n\n/**\n * Swimlane layout algorithm for flow designer\n * Positions nodes in left-to-right swimlanes for parallel/branching flows\n */\n\ninterface LayoutNode {\n node: WorkflowNode;\n parent: WorkflowNode | null;\n lane: string;\n depth: number;\n branchPath?: string;\n width: number;\n height: number;\n}\n\nconst NODE_WIDTH = 200;\nconst NODE_HEIGHT = 100;\nconst HORIZONTAL_GAP = 60; // Gap between depth levels (columns)\nconst VERTICAL_GAP = 40; // Gap between lanes\nconst LANE_HEIGHT = 140; // Height of each swimlane row\nconst LANE_HEADER_HEIGHT = 84; // Top offset so first row is not clipped by floating UI\n\nexport class SwimlaneLayout {\n /**\n * Calculate layout positions for all nodes in a workflow\n */\n static calculateLayout(rootNode: WorkflowNode): PositionedNode[] {\n const layoutNodes: LayoutNode[] = [];\n const lanes = new Map<string, LayoutNode[]>(); // lane -> nodes in that lane\n const depthMap = new Map<string, number>(); // Track max depth per lane\n\n // First pass: assign lanes and depths\n this._traverseAndAssignLanes(rootNode, null, 'main', 0, layoutNodes, lanes);\n\n // Second pass: calculate positions\n const positionedNodes: PositionedNode[] = [];\n const nodePositions = new Map<string, { x: number; y: number }>();\n\n for (const layoutNode of layoutNodes) {\n const x =\n layoutNode.depth * (NODE_WIDTH + HORIZONTAL_GAP) + HORIZONTAL_GAP;\n const laneIndex = Array.from(lanes.keys()).indexOf(layoutNode.lane);\n const y = laneIndex * (LANE_HEIGHT + VERTICAL_GAP) + LANE_HEADER_HEIGHT;\n\n nodePositions.set(layoutNode.node.id, { x, y });\n\n const positioned: PositionedNode = {\n node: layoutNode.node,\n x,\n y,\n width: NODE_WIDTH,\n height: NODE_HEIGHT,\n lane: layoutNode.lane,\n depth: layoutNode.depth,\n branchPath: layoutNode.branchPath,\n parentId: layoutNode.parent?.id,\n connectorPoints: [],\n };\n\n positionedNodes.push(positioned);\n }\n\n // Third pass: calculate connector points\n this._calculateConnectors(positionedNodes, nodePositions);\n\n return positionedNodes;\n }\n\n /**\n * Traverse workflow tree and assign lane/depth to each node\n */\n private static _traverseAndAssignLanes(\n node: WorkflowNode,\n parent: WorkflowNode | null,\n baseLane: string,\n depth: number,\n layoutNodes: LayoutNode[],\n lanes: Map<string, LayoutNode[]>\n ): void {\n const layoutNode: LayoutNode = {\n node,\n parent,\n lane: baseLane,\n depth,\n width: NODE_WIDTH,\n height: NODE_HEIGHT,\n };\n\n // Add to layout nodes\n layoutNodes.push(layoutNode);\n\n // Register in lanes map\n if (!lanes.has(baseLane)) {\n lanes.set(baseLane, []);\n }\n lanes.get(baseLane)!.push(layoutNode);\n\n // Process children\n if (node.children && node.children.length > 0) {\n for (const child of node.children) {\n this._traverseAndAssignLanes(\n child,\n node,\n baseLane,\n depth + 1,\n layoutNodes,\n lanes\n );\n }\n }\n\n // Process decision branches into separate swimlanes\n if (node.branches) {\n let branchIndex = 0;\n for (const [branchKey, branchNodes] of Object.entries(node.branches)) {\n const branchLane = `${baseLane}_${branchKey}_${branchIndex}`;\n\n for (const branchNode of branchNodes) {\n this._traverseAndAssignLanes(\n branchNode,\n node,\n branchLane,\n depth + 1,\n layoutNodes,\n lanes\n );\n }\n branchIndex++;\n }\n }\n\n // Process fork into parallel lanes\n if (node.type === 'fork' && node.tasks) {\n let taskIndex = 0;\n for (const task of node.tasks) {\n const parallelLane = `${baseLane}_parallel_${taskIndex}`;\n this._traverseAndAssignLanes(\n task,\n node,\n parallelLane,\n depth + 1,\n layoutNodes,\n lanes\n );\n taskIndex++;\n }\n }\n\n // Process fork join node\n if (node.type === 'fork' && node.join) {\n // Join node goes back to main lane at next depth\n this._traverseAndAssignLanes(\n node.join,\n node,\n baseLane,\n depth + 2,\n layoutNodes,\n lanes\n );\n }\n\n // Process task nodes (used in forks)\n if (node.tasks && node.type !== 'fork') {\n for (const task of node.tasks) {\n this._traverseAndAssignLanes(\n task,\n node,\n baseLane,\n depth + 1,\n layoutNodes,\n lanes\n );\n }\n }\n }\n\n /**\n * Calculate SVG connector points between nodes\n */\n private static _calculateConnectors(\n positionedNodes: PositionedNode[],\n nodePositions: Map<string, { x: number; y: number }>\n ): void {\n const nodeMap = new Map<string, PositionedNode>(\n positionedNodes.map((n) => [n.node.id, n])\n );\n\n for (const positioned of positionedNodes) {\n const connectors: PositionedNode['connectorPoints'] = [];\n const nodeMiddleRight = {\n x: positioned.x + positioned.width,\n y: positioned.y + positioned.height / 2,\n };\n\n // Connect to children (sequential)\n if (positioned.node.children && positioned.node.children.length > 0) {\n for (const child of positioned.node.children) {\n const childPos = nodeMap.get(child.id);\n if (childPos) {\n connectors.push({\n from: nodeMiddleRight,\n to: {\n x: childPos.x,\n y: childPos.y + childPos.height / 2,\n },\n type: 'straight',\n });\n }\n }\n }\n\n // Connect to branches (decision)\n if (positioned.node.branches) {\n for (const branchNodes of Object.values(positioned.node.branches)) {\n\n for (const branchNode of branchNodes) {\n const childPos = nodeMap.get(branchNode.id);\n if (childPos) {\n // Curved path to branch\n connectors.push({\n from: nodeMiddleRight,\n to: {\n x: childPos.x,\n y: childPos.y + childPos.height / 2,\n },\n type: 'branch',\n });\n }\n }\n }\n }\n\n // Connect fork to parallel tasks\n if (positioned.node.type === 'fork' && positioned.node.tasks) {\n for (const task of positioned.node.tasks) {\n const taskPos = nodeMap.get(task.id);\n if (taskPos) {\n connectors.push({\n from: nodeMiddleRight,\n to: {\n x: taskPos.x,\n y: taskPos.y + taskPos.height / 2,\n },\n type: 'fork',\n });\n }\n }\n }\n\n // Connect to join\n if (positioned.node.type === 'fork' && positioned.node.join) {\n const joinPos = nodeMap.get(positioned.node.join.id);\n if (joinPos) {\n connectors.push({\n from: nodeMiddleRight,\n to: {\n x: joinPos.x,\n y: joinPos.y + joinPos.height / 2,\n },\n type: 'join',\n });\n }\n }\n\n // Connect loop back\n if (positioned.node.type === 'loop_end' && positioned.node.target_id) {\n const targetPos = nodeMap.get(positioned.node.target_id);\n if (targetPos) {\n connectors.push({\n from: {\n x: positioned.x + positioned.width,\n y: positioned.y + positioned.height / 2,\n },\n to: {\n x: targetPos.x,\n y: targetPos.y + targetPos.height / 2,\n },\n type: 'curved',\n });\n }\n }\n\n positioned.connectorPoints = connectors;\n }\n }\n\n /**\n * Get swimlane configurations for rendering\n */\n static getSwimlanes(positionedNodes: PositionedNode[]): SwimlaneConfig[] {\n const swimlanesMap = new Map<string, PositionedNode[]>();\n\n for (const node of positionedNodes) {\n if (!swimlanesMap.has(node.lane)) {\n swimlanesMap.set(node.lane, []);\n }\n swimlanesMap.get(node.lane)!.push(node);\n }\n\n const swimlanes: SwimlaneConfig[] = [];\n for (const [laneId, nodes] of swimlanesMap.entries()) {\n const isParallel = laneId.includes('parallel');\n const name = this._getSwimlaneName(laneId);\n\n swimlanes.push({\n id: laneId,\n name,\n nodes,\n isParallel,\n });\n }\n\n return swimlanes;\n }\n\n /**\n * Generate human-readable swimlane name\n */\n private static _getSwimlaneName(laneId: string): string {\n if (laneId === 'main') return 'Main Flow';\n if (laneId.includes('yes')) return 'Yes Path';\n if (laneId.includes('no')) return 'No Path';\n if (laneId.includes('parallel')) {\n const match = laneId.match(/parallel_(\\d+)/);\n if (match) return `Parallel Task ${parseInt(match[1]) + 1}`;\n }\n return laneId;\n }\n\n /**\n * Calculate canvas bounds for sizing\n */\n static getCanvasBounds(positionedNodes: PositionedNode[]): {\n width: number;\n height: number;\n } {\n if (positionedNodes.length === 0) {\n return { width: 600, height: 400 };\n }\n\n let maxX = 0;\n let maxY = 0;\n\n for (const node of positionedNodes) {\n maxX = Math.max(maxX, node.x + node.width + HORIZONTAL_GAP);\n maxY = Math.max(maxY, node.y + node.height + VERTICAL_GAP);\n }\n\n return {\n width: Math.max(600, maxX),\n height: Math.max(400, maxY),\n };\n }\n}\n","import type { Workflow, WorkflowNode, ValidationError } from './types.js';\nimport {\n findNodeById,\n getAllNodes,\n getNodePath,\n isDescendant,\n} from './workflow-utils.js';\n\n/**\n * Workflow validation - checks for common errors and inconsistencies\n */\n\nexport class WorkflowValidator {\n /**\n * Validate entire workflow\n */\n static validate(workflow: Workflow): ValidationError[] {\n const errors: ValidationError[] = [];\n\n // Check root node exists and is a trigger\n if (!workflow.nodes) {\n errors.push({\n nodeId: 'root',\n type: 'orphaned_node',\n message: 'Workflow has no root node',\n severity: 'error',\n });\n return errors;\n }\n\n // Validate all nodes\n const allNodes = getAllNodes(workflow.nodes);\n\n // Check for circular loops\n errors.push(...this._checkCircularLoops(workflow.nodes, allNodes));\n\n // Check for orphaned nodes\n errors.push(...this._checkOrphanedNodes(workflow.nodes, allNodes));\n\n // Check valid branches\n errors.push(...this._checkValidBranches(workflow.nodes, allNodes));\n\n // Check missing targets\n errors.push(...this._checkMissingTargets(workflow, allNodes));\n\n // Check invalid fork/join pairs\n errors.push(...this._checkForkJoinPairs(workflow.nodes, allNodes));\n\n return errors;\n }\n\n /**\n * Detect circular loop references\n * A loop_end cannot point to a node that is its own descendant (after the loop_start)\n */\n private static _checkCircularLoops(\n rootNode: WorkflowNode,\n allNodes: WorkflowNode[]\n ): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const node of allNodes) {\n // Only check loop_end nodes\n if (node.type !== 'loop_end') continue;\n\n const targetId = node.target_id;\n if (!targetId) continue;\n\n // Check if target exists\n const targetNode = findNodeById(rootNode, targetId);\n if (!targetNode) continue;\n\n // If loop_end is a descendant of its target, it's circular\n if (isDescendant(rootNode, targetId, node.id)) {\n // This is the intended behavior - loop_end should be a descendant of loop_start\n // So this is actually valid. Skip this check.\n }\n\n // However, if the loop_end's target is a descendant of the loop_end, that's circular\n if (isDescendant(rootNode, node.id, targetId)) {\n errors.push({\n nodeId: node.id,\n type: 'circular_loop',\n message: `Loop cannot point to a node (${targetId}) that executes after the loop_end`,\n severity: 'error',\n });\n }\n }\n\n return errors;\n }\n\n /**\n * Check for orphaned nodes (not reachable from root)\n */\n private static _checkOrphanedNodes(\n rootNode: WorkflowNode,\n allNodes: WorkflowNode[]\n ): ValidationError[] {\n const errors: ValidationError[] = [];\n const paths = new Map<string, string[]>();\n\n for (const node of allNodes) {\n const path = getNodePath(rootNode, node.id);\n if (path.length === 0 && node.id !== rootNode.id) {\n errors.push({\n nodeId: node.id,\n type: 'orphaned_node',\n message: `Node \"${node.label}\" is not reachable from the root trigger`,\n severity: 'error',\n });\n }\n paths.set(node.id, path);\n }\n\n // Check nodes in branches - all branch paths must be reachable\n // This is typically valid by structure, but warn if branch has no exit\n for (const node of allNodes) {\n if (!node.branches) continue;\n\n for (const [branchKey, branchNodes] of Object.entries(node.branches)) {\n if (branchNodes.length === 0) {\n errors.push({\n nodeId: node.id,\n type: 'invalid_branch',\n message: `Branch \"${branchKey}\" is empty - no nodes to execute`,\n severity: 'warning',\n });\n }\n }\n }\n\n return errors;\n }\n\n /**\n * Check that decision nodes have valid branches\n */\n private static _checkValidBranches(\n rootNode: WorkflowNode,\n allNodes: WorkflowNode[]\n ): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const node of allNodes) {\n if (node.type !== 'decision') continue;\n\n if (!node.branches) {\n errors.push({\n nodeId: node.id,\n type: 'invalid_branch',\n message: `Decision node \"${node.label}\" has no branches defined`,\n severity: 'error',\n });\n continue;\n }\n\n // Standard decision should have \"yes\" and \"no\"\n const branchKeys = Object.keys(node.branches);\n if (!branchKeys.includes('yes') || !branchKeys.includes('no')) {\n errors.push({\n nodeId: node.id,\n type: 'invalid_branch',\n message: `Decision node \"${node.label}\" should have \"yes\" and \"no\" branches`,\n severity: 'warning',\n });\n }\n\n // Check for empty branches\n for (const [branchKey, branchNodes] of Object.entries(node.branches)) {\n if (branchNodes.length === 0) {\n errors.push({\n nodeId: node.id,\n type: 'invalid_branch',\n message: `Decision branch \"${branchKey}\" is empty`,\n severity: 'warning',\n });\n }\n }\n }\n\n return errors;\n }\n\n /**\n * Check that loop_end nodes reference valid loop_start nodes\n */\n private static _checkMissingTargets(\n workflow: Workflow,\n allNodes: WorkflowNode[]\n ): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const node of allNodes) {\n if (node.type === 'loop_end') {\n if (!node.target_id) {\n errors.push({\n nodeId: node.id,\n type: 'missing_target',\n message: `Loop end \"${node.label}\" does not specify a target loop_start`,\n severity: 'error',\n });\n } else {\n const target = findNodeById(workflow.nodes, node.target_id);\n if (!target || target.type !== 'loop_start') {\n errors.push({\n nodeId: node.id,\n type: 'missing_target',\n message: `Loop end \"${node.label}\" references non-existent or non-loop_start node \"${node.target_id}\"`,\n severity: 'error',\n });\n }\n }\n }\n }\n\n return errors;\n }\n\n /**\n * Check that fork nodes have corresponding join nodes\n */\n private static _checkForkJoinPairs(\n rootNode: WorkflowNode,\n allNodes: WorkflowNode[]\n ): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const node of allNodes) {\n if (node.type === 'fork') {\n if (!node.join) {\n errors.push({\n nodeId: node.id,\n type: 'invalid_fork_join',\n message: `Fork node \"${node.label}\" does not have a corresponding join node`,\n severity: 'error',\n });\n } else if (node.join.type !== 'join') {\n errors.push({\n nodeId: node.id,\n type: 'invalid_fork_join',\n message: `Fork node \"${node.label}\" join is not a join node`,\n severity: 'error',\n });\n }\n\n if (!node.tasks || node.tasks.length === 0) {\n errors.push({\n nodeId: node.id,\n type: 'invalid_fork_join',\n message: `Fork node \"${node.label}\" has no parallel tasks`,\n severity: 'warning',\n });\n }\n }\n }\n\n return errors;\n }\n\n /**\n * Check if workflow would create a valid execution path\n */\n static isExecutable(workflow: Workflow): boolean {\n const errors = this.validate(workflow);\n return errors.filter((e) => e.severity === 'error').length === 0;\n }\n\n /**\n * Get validation warnings only\n */\n static getWarnings(workflow: Workflow): ValidationError[] {\n const errors = this.validate(workflow);\n return errors.filter((e) => e.severity === 'warning');\n }\n\n /**\n * Get validation errors only\n */\n static getErrors(workflow: Workflow): ValidationError[] {\n const errors = this.validate(workflow);\n return errors.filter((e) => e.severity === 'error');\n }\n}\n","import { html, LitElement, nothing } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport IndividualComponent from '@/IndividualComponent.js';\n\nimport '../toolbar/toolbar.js';\nimport '../button/icon-button/icon-button.js';\nimport '../icon/icon.js';\nimport './flow-designer-node.js';\n\nimport styles from './flow-designer.scss';\nimport type {\n Workflow,\n WorkflowNode,\n PositionedNode,\n WorkflowChangeEvent,\n HistoryEntry,\n EditorState,\n WorkflowCommand,\n} from './types.js';\nimport {\n AddNodeCommand,\n DeleteNodeCommand,\n EditNodeCommand,\n MoveNodeCommand,\n} from './commands.js';\nimport { SwimlaneLayout } from './layout.js';\nimport { WorkflowValidator } from './validation.js';\nimport { cloneWorkflow } from './workflow-utils.js';\n\n/**\n * @label Flow Designer\n * @tag wc-flow-designer\n * @rawTag flow-designer\n * @summary Low-code business process flow designer with swimlane layout, undo/redo, and interactive editing.\n *\n * @cssprop --flow-designer-height - Height of the flow designer container. Defaults to 400px.\n * @cssprop --flow-designer-border-color - Border color of the flow designer. Defaults to outline-variant.\n * @cssprop --flow-designer-background - Background color of the designer. Defaults to surface.\n * @cssprop --flow-designer-border-radius - Corner radius. Defaults to medium shape.\n * @cssprop --flow-designer-action-bar-bg - Background color of the action bar. Defaults to surface-container.\n *\n * @example\n * ```html\n * <wc-flow-designer id=\"editor\"></wc-flow-designer>\n * <script>\n * const workflow = {\n * workflow_id: \"demo\",\n * nodes: {\n * id: \"node_1\",\n * type: \"trigger\",\n * label: \"Start\"\n * }\n * };\n * document.querySelector('#editor').workflow = workflow;\n * </script>\n * ```\n */\n@IndividualComponent\nexport class FlowDesigner extends LitElement {\n static styles = [styles];\n\n /**\n * The workflow definition to display and edit\n */\n @property({ type: Object })\n workflow: Workflow = { workflow_id: '', nodes: { id: 'root', type: 'trigger', label: 'Start' } };\n\n /**\n * Whether the flow designer is in read-only mode\n */\n @property({ type: Boolean, reflect: true, attribute: 'readonly' })\n readonly: boolean = false;\n\n /**\n * Whether the flow designer is disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled: boolean = false;\n\n /**\n * Show validation errors/warnings\n */\n @property({ type: Boolean, attribute: 'show-validation' })\n showValidation: boolean = false;\n\n @state()\n private _editor: EditorState = {\n selectedNodeId: null,\n isEditing: false,\n editingNode: null,\n hoveredNodeId: null,\n isDragging: false,\n draggedNodeId: null,\n zoom: 1,\n panX: 0,\n panY: 0,\n };\n\n @state()\n private _positionedNodes: PositionedNode[] = [];\n\n @state()\n private _history: HistoryEntry[] = [];\n\n @state()\n private _historyIndex: number = -1;\n\n @query('.flow-designer')\n private scrollElm?: HTMLElement;\n\n private _isDragScrolling: boolean = false;\n private _dragStartX: number = 0;\n private _dragStartY: number = 0;\n private _scrollStartX: number = 0;\n private _scrollStartY: number = 0;\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener('mouseup', this._handleMouseUp);\n window.addEventListener('keydown', this._handleKeyDown);\n this._recalculateLayout();\n }\n\n disconnectedCallback() {\n window.removeEventListener('mouseup', this._handleMouseUp);\n window.removeEventListener('keydown', this._handleKeyDown);\n super.disconnectedCallback();\n }\n\n protected willUpdate() {\n this._recalculateLayout();\n }\n\n /**\n * Recalculate layout when workflow changes\n */\n private _recalculateLayout() {\n if (!this.workflow?.nodes) return;\n this._positionedNodes = SwimlaneLayout.calculateLayout(this.workflow.nodes);\n }\n\n /**\n * Add a new node\n */\n addNode(\n newNode: WorkflowNode,\n parentNodeId: string,\n connectionType: 'child' | 'branch' | 'task' = 'child',\n branchKey?: string\n ): void {\n const command = new AddNodeCommand(\n newNode,\n parentNodeId,\n connectionType,\n branchKey\n );\n this._executeCommand(command);\n }\n\n /**\n * Delete a node by ID\n */\n deleteNode(nodeId: string): void {\n const command = new DeleteNodeCommand(nodeId, this.workflow);\n this._executeCommand(command);\n }\n\n /**\n * Edit a node\n */\n editNode(nodeId: string, updates: Partial<WorkflowNode>): void {\n const command = new EditNodeCommand(nodeId, updates, this.workflow);\n this._executeCommand(command);\n }\n\n /**\n * Move a node to a different parent/position\n */\n moveNode(\n nodeId: string,\n newParentId: string,\n newIndex: number,\n connectionType: 'child' | 'branch' | 'task' = 'child',\n branchKey?: string\n ): void {\n const command = new MoveNodeCommand(\n nodeId,\n newParentId,\n newIndex,\n connectionType,\n branchKey,\n this.workflow\n );\n this._executeCommand(command);\n }\n\n /**\n * Execute a command and add to history\n */\n private _executeCommand(command: WorkflowCommand): void {\n const newWorkflow = command.execute(this.workflow);\n\n // Validate workflow after change\n const errors = WorkflowValidator.validate(newWorkflow);\n const hasErrors = errors.some((e) => e.severity === 'error');\n\n if (hasErrors && !confirm('Workflow has errors. Continue anyway?')) {\n return;\n }\n\n // Add to history\n this._history = this._history.slice(0, this._historyIndex + 1);\n this._history.push({\n command,\n workflow: newWorkflow,\n timestamp: Date.now(),\n });\n this._historyIndex++;\n\n // Update workflow\n this.workflow = newWorkflow;\n\n // Emit change event\n this._emitWorkflowChange('node-edited', undefined);\n }\n\n /**\n * Undo last operation\n */\n undo(): void {\n if (this._historyIndex <= 0) return;\n\n this._historyIndex--;\n const entry = this._history[this._historyIndex];\n this.workflow = cloneWorkflow(entry.workflow);\n this._emitWorkflowChange('undo', undefined);\n }\n\n /**\n * Redo last undone operation\n */\n redo(): void {\n if (this._historyIndex >= this._history.length - 1) return;\n\n this._historyIndex++;\n const entry = this._history[this._historyIndex];\n this.workflow = cloneWorkflow(entry.workflow);\n this._emitWorkflowChange('redo', undefined);\n }\n\n /**\n * Check if undo is available\n */\n canUndo(): boolean {\n return this._historyIndex > 0;\n }\n\n /**\n * Check if redo is available\n */\n canRedo(): boolean {\n return this._historyIndex < this._history.length - 1;\n }\n\n /**\n * Export current workflow as JSON\n */\n exportWorkflow(): string {\n return JSON.stringify(this.workflow, null, 2);\n }\n\n /**\n * Validate workflow\n */\n validate(): void {\n const errors = WorkflowValidator.validate(this.workflow);\n this.dispatchEvent(\n new CustomEvent('validation-result', {\n detail: { errors },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _emitWorkflowChange(\n type: WorkflowChangeEvent['type'],\n nodeId?: string\n ): void {\n this.dispatchEvent(\n new CustomEvent('workflow-changed', {\n detail: {\n type,\n nodeId,\n workflow: this.workflow,\n } as WorkflowChangeEvent,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleKeyDown = (event: KeyboardEvent) => {\n if (this.disabled || this.readonly) return;\n\n if (event.ctrlKey || event.metaKey) {\n if (event.key === 'z') {\n event.preventDefault();\n this.undo();\n } else if (event.key === 'y') {\n event.preventDefault();\n this.redo();\n }\n }\n\n if (event.key === 'Delete' && this._editor.selectedNodeId) {\n event.preventDefault();\n this.deleteNode(this._editor.selectedNodeId);\n }\n };\n\n private _handleMouseUp = () => {\n this._isDragScrolling = false;\n };\n\n private _handleCanvasMouseDown = (e: MouseEvent) => {\n if (this.disabled) return;\n\n if (e.target === this.scrollElm || (e.target as HTMLElement).classList.contains('canvas-container')) {\n this._isDragScrolling = true;\n this._dragStartX = e.clientX;\n this._dragStartY = e.clientY;\n if (this.scrollElm) {\n this._scrollStartX = this.scrollElm.scrollLeft;\n this._scrollStartY = this.scrollElm.scrollTop;\n }\n }\n };\n\n private _handleCanvasMouseMove = (e: MouseEvent) => {\n if (!this._isDragScrolling || !this.scrollElm) return;\n\n const deltaX = e.clientX - this._dragStartX;\n const deltaY = e.clientY - this._dragStartY;\n\n this.scrollElm.scrollLeft = this._scrollStartX - deltaX;\n this.scrollElm.scrollTop = this._scrollStartY - deltaY;\n };\n\n private _handleNodeClick = (e: CustomEvent) => {\n const nodeId = e.detail.nodeId;\n this._editor.selectedNodeId = nodeId;\n this.requestUpdate();\n };\n\n private _handleNodeDelete = (e: CustomEvent) => {\n const nodeId = e.detail.nodeId;\n this.deleteNode(nodeId);\n };\n\n private _handleNodeEdit = (e: CustomEvent) => {\n const nodeId = e.detail.nodeId;\n this._editor.selectedNodeId = nodeId;\n this._editor.isEditing = true;\n this.requestUpdate();\n };\n\n private _handleZoomIn = () => {\n this._editor.zoom = Math.min(2, this._editor.zoom + 0.1);\n this.requestUpdate();\n };\n\n private _handleZoomOut = () => {\n this._editor.zoom = Math.max(0.5, this._editor.zoom - 0.1);\n this.requestUpdate();\n };\n\n protected render() {\n if (!this.workflow?.nodes) {\n return html`<div class=\"flow-designer-container\">\n <p class=\"empty-state\">No workflow loaded</p>\n </div>`;\n }\n\n const validationErrors = this.showValidation\n ? WorkflowValidator.validate(this.workflow)\n : [];\n const canvasBounds = SwimlaneLayout.getCanvasBounds(this._positionedNodes);\n\n return html`\n <div class=\"flow-designer-container\">\n <wc-toolbar\n class=\"editor-toolbar\"\n variant=\"floating\"\n orientation=\"horizontal\"\n elevated\n >\n <wc-icon-button\n variant=\"text\"\n ?disabled=${this._editor.zoom <= 0.5}\n @click=${this._handleZoomOut}\n title=\"Zoom Out (Ctrl+-)\"\n >\n <wc-icon name=\"remove\"></wc-icon>\n </wc-icon-button>\n <span class=\"zoom-display\">${Math.round(this._editor.zoom * 100)}%</span>\n <wc-icon-button\n variant=\"text\"\n ?disabled=${this._editor.zoom >= 2}\n @click=${this._handleZoomIn}\n title=\"Zoom In (Ctrl++)\"\n >\n <wc-icon name=\"add\"></wc-icon>\n </wc-icon-button>\n <wc-icon-button\n variant=\"text\"\n ?disabled=${!this.canUndo()}\n @click=${() => this.undo()}\n title=\"Undo (Ctrl+Z)\"\n >\n <wc-icon name=\"undo\"></wc-icon>\n </wc-icon-button>\n <wc-icon-button\n variant=\"text\"\n ?disabled=${!this.canRedo()}\n @click=${() => this.redo()}\n title=\"Redo (Ctrl+Y)\"\n >\n <wc-icon name=\"redo\"></wc-icon>\n </wc-icon-button>\n ${!this.readonly\n ? html`\n <wc-icon-button\n variant=\"text\"\n @click=${() => this.validate()}\n title=\"Validate Workflow\"\n >\n <wc-icon name=\"check_circle\"></wc-icon>\n </wc-icon-button>\n `\n : nothing}\n </wc-toolbar>\n\n <!-- Validation messages -->\n ${validationErrors.length > 0\n ? html`\n <div class=\"validation-panel\">\n ${validationErrors.map(\n (error) =>\n html`\n <div class=\"validation-item ${error.severity}\">\n <wc-icon\n name=${error.severity === 'error' ? 'error' : 'warning'}\n ></wc-icon>\n <span>${error.message}</span>\n </div>\n `\n )}\n </div>\n `\n : nothing}\n\n <!-- Flow canvas -->\n <div\n class=\"flow-designer\"\n @mousedown=${this._handleCanvasMouseDown}\n @mousemove=${this._handleCanvasMouseMove}\n >\n <div\n class=\"canvas-container\"\n style=\"\n transform: scale(${this._editor.zoom});\n width: ${canvasBounds.width}px;\n height: ${canvasBounds.height}px;\n \"\n >\n <!-- SVG Connectors -->\n <svg\n class=\"connectors-layer\"\n width=\"${canvasBounds.width}\"\n height=\"${canvasBounds.height}\"\n viewBox=\"0 0 ${canvasBounds.width} ${canvasBounds.height}\"\n >\n <defs>\n <marker\n id=\"arrowhead\"\n markerWidth=\"10\"\n markerHeight=\"10\"\n refX=\"9\"\n refY=\"3\"\n orient=\"auto\"\n >\n <polygon points=\"0 0, 10 3, 0 6\" fill=\"currentColor\"></polygon>\n </marker>\n </defs>\n ${this._renderConnectors()}\n </svg>\n\n <!-- Swimlane backgrounds -->\n <div class=\"swimlanes-container\">\n ${this._renderSwimlanes()}\n </div>\n\n <!-- Positioned nodes -->\n <div class=\"nodes-layer\">\n ${this._renderNodes()}\n </div>\n </div>\n </div>\n </div>\n `;\n }\n\n private _renderConnectors() {\n return this._positionedNodes.flatMap((node) => {\n if (!node.connectorPoints) return [];\n\n return node.connectorPoints.map((connector, idx) => {\n const { from, to, type } = connector;\n const isLoopback = type === 'curved';\n\n if (isLoopback) {\n // Render curved path for loop back\n const midY = (from.y + to.y) / 2;\n const d =\n `M ${from.x} ${from.y} ` +\n `L ${from.x + 30} ${from.y} ` +\n `Q ${from.x + 60} ${midY} ${to.x - 30} ${to.y} ` +\n `L ${to.x} ${to.y}`;\n\n return html`\n <path\n key=${`${node.node.id}-connector-${idx}`}\n d=${d}\n class=\"connector ${type}\"\n marker-end=\"url(#arrowhead)\"\n vector-effect=\"non-scaling-stroke\"\n ></path>\n `;\n }\n\n // Render straight connector\n const d = `M ${from.x} ${from.y} L ${to.x} ${to.y}`;\n return html`\n <path\n key=${`${node.node.id}-connector-${idx}`}\n d=${d}\n class=\"connector ${type}\"\n marker-end=\"url(#arrowhead)\"\n vector-effect=\"non-scaling-stroke\"\n ></path>\n `;\n });\n });\n }\n\n private _renderSwimlanes() {\n const swimlanes = SwimlaneLayout.getSwimlanes(this._positionedNodes);\n\n return swimlanes.map(\n (lane) => {\n const laneTop = Math.min(...lane.nodes.map((n) => n.y)) - 14;\n const laneBottom = Math.max(...lane.nodes.map((n) => n.y + n.height)) + 14;\n const laneHeight = Math.max(120, laneBottom - laneTop);\n\n return html`\n <div\n class=\"swimlane ${lane.isParallel ? 'parallel' : ''}\"\n style=\"top: ${laneTop}px; height: ${laneHeight}px;\"\n >\n <div class=\"swimlane-header\">${lane.name}</div>\n </div>\n `;\n }\n );\n }\n\n private _renderNodes() {\n return this._positionedNodes.map(\n (posNode) =>\n html`\n <div\n class=\"positioned-node\"\n style=\"\n left: ${posNode.x}px;\n top: ${posNode.y}px;\n width: ${posNode.width}px;\n height: ${posNode.height}px;\n \"\n >\n <wc-flow-designer-node\n .node=${posNode.node}\n ?selected=${posNode.node.id === this._editor.selectedNodeId}\n ?editing=${this._editor.isEditing &&\n posNode.node.id === this._editor.selectedNodeId}\n ?disabled=${this.disabled}\n @node-click=${this._handleNodeClick}\n @node-delete=${this._handleNodeDelete}\n @node-edit-start=${this._handleNodeEdit}\n ></wc-flow-designer-node>\n </div>\n `\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'wc-flow-designer': FlowDesigner;\n }\n}\n"],"names":["e","s","LitElement","html","unsafeSVG","styles","property","state","nothing","query"],"mappings":";;;;;;;;;;AACA;AACA;AACA;AACA;AACA,GAAG,MAAM,CAAC,SAASA,GAAC,EAAE,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAM,MAAC,CAAC,CAACC,CAAC,CAAC,CAAC;;ACL5E;AACM,SAAU,WAAW,CAAC,MAAc,EAAA;AACxC,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC;AAE3D,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC1D,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AAEhC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;AAC1E,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AAEjC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACjD,QAAA,GAAG,CAAC,OAAO,CAAC,EAAE,IAAG;YACf,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACxE,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAChD,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,eAAe;AAC9B,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,EAAE;AAElB,QAAA,MAAM,UAAU,GAAG,IAAI,aAAa,EAAE;AACtC,QAAA,OAAO,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACzC;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,OAAO,EAAE;IACX;AACF;;AC1BO,eAAe,gBAAgB,CAAC,IAAY,EAAA;IACjD,IAAI,KAAK,GAAiB,IAAI;;AAE9B,IAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2B;AAE3D,IAAA,IAAI;QACF,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACxC;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC;IAClD;AAEA,IAAA,OAAO,OAAO,GAAW,KAAqB;AAC5C,QAAA,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC7B,YAAA,OAAO,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAE;QACnC;AAEA,QAAA,MAAM,YAAY,GAAG,CAAC,YAAW;AAC/B,YAAA,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;YAEhC,IAAI,KAAK,EAAE;gBACT,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;gBACjD,IAAI,cAAc,EAAE;AAClB,oBAAA,OAAO,cAAc,CAAC,IAAI,EAAE;gBAC9B;YACF;YAEA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;YACnC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM;YAE7D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;AACxC,gBAAA,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM;gBACvC,WAAW,EAAE,YAAY,GAAG,aAAa,GAAG,MAAM;AACnD,aAAA,CAAC;AAEF,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAC3B,gBAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,GAAG,CAAA,CAAE,CAAC;AAC/D,gBAAA,OAAO,EAAE;YACX;AAEA,YAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;YAEpC,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBACpC,MAAM,KAAK,CAAC,GAAG,CACb,OAAO,EACP,IAAI,QAAQ,CAAC,MAAM,EAAE;oBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;AAC1B,iBAAA,CAAC,CACH;YACH;AAEA,YAAA,OAAO,MAAM;QACf,CAAC,GAAG;AAEJ,QAAA,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC;AAEvC,QAAA,IAAI;YACF,OAAO,MAAM,YAAY;QAC3B;gBAAU;AACR,YAAA,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;QAC9B;AACF,IAAA,CAAC;AACH;;AC9DA,MAAM,SAAS,GAA6C;IAC1D,kBAAkB,EAAE,CAAC,IAAY,KAC/B,CAAA,uEAAA,EAA0E,IAAI,CAAA,IAAA,CAAM;IACtF,MAAM,EAAE,CAAC,IAAY,KACnB,CAAA,0DAAA,EAA6D,IAAI,CAAA,IAAA,CAAM;CAC1E;AAED,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC;AAE/C,eAAe,QAAQ,CAAC,GAAW,EAAA;AACxC,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,OAAO,EAAE;AACnB,IAAA,OAAO,UAAU,CAAC,GAAG,CAAC;AACxB;AAEO,eAAe,SAAS,CAC7B,IAAY,EACZ,WAAmB,kBAAkB,EAAA;AAErC,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE;AAEpB,IAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AACxB,QAAA,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAA,WAAA,CAAa,CAAC;IACrD;IAEA,OAAO,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBA;;;;;;;;;;;;;;;AAeG;AACG,MAAO,IAAK,SAAQC,GAAU,CAAA;AAApC,IAAA,WAAA,GAAA;;QAW8B,IAAA,CAAA,QAAQ,GAAiB,kBAAkB;QAG/D,IAAA,CAAA,UAAU,GAAW,EAAE;;QAIvB,IAAA,CAAA,OAAO,GAAY,KAAK;QAGxB,IAAA,CAAA,KAAK,GAAiB,IAAI;;QAG1B,IAAA,CAAA,QAAQ,GAAG,CAAC;IAkFtB;IA7EE,YAAY,GAAA;;QAEV,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA,IAAA,OAAO,CAAC,iBAAsB,EAAA;;AAE5B,QAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACjE,IAAI,CAAC,gBAAgB,EAAE;QACzB;IACF;IAEA,MAAM,GAAA;;AAEJ,QAAA,OAAOC,CAAI,CAAA,CAAA;AACP,MAAA,EAAA,IAAI,CAAC;AACL,cAAEC,CAAS,CAAC,IAAI,CAAC,UAAU;cACzBD,CAAI,CAAA,CAAA,6BAAA,CAA+B;WAClC;IACT;;IAGQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,YAAY,CAAC,IAAI,CAAC,cAAqB,CAAC;QAC1C;;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC;IACvE;AAEA;;AAEG;AACK,IAAA,MAAM,WAAW,GAAA;AACvB,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC;AAClB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AAEjB,QAAA,IAAI;AACF,YAAA,IAAI,GAAuB;AAE3B,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,GAAG,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;YACjD;AAAO,iBAAA,IAAI,IAAI,CAAC,GAAG,EAAE;gBACnB,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YAChC;iBAAO;gBACL,GAAG,GAAG,EAAE;YACV;;AAGA,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ;gBAAE;YAEjC,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC;YACpC;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE;YACtB;QACF;QAAE,OAAO,GAAQ,EAAE;;YAEjB,IAAI,CAAC,KAAK,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;;AAEpB,YAAA,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,YAAY,EAAE;AAC5B,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AAC7D,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA,CAAC,CACH;QACH;gBAAU;;AAER,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,EAAE;AAC/B,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACtB;QACF;IACF;;AAxGO,IAAA,CAAA,MAAM,GAAG,CAACE,QAAM,CAAC;AAMmB,UAAA,CAAA;IAA1CC,CAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;AAAgB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AAEd,UAAA,CAAA;IAA1CA,CAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;AAAe,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,KAAA,EAAA,MAAA,CAAA;AAE5B,UAAA,CAAA;AAA3B,IAAAA,CAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AAA8C,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AAGhE,UAAA,CAAA;AADP,IAAAC,CAAK;AAC0B,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,YAAA,EAAA,MAAA,CAAA;AAIxB,UAAA,CAAA;IADPA,CAAK,EAAE;AACyB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAGzB,UAAA,CAAA;AADP,IAAAA,CAAK;AAC6B,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,OAAA,EAAA,MAAA,CAAA;;AC7CrC;;AAEG;AAEH;;AAEG;AACG,SAAU,aAAa,CAAC,QAAkB,EAAA;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7C;AAEA;;AAEG;AACG,SAAU,SAAS,CAAC,IAAkB,EAAA;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACzC;AAEA;;AAEG;AACG,SAAU,YAAY,CAC1B,IAAkB,EAClB,EAAU,EAAA;AAEV,IAAA,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;AAAE,QAAA,OAAO,IAAI;;AAG/B,IAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;AACrC,YAAA,IAAI,KAAK;AAAE,gBAAA,OAAO,KAAK;QACzB;IACF;;AAGA,IAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;AACpC,YAAA,IAAI,KAAK;AAAE,gBAAA,OAAO,KAAK;QACzB;IACF;;AAGA,IAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,QAAA,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACtD,YAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;gBACpC,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;AAC1C,gBAAA,IAAI,KAAK;AAAE,oBAAA,OAAO,KAAK;YACzB;QACF;IACF;;AAGA,IAAA,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AACzC,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,KAAK;IACzB;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;AACG,SAAU,cAAc,CAC5B,IAAkB,EAClB,EAAU,EAAA;AAEV,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;;AAG9B,IAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,QAAA,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AACjD,YAAA,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE;AAAE,gBAAA,OAAO,KAAK;AACjC,YAAA,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC;AACzB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,QAAA,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAC1C,YAAA,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;AAAE,gBAAA,OAAO,KAAK;AAChC,YAAA,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;AACxB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,QAAA,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AACtE,YAAA,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,KAAI;AAC7D,gBAAA,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE;AAAE,oBAAA,OAAO,KAAK;AACtC,gBAAA,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC;AAC9B,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC,CAAC;QACJ;IACF;;IAGA,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE;AAC9C,QAAA,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC;IAChC;IACA,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE;AACzC,QAAA,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9B;AACA,IAAA,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE;AAC9D,QAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AACpC,YAAA,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC;QAChC;IACF;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;;AAEG;AACG,SAAU,sBAAsB,CACpC,MAAoB,EACpB,YAA0B,EAC1B,cAAA,GAA8C,OAAO,EACrD,SAAkB,EAAA;IAElB,QAAQ,cAAc;AACpB,QAAA,KAAK,OAAO;YACV,IAAI,CAAC,MAAM,CAAC,QAAQ;AAAE,gBAAA,MAAM,CAAC,QAAQ,GAAG,EAAE;YAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC7C;AAEF,QAAA,KAAK,MAAM;YACT,IAAI,CAAC,MAAM,CAAC,KAAK;AAAE,gBAAA,MAAM,CAAC,KAAK,GAAG,EAAE;YACpC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC1C;AAEF,QAAA,KAAK,QAAQ;YACX,IAAI,CAAC,MAAM,CAAC,QAAQ;AAAE,gBAAA,MAAM,CAAC,QAAQ,GAAG,EAAE;AAC1C,YAAA,IAAI,CAAC,SAAS;gBAAE,SAAS,GAAG,SAAS;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAE,gBAAA,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE;AAChE,YAAA,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACxD;;AAEN;AAEA;;AAEG;AACG,SAAU,WAAW,CAAC,IAAkB,EAAA;AAC5C,IAAA,MAAM,MAAM,GAAmB,CAAC,IAAI,CAAC;AAErC,IAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACpC;IACF;AAEA,IAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC;IACF;AAEA,IAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,QAAA,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACtD,YAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;gBACpC,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;YACzC;QACF;IACF;AAEA,IAAA,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;;AAEG;AACG,SAAU,WAAW,CACzB,QAAsB,EACtB,QAAgB,EAAA;IAEhB,MAAM,IAAI,GAAa,EAAE;IAEzB,SAAS,QAAQ,CAAC,IAAkB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAElB,QAAA,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;;AAGrC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjC,IAAI,QAAQ,CAAC,KAAK,CAAC;AAAE,oBAAA,OAAO,IAAI;YAClC;QACF;;AAGA,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;gBAC7B,IAAI,QAAQ,CAAC,IAAI,CAAC;AAAE,oBAAA,OAAO,IAAI;YACjC;QACF;;AAGA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACtD,gBAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;oBACpC,IAAI,QAAQ,CAAC,UAAU,CAAC;AAAE,wBAAA,OAAO,IAAI;gBACvC;YACF;QACF;;AAGA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,IAAI;QACtC;QAEA,IAAI,CAAC,GAAG,EAAE;AACV,QAAA,OAAO,KAAK;IACd;IAEA,QAAQ,CAAC,QAAQ,CAAC;AAClB,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;SACa,YAAY,CAC1B,QAAsB,EACtB,iBAAyB,EACzB,MAAc,EAAA;IAEd,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC1C,IAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACzC;;ACxOA;;AAEG;MACU,cAAc,CAAA;AAGzB,IAAA,WAAA,CACU,SAAuB,EACvB,YAAoB,EACpB,cAAA,GAA8C,OAAO,EACrD,SAAkB,EAAA;QAHlB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,SAAS,GAAT,SAAS;QANnB,IAAA,CAAA,WAAW,GAAG,UAAU;IAOrB;AAEH,IAAA,OAAO,CAAC,QAAkB,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;AACtC,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;AAC5D,QAAA,IAAI,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC;AAE7B,QAAA,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC;AACnF,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,IAAI,CAAC,QAAkB,EAAA;AACrB,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;QACtC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AAC/C,QAAA,OAAO,MAAM;IACf;AACD;AAED;;AAEG;MACU,iBAAiB,CAAA;IAS5B,WAAA,CACU,MAAc,EACtB,QAAmB,EAAA;QADX,IAAA,CAAA,MAAM,GAAN,MAAM;QAThB,IAAA,CAAA,WAAW,GAAG,aAAa;QACnB,IAAA,CAAA,WAAW,GAAwB,IAAI;QACvC,IAAA,CAAA,eAAe,GAIZ,IAAI;QAMb,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;QACnC;IACF;AAEQ,IAAA,kBAAkB,CAAC,QAAkB,EAAA;AAC3C,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACtD,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK;;AAGxE,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC1C;AAEQ,IAAA,mBAAmB,CAAC,IAAkB,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC;AAChE,YAAA,IAAI,GAAG,KAAK,EAAE,EAAE;gBACd,IAAI,CAAC,eAAe,GAAG;oBACrB,QAAQ,EAAE,IAAI,CAAC,EAAE;AACjB,oBAAA,cAAc,EAAE,OAAO;iBACxB;gBACD;YACF;AACA,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;YACjC;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC;AAC7D,YAAA,IAAI,GAAG,KAAK,EAAE,EAAE;gBACd,IAAI,CAAC,eAAe,GAAG;oBACrB,QAAQ,EAAE,IAAI,CAAC,EAAE;AACjB,oBAAA,cAAc,EAAE,MAAM;iBACvB;gBACD;YACF;AACA,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAChC;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACpE,gBAAA,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC;AAC9D,gBAAA,IAAI,GAAG,KAAK,EAAE,EAAE;oBACd,IAAI,CAAC,eAAe,GAAG;wBACrB,QAAQ,EAAE,IAAI,CAAC,EAAE;AACjB,wBAAA,cAAc,EAAE,QAAQ;wBACxB,SAAS;qBACV;oBACD;gBACF;AACA,gBAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AACpC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;gBACtC;YACF;QACF;IACF;AAEA,IAAA,OAAO,CAAC,QAAkB,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;QACtC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACzC,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,IAAI,CAAC,QAAkB,EAAA;QACrB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,eAAe;AAAE,YAAA,OAAO,QAAQ;AAC/D,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;AACtC,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AACxE,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,QAAQ;AAE5B,QAAA,sBAAsB,CACpB,MAAM,EACN,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,eAAe,CAAC,cAAc,EACnC,IAAI,CAAC,eAAe,CAAC,SAAS,CAC/B;AACD,QAAA,OAAO,MAAM;IACf;AACD;AAED;;AAEG;MACU,eAAe,CAAA;AAI1B,IAAA,WAAA,CACU,MAAc,EACd,OAA8B,EACtC,QAAmB,EAAA;QAFX,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QALjB,IAAA,CAAA,WAAW,GAAG,WAAW;QACjB,IAAA,CAAA,aAAa,GAAwB,EAAE;QAO7C,IAAI,QAAQ,EAAE;YACZ,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;YACjD,IAAI,IAAI,EAAE;;gBAER,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;oBACnC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAI,IAA4B,CAAC,GAAG,CAAC;AAC9D,gBAAA,CAAC,CAAC;YACJ;QACF;IACF;AAEA,IAAA,OAAO,CAAC,QAAkB,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACpD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,QAAQ;QAE1B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,IAAI,CAAC,QAAkB,EAAA;AACrB,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACpD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,QAAQ;QAE1B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC;AACvC,QAAA,OAAO,MAAM;IACf;AACD;AAED;;AAEG;MACU,eAAe,CAAA;IAS1B,WAAA,CACU,MAAc,EACd,WAAmB,EACnB,QAAgB,EAChB,iBAAA,GAAiD,OAAO,EACxD,YAAqB,EAC7B,QAAmB,EAAA;QALX,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,YAAY,GAAZ,YAAY;QAbtB,IAAA,CAAA,WAAW,GAAG,WAAW;QACjB,IAAA,CAAA,aAAa,GAKV,IAAI;QAUb,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;QACvC;IACF;AAEQ,IAAA,sBAAsB,CAAC,QAAkB,EAAA;;;IAGjD;AAEA,IAAA,OAAO,CAAC,QAAkB,EAAA;;AAExB,QAAA,IAAI,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;AACpC,QAAA,MAAM,CAAC,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACxD,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;AAC9D,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,QAAQ;AAE/B,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACtD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,QAAQ;AAE1B,QAAA,sBAAsB,CACpB,SAAS,EACT,IAAI,EACJ,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,YAAY,CAClB;AACD,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,IAAI,CAAC,QAAkB,EAAA;;QAErB,IAAI,CAAC,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,QAAQ;AACxC,QAAA,IAAI,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;AACpC,QAAA,MAAM,CAAC,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACxD,QAAA,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC1E,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,QAAQ;AAEhC,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACtD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,QAAQ;AAE1B,QAAA,sBAAsB,CACpB,UAAU,EACV,IAAI,EACJ,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,IAAI,CAAC,aAAa,CAAC,SAAS,CAC7B;AACD,QAAA,OAAO,MAAM;IACf;AACD;;ACpOD,MAAM,UAAU,GAAG,GAAG;AACtB,MAAM,WAAW,GAAG,GAAG;AACvB,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,kBAAkB,GAAG,EAAE,CAAC;MAEjB,cAAc,CAAA;AACzB;;AAEG;IACH,OAAO,eAAe,CAAC,QAAsB,EAAA;QAC3C,MAAM,WAAW,GAAiB,EAAE;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;;AAI9C,QAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC;;QAG3E,MAAM,eAAe,GAAqB,EAAE;AAC5C,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAoC;AAEjE,QAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AACpC,YAAA,MAAM,CAAC,GACL,UAAU,CAAC,KAAK,IAAI,UAAU,GAAG,cAAc,CAAC,GAAG,cAAc;AACnE,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACnE,MAAM,CAAC,GAAG,SAAS,IAAI,WAAW,GAAG,YAAY,CAAC,GAAG,kBAAkB;AAEvE,YAAA,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAE/C,YAAA,MAAM,UAAU,GAAmB;gBACjC,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,CAAC;gBACD,CAAC;AACD,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,MAAM,EAAE,WAAW;gBACnB,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,UAAU,EAAE,UAAU,CAAC,UAAU;AACjC,gBAAA,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE;AAC/B,gBAAA,eAAe,EAAE,EAAE;aACpB;AAED,YAAA,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;QAClC;;AAGA,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE,aAAa,CAAC;AAEzD,QAAA,OAAO,eAAe;IACxB;AAEA;;AAEG;AACK,IAAA,OAAO,uBAAuB,CACpC,IAAkB,EAClB,MAA2B,EAC3B,QAAgB,EAChB,KAAa,EACb,WAAyB,EACzB,KAAgC,EAAA;AAEhC,QAAA,MAAM,UAAU,GAAe;YAC7B,IAAI;YACJ,MAAM;AACN,YAAA,IAAI,EAAE,QAAQ;YACd,KAAK;AACL,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,MAAM,EAAE,WAAW;SACpB;;AAGD,QAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;;QAG5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACxB,YAAA,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QACzB;QACA,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,UAAU,CAAC;;AAGrC,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,gBAAA,IAAI,CAAC,uBAAuB,CAC1B,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,KAAK,GAAG,CAAC,EACT,WAAW,EACX,KAAK,CACN;YACH;QACF;;AAGA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,WAAW,GAAG,CAAC;AACnB,YAAA,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACpE,MAAM,UAAU,GAAG,CAAA,EAAG,QAAQ,IAAI,SAAS,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE;AAE5D,gBAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AACpC,oBAAA,IAAI,CAAC,uBAAuB,CAC1B,UAAU,EACV,IAAI,EACJ,UAAU,EACV,KAAK,GAAG,CAAC,EACT,WAAW,EACX,KAAK,CACN;gBACH;AACA,gBAAA,WAAW,EAAE;YACf;QACF;;QAGA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;YACtC,IAAI,SAAS,GAAG,CAAC;AACjB,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,gBAAA,MAAM,YAAY,GAAG,CAAA,EAAG,QAAQ,CAAA,UAAA,EAAa,SAAS,EAAE;AACxD,gBAAA,IAAI,CAAC,uBAAuB,CAC1B,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,KAAK,GAAG,CAAC,EACT,WAAW,EACX,KAAK,CACN;AACD,gBAAA,SAAS,EAAE;YACb;QACF;;QAGA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;;AAErC,YAAA,IAAI,CAAC,uBAAuB,CAC1B,IAAI,CAAC,IAAI,EACT,IAAI,EACJ,QAAQ,EACR,KAAK,GAAG,CAAC,EACT,WAAW,EACX,KAAK,CACN;QACH;;QAGA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACtC,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,gBAAA,IAAI,CAAC,uBAAuB,CAC1B,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,KAAK,GAAG,CAAC,EACT,WAAW,EACX,KAAK,CACN;YACH;QACF;IACF;AAEA;;AAEG;AACK,IAAA,OAAO,oBAAoB,CACjC,eAAiC,EACjC,aAAoD,EAAA;QAEpD,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAC3C;AAED,QAAA,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE;YACxC,MAAM,UAAU,GAAsC,EAAE;AACxD,YAAA,MAAM,eAAe,GAAG;AACtB,gBAAA,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK;gBAClC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;aACxC;;AAGD,YAAA,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnE,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtC,IAAI,QAAQ,EAAE;wBACZ,UAAU,CAAC,IAAI,CAAC;AACd,4BAAA,IAAI,EAAE,eAAe;AACrB,4BAAA,EAAE,EAAE;gCACF,CAAC,EAAE,QAAQ,CAAC,CAAC;gCACb,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;AACpC,6BAAA;AACD,4BAAA,IAAI,EAAE,UAAU;AACjB,yBAAA,CAAC;oBACJ;gBACF;YACF;;AAGA,YAAA,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC5B,gBAAA,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAEjE,oBAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;wBACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC3C,IAAI,QAAQ,EAAE;;4BAEZ,UAAU,CAAC,IAAI,CAAC;AACd,gCAAA,IAAI,EAAE,eAAe;AACrB,gCAAA,EAAE,EAAE;oCACF,CAAC,EAAE,QAAQ,CAAC,CAAC;oCACb,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;AACpC,iCAAA;AACD,gCAAA,IAAI,EAAE,QAAQ;AACf,6BAAA,CAAC;wBACJ;oBACF;gBACF;YACF;;AAGA,YAAA,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE;gBAC5D,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE;oBACxC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpC,IAAI,OAAO,EAAE;wBACX,UAAU,CAAC,IAAI,CAAC;AACd,4BAAA,IAAI,EAAE,eAAe;AACrB,4BAAA,EAAE,EAAE;gCACF,CAAC,EAAE,OAAO,CAAC,CAAC;gCACZ,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;AAClC,6BAAA;AACD,4BAAA,IAAI,EAAE,MAAM;AACb,yBAAA,CAAC;oBACJ;gBACF;YACF;;AAGA,YAAA,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3D,gBAAA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpD,IAAI,OAAO,EAAE;oBACX,UAAU,CAAC,IAAI,CAAC;AACd,wBAAA,IAAI,EAAE,eAAe;AACrB,wBAAA,EAAE,EAAE;4BACF,CAAC,EAAE,OAAO,CAAC,CAAC;4BACZ,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;AAClC,yBAAA;AACD,wBAAA,IAAI,EAAE,MAAM;AACb,qBAAA,CAAC;gBACJ;YACF;;AAGA,YAAA,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;AACpE,gBAAA,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;gBACxD,IAAI,SAAS,EAAE;oBACb,UAAU,CAAC,IAAI,CAAC;AACd,wBAAA,IAAI,EAAE;AACJ,4BAAA,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK;4BAClC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;AACxC,yBAAA;AACD,wBAAA,EAAE,EAAE;4BACF,CAAC,EAAE,SAAS,CAAC,CAAC;4BACd,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;AACtC,yBAAA;AACD,wBAAA,IAAI,EAAE,QAAQ;AACf,qBAAA,CAAC;gBACJ;YACF;AAEA,YAAA,UAAU,CAAC,eAAe,GAAG,UAAU;QACzC;IACF;AAEA;;AAEG;IACH,OAAO,YAAY,CAAC,eAAiC,EAAA;AACnD,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAA4B;AAExD,QAAA,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE;YAClC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjC;AACA,YAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QACzC;QAEA,MAAM,SAAS,GAAqB,EAAE;AACtC,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE;YACpD,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAE1C,SAAS,CAAC,IAAI,CAAC;AACb,gBAAA,EAAE,EAAE,MAAM;gBACV,IAAI;gBACJ,KAAK;gBACL,UAAU;AACX,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;IACK,OAAO,gBAAgB,CAAC,MAAc,EAAA;QAC5C,IAAI,MAAM,KAAK,MAAM;AAAE,YAAA,OAAO,WAAW;AACzC,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,UAAU;AAC7C,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,SAAS;AAC3C,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC;AAC5C,YAAA,IAAI,KAAK;gBAAE,OAAO,CAAA,cAAA,EAAiB,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA,CAAE;QAC7D;AACA,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACH,OAAO,eAAe,CAAC,eAAiC,EAAA;AAItD,QAAA,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QACpC;QAEA,IAAI,IAAI,GAAG,CAAC;QACZ,IAAI,IAAI,GAAG,CAAC;AAEZ,QAAA,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE;AAClC,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC;AAC3D,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;QAC5D;QAEA,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;YAC1B,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;SAC5B;IACH;AACD;;AC5VD;;AAEG;MAEU,iBAAiB,CAAA;AAC5B;;AAEG;IACH,OAAO,QAAQ,CAAC,QAAkB,EAAA;QAChC,MAAM,MAAM,GAAsB,EAAE;;AAGpC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC;AACV,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,OAAO,EAAE,2BAA2B;AACpC,gBAAA,QAAQ,EAAE,OAAO;AAClB,aAAA,CAAC;AACF,YAAA,OAAO,MAAM;QACf;;QAGA,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAG5C,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;;AAGlE,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;;AAGlE,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;;AAGlE,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;;AAG7D,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAElE,QAAA,OAAO,MAAM;IACf;AAEA;;;AAGG;AACK,IAAA,OAAO,mBAAmB,CAChC,QAAsB,EACtB,QAAwB,EAAA;QAExB,MAAM,MAAM,GAAsB,EAAE;AAEpC,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;;AAE3B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;gBAAE;AAE9B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS;AAC/B,YAAA,IAAI,CAAC,QAAQ;gBAAE;;YAGf,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACnD,YAAA,IAAI,CAAC,UAAU;gBAAE;;YAGjB,IAAI,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;;YAM/C,IAAI,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE;gBAC7C,MAAM,CAAC,IAAI,CAAC;oBACV,MAAM,EAAE,IAAI,CAAC,EAAE;AACf,oBAAA,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,CAAA,6BAAA,EAAgC,QAAQ,CAAA,kCAAA,CAAoC;AACrF,oBAAA,QAAQ,EAAE,OAAO;AAClB,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;AACK,IAAA,OAAO,mBAAmB,CAChC,QAAsB,EACtB,QAAwB,EAAA;QAExB,MAAM,MAAM,GAAsB,EAAE;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB;AAEzC,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;YAC3B,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;AAC3C,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,EAAE;gBAChD,MAAM,CAAC,IAAI,CAAC;oBACV,MAAM,EAAE,IAAI,CAAC,EAAE;AACf,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,OAAO,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,KAAK,CAAA,wCAAA,CAA0C;AACtE,oBAAA,QAAQ,EAAE,OAAO;AAClB,iBAAA,CAAC;YACJ;YACA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;QAC1B;;;AAIA,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE;AAEpB,YAAA,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACpE,gBAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC5B,MAAM,CAAC,IAAI,CAAC;wBACV,MAAM,EAAE,IAAI,CAAC,EAAE;AACf,wBAAA,IAAI,EAAE,gBAAgB;wBACtB,OAAO,EAAE,CAAA,QAAA,EAAW,SAAS,CAAA,gCAAA,CAAkC;AAC/D,wBAAA,QAAQ,EAAE,SAAS;AACpB,qBAAA,CAAC;gBACJ;YACF;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;AACK,IAAA,OAAO,mBAAmB,CAChC,QAAsB,EACtB,QAAwB,EAAA;QAExB,MAAM,MAAM,GAAsB,EAAE;AAEpC,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;gBAAE;AAE9B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,MAAM,CAAC,IAAI,CAAC;oBACV,MAAM,EAAE,IAAI,CAAC,EAAE;AACf,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,OAAO,EAAE,CAAA,eAAA,EAAkB,IAAI,CAAC,KAAK,CAAA,yBAAA,CAA2B;AAChE,oBAAA,QAAQ,EAAE,OAAO;AAClB,iBAAA,CAAC;gBACF;YACF;;YAGA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7C,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAC7D,MAAM,CAAC,IAAI,CAAC;oBACV,MAAM,EAAE,IAAI,CAAC,EAAE;AACf,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,OAAO,EAAE,CAAA,eAAA,EAAkB,IAAI,CAAC,KAAK,CAAA,qCAAA,CAAuC;AAC5E,oBAAA,QAAQ,EAAE,SAAS;AACpB,iBAAA,CAAC;YACJ;;AAGA,YAAA,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACpE,gBAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC5B,MAAM,CAAC,IAAI,CAAC;wBACV,MAAM,EAAE,IAAI,CAAC,EAAE;AACf,wBAAA,IAAI,EAAE,gBAAgB;wBACtB,OAAO,EAAE,CAAA,iBAAA,EAAoB,SAAS,CAAA,UAAA,CAAY;AAClD,wBAAA,QAAQ,EAAE,SAAS;AACpB,qBAAA,CAAC;gBACJ;YACF;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;AACK,IAAA,OAAO,oBAAoB,CACjC,QAAkB,EAClB,QAAwB,EAAA;QAExB,MAAM,MAAM,GAAsB,EAAE;AAEpC,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AAC5B,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;oBACnB,MAAM,CAAC,IAAI,CAAC;wBACV,MAAM,EAAE,IAAI,CAAC,EAAE;AACf,wBAAA,IAAI,EAAE,gBAAgB;AACtB,wBAAA,OAAO,EAAE,CAAA,UAAA,EAAa,IAAI,CAAC,KAAK,CAAA,sCAAA,CAAwC;AACxE,wBAAA,QAAQ,EAAE,OAAO;AAClB,qBAAA,CAAC;gBACJ;qBAAO;AACL,oBAAA,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;oBAC3D,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE;wBAC3C,MAAM,CAAC,IAAI,CAAC;4BACV,MAAM,EAAE,IAAI,CAAC,EAAE;AACf,4BAAA,IAAI,EAAE,gBAAgB;4BACtB,OAAO,EAAE,aAAa,IAAI,CAAC,KAAK,CAAA,kDAAA,EAAqD,IAAI,CAAC,SAAS,CAAA,CAAA,CAAG;AACtG,4BAAA,QAAQ,EAAE,OAAO;AAClB,yBAAA,CAAC;oBACJ;gBACF;YACF;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;AACK,IAAA,OAAO,mBAAmB,CAChC,QAAsB,EACtB,QAAwB,EAAA;QAExB,MAAM,MAAM,GAAsB,EAAE;AAEpC,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBACd,MAAM,CAAC,IAAI,CAAC;wBACV,MAAM,EAAE,IAAI,CAAC,EAAE;AACf,wBAAA,IAAI,EAAE,mBAAmB;AACzB,wBAAA,OAAO,EAAE,CAAA,WAAA,EAAc,IAAI,CAAC,KAAK,CAAA,yCAAA,CAA2C;AAC5E,wBAAA,QAAQ,EAAE,OAAO;AAClB,qBAAA,CAAC;gBACJ;qBAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;oBACpC,MAAM,CAAC,IAAI,CAAC;wBACV,MAAM,EAAE,IAAI,CAAC,EAAE;AACf,wBAAA,IAAI,EAAE,mBAAmB;AACzB,wBAAA,OAAO,EAAE,CAAA,WAAA,EAAc,IAAI,CAAC,KAAK,CAAA,yBAAA,CAA2B;AAC5D,wBAAA,QAAQ,EAAE,OAAO;AAClB,qBAAA,CAAC;gBACJ;AAEA,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC1C,MAAM,CAAC,IAAI,CAAC;wBACV,MAAM,EAAE,IAAI,CAAC,EAAE;AACf,wBAAA,IAAI,EAAE,mBAAmB;AACzB,wBAAA,OAAO,EAAE,CAAA,WAAA,EAAc,IAAI,CAAC,KAAK,CAAA,uBAAA,CAAyB;AAC1D,wBAAA,QAAQ,EAAE,SAAS;AACpB,qBAAA,CAAC;gBACJ;YACF;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACH,OAAO,YAAY,CAAC,QAAkB,EAAA;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACtC,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;IAClE;AAEA;;AAEG;IACH,OAAO,WAAW,CAAC,QAAkB,EAAA;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACtC,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC;IACvD;AAEA;;AAEG;IACH,OAAO,SAAS,CAAC,QAAkB,EAAA;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACtC,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;IACrD;AACD;;AC9PD;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQL,GAAU,CAAA;AAArC,IAAA,WAAA,GAAA;;AAGL;;AAEG;QAEH,IAAA,CAAA,QAAQ,GAAa,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;AAEhG;;AAEG;QAEH,IAAA,CAAA,QAAQ,GAAY,KAAK;AAEzB;;AAEG;QAEH,IAAA,CAAA,QAAQ,GAAY,KAAK;AAEzB;;AAEG;QAEH,IAAA,CAAA,cAAc,GAAY,KAAK;AAGvB,QAAA,IAAA,CAAA,OAAO,GAAgB;AAC7B,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,CAAC;SACR;QAGO,IAAA,CAAA,gBAAgB,GAAqB,EAAE;QAGvC,IAAA,CAAA,QAAQ,GAAmB,EAAE;QAG7B,IAAA,CAAA,aAAa,GAAW,EAAE;QAK1B,IAAA,CAAA,gBAAgB,GAAY,KAAK;QACjC,IAAA,CAAA,WAAW,GAAW,CAAC;QACvB,IAAA,CAAA,WAAW,GAAW,CAAC;QACvB,IAAA,CAAA,aAAa,GAAW,CAAC;QACzB,IAAA,CAAA,aAAa,GAAW,CAAC;AA4LzB,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,KAAoB,KAAI;AAChD,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;gBAAE;YAEpC,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;AAClC,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;oBACrB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,IAAI,EAAE;gBACb;AAAO,qBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;oBAC5B,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,IAAI,EAAE;gBACb;YACF;AAEA,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;gBACzD,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;YAC9C;AACF,QAAA,CAAC;QAEO,IAAA,CAAA,cAAc,GAAG,MAAK;AAC5B,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC/B,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,CAAa,KAAI;YACjD,IAAI,IAAI,CAAC,QAAQ;gBAAE;AAEnB,YAAA,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,IAAK,CAAC,CAAC,MAAsB,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;AACnG,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO;AAC5B,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO;AAC5B,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;oBAClB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU;oBAC9C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS;gBAC/C;YACF;AACF,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,CAAa,KAAI;YACjD,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE;YAE/C,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW;YAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW;YAE3C,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,GAAG,MAAM;YACvD,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,MAAM;AACxD,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,CAAc,KAAI;AAC5C,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,MAAM;YACpC,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,CAAc,KAAI;AAC7C,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM;AAC9B,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACzB,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAc,KAAI;AAC3C,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,MAAM;AACpC,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI;YAC7B,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,CAAC;QAEO,IAAA,CAAA,aAAa,GAAG,MAAK;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;YACxD,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,CAAC;QAEO,IAAA,CAAA,cAAc,GAAG,MAAK;AAC5B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;YAC1D,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,CAAC;IAqOH;IAxeE,iBAAiB,GAAA;QACf,KAAK,CAAC,iBAAiB,EAAE;QACzB,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC;QACvD,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEA,oBAAoB,GAAA;QAClB,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC;QAC1D,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC;QAC1D,KAAK,CAAC,oBAAoB,EAAE;IAC9B;IAEU,UAAU,GAAA;QAClB,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AAEA;;AAEG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK;YAAE;AAC3B,QAAA,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC7E;AAEA;;AAEG;IACH,OAAO,CACL,OAAqB,EACrB,YAAoB,EACpB,cAAA,GAA8C,OAAO,EACrD,SAAkB,EAAA;AAElB,QAAA,MAAM,OAAO,GAAG,IAAI,cAAc,CAChC,OAAO,EACP,YAAY,EACZ,cAAc,EACd,SAAS,CACV;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;IAC/B;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,MAAc,EAAA;QACvB,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC5D,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;IAC/B;AAEA;;AAEG;IACH,QAAQ,CAAC,MAAc,EAAE,OAA8B,EAAA;AACrD,QAAA,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;AACnE,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;IAC/B;AAEA;;AAEG;IACH,QAAQ,CACN,MAAc,EACd,WAAmB,EACnB,QAAgB,EAChB,cAAA,GAA8C,OAAO,EACrD,SAAkB,EAAA;AAElB,QAAA,MAAM,OAAO,GAAG,IAAI,eAAe,CACjC,MAAM,EACN,WAAW,EACX,QAAQ,EACR,cAAc,EACd,SAAS,EACT,IAAI,CAAC,QAAQ,CACd;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;IAC/B;AAEA;;AAEG;AACK,IAAA,eAAe,CAAC,OAAwB,EAAA;QAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;;QAGlD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC;AACtD,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;QAE5D,IAAI,SAAS,IAAI,CAAC,OAAO,CAAC,uCAAuC,CAAC,EAAE;YAClE;QACF;;AAGA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,OAAO;AACP,YAAA,QAAQ,EAAE,WAAW;AACrB,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACtB,SAAA,CAAC;QACF,IAAI,CAAC,aAAa,EAAE;;AAGpB,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW;;AAG3B,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,SAAS,CAAC;IACpD;AAEA;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC;YAAE;QAE7B,IAAI,CAAC,aAAa,EAAE;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC7C,QAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC;IAC7C;AAEA;;AAEG;IACH,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE;QAEpD,IAAI,CAAC,aAAa,EAAE;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC7C,QAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC;IAC7C;AAEA;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,aAAa,GAAG,CAAC;IAC/B;AAEA;;AAEG;IACH,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;IACtD;AAEA;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C;AAEA;;AAEG;IACH,QAAQ,GAAA;QACN,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxD,QAAA,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,mBAAmB,EAAE;YACnC,MAAM,EAAE,EAAE,MAAM,EAAE;AAClB,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CACH;IACH;IAEQ,mBAAmB,CACzB,IAAiC,EACjC,MAAe,EAAA;AAEf,QAAA,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,kBAAkB,EAAE;AAClC,YAAA,MAAM,EAAE;gBACN,IAAI;gBACJ,MAAM;gBACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACD,aAAA;AACxB,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CACH;IACH;IA6EU,MAAM,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE;AACzB,YAAA,OAAOC,CAAI,CAAA,CAAA;;aAEJ;QACT;AAEA,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;cAC1B,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ;cACxC,EAAE;QACN,MAAM,YAAY,GAAG,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAE1E,QAAA,OAAOA,CAAI,CAAA;;;;;;;;;;AAUS,sBAAA,EAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG;AAC3B,mBAAA,EAAA,IAAI,CAAC,cAAc;;;;;uCAKD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAA;;;AAGlD,sBAAA,EAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AACzB,mBAAA,EAAA,IAAI,CAAC,aAAa;;;;;;;wBAOf,CAAC,IAAI,CAAC,OAAO,EAAE;AAClB,mBAAA,EAAA,MAAM,IAAI,CAAC,IAAI,EAAE;;;;;;;wBAOd,CAAC,IAAI,CAAC,OAAO,EAAE;AAClB,mBAAA,EAAA,MAAM,IAAI,CAAC,IAAI,EAAE;;;;;YAK1B,CAAC,IAAI,CAAC;cACJA,CAAI,CAAA;;;AAGS,yBAAA,EAAA,MAAM,IAAI,CAAC,QAAQ,EAAE;;;;;AAKjC,cAAA;AACH,cAAEK,CAAO;;;;UAIX,gBAAgB,CAAC,MAAM,GAAG;cACxBL,CAAI,CAAA;;kBAEE,gBAAgB,CAAC,GAAG,CACpB,CAAC,KAAK,KACJA,CAAI,CAAA;AAC4B,kDAAA,EAAA,KAAK,CAAC,QAAQ,CAAA;;iCAEjC,KAAK,CAAC,QAAQ,KAAK,OAAO,GAAG,OAAO,GAAG,SAAS;;AAEjD,8BAAA,EAAA,KAAK,CAAC,OAAO,CAAA;;qBAExB,CACJ;;AAEJ,YAAA;AACH,cAAEK,CAAO;;;;;AAKI,qBAAA,EAAA,IAAI,CAAC,sBAAsB;AAC3B,qBAAA,EAAA,IAAI,CAAC,sBAAsB;;;;;iCAKjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;AAC3B,qBAAA,EAAA,YAAY,CAAC,KAAK,CAAA;AACjB,sBAAA,EAAA,YAAY,CAAC,MAAM,CAAA;;;;;;AAMpB,qBAAA,EAAA,YAAY,CAAC,KAAK,CAAA;AACjB,sBAAA,EAAA,YAAY,CAAC,MAAM,CAAA;AACd,2BAAA,EAAA,YAAY,CAAC,KAAK,CAAA,CAAA,EAAI,YAAY,CAAC,MAAM,CAAA;;;;;;;;;;;;;;gBActD,IAAI,CAAC,iBAAiB,EAAE;;;;;gBAKxB,IAAI,CAAC,gBAAgB,EAAE;;;;;gBAKvB,IAAI,CAAC,YAAY,EAAE;;;;;KAK9B;IACH;IAEQ,iBAAiB,GAAA;QACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC5C,IAAI,CAAC,IAAI,CAAC,eAAe;AAAE,gBAAA,OAAO,EAAE;YAEpC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,GAAG,KAAI;gBACjD,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,SAAS;AACpC,gBAAA,MAAM,UAAU,GAAG,IAAI,KAAK,QAAQ;gBAEpC,IAAI,UAAU,EAAE;;AAEd,oBAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC;oBAChC,MAAM,CAAC,GACL,CAAA,EAAA,EAAK,IAAI,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAA,CAAA,CAAG;wBACxB,CAAA,EAAA,EAAK,IAAI,CAAC,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAA,CAAA,CAAG;AAC7B,wBAAA,CAAA,EAAA,EAAK,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAA,CAAA,EAAI,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA,CAAA,CAAG;wBAChD,CAAA,EAAA,EAAK,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,EAAE,CAAC,CAAC,EAAE;AAErB,oBAAA,OAAOL,CAAI,CAAA;;AAED,kBAAA,EAAA,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA,WAAA,EAAc,GAAG,CAAA,CAAE;kBACpC,CAAC;iCACc,IAAI,CAAA;;;;WAI1B;gBACH;;AAGA,gBAAA,MAAM,CAAC,GAAG,CAAA,EAAA,EAAK,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA,GAAA,EAAM,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,EAAE,CAAC,CAAC,EAAE;AACnD,gBAAA,OAAOA,CAAI,CAAA;;AAED,gBAAA,EAAA,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA,WAAA,EAAc,GAAG,CAAA,CAAE;gBACpC,CAAC;+BACc,IAAI,CAAA;;;;SAI1B;AACH,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,gBAAgB,GAAA;QACtB,MAAM,SAAS,GAAG,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAEpE,QAAA,OAAO,SAAS,CAAC,GAAG,CAClB,CAAC,IAAI,KAAI;YACP,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAC5D,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE;AAC1E,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC;AAEtD,YAAA,OAAOA,CAAI,CAAA;;8BAEW,IAAI,CAAC,UAAU,GAAG,UAAU,GAAG,EAAE,CAAA;AACrC,wBAAA,EAAA,OAAO,eAAe,UAAU,CAAA;;AAEf,yCAAA,EAAA,IAAI,CAAC,IAAI,CAAA;;SAE3C;AACH,QAAA,CAAC,CACF;IACH;IAEQ,YAAY,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAC9B,CAAC,OAAO,KACNA,CAAI,CAAA;;;;AAIU,oBAAA,EAAA,OAAO,CAAC,CAAC,CAAA;AACV,mBAAA,EAAA,OAAO,CAAC,CAAC,CAAA;AACP,qBAAA,EAAA,OAAO,CAAC,KAAK,CAAA;AACZ,sBAAA,EAAA,OAAO,CAAC,MAAM,CAAA;;;;AAIhB,oBAAA,EAAA,OAAO,CAAC,IAAI;0BACR,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,cAAc;yBAChD,IAAI,CAAC,OAAO,CAAC,SAAS;YACjC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,cAAc;AACnC,wBAAA,EAAA,IAAI,CAAC,QAAQ;AACX,0BAAA,EAAA,IAAI,CAAC,gBAAgB;AACpB,2BAAA,EAAA,IAAI,CAAC,iBAAiB;AAClB,+BAAA,EAAA,IAAI,CAAC,eAAe;;;AAG5C,QAAA,CAAA,CACJ;IACH;;AAhiBO,YAAA,CAAA,MAAM,GAAG,CAACE,UAAM,CAAC;AAMxB,UAAA,CAAA;AADC,IAAAC,CAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AACuE,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AAMjG,UAAA,CAAA;AADC,IAAAA,CAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE;AACvC,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AAM1B,UAAA,CAAA;IADCA,CAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAChB,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AAM1B,UAAA,CAAA;IADCA,CAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE;AACzB,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,MAAA,CAAA;AAGxB,UAAA,CAAA;AADP,IAAAC,CAAK;AAWJ,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAGM,UAAA,CAAA;AADP,IAAAA,CAAK;AAC0C,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,MAAA,CAAA;AAGxC,UAAA,CAAA;AADP,IAAAA,CAAK;AACgC,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AAG9B,UAAA,CAAA;AADP,IAAAA,CAAK;AAC6B,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,eAAA,EAAA,MAAA,CAAA;AAG3B,UAAA,CAAA;IADPE,GAAK,CAAC,gBAAgB;AACS,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,WAAA,EAAA,MAAA,CAAA;AAlDrB,YAAY,GAAA,UAAA,CAAA;IADxB;AACY,CAAA,EAAA,YAAY,CAkiBxB;;;;","x_google_ignoreList":[0]}
|
|
@@ -504,7 +504,7 @@ let FlowDesignerNode = class FlowDesignerNode extends i$1 {
|
|
|
504
504
|
const icon = iconMap[node.type] || 'activity';
|
|
505
505
|
return b `
|
|
506
506
|
<div class="node-header">
|
|
507
|
-
<wc-icon name=${icon} class="node-icon"></wc-icon>
|
|
507
|
+
<wc-icon provider="carbon" name=${icon} class="node-icon"></wc-icon>
|
|
508
508
|
<span class="node-title">${node.label}</span>
|
|
509
509
|
</div>
|
|
510
510
|
`;
|
|
@@ -545,4 +545,4 @@ FlowDesignerNode = __decorate([
|
|
|
545
545
|
], FlowDesignerNode);
|
|
546
546
|
|
|
547
547
|
export { FlowDesignerNode as F, css_248z as c };
|
|
548
|
-
//# sourceMappingURL=flow-designer-node-
|
|
548
|
+
//# sourceMappingURL=flow-designer-node-BWrPuxAR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-designer-node-BWrPuxAR.js","sources":["../../src/flow-designer/flow-designer-node.ts"],"sourcesContent":["import { html, LitElement, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport IndividualComponent from '@/IndividualComponent.js';\nimport styles from './flow-designer.scss';\nimport type { WorkflowNode } from './types.js';\n\n/**\n * Individual node component for flow designer\n * Renders a single workflow node with customizable slot templates\n *\n * @tag wc-flow-designer-node\n * @rawTag flow-designer-node\n * @wip true\n */\n@IndividualComponent\nexport class FlowDesignerNode extends LitElement {\n static styles = [styles];\n\n /**\n * The workflow node to render\n */\n @property({ type: Object })\n node: WorkflowNode = { id: '', type: 'action', label: '' };\n\n /**\n * Whether this node is currently selected\n */\n @property({ type: Boolean, reflect: true, attribute: 'selected' })\n isSelected: boolean = false;\n\n /**\n * Whether this node is in edit mode\n */\n @property({ type: Boolean, reflect: true, attribute: 'editing' })\n isEditing: boolean = false;\n\n /**\n * Whether this node is disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled: boolean = false;\n\n /**\n * Whether to show the delete button\n */\n @property({ type: Boolean, attribute: 'show-delete' })\n showDelete: boolean = true;\n\n private _handleClick = () => {\n this.dispatchEvent(\n new CustomEvent('node-click', {\n detail: { nodeId: this.node.id },\n bubbles: true,\n composed: true,\n })\n );\n };\n\n private _handleDoubleClick = () => {\n this.dispatchEvent(\n new CustomEvent('node-edit-start', {\n detail: { nodeId: this.node.id },\n bubbles: true,\n composed: true,\n })\n );\n };\n\n private _handleDelete = (e: Event) => {\n e.stopPropagation();\n if (confirm(`Delete \"${this.node.label}\"?`)) {\n this.dispatchEvent(\n new CustomEvent('node-delete', {\n detail: { nodeId: this.node.id },\n bubbles: true,\n composed: true,\n })\n );\n }\n };\n\n private _handleMouseEnter = () => {\n // Node hover state handled via CSS\n };\n\n private _handleMouseLeave = () => {\n // Node hover state handled via CSS\n };\n\n render() {\n const { node, isSelected, isEditing, disabled } = this;\n const nodeType = node.type || 'action';\n\n return html`\n <div\n class=\"node-card ${nodeType}\"\n ?selected=${isSelected}\n ?editing=${isEditing}\n ?disabled=${disabled}\n @click=${this._handleClick}\n @dblclick=${this._handleDoubleClick}\n role=\"button\"\n tabindex=\"0\"\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') this._handleClick();\n }}\n >\n <!-- Customizable header slot -->\n <slot name=\"${nodeType}-header\">\n ${this._renderDefaultHeader()}\n </slot>\n\n <!-- Customizable body slot -->\n <slot name=\"${nodeType}-body\">${this._renderDefaultBody()}</slot>\n\n <!-- Action buttons -->\n ${this.isEditing\n ? html`\n <div class=\"node-actions\">\n <button class=\"btn-sm\" @click=${this._handleDelete}>\n Delete\n </button>\n </div>\n `\n : nothing}\n </div>\n `;\n }\n\n private _renderDefaultHeader() {\n const { node } = this;\n const iconMap: Record<string, string> = {\n trigger: 'play-circle',\n action: 'check-circle',\n decision: 'help-circle',\n loop_start: 'repeat',\n loop_end: 'repeat',\n fork: 'git-branch',\n join: 'git-merge',\n };\n\n const icon = iconMap[node.type] || 'activity';\n\n return html`\n <div class=\"node-header\">\n <wc-icon provider=\"carbon\" name=${icon} class=\"node-icon\"></wc-icon>\n <span class=\"node-title\">${node.label}</span>\n </div>\n `;\n }\n\n private _renderDefaultBody() {\n const { node } = this;\n return html`\n <div class=\"node-body\">\n ${node.description\n ? html`<p class=\"node-description\">${node.description}</p>`\n : nothing}\n <div class=\"node-metadata\">\n <span class=\"node-type-tag\">${node.type}</span>\n ${node.id ? html`<span class=\"node-id\">${node.id}</span>` : nothing}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'wc-flow-designer-node': FlowDesignerNode;\n }\n}\n"],"names":["LitElement","html","nothing","styles","property"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import './IndividualComponent-DUINtMGK.js';
|
|
2
2
|
import './property-1psGvXOq.js';
|
|
3
|
-
export { F as FlowDesignerNode } from './flow-designer-node-
|
|
3
|
+
export { F as FlowDesignerNode } from './flow-designer-node-BWrPuxAR.js';
|
|
4
4
|
//# sourceMappingURL=flow-designer-node.js.map
|
package/dist/flow-designer.js
CHANGED
|
@@ -4,8 +4,8 @@ import './state-DwbEjqVk.js';
|
|
|
4
4
|
import './query-QBcUV-L_.js';
|
|
5
5
|
import './toolbar.js';
|
|
6
6
|
import './icon-button-CK1ZuE-2.js';
|
|
7
|
-
export { F as FlowDesigner } from './flow-designer-
|
|
8
|
-
import './flow-designer-node-
|
|
7
|
+
export { F as FlowDesigner } from './flow-designer-DvTUrDp5.js';
|
|
8
|
+
import './flow-designer-node-BWrPuxAR.js';
|
|
9
9
|
import './class-map-YU7g0o3B.js';
|
|
10
10
|
import './directive-ZPhl09Yt.js';
|
|
11
11
|
import './BaseButton-BNFAYn-S.js';
|