@particle-academy/fancy-flow 0.23.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-AUL4LU63.js → chunk-ATQXZEVD.js} +122 -7
- package/dist/chunk-ATQXZEVD.js.map +1 -0
- package/dist/{chunk-OHVSEHDC.js → chunk-N5ICD2WZ.js} +3 -3
- package/dist/{chunk-OHVSEHDC.js.map → chunk-N5ICD2WZ.js.map} +1 -1
- package/dist/{chunk-O7F6SGV4.js → chunk-OFW7GN3Y.js} +18 -6
- package/dist/chunk-OFW7GN3Y.js.map +1 -0
- package/dist/{chunk-ZB4HHQMR.js → chunk-OWENS2H5.js} +11 -3
- package/dist/chunk-OWENS2H5.js.map +1 -0
- package/dist/{chunk-YXRLIV7A.js → chunk-Q6IPK64P.js} +4 -2
- package/dist/chunk-Q6IPK64P.js.map +1 -0
- package/dist/{chunk-KDHLKBL2.js → chunk-U2VJB7HR.js} +7 -5
- package/dist/chunk-U2VJB7HR.js.map +1 -0
- package/dist/engine.cjs +4 -2
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.js +3 -3
- package/dist/index.cjs +382 -130
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -10
- package/dist/index.d.ts +7 -10
- package/dist/index.js +177 -64
- package/dist/index.js.map +1 -1
- package/dist/registry/index.d.cts +2 -2
- package/dist/registry/index.d.ts +2 -2
- package/dist/registry.cjs +114 -2
- package/dist/registry.cjs.map +1 -1
- package/dist/registry.js +4 -4
- package/dist/runtime/index.d.cts +13 -1
- package/dist/runtime/index.d.ts +13 -1
- package/dist/runtime.cjs +17 -3
- package/dist/runtime.cjs.map +1 -1
- package/dist/runtime.js +4 -4
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.js +2 -2
- package/dist/styles.css +80 -0
- package/dist/styles.css.map +1 -1
- package/dist/{types-CFEtuRWJ.d.ts → types-BGtR3k9J.d.ts} +8 -1
- package/dist/{types-DneUoivl.d.cts → types-B_pxRqfw.d.cts} +8 -1
- package/dist/ux.cjs.map +1 -1
- package/dist/ux.d.cts +1 -1
- package/dist/ux.d.ts +1 -1
- package/dist/ux.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-AUL4LU63.js.map +0 -1
- package/dist/chunk-KDHLKBL2.js.map +0 -1
- package/dist/chunk-O7F6SGV4.js.map +0 -1
- package/dist/chunk-YXRLIV7A.js.map +0 -1
- package/dist/chunk-ZB4HHQMR.js.map +0 -1
package/dist/runtime.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { applyStatusesToNodes, createHistory, useFlowHistory, useFlowRun, useFlowState } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
export { runFlow } from './chunk-
|
|
1
|
+
export { applyOutputsToNodes, applyStatusesToNodes, createHistory, useFlowHistory, useFlowRun, useFlowState } from './chunk-OFW7GN3Y.js';
|
|
2
|
+
import './chunk-OWENS2H5.js';
|
|
3
|
+
export { runFlow } from './chunk-U2VJB7HR.js';
|
|
4
4
|
import './chunk-TITD5W4Y.js';
|
|
5
|
-
import './chunk-
|
|
5
|
+
import './chunk-Q6IPK64P.js';
|
|
6
6
|
//# sourceMappingURL=runtime.js.map
|
|
7
7
|
//# sourceMappingURL=runtime.js.map
|
package/dist/schema.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registry/registry.ts","../src/registry/ports.ts","../src/schema/workflow-schema.ts"],"names":[],"mappings":"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","file":"schema.cjs","sourcesContent":["import type { ConfigField, NodeKindDefinition } from \"./types\";\n\nconst kinds = new Map<string, NodeKindDefinition<any, any, any>>();\n/** alias → canonical name. See `resolveKindId`. */\nconst aliases = new Map<string, string>();\nconst listeners = new Set<() => void>();\n\n/**\n * registerNodeKind — install a node kind in the global registry. Returns\n * an `unregister` function. Calling with the same name replaces the prior\n * registration (handy for HMR).\n *\n * A kind's `name` is its CANONICAL id and is what gets written into saved\n * documents. Publish namespaced (`@fancy/llm_branch`, `@acme/salesforce_upsert`)\n * and list any previous bare names in `aliases`, so graphs saved before the\n * rename keep resolving.\n */\nexport function registerNodeKind<TC = any, TI = any, TO = any>(\n definition: NodeKindDefinition<TC, TI, TO>,\n): () => void {\n kinds.set(definition.name, definition as NodeKindDefinition<any, any, any>);\n for (const alias of definition.aliases ?? []) aliases.set(alias, definition.name);\n notify();\n return () => {\n if (kinds.get(definition.name) === (definition as any)) {\n kinds.delete(definition.name);\n for (const alias of definition.aliases ?? []) {\n if (aliases.get(alias) === definition.name) aliases.delete(alias);\n }\n notify();\n }\n };\n}\n\n/**\n * Resolve any id — canonical or alias — to the canonical one, or null.\n *\n * `kind` is persisted inside every saved graph, so a bare name that two\n * packages could both claim is unfixable after the fact: the ambiguous string\n * is already in the document. Canonical ids are namespaced; aliases exist so\n * documents written before namespacing keep opening.\n */\nexport function resolveKindId(id: string): string | null {\n if (kinds.has(id)) return id;\n const canonical = aliases.get(id);\n return canonical && kinds.has(canonical) ? canonical : null;\n}\n\n/** Get a single kind by canonical id or alias, or null. */\nexport function getNodeKind(name: string): NodeKindDefinition | null {\n const canonical = resolveKindId(name);\n return canonical ? ((kinds.get(canonical) as NodeKindDefinition) ?? null) : null;\n}\n\n/** Every id a kind answers to — canonical first. Used to key node-type maps. */\nexport function kindIds(kind: NodeKindDefinition): string[] {\n return [kind.name, ...(kind.aliases ?? [])];\n}\n\n/** List every registered kind, optionally filtered by category. */\nexport function listNodeKinds(category?: string): NodeKindDefinition[] {\n const all = Array.from(kinds.values()) as NodeKindDefinition[];\n return category ? all.filter((k) => k.category === category) : all;\n}\n\n/** Subscribe to registry changes. Returns an unsubscribe function. */\nexport function onNodeKindsChanged(listener: () => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\nfunction notify(): void {\n for (const l of listeners) l();\n}\n\n/** Fill in defaults from a kind's configSchema for newly-created nodes. */\nexport function defaultConfigFor(kind: NodeKindDefinition): Record<string, unknown> {\n const fromKind = kind.defaultConfig ? { ...(kind.defaultConfig as Record<string, unknown>) } : {};\n for (const field of kind.configSchema ?? []) {\n if (fromKind[field.key] !== undefined) continue;\n if (\"default\" in field && (field as any).default !== undefined) {\n fromKind[field.key] = (field as any).default;\n }\n }\n return fromKind;\n}\n\n/**\n * Validate a config object against a kind's schema. Returns an array of\n * issues (empty = valid). Validation is intentionally light — type\n * coercion + required-field checks. Hosts can layer Zod / Ajv on top.\n */\nexport function validateConfig(\n kind: NodeKindDefinition,\n config: Record<string, unknown>,\n): Array<{ key: string; message: string }> {\n const issues: Array<{ key: string; message: string }> = [];\n for (const field of kind.configSchema ?? []) {\n const value = config[field.key];\n if (field.required && (value === undefined || value === null || value === \"\")) {\n issues.push({ key: field.key, message: `${field.label} is required` });\n continue;\n }\n if (value === undefined || value === null) continue;\n const issue = validateField(field, value);\n if (issue) issues.push({ key: field.key, message: issue });\n }\n return issues;\n}\n\nfunction validateField(field: ConfigField, value: unknown): string | null {\n switch (field.type) {\n case \"text\":\n case \"textarea\":\n case \"expression\":\n case \"credential\":\n return typeof value === \"string\" ? null : `${field.label} must be a string`;\n case \"number\": {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return `${field.label} must be a number`;\n if (field.min !== undefined && value < field.min) return `${field.label} must be >= ${field.min}`;\n if (field.max !== undefined && value > field.max) return `${field.label} must be <= ${field.max}`;\n return null;\n }\n case \"switch\":\n return typeof value === \"boolean\" ? null : `${field.label} must be a boolean`;\n case \"select\": {\n const allowed = field.options.map((o) => o.value);\n return allowed.includes(String(value)) ? null : `${field.label} must be one of ${allowed.join(\", \")}`;\n }\n case \"json\":\n return null; // permissive — just JSON-shaped\n case \"repeater\": {\n if (!Array.isArray(value)) return `${field.label} must be a list`;\n if (field.minItems !== undefined && value.length < field.minItems) {\n return `${field.label} needs at least ${field.minItems}`;\n }\n if (field.maxItems !== undefined && value.length > field.maxItems) {\n return `${field.label} allows at most ${field.maxItems}`;\n }\n // Surface the first offending row so the author knows WHICH one.\n for (let i = 0; i < value.length; i++) {\n const row = value[i];\n if (!row || typeof row !== \"object\" || Array.isArray(row)) {\n return `${field.label} item ${i + 1} must be an object`;\n }\n for (const sub of field.fields) {\n const cell = (row as Record<string, unknown>)[sub.key];\n if (sub.required && (cell === undefined || cell === null || cell === \"\")) {\n return `${field.label} item ${i + 1}: ${sub.label} is required`;\n }\n if (cell === undefined || cell === null) continue;\n const issue = validateField(sub, cell);\n if (issue) return `${field.label} item ${i + 1}: ${issue}`;\n }\n }\n return null;\n }\n case \"keyvalue\": {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return `${field.label} must be a key/value map`;\n }\n const allowed = field.valueOptions?.map((o) => o.value);\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (typeof v !== \"string\") return `${field.label}: \"${k}\" must be a string`;\n if (allowed && !allowed.includes(v)) {\n return `${field.label}: \"${k}\" must be one of ${allowed.join(\", \")}`;\n }\n }\n return null;\n }\n case \"document\":\n return null; // opaque to fancy-flow — the host's editor owns its shape\n default:\n return null;\n }\n}\n\n/** Default accents per category. */\nexport function categoryAccent(category: string): string {\n switch (category) {\n case \"trigger\": return \"#10b981\";\n case \"logic\": return \"#f59e0b\";\n case \"data\": return \"#0ea5e9\";\n case \"ai\": return \"#8b5cf6\";\n case \"io\": return \"#3b82f6\";\n case \"human\": return \"#ec4899\";\n case \"output\": return \"#a855f7\";\n case \"layout\": return \"#64748b\";\n default: return \"#71717a\";\n }\n}\n","import type { FlowNode, PortDescriptor } from \"../types\";\nimport type { NodeKindDefinition, PortSpec } from \"./types\";\n\n/**\n * Port resolution — the single place a node's ports are derived, shared by\n * the canvas renderer and the headless runtime.\n *\n * This module is deliberately React-free: `runFlow` (the `/engine` entry)\n * imports it, and the engine bundle must stay free of React.\n *\n * ## Why this is centralized\n *\n * Ports used to be read in two places that disagreed — the canvas consulted\n * `data.outputs ?? kind.outputs`, while the runtime consulted `data.outputs`\n * ONLY and fell back to a single `out` port. A kind that declared branch ports\n * therefore drew correctly and then routed as if it had one output, unless the\n * host remembered to mirror the ports onto every node's `data`. Both callers\n * now go through `resolveNodePorts`, so declared ports and executed ports\n * cannot drift apart.\n */\n\n/**\n * Resolve a `PortSpec` against a config object.\n *\n * A config-driven spec is author-supplied and runs on every render, so a throw\n * is contained: it degrades to \"undeclared\" (letting the caller fall back)\n * rather than taking out the canvas or aborting a run mid-flight.\n */\nexport function resolvePortSpec<TConfig>(\n spec: PortSpec<TConfig> | undefined,\n config: TConfig,\n): PortDescriptor[] | undefined {\n if (spec === undefined) return undefined;\n if (typeof spec !== \"function\") return spec;\n try {\n const resolved = (spec as (c: TConfig) => PortDescriptor[])(config);\n return Array.isArray(resolved) ? resolved : undefined;\n } catch {\n return undefined;\n }\n}\n\n/** Read the config bag off a node, tolerating the FlowNodeData union. */\nexport function nodeConfig(node: Pick<FlowNode, \"data\">): Record<string, unknown> {\n return ((node.data as any)?.config ?? {}) as Record<string, unknown>;\n}\n\n/**\n * Resolve a node's effective ports.\n *\n * Precedence: explicit `data.inputs`/`data.outputs` (a per-node host override)\n * beats the kind's declaration. `undefined` means \"nothing declared\" — the\n * caller applies its own category default.\n */\nexport function resolveNodePorts(\n node: Pick<FlowNode, \"data\">,\n kind?: Pick<NodeKindDefinition<any>, \"inputs\" | \"outputs\">,\n): { inputs?: PortDescriptor[]; outputs?: PortDescriptor[] } {\n const config = nodeConfig(node);\n const data = node.data as any;\n return {\n inputs: data?.inputs ?? resolvePortSpec(kind?.inputs, config),\n outputs: data?.outputs ?? resolvePortSpec(kind?.outputs, config),\n };\n}\n","import type { FlowEdge, FlowGraph, FlowNode, PortDescriptor } from \"../types\";\nimport { defaultConfigFor, getNodeKind, validateConfig } from \"../registry/registry\";\nimport { resolveNodePorts } from \"../registry/ports\";\n\n/** Schema version. Bump on breaking shape changes; add migrations as needed. */\nexport const WORKFLOW_SCHEMA_VERSION = 1 as const;\nexport const WORKFLOW_SCHEMA_URL = \"https://particle.academy/schemas/workflow/v1.json\";\n\nexport type WorkflowSchema = {\n $schema: typeof WORKFLOW_SCHEMA_URL;\n version: typeof WORKFLOW_SCHEMA_VERSION;\n metadata?: WorkflowMetadata;\n graph: {\n nodes: WorkflowSchemaNode[];\n edges: WorkflowSchemaEdge[];\n };\n view?: {\n viewport?: { x: number; y: number; zoom: number };\n };\n};\n\nexport type WorkflowMetadata = {\n id?: string;\n name?: string;\n description?: string;\n createdAt?: number;\n updatedAt?: number;\n author?: string;\n tags?: string[];\n};\n\nexport type WorkflowSchemaNode = {\n id: string;\n /** Registry kind name (e.g. \"memory_store\"). */\n kind: string;\n position: { x: number; y: number };\n label?: string;\n description?: string;\n config?: Record<string, unknown>;\n /**\n * Resolved ports, written on export.\n *\n * A kind may derive its ports from config (`switch_case` cases,\n * `llm_branch` routes), and that derivation is a JavaScript function — a\n * runtime in another language cannot execute it. Without the resolved ports\n * in the document, the PHP twin sees no declared outputs and falls back to a\n * single `out`, so every branch edge in an exported flow silently stops\n * firing. Serializing them keeps the schema self-describing and preserves\n * the cross-runtime guarantee: same JSON in, same routing out.\n *\n * Optional and additive — a hand-written schema may omit them, and each\n * runtime then falls back to its own kind registry.\n */\n inputs?: PortDescriptor[];\n outputs?: PortDescriptor[];\n /**\n * Visual layout — additive + optional. `parentId`/`extent` carry node grouping\n * (swimlanes / containers); `width`/`height` carry an explicit (resized) size;\n * `style` carries inline presentation. A runtime that only walks edges/ports\n * (e.g. the PHP twin) ignores all of these — they exist purely for the canvas,\n * so an older reader that doesn't know them simply drops them.\n */\n parentId?: string;\n extent?: \"parent\" | [[number, number], [number, number]];\n width?: number;\n height?: number;\n style?: Record<string, unknown>;\n};\n\nexport type WorkflowSchemaEdge = {\n id: string;\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n label?: string;\n};\n\nexport type ImportIssue = {\n level: \"error\" | \"warning\";\n nodeId?: string;\n edgeId?: string;\n message: string;\n};\n\nexport type ImportResult = {\n graph: FlowGraph;\n issues: ImportIssue[];\n /** True when the import produced a usable graph (errors may have been\n * rewritten to warnings via `lenient: true`). */\n ok: boolean;\n};\n\n/** Snapshot the in-memory graph as a portable WorkflowSchema. */\nexport function exportWorkflow(\n graph: FlowGraph,\n metadata?: WorkflowMetadata,\n view?: WorkflowSchema[\"view\"],\n): WorkflowSchema {\n return {\n $schema: WORKFLOW_SCHEMA_URL,\n version: WORKFLOW_SCHEMA_VERSION,\n metadata: metadata ? { ...metadata, updatedAt: Date.now() } : undefined,\n graph: {\n nodes: graph.nodes.map(toSchemaNode),\n edges: graph.edges.map(toSchemaEdge),\n },\n view,\n };\n}\n\nfunction toSchemaNode(n: FlowNode): WorkflowSchemaNode {\n const data: any = n.data ?? {};\n const kindName = data.kind ?? n.type ?? \"custom\";\n // Resolve through the same helper the canvas and runtime use, so a\n // config-driven kind writes its ACTUAL ports into the document instead of\n // leaving another language's runtime to guess at them.\n const ports = resolveNodePorts(n, getNodeKind(kindName) ?? undefined);\n const node = n as any;\n return {\n id: n.id,\n kind: kindName,\n position: { x: n.position.x, y: n.position.y },\n label: data.label,\n description: data.description,\n config: data.config,\n inputs: ports.inputs,\n outputs: ports.outputs,\n // Visual layout — only when explicitly set (never persist auto-`measured`\n // dimensions, which are derived, not authored).\n ...(node.parentId ? { parentId: node.parentId } : {}),\n ...(node.extent ? { extent: node.extent } : {}),\n ...(typeof node.width === \"number\" ? { width: node.width } : {}),\n ...(typeof node.height === \"number\" ? { height: node.height } : {}),\n ...(node.style ? { style: node.style } : {}),\n };\n}\n\nfunction toSchemaEdge(e: FlowEdge): WorkflowSchemaEdge {\n return {\n id: e.id,\n source: e.source,\n target: e.target,\n sourceHandle: e.sourceHandle ?? undefined,\n targetHandle: e.targetHandle ?? undefined,\n label: typeof e.label === \"string\" ? e.label : undefined,\n };\n}\n\nexport type ImportOptions = {\n /** When true, unknown kinds become warnings + a \"custom\" placeholder\n * instead of errors. Default false. */\n lenient?: boolean;\n};\n\n/**\n * Migrate a raw schema object up to the current version. Additive changes need\n * no migration (an older document simply lacks the newer optional fields); this\n * is the seam for a future BREAKING bump — add `case N → N+1` steps here and\n * `importWorkflow` runs them before validating the version.\n */\nexport function migrateSchema(schema: unknown): unknown {\n // v1 is current — nothing to migrate yet.\n return schema;\n}\n\n/**\n * Hydrate a schema into runtime FlowGraph + validate kinds/configs against\n * the registry. Reports issues for unknown kinds, missing required config,\n * and dangling edges.\n */\nexport function importWorkflow(schema: unknown, options: ImportOptions = {}): ImportResult {\n const issues: ImportIssue[] = [];\n const lenient = options.lenient === true;\n schema = migrateSchema(schema);\n\n if (!schema || typeof schema !== \"object\") {\n return { ok: false, graph: { nodes: [], edges: [] }, issues: [{ level: \"error\", message: \"Schema is not an object.\" }] };\n }\n const s = schema as Partial<WorkflowSchema>;\n if (s.version !== WORKFLOW_SCHEMA_VERSION) {\n issues.push({\n level: lenient ? \"warning\" : \"error\",\n message: `Unsupported workflow schema version: ${s.version} (expected ${WORKFLOW_SCHEMA_VERSION})`,\n });\n if (!lenient) return { ok: false, graph: { nodes: [], edges: [] }, issues };\n }\n\n const rawNodes = s.graph?.nodes ?? [];\n const rawEdges = s.graph?.edges ?? [];\n\n const nodes: FlowNode[] = rawNodes.map((n) => {\n const kind = getNodeKind(n.kind);\n if (!kind) {\n issues.push({\n level: lenient ? \"warning\" : \"error\",\n nodeId: n.id,\n message: `Unknown kind \"${n.kind}\" — register it before importing.`,\n });\n }\n const config = n.config ?? (kind ? defaultConfigFor(kind) : {});\n if (kind) {\n for (const iss of validateConfig(kind, config)) {\n issues.push({ level: \"warning\", nodeId: n.id, message: `${iss.key}: ${iss.message}` });\n }\n }\n // Canonicalise on the way in: a document may carry a pre-namespace id, and\n // rewriting it here means the graph converges on the canonical id the next\n // time it is saved, rather than carrying the ambiguous name forever.\n const kindId = kind?.name ?? n.kind;\n return {\n id: n.id,\n type: kindId,\n position: { x: n.position?.x ?? 0, y: n.position?.y ?? 0 },\n // Rehydrate visual layout onto the node's top level (where xyflow reads it).\n ...(n.parentId ? { parentId: n.parentId } : {}),\n ...(n.extent ? { extent: n.extent } : {}),\n ...(typeof n.width === \"number\" ? { width: n.width } : {}),\n ...(typeof n.height === \"number\" ? { height: n.height } : {}),\n ...(n.style ? { style: n.style } : {}),\n data: {\n kind: kindId,\n label: n.label ?? kind?.label ?? n.kind,\n description: n.description,\n config,\n // Carry serialized ports back onto the node so a round-trip is stable\n // and an unknown kind still routes the way the document described.\n ...(n.inputs ? { inputs: n.inputs } : {}),\n ...(n.outputs ? { outputs: n.outputs } : {}),\n } as any,\n };\n });\n\n const nodeIds = new Set(nodes.map((n) => n.id));\n const edges: FlowEdge[] = rawEdges\n .map((e) => {\n if (!nodeIds.has(e.source)) {\n issues.push({ level: \"warning\", edgeId: e.id, message: `Edge source \"${e.source}\" not found.` });\n return null;\n }\n if (!nodeIds.has(e.target)) {\n issues.push({ level: \"warning\", edgeId: e.id, message: `Edge target \"${e.target}\" not found.` });\n return null;\n }\n return {\n id: e.id,\n source: e.source,\n target: e.target,\n sourceHandle: e.sourceHandle,\n targetHandle: e.targetHandle,\n label: e.label,\n } as FlowEdge;\n })\n .filter((e): e is FlowEdge => e !== null);\n\n const ok = issues.every((i) => i.level !== \"error\");\n return { ok, graph: { nodes, edges }, issues };\n}\n\n/** Convenience: serialize a schema as a downloadable JSON Blob. */\nexport function workflowToBlob(schema: WorkflowSchema): Blob {\n return new Blob([JSON.stringify(schema, null, 2)], { type: \"application/json\" });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/registry/registry.ts","../src/registry/ports.ts","../src/schema/workflow-schema.ts"],"names":[],"mappings":"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","file":"schema.cjs","sourcesContent":["import type { ConfigField, NodeKindDefinition } from \"./types\";\n\nconst kinds = new Map<string, NodeKindDefinition<any, any, any>>();\n/** alias → canonical name. See `resolveKindId`. */\nconst aliases = new Map<string, string>();\nconst listeners = new Set<() => void>();\n\n/**\n * registerNodeKind — install a node kind in the global registry. Returns\n * an `unregister` function. Calling with the same name replaces the prior\n * registration (handy for HMR).\n *\n * A kind's `name` is its CANONICAL id and is what gets written into saved\n * documents. Publish namespaced (`@fancy/llm_branch`, `@acme/salesforce_upsert`)\n * and list any previous bare names in `aliases`, so graphs saved before the\n * rename keep resolving.\n */\nexport function registerNodeKind<TC = any, TI = any, TO = any>(\n definition: NodeKindDefinition<TC, TI, TO>,\n): () => void {\n kinds.set(definition.name, definition as NodeKindDefinition<any, any, any>);\n for (const alias of definition.aliases ?? []) aliases.set(alias, definition.name);\n notify();\n return () => {\n if (kinds.get(definition.name) === (definition as any)) {\n kinds.delete(definition.name);\n for (const alias of definition.aliases ?? []) {\n if (aliases.get(alias) === definition.name) aliases.delete(alias);\n }\n notify();\n }\n };\n}\n\n/**\n * Resolve any id — canonical or alias — to the canonical one, or null.\n *\n * `kind` is persisted inside every saved graph, so a bare name that two\n * packages could both claim is unfixable after the fact: the ambiguous string\n * is already in the document. Canonical ids are namespaced; aliases exist so\n * documents written before namespacing keep opening.\n */\nexport function resolveKindId(id: string): string | null {\n if (kinds.has(id)) return id;\n const canonical = aliases.get(id);\n return canonical && kinds.has(canonical) ? canonical : null;\n}\n\n/** Get a single kind by canonical id or alias, or null. */\nexport function getNodeKind(name: string): NodeKindDefinition | null {\n const canonical = resolveKindId(name);\n return canonical ? ((kinds.get(canonical) as NodeKindDefinition) ?? null) : null;\n}\n\n/** Every id a kind answers to — canonical first. Used to key node-type maps. */\nexport function kindIds(kind: NodeKindDefinition): string[] {\n return [kind.name, ...(kind.aliases ?? [])];\n}\n\n/** List every registered kind, optionally filtered by category. */\nexport function listNodeKinds(category?: string): NodeKindDefinition[] {\n const all = Array.from(kinds.values()) as NodeKindDefinition[];\n return category ? all.filter((k) => k.category === category) : all;\n}\n\n/** Subscribe to registry changes. Returns an unsubscribe function. */\nexport function onNodeKindsChanged(listener: () => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\nfunction notify(): void {\n for (const l of listeners) l();\n}\n\n/** Fill in defaults from a kind's configSchema for newly-created nodes. */\nexport function defaultConfigFor(kind: NodeKindDefinition): Record<string, unknown> {\n const fromKind = kind.defaultConfig ? { ...(kind.defaultConfig as Record<string, unknown>) } : {};\n for (const field of kind.configSchema ?? []) {\n if (fromKind[field.key] !== undefined) continue;\n if (\"default\" in field && (field as any).default !== undefined) {\n fromKind[field.key] = (field as any).default;\n }\n }\n return fromKind;\n}\n\n/**\n * Validate a config object against a kind's schema. Returns an array of\n * issues (empty = valid). Validation is intentionally light — type\n * coercion + required-field checks. Hosts can layer Zod / Ajv on top.\n */\nexport function validateConfig(\n kind: NodeKindDefinition,\n config: Record<string, unknown>,\n): Array<{ key: string; message: string }> {\n const issues: Array<{ key: string; message: string }> = [];\n for (const field of kind.configSchema ?? []) {\n const value = config[field.key];\n if (field.required && (value === undefined || value === null || value === \"\")) {\n issues.push({ key: field.key, message: `${field.label} is required` });\n continue;\n }\n if (value === undefined || value === null) continue;\n const issue = validateField(field, value);\n if (issue) issues.push({ key: field.key, message: issue });\n }\n return issues;\n}\n\nfunction validateField(field: ConfigField, value: unknown): string | null {\n switch (field.type) {\n case \"text\":\n case \"textarea\":\n case \"expression\":\n case \"credential\":\n return typeof value === \"string\" ? null : `${field.label} must be a string`;\n case \"number\": {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return `${field.label} must be a number`;\n if (field.min !== undefined && value < field.min) return `${field.label} must be >= ${field.min}`;\n if (field.max !== undefined && value > field.max) return `${field.label} must be <= ${field.max}`;\n return null;\n }\n case \"switch\":\n return typeof value === \"boolean\" ? null : `${field.label} must be a boolean`;\n case \"select\": {\n const allowed = field.options.map((o) => o.value);\n return allowed.includes(String(value)) ? null : `${field.label} must be one of ${allowed.join(\", \")}`;\n }\n case \"json\":\n return null; // permissive — just JSON-shaped\n case \"repeater\": {\n if (!Array.isArray(value)) return `${field.label} must be a list`;\n if (field.minItems !== undefined && value.length < field.minItems) {\n return `${field.label} needs at least ${field.minItems}`;\n }\n if (field.maxItems !== undefined && value.length > field.maxItems) {\n return `${field.label} allows at most ${field.maxItems}`;\n }\n // Surface the first offending row so the author knows WHICH one.\n for (let i = 0; i < value.length; i++) {\n const row = value[i];\n if (!row || typeof row !== \"object\" || Array.isArray(row)) {\n return `${field.label} item ${i + 1} must be an object`;\n }\n for (const sub of field.fields) {\n const cell = (row as Record<string, unknown>)[sub.key];\n if (sub.required && (cell === undefined || cell === null || cell === \"\")) {\n return `${field.label} item ${i + 1}: ${sub.label} is required`;\n }\n if (cell === undefined || cell === null) continue;\n const issue = validateField(sub, cell);\n if (issue) return `${field.label} item ${i + 1}: ${issue}`;\n }\n }\n return null;\n }\n case \"keyvalue\": {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return `${field.label} must be a key/value map`;\n }\n const allowed = field.valueOptions?.map((o) => o.value);\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (typeof v !== \"string\") return `${field.label}: \"${k}\" must be a string`;\n if (allowed && !allowed.includes(v)) {\n return `${field.label}: \"${k}\" must be one of ${allowed.join(\", \")}`;\n }\n }\n return null;\n }\n case \"document\":\n return null; // opaque to fancy-flow — the host's editor owns its shape\n default:\n return null;\n }\n}\n\n/** Default accents per category. */\nexport function categoryAccent(category: string): string {\n switch (category) {\n case \"trigger\": return \"#10b981\";\n case \"logic\": return \"#f59e0b\";\n case \"data\": return \"#0ea5e9\";\n case \"ai\": return \"#8b5cf6\";\n case \"io\": return \"#3b82f6\";\n case \"human\": return \"#ec4899\";\n case \"output\": return \"#a855f7\";\n case \"layout\": return \"#64748b\";\n case \"annotation\": return \"#eab308\";\n default: return \"#71717a\";\n }\n}\n","import type { FlowNode, PortDescriptor } from \"../types\";\nimport type { NodeKindDefinition, PortSpec } from \"./types\";\n\n/**\n * Port resolution — the single place a node's ports are derived, shared by\n * the canvas renderer and the headless runtime.\n *\n * This module is deliberately React-free: `runFlow` (the `/engine` entry)\n * imports it, and the engine bundle must stay free of React.\n *\n * ## Why this is centralized\n *\n * Ports used to be read in two places that disagreed — the canvas consulted\n * `data.outputs ?? kind.outputs`, while the runtime consulted `data.outputs`\n * ONLY and fell back to a single `out` port. A kind that declared branch ports\n * therefore drew correctly and then routed as if it had one output, unless the\n * host remembered to mirror the ports onto every node's `data`. Both callers\n * now go through `resolveNodePorts`, so declared ports and executed ports\n * cannot drift apart.\n */\n\n/**\n * Resolve a `PortSpec` against a config object.\n *\n * A config-driven spec is author-supplied and runs on every render, so a throw\n * is contained: it degrades to \"undeclared\" (letting the caller fall back)\n * rather than taking out the canvas or aborting a run mid-flight.\n */\nexport function resolvePortSpec<TConfig>(\n spec: PortSpec<TConfig> | undefined,\n config: TConfig,\n): PortDescriptor[] | undefined {\n if (spec === undefined) return undefined;\n if (typeof spec !== \"function\") return spec;\n try {\n const resolved = (spec as (c: TConfig) => PortDescriptor[])(config);\n return Array.isArray(resolved) ? resolved : undefined;\n } catch {\n return undefined;\n }\n}\n\n/** Read the config bag off a node, tolerating the FlowNodeData union. */\nexport function nodeConfig(node: Pick<FlowNode, \"data\">): Record<string, unknown> {\n return ((node.data as any)?.config ?? {}) as Record<string, unknown>;\n}\n\n/**\n * Resolve a node's effective ports.\n *\n * Precedence: explicit `data.inputs`/`data.outputs` (a per-node host override)\n * beats the kind's declaration. `undefined` means \"nothing declared\" — the\n * caller applies its own category default.\n */\nexport function resolveNodePorts(\n node: Pick<FlowNode, \"data\">,\n kind?: Pick<NodeKindDefinition<any>, \"inputs\" | \"outputs\">,\n): { inputs?: PortDescriptor[]; outputs?: PortDescriptor[] } {\n const config = nodeConfig(node);\n const data = node.data as any;\n return {\n inputs: data?.inputs ?? resolvePortSpec(kind?.inputs, config),\n outputs: data?.outputs ?? resolvePortSpec(kind?.outputs, config),\n };\n}\n","import type { FlowEdge, FlowGraph, FlowNode, PortDescriptor } from \"../types\";\nimport { defaultConfigFor, getNodeKind, validateConfig } from \"../registry/registry\";\nimport { resolveNodePorts } from \"../registry/ports\";\n\n/** Schema version. Bump on breaking shape changes; add migrations as needed. */\nexport const WORKFLOW_SCHEMA_VERSION = 1 as const;\nexport const WORKFLOW_SCHEMA_URL = \"https://particle.academy/schemas/workflow/v1.json\";\n\nexport type WorkflowSchema = {\n $schema: typeof WORKFLOW_SCHEMA_URL;\n version: typeof WORKFLOW_SCHEMA_VERSION;\n metadata?: WorkflowMetadata;\n graph: {\n nodes: WorkflowSchemaNode[];\n edges: WorkflowSchemaEdge[];\n };\n view?: {\n viewport?: { x: number; y: number; zoom: number };\n };\n};\n\nexport type WorkflowMetadata = {\n id?: string;\n name?: string;\n description?: string;\n createdAt?: number;\n updatedAt?: number;\n author?: string;\n tags?: string[];\n};\n\nexport type WorkflowSchemaNode = {\n id: string;\n /** Registry kind name (e.g. \"memory_store\"). */\n kind: string;\n position: { x: number; y: number };\n label?: string;\n description?: string;\n config?: Record<string, unknown>;\n /**\n * Resolved ports, written on export.\n *\n * A kind may derive its ports from config (`switch_case` cases,\n * `llm_branch` routes), and that derivation is a JavaScript function — a\n * runtime in another language cannot execute it. Without the resolved ports\n * in the document, the PHP twin sees no declared outputs and falls back to a\n * single `out`, so every branch edge in an exported flow silently stops\n * firing. Serializing them keeps the schema self-describing and preserves\n * the cross-runtime guarantee: same JSON in, same routing out.\n *\n * Optional and additive — a hand-written schema may omit them, and each\n * runtime then falls back to its own kind registry.\n */\n inputs?: PortDescriptor[];\n outputs?: PortDescriptor[];\n /**\n * Visual layout — additive + optional. `parentId`/`extent` carry node grouping\n * (swimlanes / containers); `width`/`height` carry an explicit (resized) size;\n * `style` carries inline presentation. A runtime that only walks edges/ports\n * (e.g. the PHP twin) ignores all of these — they exist purely for the canvas,\n * so an older reader that doesn't know them simply drops them.\n */\n parentId?: string;\n extent?: \"parent\" | [[number, number], [number, number]];\n width?: number;\n height?: number;\n style?: Record<string, unknown>;\n};\n\nexport type WorkflowSchemaEdge = {\n id: string;\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n label?: string;\n};\n\nexport type ImportIssue = {\n level: \"error\" | \"warning\";\n nodeId?: string;\n edgeId?: string;\n message: string;\n};\n\nexport type ImportResult = {\n graph: FlowGraph;\n issues: ImportIssue[];\n /** True when the import produced a usable graph (errors may have been\n * rewritten to warnings via `lenient: true`). */\n ok: boolean;\n};\n\n/** Snapshot the in-memory graph as a portable WorkflowSchema. */\nexport function exportWorkflow(\n graph: FlowGraph,\n metadata?: WorkflowMetadata,\n view?: WorkflowSchema[\"view\"],\n): WorkflowSchema {\n return {\n $schema: WORKFLOW_SCHEMA_URL,\n version: WORKFLOW_SCHEMA_VERSION,\n metadata: metadata ? { ...metadata, updatedAt: Date.now() } : undefined,\n graph: {\n nodes: graph.nodes.map(toSchemaNode),\n edges: graph.edges.map(toSchemaEdge),\n },\n view,\n };\n}\n\nfunction toSchemaNode(n: FlowNode): WorkflowSchemaNode {\n const data: any = n.data ?? {};\n const kindName = data.kind ?? n.type ?? \"custom\";\n // Resolve through the same helper the canvas and runtime use, so a\n // config-driven kind writes its ACTUAL ports into the document instead of\n // leaving another language's runtime to guess at them.\n const ports = resolveNodePorts(n, getNodeKind(kindName) ?? undefined);\n const node = n as any;\n return {\n id: n.id,\n kind: kindName,\n position: { x: n.position.x, y: n.position.y },\n label: data.label,\n description: data.description,\n config: data.config,\n inputs: ports.inputs,\n outputs: ports.outputs,\n // Visual layout — only when explicitly set (never persist auto-`measured`\n // dimensions, which are derived, not authored).\n ...(node.parentId ? { parentId: node.parentId } : {}),\n ...(node.extent ? { extent: node.extent } : {}),\n ...(typeof node.width === \"number\" ? { width: node.width } : {}),\n ...(typeof node.height === \"number\" ? { height: node.height } : {}),\n ...(node.style ? { style: node.style } : {}),\n };\n}\n\nfunction toSchemaEdge(e: FlowEdge): WorkflowSchemaEdge {\n return {\n id: e.id,\n source: e.source,\n target: e.target,\n sourceHandle: e.sourceHandle ?? undefined,\n targetHandle: e.targetHandle ?? undefined,\n label: typeof e.label === \"string\" ? e.label : undefined,\n };\n}\n\nexport type ImportOptions = {\n /** When true, unknown kinds become warnings + a \"custom\" placeholder\n * instead of errors. Default false. */\n lenient?: boolean;\n};\n\n/**\n * Migrate a raw schema object up to the current version. Additive changes need\n * no migration (an older document simply lacks the newer optional fields); this\n * is the seam for a future BREAKING bump — add `case N → N+1` steps here and\n * `importWorkflow` runs them before validating the version.\n */\nexport function migrateSchema(schema: unknown): unknown {\n // v1 is current — nothing to migrate yet.\n return schema;\n}\n\n/**\n * Hydrate a schema into runtime FlowGraph + validate kinds/configs against\n * the registry. Reports issues for unknown kinds, missing required config,\n * and dangling edges.\n */\nexport function importWorkflow(schema: unknown, options: ImportOptions = {}): ImportResult {\n const issues: ImportIssue[] = [];\n const lenient = options.lenient === true;\n schema = migrateSchema(schema);\n\n if (!schema || typeof schema !== \"object\") {\n return { ok: false, graph: { nodes: [], edges: [] }, issues: [{ level: \"error\", message: \"Schema is not an object.\" }] };\n }\n const s = schema as Partial<WorkflowSchema>;\n if (s.version !== WORKFLOW_SCHEMA_VERSION) {\n issues.push({\n level: lenient ? \"warning\" : \"error\",\n message: `Unsupported workflow schema version: ${s.version} (expected ${WORKFLOW_SCHEMA_VERSION})`,\n });\n if (!lenient) return { ok: false, graph: { nodes: [], edges: [] }, issues };\n }\n\n const rawNodes = s.graph?.nodes ?? [];\n const rawEdges = s.graph?.edges ?? [];\n\n const nodes: FlowNode[] = rawNodes.map((n) => {\n const kind = getNodeKind(n.kind);\n if (!kind) {\n issues.push({\n level: lenient ? \"warning\" : \"error\",\n nodeId: n.id,\n message: `Unknown kind \"${n.kind}\" — register it before importing.`,\n });\n }\n const config = n.config ?? (kind ? defaultConfigFor(kind) : {});\n if (kind) {\n for (const iss of validateConfig(kind, config)) {\n issues.push({ level: \"warning\", nodeId: n.id, message: `${iss.key}: ${iss.message}` });\n }\n }\n // Canonicalise on the way in: a document may carry a pre-namespace id, and\n // rewriting it here means the graph converges on the canonical id the next\n // time it is saved, rather than carrying the ambiguous name forever.\n const kindId = kind?.name ?? n.kind;\n return {\n id: n.id,\n type: kindId,\n position: { x: n.position?.x ?? 0, y: n.position?.y ?? 0 },\n // Rehydrate visual layout onto the node's top level (where xyflow reads it).\n ...(n.parentId ? { parentId: n.parentId } : {}),\n ...(n.extent ? { extent: n.extent } : {}),\n ...(typeof n.width === \"number\" ? { width: n.width } : {}),\n ...(typeof n.height === \"number\" ? { height: n.height } : {}),\n ...(n.style ? { style: n.style } : {}),\n data: {\n kind: kindId,\n label: n.label ?? kind?.label ?? n.kind,\n description: n.description,\n config,\n // Carry serialized ports back onto the node so a round-trip is stable\n // and an unknown kind still routes the way the document described.\n ...(n.inputs ? { inputs: n.inputs } : {}),\n ...(n.outputs ? { outputs: n.outputs } : {}),\n } as any,\n };\n });\n\n const nodeIds = new Set(nodes.map((n) => n.id));\n const edges: FlowEdge[] = rawEdges\n .map((e) => {\n if (!nodeIds.has(e.source)) {\n issues.push({ level: \"warning\", edgeId: e.id, message: `Edge source \"${e.source}\" not found.` });\n return null;\n }\n if (!nodeIds.has(e.target)) {\n issues.push({ level: \"warning\", edgeId: e.id, message: `Edge target \"${e.target}\" not found.` });\n return null;\n }\n return {\n id: e.id,\n source: e.source,\n target: e.target,\n sourceHandle: e.sourceHandle,\n targetHandle: e.targetHandle,\n label: e.label,\n } as FlowEdge;\n })\n .filter((e): e is FlowEdge => e !== null);\n\n const ok = issues.every((i) => i.level !== \"error\");\n return { ok, graph: { nodes, edges }, issues };\n}\n\n/** Convenience: serialize a schema as a downloadable JSON Blob. */\nexport function workflowToBlob(schema: WorkflowSchema): Blob {\n return new Blob([JSON.stringify(schema, null, 2)], { type: \"application/json\" });\n}\n"]}
|
package/dist/schema.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { WORKFLOW_SCHEMA_URL, WORKFLOW_SCHEMA_VERSION, exportWorkflow, importWorkflow, migrateSchema, workflowToBlob } from './chunk-
|
|
1
|
+
export { WORKFLOW_SCHEMA_URL, WORKFLOW_SCHEMA_VERSION, exportWorkflow, importWorkflow, migrateSchema, workflowToBlob } from './chunk-N5ICD2WZ.js';
|
|
2
2
|
import './chunk-TITD5W4Y.js';
|
|
3
|
-
import './chunk-
|
|
3
|
+
import './chunk-Q6IPK64P.js';
|
|
4
4
|
//# sourceMappingURL=schema.js.map
|
|
5
5
|
//# sourceMappingURL=schema.js.map
|
package/dist/styles.css
CHANGED
|
@@ -1586,6 +1586,86 @@ svg.react-flow__connectionline {
|
|
|
1586
1586
|
text-overflow: ellipsis;
|
|
1587
1587
|
white-space: nowrap;
|
|
1588
1588
|
}
|
|
1589
|
+
.ff-note {
|
|
1590
|
+
width: 100%;
|
|
1591
|
+
height: 100%;
|
|
1592
|
+
box-sizing: border-box;
|
|
1593
|
+
padding: 8px 10px;
|
|
1594
|
+
border: 1px solid transparent;
|
|
1595
|
+
border-radius: 8px;
|
|
1596
|
+
font-family:
|
|
1597
|
+
ui-sans-serif,
|
|
1598
|
+
system-ui,
|
|
1599
|
+
sans-serif;
|
|
1600
|
+
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
|
|
1601
|
+
overflow: hidden;
|
|
1602
|
+
display: flex;
|
|
1603
|
+
flex-direction: column;
|
|
1604
|
+
gap: 4px;
|
|
1605
|
+
}
|
|
1606
|
+
.ff-note--selected {
|
|
1607
|
+
box-shadow: 0 0 0 1px currentColor;
|
|
1608
|
+
}
|
|
1609
|
+
.ff-note__title {
|
|
1610
|
+
font-size: 11px;
|
|
1611
|
+
font-weight: 700;
|
|
1612
|
+
text-transform: uppercase;
|
|
1613
|
+
letter-spacing: 0.04em;
|
|
1614
|
+
}
|
|
1615
|
+
.ff-note__body {
|
|
1616
|
+
flex: 1;
|
|
1617
|
+
min-height: 0;
|
|
1618
|
+
font-size: 12px;
|
|
1619
|
+
line-height: 1.5;
|
|
1620
|
+
color: #3f3f46;
|
|
1621
|
+
white-space: pre-wrap;
|
|
1622
|
+
overflow: auto;
|
|
1623
|
+
}
|
|
1624
|
+
.dark .ff-note__body {
|
|
1625
|
+
color: #e4e4e7;
|
|
1626
|
+
}
|
|
1627
|
+
@media (prefers-color-scheme: dark) {
|
|
1628
|
+
.ff-note__body:not(.ff-canvas--light *) {
|
|
1629
|
+
color: #e4e4e7;
|
|
1630
|
+
}
|
|
1631
|
+
}
|
|
1632
|
+
.ff-note__placeholder {
|
|
1633
|
+
color: #a1a1aa;
|
|
1634
|
+
font-style: italic;
|
|
1635
|
+
}
|
|
1636
|
+
.ff-note__input {
|
|
1637
|
+
flex: 1;
|
|
1638
|
+
min-height: 0;
|
|
1639
|
+
width: 100%;
|
|
1640
|
+
resize: none;
|
|
1641
|
+
border: none;
|
|
1642
|
+
outline: none;
|
|
1643
|
+
background: transparent;
|
|
1644
|
+
font: inherit;
|
|
1645
|
+
font-size: 12px;
|
|
1646
|
+
line-height: 1.5;
|
|
1647
|
+
color: inherit;
|
|
1648
|
+
}
|
|
1649
|
+
.ff-node__output {
|
|
1650
|
+
margin: 0;
|
|
1651
|
+
padding: 4px 10px 8px;
|
|
1652
|
+
font-size: 11px;
|
|
1653
|
+
font-family:
|
|
1654
|
+
ui-monospace,
|
|
1655
|
+
"SF Mono",
|
|
1656
|
+
Menlo,
|
|
1657
|
+
monospace;
|
|
1658
|
+
color: #059669;
|
|
1659
|
+
overflow: hidden;
|
|
1660
|
+
text-overflow: ellipsis;
|
|
1661
|
+
white-space: nowrap;
|
|
1662
|
+
}
|
|
1663
|
+
.dark .ff-node__output {
|
|
1664
|
+
color: #34d399;
|
|
1665
|
+
}
|
|
1666
|
+
.ff-helper-line {
|
|
1667
|
+
background: #3b82f6;
|
|
1668
|
+
}
|
|
1589
1669
|
.dark .ff-lane {
|
|
1590
1670
|
background: rgba(148, 163, 184, 0.08);
|
|
1591
1671
|
border-color: #3f3f46;
|
package/dist/styles.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/@xyflow/react/dist/style.css","../src/styles.css"],"sourcesContent":["/* this gets exported as style.css and can be used for the default theming */\n/* these are the necessary styles for React/Svelte Flow, they get used by base.css and style.css */\n.react-flow {\n direction: ltr;\n\n --xy-edge-stroke-default: #b1b1b7;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #555;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(255, 255, 255, 0.5);\n\n --xy-minimap-background-color-default: #fff;\n --xy-minimap-mask-background-color-default: rgba(240, 240, 240, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #e2e2e2;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: transparent;\n --xy-background-pattern-dots-color-default: #91919a;\n --xy-background-pattern-lines-color-default: #eee;\n --xy-background-pattern-cross-color-default: #e2e2e2;\n background-color: var(--xy-background-color, var(--xy-background-color-default));\n --xy-node-color-default: inherit;\n --xy-node-border-default: 1px solid #1a192b;\n --xy-node-background-color-default: #fff;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #1a192b;\n --xy-node-border-radius-default: 3px;\n\n --xy-handle-background-color-default: #1a192b;\n --xy-handle-border-color-default: #fff;\n\n --xy-selection-background-color-default: rgba(0, 89, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(0, 89, 220, 0.8);\n\n --xy-controls-button-background-color-default: #fefefe;\n --xy-controls-button-background-color-hover-default: #f4f4f4;\n --xy-controls-button-color-default: inherit;\n --xy-controls-button-color-hover-default: inherit;\n --xy-controls-button-border-color-default: #eee;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #ffffff;\n --xy-edge-label-color-default: inherit;\n --xy-resize-background-color-default: #3367d9;\n}\n.react-flow.dark {\n --xy-edge-stroke-default: #3e3e3e;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #727272;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(150, 150, 150, 0.25);\n\n --xy-minimap-background-color-default: #141414;\n --xy-minimap-mask-background-color-default: rgba(60, 60, 60, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #2b2b2b;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: #141414;\n --xy-background-pattern-dots-color-default: #777;\n --xy-background-pattern-lines-color-default: #777;\n --xy-background-pattern-cross-color-default: #777;\n --xy-node-color-default: #f8f8f8;\n --xy-node-border-default: 1px solid #3c3c3c;\n --xy-node-background-color-default: #1e1e1e;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #999;\n\n --xy-handle-background-color-default: #bebebe;\n --xy-handle-border-color-default: #1e1e1e;\n\n --xy-selection-background-color-default: rgba(200, 200, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(200, 200, 220, 0.8);\n\n --xy-controls-button-background-color-default: #2b2b2b;\n --xy-controls-button-background-color-hover-default: #3e3e3e;\n --xy-controls-button-color-default: #f8f8f8;\n --xy-controls-button-color-hover-default: #fff;\n --xy-controls-button-border-color-default: #5b5b5b;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #141414;\n --xy-edge-label-color-default: #f8f8f8;\n}\n.react-flow__background {\n background-color: var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));\n pointer-events: none;\n z-index: -1;\n}\n.react-flow__container {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n}\n.react-flow__pane {\n z-index: 1;\n touch-action: none;\n}\n.react-flow__pane.draggable {\n cursor: grab;\n }\n.react-flow__pane.dragging {\n cursor: grabbing;\n }\n.react-flow__pane.selection {\n cursor: pointer;\n }\n.react-flow__viewport {\n transform-origin: 0 0;\n z-index: 2;\n pointer-events: none;\n}\n.react-flow__renderer {\n z-index: 4;\n}\n.react-flow__selection {\n z-index: 6;\n}\n.react-flow__nodesselection-rect:focus,\n.react-flow__nodesselection-rect:focus-visible {\n outline: none;\n}\n.react-flow__edge-path {\n stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n stroke-width: var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));\n fill: none;\n}\n.react-flow__connection-path {\n stroke: var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));\n stroke-width: var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));\n fill: none;\n}\n.react-flow .react-flow__edges {\n position: absolute;\n}\n.react-flow .react-flow__edges svg {\n overflow: visible;\n position: absolute;\n pointer-events: none;\n }\n.react-flow__edge {\n pointer-events: visibleStroke;\n}\n.react-flow__edge.selectable {\n cursor: pointer;\n }\n.react-flow__edge.animated path {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\n.react-flow__edge.animated path.react-flow__edge-interaction {\n stroke-dasharray: none;\n animation: none;\n }\n.react-flow__edge.inactive {\n pointer-events: none;\n }\n.react-flow__edge.selected,\n .react-flow__edge:focus,\n .react-flow__edge:focus-visible {\n outline: none;\n }\n.react-flow__edge.selected .react-flow__edge-path,\n .react-flow__edge.selectable:focus .react-flow__edge-path,\n .react-flow__edge.selectable:focus-visible .react-flow__edge-path {\n stroke: var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default));\n }\n.react-flow__edge-textwrapper {\n pointer-events: all;\n }\n.react-flow__edge .react-flow__edge-text {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n/* Arrowhead marker styles - use CSS custom properties as default */\n.react-flow__arrowhead polyline {\n stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n}\n.react-flow__arrowhead polyline.arrowclosed {\n fill: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n}\n.react-flow__connection {\n pointer-events: none;\n}\n.react-flow__connection .animated {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\nsvg.react-flow__connectionline {\n z-index: 1001;\n overflow: visible;\n position: absolute;\n}\n.react-flow__nodes {\n pointer-events: none;\n transform-origin: 0 0;\n}\n.react-flow__node {\n position: absolute;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n pointer-events: all;\n transform-origin: 0 0;\n box-sizing: border-box;\n cursor: default;\n}\n.react-flow__node.selectable {\n cursor: pointer;\n }\n.react-flow__node.draggable {\n cursor: grab;\n pointer-events: all;\n }\n.react-flow__node.draggable.dragging {\n cursor: grabbing;\n }\n.react-flow__nodesselection {\n z-index: 3;\n transform-origin: left top;\n pointer-events: none;\n}\n.react-flow__nodesselection-rect {\n position: absolute;\n pointer-events: all;\n cursor: grab;\n }\n.react-flow__handle {\n position: absolute;\n pointer-events: none;\n min-width: 5px;\n min-height: 5px;\n width: 6px;\n height: 6px;\n background-color: var(--xy-handle-background-color, var(--xy-handle-background-color-default));\n border: 1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));\n border-radius: 100%;\n}\n.react-flow__handle.connectingfrom {\n pointer-events: all;\n }\n.react-flow__handle.connectionindicator {\n pointer-events: all;\n cursor: crosshair;\n }\n.react-flow__handle-bottom {\n top: auto;\n left: 50%;\n bottom: 0;\n transform: translate(-50%, 50%);\n }\n.react-flow__handle-top {\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-left {\n top: 50%;\n left: 0;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-right {\n top: 50%;\n right: 0;\n transform: translate(50%, -50%);\n }\n.react-flow__edgeupdater {\n cursor: move;\n pointer-events: all;\n}\n.react-flow__pane.selection .react-flow__panel {\n pointer-events: none;\n}\n.react-flow__panel {\n position: absolute;\n z-index: 5;\n margin: 15px;\n}\n.react-flow__panel.top {\n top: 0;\n }\n.react-flow__panel.bottom {\n bottom: 0;\n }\n.react-flow__panel.top.center, .react-flow__panel.bottom.center {\n left: 50%;\n transform: translateX(-15px) translateX(-50%);\n }\n.react-flow__panel.left {\n left: 0;\n }\n.react-flow__panel.right {\n right: 0;\n }\n.react-flow__panel.left.center, .react-flow__panel.right.center {\n top: 50%;\n transform: translateY(-15px) translateY(-50%);\n }\n.react-flow__attribution {\n font-size: 10px;\n background: var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));\n padding: 2px 3px;\n margin: 0;\n}\n.react-flow__attribution a {\n text-decoration: none;\n color: #999;\n }\n@keyframes dashdraw {\n from {\n stroke-dashoffset: 10;\n }\n}\n.react-flow__edgelabel-renderer {\n position: absolute;\n width: 100%;\n height: 100%;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n left: 0;\n top: 0;\n}\n.react-flow__viewport-portal {\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.react-flow__minimap {\n background: var(\n --xy-minimap-background-color-props,\n var(--xy-minimap-background-color, var(--xy-minimap-background-color-default))\n );\n}\n.react-flow__minimap-svg {\n display: block;\n }\n.react-flow__minimap-mask {\n fill: var(\n --xy-minimap-mask-background-color-props,\n var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default))\n );\n stroke: var(\n --xy-minimap-mask-stroke-color-props,\n var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-mask-stroke-width-props,\n var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default))\n );\n }\n.react-flow__minimap-node {\n fill: var(\n --xy-minimap-node-background-color-props,\n var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default))\n );\n stroke: var(\n --xy-minimap-node-stroke-color-props,\n var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-node-stroke-width-props,\n var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default))\n );\n }\n.react-flow__background-pattern.dots {\n fill: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default))\n );\n }\n.react-flow__background-pattern.lines {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default))\n );\n }\n.react-flow__background-pattern.cross {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default))\n );\n }\n.react-flow__controls {\n display: flex;\n flex-direction: column;\n box-shadow: var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default));\n}\n.react-flow__controls.horizontal {\n flex-direction: row;\n }\n.react-flow__controls-button {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 26px;\n width: 26px;\n padding: 4px;\n border: none;\n background: var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));\n border-bottom: 1px solid\n var(\n --xy-controls-button-border-color-props,\n var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))\n );\n color: var(\n --xy-controls-button-color-props,\n var(--xy-controls-button-color, var(--xy-controls-button-color-default))\n );\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n.react-flow__controls-button svg {\n width: 100%;\n max-width: 12px;\n max-height: 12px;\n fill: currentColor;\n }\n.react-flow__edge.updating .react-flow__edge-path {\n stroke: #777;\n }\n.react-flow__edge-text {\n font-size: 10px;\n }\n.react-flow__node.selectable:focus,\n .react-flow__node.selectable:focus-visible {\n outline: none;\n }\n.react-flow__node-input,\n.react-flow__node-default,\n.react-flow__node-output,\n.react-flow__node-group {\n padding: 10px;\n border-radius: var(--xy-node-border-radius, var(--xy-node-border-radius-default));\n width: 150px;\n font-size: 12px;\n color: var(--xy-node-color, var(--xy-node-color-default));\n text-align: center;\n border: var(--xy-node-border, var(--xy-node-border-default));\n background-color: var(--xy-node-background-color, var(--xy-node-background-color-default));\n}\n.react-flow__node-input.selectable:hover, .react-flow__node-default.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {\n box-shadow: var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default));\n }\n.react-flow__node-input.selectable.selected,\n .react-flow__node-input.selectable:focus,\n .react-flow__node-input.selectable:focus-visible,\n .react-flow__node-default.selectable.selected,\n .react-flow__node-default.selectable:focus,\n .react-flow__node-default.selectable:focus-visible,\n .react-flow__node-output.selectable.selected,\n .react-flow__node-output.selectable:focus,\n .react-flow__node-output.selectable:focus-visible,\n .react-flow__node-group.selectable.selected,\n .react-flow__node-group.selectable:focus,\n .react-flow__node-group.selectable:focus-visible {\n box-shadow: var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default));\n }\n.react-flow__node-group {\n background-color: var(--xy-node-group-background-color, var(--xy-node-group-background-color-default));\n}\n.react-flow__nodesselection-rect,\n.react-flow__selection {\n background: var(--xy-selection-background-color, var(--xy-selection-background-color-default));\n border: var(--xy-selection-border, var(--xy-selection-border-default));\n}\n.react-flow__nodesselection-rect:focus,\n .react-flow__nodesselection-rect:focus-visible,\n .react-flow__selection:focus,\n .react-flow__selection:focus-visible {\n outline: none;\n }\n.react-flow__controls-button:hover {\n background: var(\n --xy-controls-button-background-color-hover-props,\n var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default))\n );\n color: var(\n --xy-controls-button-color-hover-props,\n var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default))\n );\n }\n.react-flow__controls-button:disabled {\n pointer-events: none;\n }\n.react-flow__controls-button:disabled svg {\n fill-opacity: 0.4;\n }\n.react-flow__controls-button:last-child {\n border-bottom: none;\n }\n.react-flow__controls.horizontal .react-flow__controls-button {\n border-bottom: none;\n border-right: 1px solid\n var(\n --xy-controls-button-border-color-props,\n var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))\n );\n }\n.react-flow__controls.horizontal .react-flow__controls-button:last-child {\n border-right: none;\n }\n.react-flow__resize-control {\n position: absolute;\n}\n.react-flow__resize-control.left,\n.react-flow__resize-control.right {\n cursor: ew-resize;\n}\n.react-flow__resize-control.top,\n.react-flow__resize-control.bottom {\n cursor: ns-resize;\n}\n.react-flow__resize-control.top.left,\n.react-flow__resize-control.bottom.right {\n cursor: nwse-resize;\n}\n.react-flow__resize-control.bottom.left,\n.react-flow__resize-control.top.right {\n cursor: nesw-resize;\n}\n/* handle styles */\n.react-flow__resize-control.handle {\n width: 5px;\n height: 5px;\n border: 1px solid #fff;\n border-radius: 1px;\n background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n translate: -50% -50%;\n}\n.react-flow__resize-control.handle.left {\n left: 0;\n top: 50%;\n}\n.react-flow__resize-control.handle.right {\n left: 100%;\n top: 50%;\n}\n.react-flow__resize-control.handle.top {\n left: 50%;\n top: 0;\n}\n.react-flow__resize-control.handle.bottom {\n left: 50%;\n top: 100%;\n}\n.react-flow__resize-control.handle.top.left {\n left: 0;\n}\n.react-flow__resize-control.handle.bottom.left {\n left: 0;\n}\n.react-flow__resize-control.handle.top.right {\n left: 100%;\n}\n.react-flow__resize-control.handle.bottom.right {\n left: 100%;\n}\n/* line styles */\n.react-flow__resize-control.line {\n border-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n border-width: 0;\n border-style: solid;\n}\n.react-flow__resize-control.line.left,\n.react-flow__resize-control.line.right {\n width: 1px;\n transform: translate(-50%, 0);\n top: 0;\n height: 100%;\n}\n.react-flow__resize-control.line.left {\n left: 0;\n border-left-width: 1px;\n}\n.react-flow__resize-control.line.right {\n left: 100%;\n border-right-width: 1px;\n}\n.react-flow__resize-control.line.top,\n.react-flow__resize-control.line.bottom {\n height: 1px;\n transform: translate(0, -50%);\n left: 0;\n width: 100%;\n}\n.react-flow__resize-control.line.top {\n top: 0;\n border-top-width: 1px;\n}\n.react-flow__resize-control.line.bottom {\n border-bottom-width: 1px;\n top: 100%;\n}\n.react-flow__edge-textbg {\n fill: var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default));\n}\n.react-flow__edge-text {\n fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));\n}\n","/* @particle-academy/fancy-flow styles.\n Dark mode honors both `.dark` ancestor (Tailwind class strategy) and OS\n `prefers-color-scheme: dark`. */\n\n/* React Flow base layout CSS — bundled in so consumers import only this one\n stylesheet. Without it `.react-flow__node` isn't absolutely positioned and the\n pane/viewport transforms don't work, so the canvas renders blank. xyflow's JS is\n already bundled into our dist, so the consumer has no separate @xyflow/react to\n import its CSS from. */\n@import \"@xyflow/react/dist/style.css\";\n\n.ff-canvas {\n display: flex;\n flex-direction: column;\n border: 1px solid #e4e4e7;\n border-radius: 12px;\n overflow: hidden;\n background: white;\n}\n.dark .ff-canvas { background: #0a0a0a; border-color: #3f3f46; }\n@media (prefers-color-scheme: dark) {\n .ff-canvas:not(.ff-canvas--light) { background: #0a0a0a; border-color: #3f3f46; }\n}\n\n.ff-canvas__toolbar {\n border-bottom: 1px solid #e4e4e7;\n padding: 6px 8px;\n display: flex; gap: 6px; align-items: center;\n background: rgba(244, 244, 245, 0.6);\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 12px;\n}\n.dark .ff-canvas__toolbar { background: rgba(24, 24, 27, 0.6); border-color: #3f3f46; color: #e4e4e7; }\n@media (prefers-color-scheme: dark) {\n .ff-canvas__toolbar { background: rgba(24, 24, 27, 0.6); border-color: #3f3f46; color: #e4e4e7; }\n}\n.ff-canvas__surface { flex: 1; min-height: 0; position: relative; }\n\n/* xyflow background grid color override for dark canvas */\n.dark .react-flow__background pattern circle { fill: rgba(255, 255, 255, 0.10); }\n\n/* === Nodes === */\n.ff-node {\n min-width: 200px;\n max-width: 280px;\n background: white;\n border: 1px solid #d4d4d8;\n border-radius: 8px;\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 12px;\n color: #18181b;\n box-shadow: 0 1px 2px rgba(0,0,0,0.04), 0 4px 12px rgba(0,0,0,0.06);\n transition: box-shadow 200ms, border-color 200ms;\n overflow: hidden;\n}\n.dark .ff-node {\n background: #1c1917;\n color: #fafafa;\n border-color: #3f3f46;\n box-shadow: 0 1px 2px rgba(0,0,0,0.4), 0 6px 16px rgba(0,0,0,0.5);\n}\n@media (prefers-color-scheme: dark) {\n .ff-node { background: #1c1917; color: #fafafa; border-color: #3f3f46; box-shadow: 0 1px 2px rgba(0,0,0,0.4), 0 6px 16px rgba(0,0,0,0.5); }\n}\n.ff-node--selected {\n box-shadow: 0 0 0 2px currentColor, 0 4px 16px rgba(0,0,0,0.20);\n}\n\n.ff-node__header {\n display: flex; align-items: center; gap: 8px;\n padding: 7px 10px;\n color: white;\n font-weight: 600;\n}\n.ff-node__icon { font-size: 14px; line-height: 1; }\n.ff-node__tag {\n font-size: 10px;\n letter-spacing: 0.06em;\n font-weight: 700;\n opacity: 0.85;\n text-transform: uppercase;\n}\n.ff-node__label { flex: 1; font-size: 13px; }\n.ff-node__desc {\n margin: 0;\n padding: 8px 10px 0;\n font-size: 11px;\n color: #71717a;\n}\n.dark .ff-node__desc { color: #a1a1aa; }\n@media (prefers-color-scheme: dark) { .ff-node__desc { color: #a1a1aa; } }\n\n.ff-node__body { padding: 8px 10px 10px; }\n.ff-node__status-text {\n margin: 0;\n padding: 4px 10px 8px;\n font-size: 11px;\n color: #71717a;\n}\n.dark .ff-node__status-text { color: #a1a1aa; }\n@media (prefers-color-scheme: dark) { .ff-node__status-text { color: #a1a1aa; } }\n.ff-node--status-error .ff-node__status-text { color: #dc2626; }\n.dark .ff-node--status-error .ff-node__status-text { color: #f87171; }\n\n.ff-node--status-running { animation: ff-pulse 1.4s ease-in-out infinite; }\n@keyframes ff-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.4), 0 4px 12px rgba(0,0,0,0.06); }\n 50% { box-shadow: 0 0 0 6px rgba(59, 130, 246, 0.05), 0 4px 12px rgba(0,0,0,0.06); }\n}\n\n/* Status dot in the header */\n.ff-node__dot {\n width: 8px; height: 8px; border-radius: 50%;\n background: rgba(255,255,255,0.5);\n}\n.ff-node__dot--queued { background: #fbbf24; }\n.ff-node__dot--running { background: #fde68a; box-shadow: 0 0 6px #fde68a; }\n.ff-node__dot--done { background: #34d399; }\n.ff-node__dot--error { background: #f87171; }\n\n/* Subgraph metadata row */\n.ff-subgraph__meta {\n display: flex; justify-content: space-between;\n font-size: 11px; color: #71717a;\n}\n.dark .ff-subgraph__meta { color: #a1a1aa; }\n@media (prefers-color-scheme: dark) { .ff-subgraph__meta { color: #a1a1aa; } }\n\n/* Note node — no header chrome, sticky-style */\n.ff-note {\n background: #fef3c7;\n border: 1px solid rgba(0,0,0,0.06);\n border-radius: 6px;\n padding: 8px 10px;\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 12px;\n color: #1f2937;\n min-width: 180px;\n box-shadow: 0 1px 2px rgba(0,0,0,0.06), 0 4px 12px rgba(0,0,0,0.06);\n /* Pin to light text-on-yellow even in dark mode for readability */\n color-scheme: light;\n}\n.ff-note--selected { box-shadow: 0 0 0 2px #a855f7, 0 4px 12px rgba(0,0,0,0.2); }\n.ff-note__title { font-weight: 600; margin-bottom: 4px; }\n.ff-note__body { margin: 0; white-space: pre-wrap; }\n\n/* xyflow wraps every custom node in a `.react-flow__node-{type}` div with\n default border / background / box-shadow / padding. Our kit ships its\n own chrome via `.ff-node`, so strip xyflow's defaults for our types\n to avoid the white \"frame\" effect around the colored cards. */\n.react-flow__node-trigger,\n.react-flow__node-action,\n.react-flow__node-decision,\n.react-flow__node-output,\n.react-flow__node-note,\n.react-flow__node-subgraph {\n background: transparent !important;\n border: none !important;\n padding: 0 !important;\n box-shadow: none !important;\n border-radius: 0 !important;\n}\n\n/* xyflow handle — match accent + visible on both themes. */\n.react-flow__handle {\n width: 10px; height: 10px;\n background: white;\n border: 2px solid #94a3b8;\n border-radius: 50%;\n}\n.dark .react-flow__handle { background: #18181b; border-color: #71717a; }\n@media (prefers-color-scheme: dark) {\n .react-flow__handle { background: #18181b; border-color: #71717a; }\n}\n.react-flow__handle:hover { background: #3b82f6; border-color: #3b82f6; }\n\n/* xyflow edge color — softer in dark */\n.dark .react-flow__edge-path { stroke: #71717a; }\n@media (prefers-color-scheme: dark) {\n .react-flow__edge-path { stroke: #71717a; }\n}\n.react-flow__connection-path { stroke: #3b82f6; stroke-width: 2; }\n\n/* xyflow controls — bump specificity + !important so dark theming wins\n over xyflow's default stylesheet. */\n.dark .react-flow__controls,\n.react-flow__controls.ff-controls {\n background: transparent;\n box-shadow: none;\n}\n.dark .react-flow__controls .react-flow__controls-button {\n background: #18181b !important;\n border-color: #3f3f46 !important;\n border-bottom-color: #3f3f46 !important;\n color: #fafafa !important;\n}\n.dark .react-flow__controls .react-flow__controls-button:hover {\n background: #27272a !important;\n}\n.dark .react-flow__controls .react-flow__controls-button svg,\n.dark .react-flow__controls .react-flow__controls-button svg path,\n.dark .react-flow__controls .react-flow__controls-button svg polyline,\n.dark .react-flow__controls .react-flow__controls-button svg polygon {\n fill: currentColor !important;\n stroke: currentColor !important;\n}\n\n/* Run controls */\n.ff-run-controls { display: flex; gap: 6px; }\n.ff-run-controls__btn {\n border: 0; border-radius: 6px;\n padding: 6px 12px;\n font: inherit; font-size: 12px; font-weight: 500;\n cursor: pointer;\n background: #e4e4e7; color: #18181b;\n}\n.dark .ff-run-controls__btn { background: #27272a; color: #fafafa; }\n.ff-run-controls__btn--run { background: #10b981; color: white; }\n.dark .ff-run-controls__btn--run { background: #10b981; color: white; }\n.ff-run-controls__btn--cancel { background: #ef4444; color: white; }\n.ff-run-controls__btn:disabled { opacity: 0.5; cursor: default; }\n\n/* Run feed */\n.ff-run-feed {\n font-family: ui-monospace, monospace;\n font-size: 11px;\n background: #0a0a0a;\n color: #fafafa;\n border-radius: 8px;\n padding: 8px 10px;\n overflow: auto;\n max-height: 240px;\n border: 1px solid #1f1f23;\n}\n.ff-run-feed__empty { color: #71717a; margin: 0; }\n.ff-run-feed__row { display: flex; gap: 8px; padding: 1px 0; }\n.ff-run-feed__row--error .ff-run-feed__text { color: #f87171; }\n.ff-run-feed__row--warn .ff-run-feed__text { color: #fbbf24; }\n.ff-run-feed__row--status .ff-run-feed__text { color: #93c5fd; }\n.ff-run-feed__time { color: #71717a; }\n.ff-run-feed__node { color: #c4b5fd; }\n.ff-run-feed__text { flex: 1; }\n\n/* === Node summary inside the card === */\n.ff-node__summary { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 2px; }\n.ff-node__summary li { display: flex; gap: 6px; font-size: 11px; }\n.ff-node__summary-key { color: #71717a; }\n.dark .ff-node__summary-key { color: #a1a1aa; }\n.ff-node__summary-value { font-family: ui-monospace, monospace; }\n.ff-node__summary-more { color: #71717a; font-size: 10px; }\n.ff-node__body-empty { font-size: 11px; color: #a1a1aa; font-style: italic; }\n\n/* === FlowEditor layout === */\n.ff-editor {\n display: grid;\n grid-template-columns: 220px 1fr 320px;\n gap: 12px;\n font-family: ui-sans-serif, system-ui, sans-serif;\n}\n.ff-editor__main { display: flex; flex-direction: column; gap: 8px; min-width: 0; position: relative; }\n/* Slot: rendered over the canvas while the graph is empty. */\n.ff-editor__empty {\n position: absolute; inset: 0; display: grid; place-items: center;\n padding: 24px; text-align: center; pointer-events: none;\n}\n.ff-editor__empty > * { pointer-events: auto; }\n/* Slot: config panel + an optional footer for per-node actions. */\n.ff-editor__panel-wrap { display: flex; flex-direction: column; gap: 8px; min-height: 0; }\n.ff-editor__panel-footer { flex-shrink: 0; display: flex; flex-wrap: wrap; gap: 6px; }\n/* Node right-click menu — fixed so the canvas' overflow can't clip it. */\n.ff-editor__ctx {\n position: fixed; z-index: 50; min-width: 140px; padding: 4px;\n display: flex; flex-direction: column;\n background: white; border: 1px solid #d4d4d8; border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n}\n.dark .ff-editor__ctx { background: #18181b; border-color: #3f3f46; }\n.ff-editor__ctx-item {\n border: 0; background: transparent; cursor: pointer; text-align: left;\n padding: 6px 10px; border-radius: 5px; font-size: 12.5px; color: inherit;\n}\n.ff-editor__ctx-item:hover { background: rgba(0,0,0,0.05); }\n.dark .ff-editor__ctx-item:hover { background: #27272a; }\n.ff-editor__ctx-item--danger { color: #dc2626; }\n.dark .ff-editor__ctx-item--danger { color: #f87171; }\n.ff-editor__feed { flex-shrink: 0; }\n.ff-editor__sep { width: 1px; align-self: stretch; background: #e4e4e7; }\n.dark .ff-editor__sep { background: #3f3f46; }\n.ff-editor__btn {\n border: 1px solid #d4d4d8; background: transparent; cursor: pointer;\n border-radius: 6px; padding: 4px 10px;\n color: inherit; font-size: 12px;\n}\n.ff-editor__btn:hover:not(:disabled) { background: rgba(0,0,0,0.04); }\n.ff-editor__btn:disabled { opacity: 0.45; cursor: not-allowed; }\n.dark .ff-editor__btn { border-color: #3f3f46; }\n.dark .ff-editor__btn:hover { background: #27272a; }\n.ff-editor__count {\n margin-left: auto; font-size: 11px; color: #71717a;\n}\n.dark .ff-editor__count { color: #a1a1aa; }\n\n/* === NodePalette === */\n.ff-palette {\n display: flex; flex-direction: column;\n background: white;\n border: 1px solid #e4e4e7;\n border-radius: 12px;\n overflow: hidden;\n font-size: 13px;\n color: #18181b;\n}\n.dark .ff-palette { background: #18181b; color: #fafafa; border-color: #3f3f46; }\n.ff-palette__search { padding: 8px; border-bottom: 1px solid #e4e4e7; }\n.dark .ff-palette__search { border-color: #3f3f46; }\n.ff-palette__search-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid #d4d4d8;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n font: inherit;\n}\n.dark .ff-palette__search-input { border-color: #3f3f46; }\n.ff-palette__list { flex: 1; overflow: auto; padding: 4px; }\n.ff-palette__group { padding: 4px 0; }\n.ff-palette__group-label {\n font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase;\n color: #71717a;\n padding: 4px 8px;\n}\n.dark .ff-palette__group-label { color: #a1a1aa; }\n.ff-palette__row {\n width: 100%;\n display: flex; align-items: center; gap: 8px;\n padding: 6px 8px; border: 0; background: transparent; cursor: grab;\n border-radius: 6px;\n text-align: left; color: inherit; font: inherit;\n}\n.ff-palette__row:hover { background: rgba(0,0,0,0.04); }\n.dark .ff-palette__row:hover { background: #27272a; }\n.ff-palette__row:active { cursor: grabbing; }\n.ff-palette__row-dot {\n flex-shrink: 0;\n width: 24px; height: 24px;\n border-radius: 6px;\n display: inline-flex; align-items: center; justify-content: center;\n color: white; font-size: 14px;\n}\n.ff-palette__row-text { display: flex; flex-direction: column; min-width: 0; }\n.ff-palette__row-label { font-size: 12px; font-weight: 500; }\n.ff-palette__row-desc {\n font-size: 11px; color: #71717a;\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n}\n.dark .ff-palette__row-desc { color: #a1a1aa; }\n\n/* === NodeConfigPanel === */\n.ff-panel {\n background: white;\n border: 1px solid #e4e4e7;\n border-radius: 12px;\n padding: 12px;\n display: flex; flex-direction: column; gap: 10px;\n overflow: auto;\n font-size: 13px;\n color: #18181b;\n}\n.dark .ff-panel { background: #18181b; color: #fafafa; border-color: #3f3f46; }\n.ff-panel--empty { align-items: center; justify-content: center; }\n.ff-panel__empty { font-size: 12px; color: #a1a1aa; }\n.ff-panel__header { display: flex; flex-direction: column; gap: 4px; }\n.ff-panel__kind-tag {\n align-self: flex-start;\n font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase;\n background: rgba(168, 85, 247, 0.12); color: #a855f7;\n padding: 2px 8px; border-radius: 999px;\n}\n.ff-panel__kind-desc { margin: 0; font-size: 12px; color: #71717a; }\n.dark .ff-panel__kind-desc { color: #a1a1aa; }\n.ff-panel__divider { border: 0; border-top: 1px solid #e4e4e7; margin: 4px 0; }\n.dark .ff-panel__divider { border-top-color: #3f3f46; }\n\n/* Delete lives at the foot of the panel, separated from the config fields, so\n it is always reachable while a node is selected but never mistaken for one. */\n.ff-panel__actions { margin-top: auto; padding-top: 12px; }\n.ff-panel__delete {\n width: 100%;\n padding: 7px 10px;\n font-size: 13px;\n font-weight: 500;\n color: #dc2626;\n background: transparent;\n border: 1px solid #fca5a5;\n border-radius: 6px;\n cursor: pointer;\n}\n.ff-panel__delete:hover { background: #fef2f2; border-color: #dc2626; }\n.dark .ff-panel__delete { color: #f87171; border-color: #7f1d1d; }\n.dark .ff-panel__delete:hover { background: rgba(127,29,29,0.25); border-color: #f87171; }\n.ff-panel__field { display: flex; flex-direction: column; gap: 4px; }\n.ff-panel__label { font-size: 12px; font-weight: 500; }\n.ff-panel__hint { font-size: 11px; color: #71717a; margin: 0; }\n.dark .ff-panel__hint { color: #a1a1aa; }\n.ff-panel__required { color: #dc2626; }\n.ff-panel__input {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid #d4d4d8;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: 12px;\n box-sizing: border-box;\n}\n.ff-panel__input:focus { outline: 2px solid #a855f7; outline-offset: -1px; }\n.dark .ff-panel__input { border-color: #3f3f46; }\n.ff-panel__input--textarea { font-family: inherit; resize: vertical; }\n.ff-panel__input--expression,\n.ff-panel__input--json {\n font-family: ui-monospace, monospace; font-size: 11px;\n}\n.ff-panel__switch { display: inline-flex; align-items: center; cursor: pointer; }\n.ff-panel__switch input { display: none; }\n.ff-panel__switch-slider {\n width: 32px; height: 18px;\n background: #d4d4d8;\n border-radius: 999px;\n position: relative;\n transition: background 200ms;\n}\n.ff-panel__switch-slider::before {\n content: \"\";\n position: absolute; left: 2px; top: 2px;\n width: 14px; height: 14px;\n background: white;\n border-radius: 50%;\n transition: left 200ms;\n}\n.ff-panel__switch input:checked + .ff-panel__switch-slider { background: #a855f7; }\n.ff-panel__switch input:checked + .ff-panel__switch-slider::before { left: 16px; }\n.ff-panel__issues { margin-top: 4px; }\n.ff-panel__issue { font-size: 11px; color: #b45309; margin: 2px 0; }\n.dark .ff-panel__issue { color: #fbbf24; }\n\n/* ── Repeater / key-value config fields ───────────────────────────── */\n.ff-repeater { display: flex; flex-direction: column; gap: 8px; }\n.ff-repeater__empty { font-size: 11px; color: #71717a; margin: 0; font-style: italic; }\n.dark .ff-repeater__empty { color: #a1a1aa; }\n.ff-repeater__row {\n display: flex; flex-direction: column; gap: 6px;\n border: 1px solid #e4e4e7; border-radius: 6px; padding: 8px; background: #fafafa;\n}\n.dark .ff-repeater__row { border-color: #3f3f46; background: #27272a; }\n.ff-repeater__row-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n.ff-repeater__row-title {\n font-size: 11px; font-weight: 600; color: #52525b;\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.dark .ff-repeater__row-title { color: #d4d4d8; }\n.ff-repeater__row-actions { display: flex; gap: 2px; flex-shrink: 0; }\n.ff-repeater__btn {\n border: 1px solid transparent; background: transparent; cursor: pointer;\n border-radius: 4px; font-size: 11px; line-height: 1; padding: 3px 5px; color: #71717a;\n}\n.ff-repeater__btn:hover:not(:disabled) { background: #e4e4e7; color: #18181b; }\n.dark .ff-repeater__btn:hover:not(:disabled) { background: #3f3f46; color: #fafafa; }\n.ff-repeater__btn:disabled { opacity: .35; cursor: not-allowed; }\n.ff-repeater__btn--danger:hover:not(:disabled) { background: #fee2e2; color: #b91c1c; }\n.dark .ff-repeater__btn--danger:hover:not(:disabled) { background: #7f1d1d; color: #fecaca; }\n.ff-repeater__cell { display: flex; flex-direction: column; gap: 3px; }\n.ff-panel__label--sub { font-size: 11px; color: #71717a; font-weight: 400; }\n.dark .ff-panel__label--sub { color: #a1a1aa; }\n.ff-repeater__add {\n align-self: flex-start; border: 1px dashed #d4d4d8; background: transparent;\n border-radius: 6px; padding: 5px 10px; font-size: 11px; color: #52525b; cursor: pointer;\n}\n.ff-repeater__add:hover:not(:disabled) { border-color: #a855f7; color: #a855f7; }\n.ff-repeater__add:disabled { opacity: .4; cursor: not-allowed; }\n.dark .ff-repeater__add { border-color: #52525b; color: #d4d4d8; }\n\n.ff-keyvalue { display: flex; flex-direction: column; gap: 6px; }\n.ff-keyvalue__head,\n.ff-keyvalue__row { display: grid; grid-template-columns: 1fr 1fr auto; gap: 6px; align-items: center; }\n.ff-keyvalue__head { font-size: 10px; text-transform: uppercase; letter-spacing: .04em; color: #a1a1aa; }\n.ff-panel__hint--missing { color: #b45309; font-style: italic; }\n.dark .ff-panel__hint--missing { color: #fbbf24; }\n\n/* ── Edge label editor ────────────────────────────────────────────── */\n.ff-editor__edge-label { padding: 6px; min-width: 200px; }\n.ff-editor__edge-label .ff-panel__input { width: 100%; }\n\n/* ── Rich user input preview ──────────────────────────────────────── */\n.ff-rich-preview { display: flex; flex-direction: column; gap: 6px; }\n.ff-rich-preview__frame {\n border: 1px solid #e4e4e7; border-radius: 6px; overflow: hidden;\n max-height: 180px; background: #fff;\n}\n.dark .ff-rich-preview__frame { border-color: #3f3f46; background: #18181b; }\n.ff-rich-preview__unavailable {\n border: 1px dashed #d4d4d8; border-radius: 6px; padding: 10px;\n font-size: 11px; color: #71717a; line-height: 1.5;\n}\n.dark .ff-rich-preview__unavailable { border-color: #52525b; color: #a1a1aa; }\n.ff-rich-preview__unavailable code {\n font-size: 10px; background: #f4f4f5; padding: 1px 4px; border-radius: 3px;\n}\n.dark .ff-rich-preview__unavailable code { background: #27272a; }\n.ff-rich-preview__title { font-size: 11px; font-weight: 600; color: #52525b; }\n.dark .ff-rich-preview__title { color: #d4d4d8; }\n\n/* Resizable nodes (G11) — a resizable kind drops the fixed max-width so the\n card fills the width/height xyflow's NodeResizer writes onto the node. */\n.ff-node--resizable {\n max-width: none;\n width: 100%;\n height: 100%;\n}\n/* NodeResizer chrome (unstyled by default) — themeable border + handles. */\n.react-flow__resize-control.line { border-color: rgba(0, 0, 0, 0.15); }\n.react-flow__resize-control.handle {\n width: 8px; height: 8px; border-radius: 2px; border: 1px solid #fff;\n}\n.dark .react-flow__resize-control.line { border-color: rgba(255, 255, 255, 0.18); }\n.dark .react-flow__resize-control.handle { border-color: #1c1917; }\n\n/* Swimlanes (G6) — a resizable, titled container band. Child nodes are parented\n into it and render on top; this is just the background, so it fills the node's\n width/height and sits behind its children (xyflow orders a parent before its\n children). */\n.ff-lane {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n background: rgba(100, 116, 139, 0.06);\n border: 1px dashed #cbd5e1;\n border-radius: 8px;\n overflow: hidden;\n}\n.ff-lane--selected { border-style: solid; }\n.ff-lane__header {\n display: flex;\n align-items: center;\n height: 22px;\n padding: 0 8px;\n color: #fff;\n font-size: 11px;\n font-weight: 600;\n font-family: ui-sans-serif, system-ui, sans-serif;\n border-radius: 7px 7px 0 0;\n}\n.ff-lane__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.dark .ff-lane { background: rgba(148, 163, 184, 0.08); border-color: #3f3f46; }\n@media (prefers-color-scheme: dark) {\n .ff-lane:not(.ff-canvas--light *) { background: rgba(148, 163, 184, 0.08); border-color: #3f3f46; }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/@xyflow/react/dist/style.css","../src/styles.css"],"sourcesContent":["/* this gets exported as style.css and can be used for the default theming */\n/* these are the necessary styles for React/Svelte Flow, they get used by base.css and style.css */\n.react-flow {\n direction: ltr;\n\n --xy-edge-stroke-default: #b1b1b7;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #555;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(255, 255, 255, 0.5);\n\n --xy-minimap-background-color-default: #fff;\n --xy-minimap-mask-background-color-default: rgba(240, 240, 240, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #e2e2e2;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: transparent;\n --xy-background-pattern-dots-color-default: #91919a;\n --xy-background-pattern-lines-color-default: #eee;\n --xy-background-pattern-cross-color-default: #e2e2e2;\n background-color: var(--xy-background-color, var(--xy-background-color-default));\n --xy-node-color-default: inherit;\n --xy-node-border-default: 1px solid #1a192b;\n --xy-node-background-color-default: #fff;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #1a192b;\n --xy-node-border-radius-default: 3px;\n\n --xy-handle-background-color-default: #1a192b;\n --xy-handle-border-color-default: #fff;\n\n --xy-selection-background-color-default: rgba(0, 89, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(0, 89, 220, 0.8);\n\n --xy-controls-button-background-color-default: #fefefe;\n --xy-controls-button-background-color-hover-default: #f4f4f4;\n --xy-controls-button-color-default: inherit;\n --xy-controls-button-color-hover-default: inherit;\n --xy-controls-button-border-color-default: #eee;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #ffffff;\n --xy-edge-label-color-default: inherit;\n --xy-resize-background-color-default: #3367d9;\n}\n.react-flow.dark {\n --xy-edge-stroke-default: #3e3e3e;\n --xy-edge-stroke-width-default: 1;\n --xy-edge-stroke-selected-default: #727272;\n\n --xy-connectionline-stroke-default: #b1b1b7;\n --xy-connectionline-stroke-width-default: 1;\n\n --xy-attribution-background-color-default: rgba(150, 150, 150, 0.25);\n\n --xy-minimap-background-color-default: #141414;\n --xy-minimap-mask-background-color-default: rgba(60, 60, 60, 0.6);\n --xy-minimap-mask-stroke-color-default: transparent;\n --xy-minimap-mask-stroke-width-default: 1;\n --xy-minimap-node-background-color-default: #2b2b2b;\n --xy-minimap-node-stroke-color-default: transparent;\n --xy-minimap-node-stroke-width-default: 2;\n\n --xy-background-color-default: #141414;\n --xy-background-pattern-dots-color-default: #777;\n --xy-background-pattern-lines-color-default: #777;\n --xy-background-pattern-cross-color-default: #777;\n --xy-node-color-default: #f8f8f8;\n --xy-node-border-default: 1px solid #3c3c3c;\n --xy-node-background-color-default: #1e1e1e;\n --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);\n --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, 0.08);\n --xy-node-boxshadow-selected-default: 0 0 0 0.5px #999;\n\n --xy-handle-background-color-default: #bebebe;\n --xy-handle-border-color-default: #1e1e1e;\n\n --xy-selection-background-color-default: rgba(200, 200, 220, 0.08);\n --xy-selection-border-default: 1px dotted rgba(200, 200, 220, 0.8);\n\n --xy-controls-button-background-color-default: #2b2b2b;\n --xy-controls-button-background-color-hover-default: #3e3e3e;\n --xy-controls-button-color-default: #f8f8f8;\n --xy-controls-button-color-hover-default: #fff;\n --xy-controls-button-border-color-default: #5b5b5b;\n --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n\n --xy-edge-label-background-color-default: #141414;\n --xy-edge-label-color-default: #f8f8f8;\n}\n.react-flow__background {\n background-color: var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));\n pointer-events: none;\n z-index: -1;\n}\n.react-flow__container {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n}\n.react-flow__pane {\n z-index: 1;\n touch-action: none;\n}\n.react-flow__pane.draggable {\n cursor: grab;\n }\n.react-flow__pane.dragging {\n cursor: grabbing;\n }\n.react-flow__pane.selection {\n cursor: pointer;\n }\n.react-flow__viewport {\n transform-origin: 0 0;\n z-index: 2;\n pointer-events: none;\n}\n.react-flow__renderer {\n z-index: 4;\n}\n.react-flow__selection {\n z-index: 6;\n}\n.react-flow__nodesselection-rect:focus,\n.react-flow__nodesselection-rect:focus-visible {\n outline: none;\n}\n.react-flow__edge-path {\n stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n stroke-width: var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));\n fill: none;\n}\n.react-flow__connection-path {\n stroke: var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));\n stroke-width: var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));\n fill: none;\n}\n.react-flow .react-flow__edges {\n position: absolute;\n}\n.react-flow .react-flow__edges svg {\n overflow: visible;\n position: absolute;\n pointer-events: none;\n }\n.react-flow__edge {\n pointer-events: visibleStroke;\n}\n.react-flow__edge.selectable {\n cursor: pointer;\n }\n.react-flow__edge.animated path {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\n.react-flow__edge.animated path.react-flow__edge-interaction {\n stroke-dasharray: none;\n animation: none;\n }\n.react-flow__edge.inactive {\n pointer-events: none;\n }\n.react-flow__edge.selected,\n .react-flow__edge:focus,\n .react-flow__edge:focus-visible {\n outline: none;\n }\n.react-flow__edge.selected .react-flow__edge-path,\n .react-flow__edge.selectable:focus .react-flow__edge-path,\n .react-flow__edge.selectable:focus-visible .react-flow__edge-path {\n stroke: var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default));\n }\n.react-flow__edge-textwrapper {\n pointer-events: all;\n }\n.react-flow__edge .react-flow__edge-text {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n/* Arrowhead marker styles - use CSS custom properties as default */\n.react-flow__arrowhead polyline {\n stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n}\n.react-flow__arrowhead polyline.arrowclosed {\n fill: var(--xy-edge-stroke, var(--xy-edge-stroke-default));\n}\n.react-flow__connection {\n pointer-events: none;\n}\n.react-flow__connection .animated {\n stroke-dasharray: 5;\n animation: dashdraw 0.5s linear infinite;\n }\nsvg.react-flow__connectionline {\n z-index: 1001;\n overflow: visible;\n position: absolute;\n}\n.react-flow__nodes {\n pointer-events: none;\n transform-origin: 0 0;\n}\n.react-flow__node {\n position: absolute;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n pointer-events: all;\n transform-origin: 0 0;\n box-sizing: border-box;\n cursor: default;\n}\n.react-flow__node.selectable {\n cursor: pointer;\n }\n.react-flow__node.draggable {\n cursor: grab;\n pointer-events: all;\n }\n.react-flow__node.draggable.dragging {\n cursor: grabbing;\n }\n.react-flow__nodesselection {\n z-index: 3;\n transform-origin: left top;\n pointer-events: none;\n}\n.react-flow__nodesselection-rect {\n position: absolute;\n pointer-events: all;\n cursor: grab;\n }\n.react-flow__handle {\n position: absolute;\n pointer-events: none;\n min-width: 5px;\n min-height: 5px;\n width: 6px;\n height: 6px;\n background-color: var(--xy-handle-background-color, var(--xy-handle-background-color-default));\n border: 1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));\n border-radius: 100%;\n}\n.react-flow__handle.connectingfrom {\n pointer-events: all;\n }\n.react-flow__handle.connectionindicator {\n pointer-events: all;\n cursor: crosshair;\n }\n.react-flow__handle-bottom {\n top: auto;\n left: 50%;\n bottom: 0;\n transform: translate(-50%, 50%);\n }\n.react-flow__handle-top {\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-left {\n top: 50%;\n left: 0;\n transform: translate(-50%, -50%);\n }\n.react-flow__handle-right {\n top: 50%;\n right: 0;\n transform: translate(50%, -50%);\n }\n.react-flow__edgeupdater {\n cursor: move;\n pointer-events: all;\n}\n.react-flow__pane.selection .react-flow__panel {\n pointer-events: none;\n}\n.react-flow__panel {\n position: absolute;\n z-index: 5;\n margin: 15px;\n}\n.react-flow__panel.top {\n top: 0;\n }\n.react-flow__panel.bottom {\n bottom: 0;\n }\n.react-flow__panel.top.center, .react-flow__panel.bottom.center {\n left: 50%;\n transform: translateX(-15px) translateX(-50%);\n }\n.react-flow__panel.left {\n left: 0;\n }\n.react-flow__panel.right {\n right: 0;\n }\n.react-flow__panel.left.center, .react-flow__panel.right.center {\n top: 50%;\n transform: translateY(-15px) translateY(-50%);\n }\n.react-flow__attribution {\n font-size: 10px;\n background: var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));\n padding: 2px 3px;\n margin: 0;\n}\n.react-flow__attribution a {\n text-decoration: none;\n color: #999;\n }\n@keyframes dashdraw {\n from {\n stroke-dashoffset: 10;\n }\n}\n.react-flow__edgelabel-renderer {\n position: absolute;\n width: 100%;\n height: 100%;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n left: 0;\n top: 0;\n}\n.react-flow__viewport-portal {\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.react-flow__minimap {\n background: var(\n --xy-minimap-background-color-props,\n var(--xy-minimap-background-color, var(--xy-minimap-background-color-default))\n );\n}\n.react-flow__minimap-svg {\n display: block;\n }\n.react-flow__minimap-mask {\n fill: var(\n --xy-minimap-mask-background-color-props,\n var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default))\n );\n stroke: var(\n --xy-minimap-mask-stroke-color-props,\n var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-mask-stroke-width-props,\n var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default))\n );\n }\n.react-flow__minimap-node {\n fill: var(\n --xy-minimap-node-background-color-props,\n var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default))\n );\n stroke: var(\n --xy-minimap-node-stroke-color-props,\n var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default))\n );\n stroke-width: var(\n --xy-minimap-node-stroke-width-props,\n var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default))\n );\n }\n.react-flow__background-pattern.dots {\n fill: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default))\n );\n }\n.react-flow__background-pattern.lines {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default))\n );\n }\n.react-flow__background-pattern.cross {\n stroke: var(\n --xy-background-pattern-color-props,\n var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default))\n );\n }\n.react-flow__controls {\n display: flex;\n flex-direction: column;\n box-shadow: var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default));\n}\n.react-flow__controls.horizontal {\n flex-direction: row;\n }\n.react-flow__controls-button {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 26px;\n width: 26px;\n padding: 4px;\n border: none;\n background: var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));\n border-bottom: 1px solid\n var(\n --xy-controls-button-border-color-props,\n var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))\n );\n color: var(\n --xy-controls-button-color-props,\n var(--xy-controls-button-color, var(--xy-controls-button-color-default))\n );\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n.react-flow__controls-button svg {\n width: 100%;\n max-width: 12px;\n max-height: 12px;\n fill: currentColor;\n }\n.react-flow__edge.updating .react-flow__edge-path {\n stroke: #777;\n }\n.react-flow__edge-text {\n font-size: 10px;\n }\n.react-flow__node.selectable:focus,\n .react-flow__node.selectable:focus-visible {\n outline: none;\n }\n.react-flow__node-input,\n.react-flow__node-default,\n.react-flow__node-output,\n.react-flow__node-group {\n padding: 10px;\n border-radius: var(--xy-node-border-radius, var(--xy-node-border-radius-default));\n width: 150px;\n font-size: 12px;\n color: var(--xy-node-color, var(--xy-node-color-default));\n text-align: center;\n border: var(--xy-node-border, var(--xy-node-border-default));\n background-color: var(--xy-node-background-color, var(--xy-node-background-color-default));\n}\n.react-flow__node-input.selectable:hover, .react-flow__node-default.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {\n box-shadow: var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default));\n }\n.react-flow__node-input.selectable.selected,\n .react-flow__node-input.selectable:focus,\n .react-flow__node-input.selectable:focus-visible,\n .react-flow__node-default.selectable.selected,\n .react-flow__node-default.selectable:focus,\n .react-flow__node-default.selectable:focus-visible,\n .react-flow__node-output.selectable.selected,\n .react-flow__node-output.selectable:focus,\n .react-flow__node-output.selectable:focus-visible,\n .react-flow__node-group.selectable.selected,\n .react-flow__node-group.selectable:focus,\n .react-flow__node-group.selectable:focus-visible {\n box-shadow: var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default));\n }\n.react-flow__node-group {\n background-color: var(--xy-node-group-background-color, var(--xy-node-group-background-color-default));\n}\n.react-flow__nodesselection-rect,\n.react-flow__selection {\n background: var(--xy-selection-background-color, var(--xy-selection-background-color-default));\n border: var(--xy-selection-border, var(--xy-selection-border-default));\n}\n.react-flow__nodesselection-rect:focus,\n .react-flow__nodesselection-rect:focus-visible,\n .react-flow__selection:focus,\n .react-flow__selection:focus-visible {\n outline: none;\n }\n.react-flow__controls-button:hover {\n background: var(\n --xy-controls-button-background-color-hover-props,\n var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default))\n );\n color: var(\n --xy-controls-button-color-hover-props,\n var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default))\n );\n }\n.react-flow__controls-button:disabled {\n pointer-events: none;\n }\n.react-flow__controls-button:disabled svg {\n fill-opacity: 0.4;\n }\n.react-flow__controls-button:last-child {\n border-bottom: none;\n }\n.react-flow__controls.horizontal .react-flow__controls-button {\n border-bottom: none;\n border-right: 1px solid\n var(\n --xy-controls-button-border-color-props,\n var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))\n );\n }\n.react-flow__controls.horizontal .react-flow__controls-button:last-child {\n border-right: none;\n }\n.react-flow__resize-control {\n position: absolute;\n}\n.react-flow__resize-control.left,\n.react-flow__resize-control.right {\n cursor: ew-resize;\n}\n.react-flow__resize-control.top,\n.react-flow__resize-control.bottom {\n cursor: ns-resize;\n}\n.react-flow__resize-control.top.left,\n.react-flow__resize-control.bottom.right {\n cursor: nwse-resize;\n}\n.react-flow__resize-control.bottom.left,\n.react-flow__resize-control.top.right {\n cursor: nesw-resize;\n}\n/* handle styles */\n.react-flow__resize-control.handle {\n width: 5px;\n height: 5px;\n border: 1px solid #fff;\n border-radius: 1px;\n background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n translate: -50% -50%;\n}\n.react-flow__resize-control.handle.left {\n left: 0;\n top: 50%;\n}\n.react-flow__resize-control.handle.right {\n left: 100%;\n top: 50%;\n}\n.react-flow__resize-control.handle.top {\n left: 50%;\n top: 0;\n}\n.react-flow__resize-control.handle.bottom {\n left: 50%;\n top: 100%;\n}\n.react-flow__resize-control.handle.top.left {\n left: 0;\n}\n.react-flow__resize-control.handle.bottom.left {\n left: 0;\n}\n.react-flow__resize-control.handle.top.right {\n left: 100%;\n}\n.react-flow__resize-control.handle.bottom.right {\n left: 100%;\n}\n/* line styles */\n.react-flow__resize-control.line {\n border-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));\n border-width: 0;\n border-style: solid;\n}\n.react-flow__resize-control.line.left,\n.react-flow__resize-control.line.right {\n width: 1px;\n transform: translate(-50%, 0);\n top: 0;\n height: 100%;\n}\n.react-flow__resize-control.line.left {\n left: 0;\n border-left-width: 1px;\n}\n.react-flow__resize-control.line.right {\n left: 100%;\n border-right-width: 1px;\n}\n.react-flow__resize-control.line.top,\n.react-flow__resize-control.line.bottom {\n height: 1px;\n transform: translate(0, -50%);\n left: 0;\n width: 100%;\n}\n.react-flow__resize-control.line.top {\n top: 0;\n border-top-width: 1px;\n}\n.react-flow__resize-control.line.bottom {\n border-bottom-width: 1px;\n top: 100%;\n}\n.react-flow__edge-textbg {\n fill: var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default));\n}\n.react-flow__edge-text {\n fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));\n}\n","/* @particle-academy/fancy-flow styles.\n Dark mode honors both `.dark` ancestor (Tailwind class strategy) and OS\n `prefers-color-scheme: dark`. */\n\n/* React Flow base layout CSS — bundled in so consumers import only this one\n stylesheet. Without it `.react-flow__node` isn't absolutely positioned and the\n pane/viewport transforms don't work, so the canvas renders blank. xyflow's JS is\n already bundled into our dist, so the consumer has no separate @xyflow/react to\n import its CSS from. */\n@import \"@xyflow/react/dist/style.css\";\n\n.ff-canvas {\n display: flex;\n flex-direction: column;\n border: 1px solid #e4e4e7;\n border-radius: 12px;\n overflow: hidden;\n background: white;\n}\n.dark .ff-canvas { background: #0a0a0a; border-color: #3f3f46; }\n@media (prefers-color-scheme: dark) {\n .ff-canvas:not(.ff-canvas--light) { background: #0a0a0a; border-color: #3f3f46; }\n}\n\n.ff-canvas__toolbar {\n border-bottom: 1px solid #e4e4e7;\n padding: 6px 8px;\n display: flex; gap: 6px; align-items: center;\n background: rgba(244, 244, 245, 0.6);\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 12px;\n}\n.dark .ff-canvas__toolbar { background: rgba(24, 24, 27, 0.6); border-color: #3f3f46; color: #e4e4e7; }\n@media (prefers-color-scheme: dark) {\n .ff-canvas__toolbar { background: rgba(24, 24, 27, 0.6); border-color: #3f3f46; color: #e4e4e7; }\n}\n.ff-canvas__surface { flex: 1; min-height: 0; position: relative; }\n\n/* xyflow background grid color override for dark canvas */\n.dark .react-flow__background pattern circle { fill: rgba(255, 255, 255, 0.10); }\n\n/* === Nodes === */\n.ff-node {\n min-width: 200px;\n max-width: 280px;\n background: white;\n border: 1px solid #d4d4d8;\n border-radius: 8px;\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 12px;\n color: #18181b;\n box-shadow: 0 1px 2px rgba(0,0,0,0.04), 0 4px 12px rgba(0,0,0,0.06);\n transition: box-shadow 200ms, border-color 200ms;\n overflow: hidden;\n}\n.dark .ff-node {\n background: #1c1917;\n color: #fafafa;\n border-color: #3f3f46;\n box-shadow: 0 1px 2px rgba(0,0,0,0.4), 0 6px 16px rgba(0,0,0,0.5);\n}\n@media (prefers-color-scheme: dark) {\n .ff-node { background: #1c1917; color: #fafafa; border-color: #3f3f46; box-shadow: 0 1px 2px rgba(0,0,0,0.4), 0 6px 16px rgba(0,0,0,0.5); }\n}\n.ff-node--selected {\n box-shadow: 0 0 0 2px currentColor, 0 4px 16px rgba(0,0,0,0.20);\n}\n\n.ff-node__header {\n display: flex; align-items: center; gap: 8px;\n padding: 7px 10px;\n color: white;\n font-weight: 600;\n}\n.ff-node__icon { font-size: 14px; line-height: 1; }\n.ff-node__tag {\n font-size: 10px;\n letter-spacing: 0.06em;\n font-weight: 700;\n opacity: 0.85;\n text-transform: uppercase;\n}\n.ff-node__label { flex: 1; font-size: 13px; }\n.ff-node__desc {\n margin: 0;\n padding: 8px 10px 0;\n font-size: 11px;\n color: #71717a;\n}\n.dark .ff-node__desc { color: #a1a1aa; }\n@media (prefers-color-scheme: dark) { .ff-node__desc { color: #a1a1aa; } }\n\n.ff-node__body { padding: 8px 10px 10px; }\n.ff-node__status-text {\n margin: 0;\n padding: 4px 10px 8px;\n font-size: 11px;\n color: #71717a;\n}\n.dark .ff-node__status-text { color: #a1a1aa; }\n@media (prefers-color-scheme: dark) { .ff-node__status-text { color: #a1a1aa; } }\n.ff-node--status-error .ff-node__status-text { color: #dc2626; }\n.dark .ff-node--status-error .ff-node__status-text { color: #f87171; }\n\n.ff-node--status-running { animation: ff-pulse 1.4s ease-in-out infinite; }\n@keyframes ff-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.4), 0 4px 12px rgba(0,0,0,0.06); }\n 50% { box-shadow: 0 0 0 6px rgba(59, 130, 246, 0.05), 0 4px 12px rgba(0,0,0,0.06); }\n}\n\n/* Status dot in the header */\n.ff-node__dot {\n width: 8px; height: 8px; border-radius: 50%;\n background: rgba(255,255,255,0.5);\n}\n.ff-node__dot--queued { background: #fbbf24; }\n.ff-node__dot--running { background: #fde68a; box-shadow: 0 0 6px #fde68a; }\n.ff-node__dot--done { background: #34d399; }\n.ff-node__dot--error { background: #f87171; }\n\n/* Subgraph metadata row */\n.ff-subgraph__meta {\n display: flex; justify-content: space-between;\n font-size: 11px; color: #71717a;\n}\n.dark .ff-subgraph__meta { color: #a1a1aa; }\n@media (prefers-color-scheme: dark) { .ff-subgraph__meta { color: #a1a1aa; } }\n\n/* Note node — no header chrome, sticky-style */\n.ff-note {\n background: #fef3c7;\n border: 1px solid rgba(0,0,0,0.06);\n border-radius: 6px;\n padding: 8px 10px;\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 12px;\n color: #1f2937;\n min-width: 180px;\n box-shadow: 0 1px 2px rgba(0,0,0,0.06), 0 4px 12px rgba(0,0,0,0.06);\n /* Pin to light text-on-yellow even in dark mode for readability */\n color-scheme: light;\n}\n.ff-note--selected { box-shadow: 0 0 0 2px #a855f7, 0 4px 12px rgba(0,0,0,0.2); }\n.ff-note__title { font-weight: 600; margin-bottom: 4px; }\n.ff-note__body { margin: 0; white-space: pre-wrap; }\n\n/* xyflow wraps every custom node in a `.react-flow__node-{type}` div with\n default border / background / box-shadow / padding. Our kit ships its\n own chrome via `.ff-node`, so strip xyflow's defaults for our types\n to avoid the white \"frame\" effect around the colored cards. */\n.react-flow__node-trigger,\n.react-flow__node-action,\n.react-flow__node-decision,\n.react-flow__node-output,\n.react-flow__node-note,\n.react-flow__node-subgraph {\n background: transparent !important;\n border: none !important;\n padding: 0 !important;\n box-shadow: none !important;\n border-radius: 0 !important;\n}\n\n/* xyflow handle — match accent + visible on both themes. */\n.react-flow__handle {\n width: 10px; height: 10px;\n background: white;\n border: 2px solid #94a3b8;\n border-radius: 50%;\n}\n.dark .react-flow__handle { background: #18181b; border-color: #71717a; }\n@media (prefers-color-scheme: dark) {\n .react-flow__handle { background: #18181b; border-color: #71717a; }\n}\n.react-flow__handle:hover { background: #3b82f6; border-color: #3b82f6; }\n\n/* xyflow edge color — softer in dark */\n.dark .react-flow__edge-path { stroke: #71717a; }\n@media (prefers-color-scheme: dark) {\n .react-flow__edge-path { stroke: #71717a; }\n}\n.react-flow__connection-path { stroke: #3b82f6; stroke-width: 2; }\n\n/* xyflow controls — bump specificity + !important so dark theming wins\n over xyflow's default stylesheet. */\n.dark .react-flow__controls,\n.react-flow__controls.ff-controls {\n background: transparent;\n box-shadow: none;\n}\n.dark .react-flow__controls .react-flow__controls-button {\n background: #18181b !important;\n border-color: #3f3f46 !important;\n border-bottom-color: #3f3f46 !important;\n color: #fafafa !important;\n}\n.dark .react-flow__controls .react-flow__controls-button:hover {\n background: #27272a !important;\n}\n.dark .react-flow__controls .react-flow__controls-button svg,\n.dark .react-flow__controls .react-flow__controls-button svg path,\n.dark .react-flow__controls .react-flow__controls-button svg polyline,\n.dark .react-flow__controls .react-flow__controls-button svg polygon {\n fill: currentColor !important;\n stroke: currentColor !important;\n}\n\n/* Run controls */\n.ff-run-controls { display: flex; gap: 6px; }\n.ff-run-controls__btn {\n border: 0; border-radius: 6px;\n padding: 6px 12px;\n font: inherit; font-size: 12px; font-weight: 500;\n cursor: pointer;\n background: #e4e4e7; color: #18181b;\n}\n.dark .ff-run-controls__btn { background: #27272a; color: #fafafa; }\n.ff-run-controls__btn--run { background: #10b981; color: white; }\n.dark .ff-run-controls__btn--run { background: #10b981; color: white; }\n.ff-run-controls__btn--cancel { background: #ef4444; color: white; }\n.ff-run-controls__btn:disabled { opacity: 0.5; cursor: default; }\n\n/* Run feed */\n.ff-run-feed {\n font-family: ui-monospace, monospace;\n font-size: 11px;\n background: #0a0a0a;\n color: #fafafa;\n border-radius: 8px;\n padding: 8px 10px;\n overflow: auto;\n max-height: 240px;\n border: 1px solid #1f1f23;\n}\n.ff-run-feed__empty { color: #71717a; margin: 0; }\n.ff-run-feed__row { display: flex; gap: 8px; padding: 1px 0; }\n.ff-run-feed__row--error .ff-run-feed__text { color: #f87171; }\n.ff-run-feed__row--warn .ff-run-feed__text { color: #fbbf24; }\n.ff-run-feed__row--status .ff-run-feed__text { color: #93c5fd; }\n.ff-run-feed__time { color: #71717a; }\n.ff-run-feed__node { color: #c4b5fd; }\n.ff-run-feed__text { flex: 1; }\n\n/* === Node summary inside the card === */\n.ff-node__summary { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 2px; }\n.ff-node__summary li { display: flex; gap: 6px; font-size: 11px; }\n.ff-node__summary-key { color: #71717a; }\n.dark .ff-node__summary-key { color: #a1a1aa; }\n.ff-node__summary-value { font-family: ui-monospace, monospace; }\n.ff-node__summary-more { color: #71717a; font-size: 10px; }\n.ff-node__body-empty { font-size: 11px; color: #a1a1aa; font-style: italic; }\n\n/* === FlowEditor layout === */\n.ff-editor {\n display: grid;\n grid-template-columns: 220px 1fr 320px;\n gap: 12px;\n font-family: ui-sans-serif, system-ui, sans-serif;\n}\n.ff-editor__main { display: flex; flex-direction: column; gap: 8px; min-width: 0; position: relative; }\n/* Slot: rendered over the canvas while the graph is empty. */\n.ff-editor__empty {\n position: absolute; inset: 0; display: grid; place-items: center;\n padding: 24px; text-align: center; pointer-events: none;\n}\n.ff-editor__empty > * { pointer-events: auto; }\n/* Slot: config panel + an optional footer for per-node actions. */\n.ff-editor__panel-wrap { display: flex; flex-direction: column; gap: 8px; min-height: 0; }\n.ff-editor__panel-footer { flex-shrink: 0; display: flex; flex-wrap: wrap; gap: 6px; }\n/* Node right-click menu — fixed so the canvas' overflow can't clip it. */\n.ff-editor__ctx {\n position: fixed; z-index: 50; min-width: 140px; padding: 4px;\n display: flex; flex-direction: column;\n background: white; border: 1px solid #d4d4d8; border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n}\n.dark .ff-editor__ctx { background: #18181b; border-color: #3f3f46; }\n.ff-editor__ctx-item {\n border: 0; background: transparent; cursor: pointer; text-align: left;\n padding: 6px 10px; border-radius: 5px; font-size: 12.5px; color: inherit;\n}\n.ff-editor__ctx-item:hover { background: rgba(0,0,0,0.05); }\n.dark .ff-editor__ctx-item:hover { background: #27272a; }\n.ff-editor__ctx-item--danger { color: #dc2626; }\n.dark .ff-editor__ctx-item--danger { color: #f87171; }\n.ff-editor__feed { flex-shrink: 0; }\n.ff-editor__sep { width: 1px; align-self: stretch; background: #e4e4e7; }\n.dark .ff-editor__sep { background: #3f3f46; }\n.ff-editor__btn {\n border: 1px solid #d4d4d8; background: transparent; cursor: pointer;\n border-radius: 6px; padding: 4px 10px;\n color: inherit; font-size: 12px;\n}\n.ff-editor__btn:hover:not(:disabled) { background: rgba(0,0,0,0.04); }\n.ff-editor__btn:disabled { opacity: 0.45; cursor: not-allowed; }\n.dark .ff-editor__btn { border-color: #3f3f46; }\n.dark .ff-editor__btn:hover { background: #27272a; }\n.ff-editor__count {\n margin-left: auto; font-size: 11px; color: #71717a;\n}\n.dark .ff-editor__count { color: #a1a1aa; }\n\n/* === NodePalette === */\n.ff-palette {\n display: flex; flex-direction: column;\n background: white;\n border: 1px solid #e4e4e7;\n border-radius: 12px;\n overflow: hidden;\n font-size: 13px;\n color: #18181b;\n}\n.dark .ff-palette { background: #18181b; color: #fafafa; border-color: #3f3f46; }\n.ff-palette__search { padding: 8px; border-bottom: 1px solid #e4e4e7; }\n.dark .ff-palette__search { border-color: #3f3f46; }\n.ff-palette__search-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid #d4d4d8;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n font: inherit;\n}\n.dark .ff-palette__search-input { border-color: #3f3f46; }\n.ff-palette__list { flex: 1; overflow: auto; padding: 4px; }\n.ff-palette__group { padding: 4px 0; }\n.ff-palette__group-label {\n font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase;\n color: #71717a;\n padding: 4px 8px;\n}\n.dark .ff-palette__group-label { color: #a1a1aa; }\n.ff-palette__row {\n width: 100%;\n display: flex; align-items: center; gap: 8px;\n padding: 6px 8px; border: 0; background: transparent; cursor: grab;\n border-radius: 6px;\n text-align: left; color: inherit; font: inherit;\n}\n.ff-palette__row:hover { background: rgba(0,0,0,0.04); }\n.dark .ff-palette__row:hover { background: #27272a; }\n.ff-palette__row:active { cursor: grabbing; }\n.ff-palette__row-dot {\n flex-shrink: 0;\n width: 24px; height: 24px;\n border-radius: 6px;\n display: inline-flex; align-items: center; justify-content: center;\n color: white; font-size: 14px;\n}\n.ff-palette__row-text { display: flex; flex-direction: column; min-width: 0; }\n.ff-palette__row-label { font-size: 12px; font-weight: 500; }\n.ff-palette__row-desc {\n font-size: 11px; color: #71717a;\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n}\n.dark .ff-palette__row-desc { color: #a1a1aa; }\n\n/* === NodeConfigPanel === */\n.ff-panel {\n background: white;\n border: 1px solid #e4e4e7;\n border-radius: 12px;\n padding: 12px;\n display: flex; flex-direction: column; gap: 10px;\n overflow: auto;\n font-size: 13px;\n color: #18181b;\n}\n.dark .ff-panel { background: #18181b; color: #fafafa; border-color: #3f3f46; }\n.ff-panel--empty { align-items: center; justify-content: center; }\n.ff-panel__empty { font-size: 12px; color: #a1a1aa; }\n.ff-panel__header { display: flex; flex-direction: column; gap: 4px; }\n.ff-panel__kind-tag {\n align-self: flex-start;\n font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase;\n background: rgba(168, 85, 247, 0.12); color: #a855f7;\n padding: 2px 8px; border-radius: 999px;\n}\n.ff-panel__kind-desc { margin: 0; font-size: 12px; color: #71717a; }\n.dark .ff-panel__kind-desc { color: #a1a1aa; }\n.ff-panel__divider { border: 0; border-top: 1px solid #e4e4e7; margin: 4px 0; }\n.dark .ff-panel__divider { border-top-color: #3f3f46; }\n\n/* Delete lives at the foot of the panel, separated from the config fields, so\n it is always reachable while a node is selected but never mistaken for one. */\n.ff-panel__actions { margin-top: auto; padding-top: 12px; }\n.ff-panel__delete {\n width: 100%;\n padding: 7px 10px;\n font-size: 13px;\n font-weight: 500;\n color: #dc2626;\n background: transparent;\n border: 1px solid #fca5a5;\n border-radius: 6px;\n cursor: pointer;\n}\n.ff-panel__delete:hover { background: #fef2f2; border-color: #dc2626; }\n.dark .ff-panel__delete { color: #f87171; border-color: #7f1d1d; }\n.dark .ff-panel__delete:hover { background: rgba(127,29,29,0.25); border-color: #f87171; }\n.ff-panel__field { display: flex; flex-direction: column; gap: 4px; }\n.ff-panel__label { font-size: 12px; font-weight: 500; }\n.ff-panel__hint { font-size: 11px; color: #71717a; margin: 0; }\n.dark .ff-panel__hint { color: #a1a1aa; }\n.ff-panel__required { color: #dc2626; }\n.ff-panel__input {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid #d4d4d8;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: 12px;\n box-sizing: border-box;\n}\n.ff-panel__input:focus { outline: 2px solid #a855f7; outline-offset: -1px; }\n.dark .ff-panel__input { border-color: #3f3f46; }\n.ff-panel__input--textarea { font-family: inherit; resize: vertical; }\n.ff-panel__input--expression,\n.ff-panel__input--json {\n font-family: ui-monospace, monospace; font-size: 11px;\n}\n.ff-panel__switch { display: inline-flex; align-items: center; cursor: pointer; }\n.ff-panel__switch input { display: none; }\n.ff-panel__switch-slider {\n width: 32px; height: 18px;\n background: #d4d4d8;\n border-radius: 999px;\n position: relative;\n transition: background 200ms;\n}\n.ff-panel__switch-slider::before {\n content: \"\";\n position: absolute; left: 2px; top: 2px;\n width: 14px; height: 14px;\n background: white;\n border-radius: 50%;\n transition: left 200ms;\n}\n.ff-panel__switch input:checked + .ff-panel__switch-slider { background: #a855f7; }\n.ff-panel__switch input:checked + .ff-panel__switch-slider::before { left: 16px; }\n.ff-panel__issues { margin-top: 4px; }\n.ff-panel__issue { font-size: 11px; color: #b45309; margin: 2px 0; }\n.dark .ff-panel__issue { color: #fbbf24; }\n\n/* ── Repeater / key-value config fields ───────────────────────────── */\n.ff-repeater { display: flex; flex-direction: column; gap: 8px; }\n.ff-repeater__empty { font-size: 11px; color: #71717a; margin: 0; font-style: italic; }\n.dark .ff-repeater__empty { color: #a1a1aa; }\n.ff-repeater__row {\n display: flex; flex-direction: column; gap: 6px;\n border: 1px solid #e4e4e7; border-radius: 6px; padding: 8px; background: #fafafa;\n}\n.dark .ff-repeater__row { border-color: #3f3f46; background: #27272a; }\n.ff-repeater__row-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n.ff-repeater__row-title {\n font-size: 11px; font-weight: 600; color: #52525b;\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.dark .ff-repeater__row-title { color: #d4d4d8; }\n.ff-repeater__row-actions { display: flex; gap: 2px; flex-shrink: 0; }\n.ff-repeater__btn {\n border: 1px solid transparent; background: transparent; cursor: pointer;\n border-radius: 4px; font-size: 11px; line-height: 1; padding: 3px 5px; color: #71717a;\n}\n.ff-repeater__btn:hover:not(:disabled) { background: #e4e4e7; color: #18181b; }\n.dark .ff-repeater__btn:hover:not(:disabled) { background: #3f3f46; color: #fafafa; }\n.ff-repeater__btn:disabled { opacity: .35; cursor: not-allowed; }\n.ff-repeater__btn--danger:hover:not(:disabled) { background: #fee2e2; color: #b91c1c; }\n.dark .ff-repeater__btn--danger:hover:not(:disabled) { background: #7f1d1d; color: #fecaca; }\n.ff-repeater__cell { display: flex; flex-direction: column; gap: 3px; }\n.ff-panel__label--sub { font-size: 11px; color: #71717a; font-weight: 400; }\n.dark .ff-panel__label--sub { color: #a1a1aa; }\n.ff-repeater__add {\n align-self: flex-start; border: 1px dashed #d4d4d8; background: transparent;\n border-radius: 6px; padding: 5px 10px; font-size: 11px; color: #52525b; cursor: pointer;\n}\n.ff-repeater__add:hover:not(:disabled) { border-color: #a855f7; color: #a855f7; }\n.ff-repeater__add:disabled { opacity: .4; cursor: not-allowed; }\n.dark .ff-repeater__add { border-color: #52525b; color: #d4d4d8; }\n\n.ff-keyvalue { display: flex; flex-direction: column; gap: 6px; }\n.ff-keyvalue__head,\n.ff-keyvalue__row { display: grid; grid-template-columns: 1fr 1fr auto; gap: 6px; align-items: center; }\n.ff-keyvalue__head { font-size: 10px; text-transform: uppercase; letter-spacing: .04em; color: #a1a1aa; }\n.ff-panel__hint--missing { color: #b45309; font-style: italic; }\n.dark .ff-panel__hint--missing { color: #fbbf24; }\n\n/* ── Edge label editor ────────────────────────────────────────────── */\n.ff-editor__edge-label { padding: 6px; min-width: 200px; }\n.ff-editor__edge-label .ff-panel__input { width: 100%; }\n\n/* ── Rich user input preview ──────────────────────────────────────── */\n.ff-rich-preview { display: flex; flex-direction: column; gap: 6px; }\n.ff-rich-preview__frame {\n border: 1px solid #e4e4e7; border-radius: 6px; overflow: hidden;\n max-height: 180px; background: #fff;\n}\n.dark .ff-rich-preview__frame { border-color: #3f3f46; background: #18181b; }\n.ff-rich-preview__unavailable {\n border: 1px dashed #d4d4d8; border-radius: 6px; padding: 10px;\n font-size: 11px; color: #71717a; line-height: 1.5;\n}\n.dark .ff-rich-preview__unavailable { border-color: #52525b; color: #a1a1aa; }\n.ff-rich-preview__unavailable code {\n font-size: 10px; background: #f4f4f5; padding: 1px 4px; border-radius: 3px;\n}\n.dark .ff-rich-preview__unavailable code { background: #27272a; }\n.ff-rich-preview__title { font-size: 11px; font-weight: 600; color: #52525b; }\n.dark .ff-rich-preview__title { color: #d4d4d8; }\n\n/* Resizable nodes (G11) — a resizable kind drops the fixed max-width so the\n card fills the width/height xyflow's NodeResizer writes onto the node. */\n.ff-node--resizable {\n max-width: none;\n width: 100%;\n height: 100%;\n}\n/* NodeResizer chrome (unstyled by default) — themeable border + handles. */\n.react-flow__resize-control.line { border-color: rgba(0, 0, 0, 0.15); }\n.react-flow__resize-control.handle {\n width: 8px; height: 8px; border-radius: 2px; border: 1px solid #fff;\n}\n.dark .react-flow__resize-control.line { border-color: rgba(255, 255, 255, 0.18); }\n.dark .react-flow__resize-control.handle { border-color: #1c1917; }\n\n/* Swimlanes (G6) — a resizable, titled container band. Child nodes are parented\n into it and render on top; this is just the background, so it fills the node's\n width/height and sits behind its children (xyflow orders a parent before its\n children). */\n.ff-lane {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n background: rgba(100, 116, 139, 0.06);\n border: 1px dashed #cbd5e1;\n border-radius: 8px;\n overflow: hidden;\n}\n.ff-lane--selected { border-style: solid; }\n.ff-lane__header {\n display: flex;\n align-items: center;\n height: 22px;\n padding: 0 8px;\n color: #fff;\n font-size: 11px;\n font-weight: 600;\n font-family: ui-sans-serif, system-ui, sans-serif;\n border-radius: 7px 7px 0 0;\n}\n.ff-lane__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n\n/* Notes (annotation category) — a resizable sticky-note. Portless + visual-only;\n the engine skips it, so it never reaches a runner. Fill/border come from the\n note's color (inline style); this is layout + typography only. */\n.ff-note {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n padding: 8px 10px;\n border: 1px solid transparent;\n border-radius: 8px;\n font-family: ui-sans-serif, system-ui, sans-serif;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n.ff-note--selected { box-shadow: 0 0 0 1px currentColor; }\n.ff-note__title {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n.ff-note__body {\n flex: 1;\n min-height: 0;\n font-size: 12px;\n line-height: 1.5;\n color: #3f3f46;\n white-space: pre-wrap;\n overflow: auto;\n}\n.dark .ff-note__body { color: #e4e4e7; }\n@media (prefers-color-scheme: dark) {\n .ff-note__body:not(.ff-canvas--light *) { color: #e4e4e7; }\n}\n.ff-note__placeholder { color: #a1a1aa; font-style: italic; }\n.ff-note__input {\n flex: 1;\n min-height: 0;\n width: 100%;\n resize: none;\n border: none;\n outline: none;\n background: transparent;\n font: inherit;\n font-size: 12px;\n line-height: 1.5;\n color: inherit;\n}\n\n/* Reactive output (G12) — a node's live computed value. */\n.ff-node__output {\n margin: 0;\n padding: 4px 10px 8px;\n font-size: 11px;\n font-family: ui-monospace, \"SF Mono\", Menlo, monospace;\n color: #059669;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dark .ff-node__output { color: #34d399; }\n\n/* Alignment guide lines (G15). */\n.ff-helper-line { background: #3b82f6; }\n.dark .ff-lane { background: rgba(148, 163, 184, 0.08); border-color: #3f3f46; }\n@media (prefers-color-scheme: dark) {\n .ff-lane:not(.ff-canvas--light *) { background: rgba(148, 163, 184, 0.08); border-color: #3f3f46; }\n}\n"],"mappings":";AAEA,CAAC;AACC,aAAW;AAEX,4BAA0B;AAC1B,kCAAgC;AAChC,qCAAmC;AAEnC,sCAAoC;AACpC,4CAA0C;AAE1C,6CAA2C,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAE/D,yCAAuC;AACvC,8CAA4C,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAChE,0CAAwC;AACxC,0CAAwC;AACxC,8CAA4C;AAC5C,0CAAwC;AACxC,0CAAwC;AAExC,iCAA+B;AAC/B,8CAA4C;AAC5C,+CAA6C;AAC7C,+CAA6C;AAC7C,oBAAkB,IAAI,qBAAqB,EAAE,IAAI;AACjD,2BAAyB;AACzB,4BAA0B,IAAI,MAAM;AACpC,sCAAoC;AACpC,4CAA0C,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAC9D,qCAAmC,EAAE,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC/D,wCAAsC,EAAE,EAAE,EAAE,MAAM;AAClD,mCAAiC;AAEjC,wCAAsC;AACtC,oCAAkC;AAElC,2CAAyC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE;AAC1D,iCAA+B,IAAI,OAAO,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE;AAE3D,iDAA+C;AAC/C,uDAAqD;AACrD,sCAAoC;AACpC,4CAA0C;AAC1C,6CAA2C;AAC3C,oCAAkC,EAAE,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAE5D,4CAA0C;AAC1C,iCAA+B;AAC/B,wCAAsC;AACxC;AACA,CAlDC,UAkDU,CAAC;AACV,4BAA0B;AAC1B,kCAAgC;AAChC,qCAAmC;AAEnC,sCAAoC;AACpC,4CAA0C;AAE1C,6CAA2C,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAE/D,yCAAuC;AACvC,8CAA4C,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC7D,0CAAwC;AACxC,0CAAwC;AACxC,8CAA4C;AAC5C,0CAAwC;AACxC,0CAAwC;AAExC,iCAA+B;AAC/B,8CAA4C;AAC5C,+CAA6C;AAC7C,+CAA6C;AAC7C,2BAAyB;AACzB,4BAA0B,IAAI,MAAM;AACpC,sCAAoC;AACpC,4CAA0C,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAC9D,qCAAmC,EAAE,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACrE,wCAAsC,EAAE,EAAE,EAAE,MAAM;AAElD,wCAAsC;AACtC,oCAAkC;AAElC,2CAAyC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAC7D,iCAA+B,IAAI,OAAO,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAE9D,iDAA+C;AAC/C,uDAAqD;AACrD,sCAAoC;AACpC,4CAA0C;AAC1C,6CAA2C;AAC3C,oCAAkC,EAAE,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAE5D,4CAA0C;AAC1C,iCAA+B;AACjC;AACA,CAAC;AACC,oBAAkB,IAAI,2BAA2B,EAAE,IAAI,qBAAqB,EAAE,IAAI;AAClF,kBAAgB;AAChB,WAAS;AACX;AACA,CAAC;AACC,YAAU;AACV,SAAO;AACP,UAAQ;AACR,OAAK;AACL,QAAM;AACR;AACA,CAAC;AACC,WAAS;AACT,gBAAc;AAChB;AACA,CAJC,gBAIgB,CAAC;AACd,UAAQ;AACV;AACF,CAPC,gBAOgB,CAAC;AACd,UAAQ;AACV;AACF,CAVC,gBAUgB,CAAC;AACd,UAAQ;AACV;AACF,CAAC;AACC,oBAAkB,EAAE;AACpB,WAAS;AACT,kBAAgB;AAClB;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC;AACC,WAAS;AACX;AACA,CAAC,+BAA+B;AAChC,CADC,+BAC+B;AAC9B,WAAS;AACX;AACA,CAAC;AACC,UAAQ,IAAI,gBAAgB,EAAE,IAAI;AAClC,gBAAc,IAAI,sBAAsB,EAAE,IAAI;AAC9C,QAAM;AACR;AACA,CAAC;AACC,UAAQ,IAAI,0BAA0B,EAAE,IAAI;AAC5C,gBAAc,IAAI,gCAAgC,EAAE,IAAI;AACxD,QAAM;AACR;AACA,CAjJC,WAiJW,CAAC;AACX,YAAU;AACZ;AACA,CApJC,WAoJW,CAHC,kBAGkB;AAC3B,YAAU;AACV,YAAU;AACV,kBAAgB;AAClB;AACF,CAAC;AACC,kBAAgB;AAClB;AACA,CAHC,gBAGgB,CAAC;AACd,UAAQ;AACV;AACF,CANC,gBAMgB,CAAC,SAAS;AACvB,oBAAkB;AAClB,aAAW,SAAS,KAAK,OAAO;AAClC;AACF,CAVC,gBAUgB,CAJC,SAIS,IAAI,CAAC;AAC5B,oBAAkB;AAClB,aAAW;AACb;AACF,CAdC,gBAcgB,CAAC;AACd,kBAAgB;AAClB;AACF,CAjBC,gBAiBgB,CAAC;AAChB,CAlBD,gBAkBkB;AACjB,CAnBD,gBAmBkB;AACf,WAAS;AACX;AACF,CAtBC,gBAsBgB,CALC,SAKS,CAxC1B;AAyCC,CAvBD,gBAuBkB,CApBD,UAoBY,OAAO,CAzCpC;AA0CC,CAxBD,gBAwBkB,CArBD,UAqBY,eAAe,CA1C5C;AA2CG,UAAQ,IAAI,yBAAyB,EAAE,IAAI;AAC7C;AACF,CAAC;AACG,kBAAgB;AAClB;AACF,CA9BC,iBA8BiB,CAAC;AACf,kBAAgB;AAChB,uBAAqB;AAClB,oBAAkB;AACb,eAAa;AACvB;AAEF,CAAC,sBAAsB;AACrB,UAAQ,IAAI,gBAAgB,EAAE,IAAI;AACpC;AACA,CAHC,sBAGsB,QAAQ,CAAC;AAC9B,QAAM,IAAI,gBAAgB,EAAE,IAAI;AAClC;AACA,CAAC;AACC,kBAAgB;AAClB;AACA,CAHC,uBAGuB,CAxCN;AAyCd,oBAAkB;AAClB,aAAW,SAAS,KAAK,OAAO;AAClC;AACF,GAAG,CAAC;AACF,WAAS;AACT,YAAU;AACV,YAAU;AACZ;AACA,CAAC;AACC,kBAAgB;AAChB,oBAAkB,EAAE;AACtB;AACA,CAAC;AACC,YAAU;AACV,uBAAqB;AAClB,oBAAkB;AACb,eAAa;AACrB,kBAAgB;AAChB,oBAAkB,EAAE;AACpB,cAAY;AACZ,UAAQ;AACV;AACA,CAVC,gBAUgB,CAlEC;AAmEd,UAAQ;AACV;AACF,CAbC,gBAagB,CAlHC;AAmHd,UAAQ;AACR,kBAAgB;AAClB;AACF,CAjBC,gBAiBgB,CAtHC,SAsHS,CAnHT;AAoHZ,UAAQ;AACV;AACJ,CAAC;AACC,WAAS;AACT,oBAAkB,KAAK;AACvB,kBAAgB;AAClB;AACA,CA1GC;AA2GG,YAAU;AACV,kBAAgB;AAChB,UAAQ;AACV;AACF,CAAC;AACC,YAAU;AACV,kBAAgB;AAChB,aAAW;AACX,cAAY;AACZ,SAAO;AACP,UAAQ;AACR,oBAAkB,IAAI,4BAA4B,EAAE,IAAI;AACxD,UAAQ,IAAI,MAAM,IAAI,wBAAwB,EAAE,IAAI;AACpD,iBAAe;AACjB;AACA,CAXC,kBAWkB,CAAC;AAChB,kBAAgB;AAClB;AACF,CAdC,kBAckB,CAAC;AAChB,kBAAgB;AAChB,UAAQ;AACV;AACF,CAAC;AACG,OAAK;AACL,QAAM;AACN,UAAQ;AACR,aAAW,UAAU,IAAI,EAAE;AAC7B;AACF,CAAC;AACG,OAAK;AACL,QAAM;AACN,aAAW,UAAU,IAAI,EAAE;AAC7B;AACF,CAAC;AACG,OAAK;AACL,QAAM;AACN,aAAW,UAAU,IAAI,EAAE;AAC7B;AACF,CAAC;AACG,OAAK;AACL,SAAO;AACP,aAAW,UAAU,GAAG,EAAE;AAC5B;AACF,CAAC;AACC,UAAQ;AACR,kBAAgB;AAClB;AACA,CAlLC,gBAkLgB,CAxKC,UAwKU,CAAC;AAC3B,kBAAgB;AAClB;AACA,CAH6B;AAI3B,YAAU;AACV,WAAS;AACT,UAAQ;AACV;AACA,CAR6B,iBAQX,CAAC;AACf,OAAK;AACP;AACF,CAX6B,iBAWX,CAAC;AACf,UAAQ;AACV;AACF,CAd6B,iBAcX,CANC,GAMG,CAAC;AAAQ,CAdF,iBAcoB,CAH9B,MAGqC,CAAjC;AACjB,QAAM;AACN,aAAW,WAAW,OAAO,WAAW;AAC1C;AACJ,CAlB6B,iBAkBX,CAAC;AACf,QAAM;AACR;AACF,CArB6B,iBAqBX,CAAC;AACf,SAAO;AACT;AACF,CAxB6B,iBAwBX,CANC,IAMI,CAVA;AAUS,CAxBH,iBAwBqB,CAH/B,KAGqC,CAVjC;AAWjB,OAAK;AACL,aAAW,WAAW,OAAO,WAAW;AAC1C;AACJ,CAAC;AACC,aAAW;AACX,cAAY,IAAI,iCAAiC,EAAE,IAAI;AACvD,WAAS,IAAI;AACb,UAAQ;AACV;AACA,CANC,wBAMwB;AACrB,mBAAiB;AACjB,SAAO;AACT;AACF,WAlKe;AAmKb;AACE,uBAAmB;AACrB;AACF;AACA,CAAC;AACC,YAAU;AACV,SAAO;AACP,UAAQ;AACR,kBAAgB;AAChB,uBAAqB;AAClB,oBAAkB;AACb,eAAa;AACrB,QAAM;AACN,OAAK;AACP;AACA,CAAC;AACC,YAAU;AACV,SAAO;AACP,UAAQ;AACR,QAAM;AACN,OAAK;AACL,uBAAqB;AAClB,oBAAkB;AACb,eAAa;AACvB;AACA,CAAC;AACC,cAAY,KACV,mCAAmC,EACnC,IAAI,6BAA6B,EAAE,IAAI;AAE3C;AACA,CAAC;AACG,WAAS;AACX;AACF,CAAC;AACG,QAAM,KACJ,wCAAwC,EACxC,IAAI,kCAAkC,EAAE,IAAI;AAE9C,UAAQ,KACN,oCAAoC,EACpC,IAAI,8BAA8B,EAAE,IAAI;AAE1C,gBAAc,KACZ,oCAAoC,EACpC,IAAI,8BAA8B,EAAE,IAAI;AAE5C;AACF,CAAC;AACG,QAAM,KACJ,wCAAwC,EACxC,IAAI,kCAAkC,EAAE,IAAI;AAE9C,UAAQ,KACN,oCAAoC,EACpC,IAAI,8BAA8B,EAAE,IAAI;AAE1C,gBAAc,KACZ,oCAAoC,EACpC,IAAI,8BAA8B,EAAE,IAAI;AAE5C;AACF,CAAC,8BAA8B,CAAC;AAC5B,QAAM,KACJ,mCAAmC,EACnC,IAAI,6BAA6B,EAAE,IAAI;AAE3C;AACF,CANC,8BAM8B,CAAC;AAC5B,UAAQ,KACN,mCAAmC,EACnC,IAAI,6BAA6B,EAAE,IAAI;AAE3C;AACF,CAZC,8BAY8B,CAAC;AAC5B,UAAQ,KACN,mCAAmC,EACnC,IAAI,6BAA6B,EAAE,IAAI;AAE3C;AACF,CAAC;AACC,WAAS;AACT,kBAAgB;AAChB,cAAY,IAAI,wBAAwB,EAAE,IAAI;AAChD;AACA,CALC,oBAKoB,CAAC;AAClB,kBAAgB;AAClB;AACF,CAAC;AACG,WAAS;AACT,mBAAiB;AACjB,eAAa;AACb,UAAQ;AACR,SAAO;AACP,WAAS;AACT,UAAQ;AACR,cAAY,IAAI,qCAAqC,EAAE,IAAI;AAC3D,iBAAe,IAAI,MACjB,KACE,uCAAuC,EACvC,IAAI,iCAAiC,EAAE,IAAI;AAE/C,SAAO,KACL,gCAAgC,EAChC,IAAI,0BAA0B,EAAE,IAAI;AAEtC,UAAQ;AACR,uBAAqB;AAClB,oBAAkB;AACb,eAAa;AACvB;AACF,CAvBC,4BAuB4B;AACvB,SAAO;AACP,aAAW;AACX,cAAY;AACZ,QAAM;AACR;AACJ,CAhSC,gBAgSgB,CAAC,SAAS,CAlT1B;AAmTK,UAAQ;AACV;AACJ,CArQmB;AAsQf,aAAW;AACb;AACF,CA3OC,gBA2OgB,CAnSC,UAmSU;AAC1B,CA5OD,gBA4OkB,CApSD,UAoSY;AAC1B,WAAS;AACX;AACF,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACC,WAAS;AACT,iBAAe,IAAI,uBAAuB,EAAE,IAAI;AAChD,SAAO;AACP,aAAW;AACX,SAAO,IAAI,eAAe,EAAE,IAAI;AAChC,cAAY;AACZ,UAAQ,IAAI,gBAAgB,EAAE,IAAI;AAClC,oBAAkB,IAAI,0BAA0B,EAAE,IAAI;AACxD;AACA,CAbC,sBAasB,CApTL,UAoTgB;AAAQ,CAZzC,wBAYkE,CApTjD,UAoT4D;AAAQ,CAXrF,uBAW6G,CApT5F,UAoTuG;AAAQ,CAVhI,sBAUuJ,CApTtI,UAoTiJ;AAC7J,cAAY,IAAI,yBAAyB,EAAE,IAAI;AACjD;AACJ,CAhBC,sBAgBsB,CAvTL,UAuTgB,CAzShB;AA0Sd,CAjBH,sBAiB0B,CAxTT,UAwToB;AAClC,CAlBH,sBAkB0B,CAzTT,UAyToB;AAClC,CAlBH,wBAkB4B,CA1TX,UA0TsB,CA5StB;AA6Sd,CAnBH,wBAmB4B,CA3TX,UA2TsB;AACpC,CApBH,wBAoB4B,CA5TX,UA4TsB;AACpC,CApBH,uBAoB2B,CA7TV,UA6TqB,CA/SrB;AAgTd,CArBH,uBAqB2B,CA9TV,UA8TqB;AACnC,CAtBH,uBAsB2B,CA/TV,UA+TqB;AACnC,CAtBH,sBAsB0B,CAhUT,UAgUoB,CAlTpB;AAmTd,CAvBH,sBAuB0B,CAjUT,UAiUoB;AAClC,CAxBH,sBAwB0B,CAlUT,UAkUoB;AAChC,cAAY,IAAI,4BAA4B,EAAE,IAAI;AACpD;AACJ,CA3BC;AA4BC,oBAAkB,IAAI,gCAAgC,EAAE,IAAI;AAC9D;AACA,CAjWC;AAkWD,CArWC;AAsWC,cAAY,IAAI,+BAA+B,EAAE,IAAI;AACrD,UAAQ,IAAI,qBAAqB,EAAE,IAAI;AACzC;AACA,CAtWC,+BAsW+B;AAC9B,CAvWD,+BAuWiC;AAChC,CA3WD,qBA2WuB;AACtB,CA5WD,qBA4WuB;AACpB,WAAS;AACX;AACF,CAnFC,2BAmF2B;AACtB,cAAY,KACV,iDAAiD,EACjD,IAAI,2CAA2C,EAAE,IAAI;AAEvD,SAAO,KACL,sCAAsC,EACtC,IAAI,gCAAgC,EAAE,IAAI;AAE9C;AACJ,CA7FC,2BA6F2B;AACtB,kBAAgB;AAClB;AACJ,CAhGC,2BAgG2B,UAAU;AAC9B,gBAAc;AAChB;AACN,CAnGC,2BAmG2B;AACxB,iBAAe;AACjB;AACF,CA9GC,oBA8GoB,CAzGC,WAyGW,CAtGhC;AAuGG,iBAAe;AACf,gBAAc,IAAI,MAChB,KACE,uCAAuC,EACvC,IAAI,iCAAiC,EAAE,IAAI;AAEjD;AACF,CAtHC,oBAsHoB,CAjHC,WAiHW,CA9GhC,2BA8G4D;AACzD,gBAAc;AAChB;AACF,CAAC;AACC,YAAU;AACZ;AACA,CAHC,0BAG0B,CAjOR;AAkOnB,CAJC,0BAI0B,CA/NR;AAgOjB,UAAQ;AACV;AACA,CAPC,0BAO0B,CA/OR;AAgPnB,CARC,0BAQ0B,CA7OR;AA8OjB,UAAQ;AACV;AACA,CAXC,0BAW0B,CAnPR,GAmPY,CAzOZ;AA0OnB,CAZC,0BAY0B,CAjPR,MAiPe,CAvOf;AAwOjB,UAAQ;AACV;AACA,CAfC,0BAe0B,CApPR,MAoPe,CA7Of;AA8OnB,CAhBC,0BAgB0B,CAxPR,GAwPY,CA3OZ;AA4OjB,UAAQ;AACV;AAEA,CApBC,0BAoB0B,CAAC;AAC1B,SAAO;AACP,UAAQ;AACR,UAAQ,IAAI,MAAM;AAClB,iBAAe;AACf,oBAAkB,IAAI,4BAA4B,EAAE,IAAI;AACxD,aAAW,KAAK;AAClB;AACA,CA5BC,0BA4B0B,CARC,MAQM,CA1Pf;AA2PjB,QAAM;AACN,OAAK;AACP;AACA,CAhCC,0BAgC0B,CAZC,MAYM,CA3Pf;AA4PjB,QAAM;AACN,OAAK;AACP;AACA,CApCC,0BAoC0B,CAhBC,MAgBM,CA5Qf;AA6QjB,QAAM;AACN,OAAK;AACP;AACA,CAxCC,0BAwC0B,CApBC,MAoBM,CA7Qf;AA8QjB,QAAM;AACN,OAAK;AACP;AACA,CA5CC,0BA4C0B,CAxBC,MAwBM,CApRf,GAoRmB,CA1QnB;AA2QjB,QAAM;AACR;AACA,CA/CC,0BA+C0B,CA3BC,MA2BM,CApRf,MAoRsB,CA7QtB;AA8QjB,QAAM;AACR;AACA,CAlDC,0BAkD0B,CA9BC,MA8BM,CA1Rf,GA0RmB,CA7QnB;AA8QjB,QAAM;AACR;AACA,CArDC,0BAqD0B,CAjCC,MAiCM,CA1Rf,MA0RsB,CAhRtB;AAiRjB,QAAM;AACR;AAEA,CAzDC,0BAyD0B,CAAC;AAC1B,gBAAc,IAAI,4BAA4B,EAAE,IAAI;AACpD,gBAAc;AACd,gBAAc;AAChB;AACA,CA9DC,0BA8D0B,CALC,IAKI,CA5Rb;AA6RnB,CA/DC,0BA+D0B,CANC,IAMI,CA1Rb;AA2RjB,SAAO;AACP,aAAW,UAAU,IAAI,EAAE;AAC3B,OAAK;AACL,UAAQ;AACV;AACA,CArEC,0BAqE0B,CAZC,IAYI,CAnSb;AAoSjB,QAAM;AACN,qBAAmB;AACrB;AACA,CAzEC,0BAyE0B,CAhBC,IAgBI,CApSb;AAqSjB,QAAM;AACN,sBAAoB;AACtB;AACA,CA7EC,0BA6E0B,CApBC,IAoBI,CArTb;AAsTnB,CA9EC,0BA8E0B,CArBC,IAqBI,CAnTb;AAoTjB,UAAQ;AACR,aAAW,UAAU,CAAC,EAAE;AACxB,QAAM;AACN,SAAO;AACT;AACA,CApFC,0BAoF0B,CA3BC,IA2BI,CA5Tb;AA6TjB,OAAK;AACL,oBAAkB;AACpB;AACA,CAxFC,0BAwF0B,CA/BC,IA+BI,CA7Tb;AA8TjB,uBAAqB;AACrB,OAAK;AACP;AACA,CAAC;AACC,QAAM,IAAI,gCAAgC,EAAE,IAAI;AAClD;AACA,CArbmB;AAsbjB,QAAM,IAAI,qBAAqB,EAAE,IAAI;AACvC;;;ACrmBA,CAAC;AACC,WAAS;AACT,kBAAgB;AAChB,UAAQ,IAAI,MAAM;AAClB,iBAAe;AACf,YAAU;AACV,cAAY;AACd;AACA,CAAC,KAAK,CARL;AAQkB,cAAY;AAAS,gBAAc;AAAS;AAC/D,QAAO,sBAAuB;AAC5B,GAVD,SAUW,KAAK,CAAC;AAAoB,gBAAY;AAAS,kBAAc;AAAS;AAClF;AAEA,CAAC;AACC,iBAAe,IAAI,MAAM;AACzB,WAAS,IAAI;AACb,WAAS;AAAM,OAAK;AAAK,eAAa;AACtC,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAChC;AAAA,IAAa,aAAa;AAAA,IAAE,SAAS;AAAA,IAAE;AACvC,aAAW;AACb;AACA,CAbC,KAaK,CARL;AAQ2B,cAAY,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAAM,gBAAc;AAAS,SAAO;AAAS;AACtG,QAAO,sBAAuB;AAC5B,GAVD;AAUuB,gBAAY,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAAM,kBAAc;AAAS,WAAO;AAAS;AAClG;AACA,CAAC;AAAqB,QAAM;AAAG,cAAY;AAAG,YAAU;AAAU;AAGlE,CApBC,KAoBK,CAAC,uBAAuB,QAAQ;AAAS,QAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAAO;AAGhF,CAAC;AACC,aAAW;AACX,aAAW;AACX,cAAY;AACZ,UAAQ,IAAI,MAAM;AAClB,iBAAe;AACf;AAAA,IAAa,aAAa;AAAA,IAAE,SAAS;AAAA,IAAE;AACvC,aAAW;AACX,SAAO;AACP,cAAY,EAAE,IAAI,IAAI,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,KAAK,EAAE,EAAE,IAAI,KAAK,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AAC9D,cAAY,WAAW,KAAK,EAAE,aAAa;AAC3C,YAAU;AACZ;AACA,CApCC,KAoCK,CAbL;AAcC,cAAY;AACZ,SAAO;AACP,gBAAc;AACd,cAAY,EAAE,IAAI,IAAI,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAE,EAAE,IAAI,KAAK,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AAC/D;AACA,QAAO,sBAAuB;AAC5B,GApBD;AAoBY,gBAAY;AAAS,WAAO;AAAS,kBAAc;AAAS,gBAAY,EAAE,IAAI,IAAI,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAE,EAAE,IAAI,KAAK,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AAAM;AAC5I;AACA,CAAC;AACC,cAAY,EAAE,EAAE,EAAE,IAAI,YAAY,EAAE,EAAE,IAAI,KAAK,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AAC5D;AAEA,CAAC;AACC,WAAS;AAAM,eAAa;AAAQ,OAAK;AACzC,WAAS,IAAI;AACb,SAAO;AACP,eAAa;AACf;AACA,CAAC;AAAgB,aAAW;AAAM,eAAa;AAAG;AAClD,CAAC;AACC,aAAW;AACX,kBAAgB;AAChB,eAAa;AACb,WAAS;AACT,kBAAgB;AAClB;AACA,CAAC;AAAiB,QAAM;AAAG,aAAW;AAAM;AAC5C,CAAC;AACC,UAAQ;AACR,WAAS,IAAI,KAAK;AAClB,aAAW;AACX,SAAO;AACT;AACA,CAtEC,KAsEK,CANL;AAMsB,SAAO;AAAS;AACvC,QAAO,sBAAuB;AAAQ,GAPrC;AAOsD,WAAO;AAAS;AAAE;AAEzE,CAAC;AAAgB,WAAS,IAAI,KAAK;AAAM;AACzC,CAAC;AACC,UAAQ;AACR,WAAS,IAAI,KAAK;AAClB,aAAW;AACX,SAAO;AACT;AACA,CAhFC,KAgFK,CANL;AAM6B,SAAO;AAAS;AAC9C,QAAO,sBAAuB;AAAQ,GAPrC;AAO6D,WAAO;AAAS;AAAE;AAChF,CAAC,sBAAsB,CARtB;AAQ8C,SAAO;AAAS;AAC/D,CAnFC,KAmFK,CADL,sBAC4B,CAT5B;AASoD,SAAO;AAAS;AAErE,CAAC;AAA0B,aAAW,SAAS,KAAK,YAAY;AAAU;AAC1E,WADsC;AAEpC;AAAW,gBAAY,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,KAAK,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AAAO;AACrF;AAAW,gBAAY,EAAE,EAAE,EAAE,IAAI,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,KAAK,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AAAO;AAC1F;AAGA,CAAC;AACC,SAAO;AAAK,UAAQ;AAAK,iBAAe;AACxC,cAAY,KAAK,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC;AAC/B;AACA,CAAC;AAAwB,cAAY;AAAS;AAC9C,CAAC;AAAwB,cAAY;AAAS,cAAY,EAAE,EAAE,IAAI;AAAS;AAC3E,CAAC;AAAwB,cAAY;AAAS;AAC9C,CAAC;AAAwB,cAAY;AAAS;AAG9C,CAAC;AACC,WAAS;AAAM,mBAAiB;AAChC,aAAW;AAAM,SAAO;AAC1B;AACA,CA1GC,KA0GK,CAJL;AAI0B,SAAO;AAAS;AAC3C,QAAO,sBAAuB;AAAQ,GALrC;AAK0D,WAAO;AAAS;AAAE;AAG7E,CAAC;AACC,cAAY;AACZ,UAAQ,IAAI,MAAM,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AAC7B,iBAAe;AACf,WAAS,IAAI;AACb;AAAA,IAAa,aAAa;AAAA,IAAE,SAAS;AAAA,IAAE;AACvC,aAAW;AACX,SAAO;AACP,aAAW;AACX,cAAY,EAAE,IAAI,IAAI,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,KAAK,EAAE,EAAE,IAAI,KAAK,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AAE9D,gBAAc;AAChB;AACA,CAAC;AAAoB,cAAY,EAAE,EAAE,EAAE,IAAI,OAAO,EAAE,EAAE,IAAI,KAAK,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AAAM;AAChF,CAAC;AAAiB,eAAa;AAAK,iBAAe;AAAK;AACxD,CAAC;AAAgB,UAAQ;AAAG,eAAa;AAAU;AAMnD,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACC,cAAY;AACZ,UAAQ;AACR,WAAS;AACT,cAAY;AACZ,iBAAe;AACjB;AAGA,CAAC;AACC,SAAO;AAAM,UAAQ;AACrB,cAAY;AACZ,UAAQ,IAAI,MAAM;AAClB,iBAAe;AACjB;AACA,CAvJC,KAuJK,CANL;AAM2B,cAAY;AAAS,gBAAc;AAAS;AACxE,QAAO,sBAAuB;AAC5B,GARD;AAQuB,gBAAY;AAAS,kBAAc;AAAS;AACpE;AACA,CAVC,kBAUkB;AAAS,cAAY;AAAS,gBAAc;AAAS;AAGxE,CA9JC,KA8JK,CAAC;AAAwB,UAAQ;AAAS;AAChD,QAAO,sBAAuB;AAC5B,GAFK;AAEoB,YAAQ;AAAS;AAC5C;AACA,CAAC;AAA8B,UAAQ;AAAS,gBAAc;AAAG;AAIjE,CAtKC,KAsKK,CAAC;AACP,CADO,oBACc,CAAC;AACpB,cAAY;AACZ,cAAY;AACd;AACA,CA3KC,KA2KK,CALC,qBAKqB,CAAC;AAC3B,cAAY;AACZ,gBAAc;AACd,uBAAqB;AACrB,SAAO;AACT;AACA,CAjLC,KAiLK,CAXC,qBAWqB,CANC,2BAM2B;AACtD,cAAY;AACd;AACA,CApLC,KAoLK,CAdC,qBAcqB,CATC,4BAS4B;AACzD,CArLC,KAqLK,CAfC,qBAeqB,CAVC,4BAU4B,IAAI;AAC7D,CAtLC,KAsLK,CAhBC,qBAgBqB,CAXC,4BAW4B,IAAI;AAC7D,CAvLC,KAuLK,CAjBC,qBAiBqB,CAZC,4BAY4B,IAAI;AAC3D,QAAM;AACN,UAAQ;AACV;AAGA,CAAC;AAAkB,WAAS;AAAM,OAAK;AAAK;AAC5C,CAAC;AACC,UAAQ;AAAG,iBAAe;AAC1B,WAAS,IAAI;AACb,QAAM;AAAS,aAAW;AAAM,eAAa;AAC7C,UAAQ;AACR,cAAY;AAAS,SAAO;AAC9B;AACA,CArMC,KAqMK,CAPL;AAO6B,cAAY;AAAS,SAAO;AAAS;AACnE,CAAC;AAA4B,cAAY;AAAS,SAAO;AAAO;AAChE,CAvMC,KAuMK,CADL;AACkC,cAAY;AAAS,SAAO;AAAO;AACtE,CAAC;AAA+B,cAAY;AAAS,SAAO;AAAO;AACnE,CAXC,oBAWoB;AAAY,WAAS;AAAK,UAAQ;AAAS;AAGhE,CAAC;AACC,eAAa,YAAY,EAAE;AAC3B,aAAW;AACX,cAAY;AACZ,SAAO;AACP,iBAAe;AACf,WAAS,IAAI;AACb,YAAU;AACV,cAAY;AACZ,UAAQ,IAAI,MAAM;AACpB;AACA,CAAC;AAAqB,SAAO;AAAS,UAAQ;AAAG;AACjD,CAAC;AAAmB,WAAS;AAAM,OAAK;AAAK,WAAS,IAAI;AAAG;AAC7D,CAAC,wBAAwB,CAAC;AAAoB,SAAO;AAAS;AAC9D,CAAC,uBAAwB,CADC;AACoB,SAAO;AAAS;AAC9D,CAAC,yBAAyB,CAFA;AAEqB,SAAO;AAAS;AAC/D,CAAC;AAAoB,SAAO;AAAS;AACrC,CAAC;AAAoB,SAAO;AAAS;AACrC,CAL0B;AAKL,QAAM;AAAG;AAG9B,CAAC;AAAmB,cAAY;AAAM,WAAS;AAAG,UAAQ;AAAG,WAAS;AAAM,kBAAgB;AAAQ,OAAK;AAAK;AAC9G,CADC,iBACiB;AAAK,WAAS;AAAM,OAAK;AAAK,aAAW;AAAM;AACjE,CAAC;AAAuB,SAAO;AAAS;AACxC,CApOC,KAoOK,CADL;AAC6B,SAAO;AAAS;AAC9C,CAAC;AAAyB,eAAa,YAAY,EAAE;AAAW;AAChE,CAAC;AAAwB,SAAO;AAAS,aAAW;AAAM;AAC1D,CAAC;AAAsB,aAAW;AAAM,SAAO;AAAS,cAAY;AAAQ;AAG5E,CAAC;AACC,WAAS;AACT,yBAAuB,MAAM,IAAI;AACjC,OAAK;AACL;AAAA,IAAa,aAAa;AAAA,IAAE,SAAS;AAAA,IAAE;AACzC;AACA,CAAC;AAAkB,WAAS;AAAM,kBAAgB;AAAQ,OAAK;AAAK,aAAW;AAAG,YAAU;AAAU;AAEtG,CAAC;AACC,YAAU;AAAU,SAAO;AAAG,WAAS;AAAM,eAAa;AAC1D,WAAS;AAAM,cAAY;AAAQ,kBAAgB;AACrD;AACA,CAJC,iBAIiB,EAAE;AAAI,kBAAgB;AAAM;AAE9C,CAAC;AAAwB,WAAS;AAAM,kBAAgB;AAAQ,OAAK;AAAK,cAAY;AAAG;AACzF,CAAC;AAA0B,eAAa;AAAG,WAAS;AAAM,aAAW;AAAM,OAAK;AAAK;AAErF,CAAC;AACC,YAAU;AAAO,WAAS;AAAI,aAAW;AAAO,WAAS;AACzD,WAAS;AAAM,kBAAgB;AAC/B,cAAY;AAAO,UAAQ,IAAI,MAAM;AAAS,iBAAe;AAC7D,cAAY,EAAE,IAAI,KAAK,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AACpC;AACA,CAjQC,KAiQK,CANL;AAMuB,cAAY;AAAS,gBAAc;AAAS;AACpE,CAAC;AACC,UAAQ;AAAG,cAAY;AAAa,UAAQ;AAAS,cAAY;AACjE,WAAS,IAAI;AAAM,iBAAe;AAAK,aAAW;AAAQ,SAAO;AACnE;AACA,CAJC,mBAImB;AAAS,cAAY,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AAAO;AAC3D,CAvQC,KAuQK,CALL,mBAKyB;AAAS,cAAY;AAAS;AACxD,CAAC;AAA8B,SAAO;AAAS;AAC/C,CAzQC,KAyQK,CADL;AACoC,SAAO;AAAS;AACrD,CAAC;AAAkB,eAAa;AAAG;AACnC,CAAC;AAAiB,SAAO;AAAK,cAAY;AAAS,cAAY;AAAS;AACxE,CA5QC,KA4QK,CADL;AACuB,cAAY;AAAS;AAC7C,CAAC;AACC,UAAQ,IAAI,MAAM;AAAS,cAAY;AAAa,UAAQ;AAC5D,iBAAe;AAAK,WAAS,IAAI;AACjC,SAAO;AAAS,aAAW;AAC7B;AACA,CALC,cAKc,MAAM,KAAK;AAAa,cAAY,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AAAO;AACrE,CANC,cAMc;AAAY,WAAS;AAAM,UAAQ;AAAa;AAC/D,CApRC,KAoRK,CAPL;AAOuB,gBAAc;AAAS;AAC/C,CArRC,KAqRK,CARL,cAQoB;AAAS,cAAY;AAAS;AACnD,CAAC;AACC,eAAa;AAAM,aAAW;AAAM,SAAO;AAC7C;AACA,CAzRC,KAyRK,CAHL;AAGyB,SAAO;AAAS;AAG1C,CAAC;AACC,WAAS;AAAM,kBAAgB;AAC/B,cAAY;AACZ,UAAQ,IAAI,MAAM;AAClB,iBAAe;AACf,YAAU;AACV,aAAW;AACX,SAAO;AACT;AACA,CArSC,KAqSK,CATL;AASmB,cAAY;AAAS,SAAO;AAAS,gBAAc;AAAS;AAChF,CAAC;AAAqB,WAAS;AAAK,iBAAe,IAAI,MAAM;AAAS;AACtE,CAvSC,KAuSK,CADL;AAC2B,gBAAc;AAAS;AACnD,CAAC;AACC,SAAO;AACP,WAAS,IAAI;AACb,UAAQ,IAAI,MAAM;AAClB,iBAAe;AACf,cAAY;AACZ,SAAO;AACP,QAAM;AACR;AACA,CAjTC,KAiTK,CATL;AASiC,gBAAc;AAAS;AACzD,CAAC;AAAmB,QAAM;AAAG,YAAU;AAAM,WAAS;AAAK;AAC3D,CAAC;AAAoB,WAAS,IAAI;AAAG;AACrC,CAAC;AACC,aAAW;AAAM,kBAAgB;AAAQ,kBAAgB;AACzD,SAAO;AACP,WAAS,IAAI;AACf;AACA,CAzTC,KAyTK,CALL;AAKgC,SAAO;AAAS;AACjD,CAAC;AACC,SAAO;AACP,WAAS;AAAM,eAAa;AAAQ,OAAK;AACzC,WAAS,IAAI;AAAK,UAAQ;AAAG,cAAY;AAAa,UAAQ;AAC9D,iBAAe;AACf,cAAY;AAAM,SAAO;AAAS,QAAM;AAC1C;AACA,CAPC,eAOe;AAAS,cAAY,KAAK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AAAO;AACvD,CAlUC,KAkUK,CARL,eAQqB;AAAS,cAAY;AAAS;AACpD,CATC,eASe;AAAU,UAAQ;AAAU;AAC5C,CAAC;AACC,eAAa;AACb,SAAO;AAAM,UAAQ;AACrB,iBAAe;AACf,WAAS;AAAa,eAAa;AAAQ,mBAAiB;AAC5D,SAAO;AAAO,aAAW;AAC3B;AACA,CAAC;AAAuB,WAAS;AAAM,kBAAgB;AAAQ,aAAW;AAAG;AAC7E,CAAC;AAAwB,aAAW;AAAM,eAAa;AAAK;AAC5D,CAAC;AACC,aAAW;AAAM,SAAO;AACxB,eAAa;AAAQ,YAAU;AAAQ,iBAAe;AACxD;AACA,CAjVC,KAiVK,CAJL;AAI6B,SAAO;AAAS;AAG9C,CAAC;AACC,cAAY;AACZ,UAAQ,IAAI,MAAM;AAClB,iBAAe;AACf,WAAS;AACT,WAAS;AAAM,kBAAgB;AAAQ,OAAK;AAC5C,YAAU;AACV,aAAW;AACX,SAAO;AACT;AACA,CA9VC,KA8VK,CAVL;AAUiB,cAAY;AAAS,SAAO;AAAS,gBAAc;AAAS;AAC9E,CAAC;AAAkB,eAAa;AAAQ,mBAAiB;AAAQ;AACjE,CAAC;AAAkB,aAAW;AAAM,SAAO;AAAS;AACpD,CAAC;AAAmB,WAAS;AAAM,kBAAgB;AAAQ,OAAK;AAAK;AACrE,CAAC;AACC,cAAY;AACZ,aAAW;AAAM,kBAAgB;AAAQ,kBAAgB;AACzD,cAAY,KAAK,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;AAAO,SAAO;AAC7C,WAAS,IAAI;AAAK,iBAAe;AACnC;AACA,CAAC;AAAsB,UAAQ;AAAG,aAAW;AAAM,SAAO;AAAS;AACnE,CAzWC,KAyWK,CADL;AAC4B,SAAO;AAAS;AAC7C,CAAC;AAAoB,UAAQ;AAAG,cAAY,IAAI,MAAM;AAAS,UAAQ,IAAI;AAAG;AAC9E,CA3WC,KA2WK,CADL;AAC0B,oBAAkB;AAAS;AAItD,CAAC;AAAoB,cAAY;AAAM,eAAa;AAAM;AAC1D,CAAC;AACC,SAAO;AACP,WAAS,IAAI;AACb,aAAW;AACX,eAAa;AACb,SAAO;AACP,cAAY;AACZ,UAAQ,IAAI,MAAM;AAClB,iBAAe;AACf,UAAQ;AACV;AACA,CAXC,gBAWgB;AAAS,cAAY;AAAS,gBAAc;AAAS;AACtE,CA5XC,KA4XK,CAZL;AAYyB,SAAO;AAAS,gBAAc;AAAS;AACjE,CA7XC,KA6XK,CAbL,gBAasB;AAAS,cAAY,KAAK,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC;AAAO,gBAAc;AAAS;AACzF,CAAC;AAAkB,WAAS;AAAM,kBAAgB;AAAQ,OAAK;AAAK;AACpE,CAAC;AAAkB,aAAW;AAAM,eAAa;AAAK;AACtD,CAAC;AAAiB,aAAW;AAAM,SAAO;AAAS,UAAQ;AAAG;AAC9D,CAjYC,KAiYK,CADL;AACuB,SAAO;AAAS;AACxC,CAAC;AAAqB,SAAO;AAAS;AACtC,CAAC;AACC,SAAO;AACP,WAAS,IAAI;AACb,UAAQ,IAAI,MAAM;AAClB,iBAAe;AACf,cAAY;AACZ,SAAO;AACP,QAAM;AACN,aAAW;AACX,cAAY;AACd;AACA,CAXC,eAWe;AAAS,WAAS,IAAI,MAAM;AAAS,kBAAgB;AAAM;AAC3E,CA/YC,KA+YK,CAZL;AAYwB,gBAAc;AAAS;AAChD,CAAC;AAA4B,eAAa;AAAS,UAAQ;AAAU;AACrE,CAAC;AACD,CAAC;AACC,eAAa,YAAY,EAAE;AAAW,aAAW;AACnD;AACA,CAAC;AAAmB,WAAS;AAAa,eAAa;AAAQ,UAAQ;AAAS;AAChF,CADC,iBACiB;AAAQ,WAAS;AAAM;AACzC,CAAC;AACC,SAAO;AAAM,UAAQ;AACrB,cAAY;AACZ,iBAAe;AACf,YAAU;AACV,cAAY,WAAW;AACzB;AACA,CAPC,uBAOuB;AACtB,WAAS;AACT,YAAU;AAAU,QAAM;AAAK,OAAK;AACpC,SAAO;AAAM,UAAQ;AACrB,cAAY;AACZ,iBAAe;AACf,cAAY,KAAK;AACnB;AACA,CAjBC,iBAiBiB,KAAK,SAAS,EAAE,CAfjC;AAe4D,cAAY;AAAS;AAClF,CAlBC,iBAkBiB,KAAK,SAAS,EAAE,CAhBjC,uBAgByD;AAAW,QAAM;AAAM;AACjF,CAAC;AAAmB,cAAY;AAAK;AACrC,CAAC;AAAkB,aAAW;AAAM,SAAO;AAAS,UAAQ,IAAI;AAAG;AACnE,CA1aC,KA0aK,CADL;AACwB,SAAO;AAAS;AAGzC,CAAC;AAAc,WAAS;AAAM,kBAAgB;AAAQ,OAAK;AAAK;AAChE,CAAC;AAAqB,aAAW;AAAM,SAAO;AAAS,UAAQ;AAAG,cAAY;AAAQ;AACtF,CA/aC,KA+aK,CADL;AAC2B,SAAO;AAAS;AAC5C,CAAC;AACC,WAAS;AAAM,kBAAgB;AAAQ,OAAK;AAC5C,UAAQ,IAAI,MAAM;AAAS,iBAAe;AAAK,WAAS;AAAK,cAAY;AAC3E;AACA,CApbC,KAobK,CAJL;AAIyB,gBAAc;AAAS,cAAY;AAAS;AACtE,CAAC;AAAwB,WAAS;AAAM,eAAa;AAAQ,mBAAiB;AAAe,OAAK;AAAK;AACvG,CAAC;AACC,aAAW;AAAM,eAAa;AAAK,SAAO;AAC1C,YAAU;AAAQ,iBAAe;AAAU,eAAa;AAC1D;AACA,CA1bC,KA0bK,CAJL;AAI+B,SAAO;AAAS;AAChD,CAAC;AAA2B,WAAS;AAAM,OAAK;AAAK,eAAa;AAAG;AACrE,CAAC;AACC,UAAQ,IAAI,MAAM;AAAa,cAAY;AAAa,UAAQ;AAChE,iBAAe;AAAK,aAAW;AAAM,eAAa;AAAG,WAAS,IAAI;AAAK,SAAO;AAChF;AACA,CAJC,gBAIgB,MAAM,KAAK;AAAa,cAAY;AAAS,SAAO;AAAS;AAC9E,CAjcC,KAicK,CALL,gBAKsB,MAAM,KAAK;AAAa,cAAY;AAAS,SAAO;AAAS;AACpF,CANC,gBAMgB;AAAY,WAAS;AAAK,UAAQ;AAAa;AAChE,CAAC,wBAAwB,MAAM,KAAK;AAAa,cAAY;AAAS,SAAO;AAAS;AACtF,CApcC,KAocK,CADL,wBAC8B,MAAM,KAAK;AAAa,cAAY;AAAS,SAAO;AAAS;AAC5F,CAAC;AAAoB,WAAS;AAAM,kBAAgB;AAAQ,OAAK;AAAK;AACtE,CAAC;AAAuB,aAAW;AAAM,SAAO;AAAS,eAAa;AAAK;AAC3E,CAvcC,KAucK,CADL;AAC6B,SAAO;AAAS;AAC9C,CAAC;AACC,cAAY;AAAY,UAAQ,IAAI,OAAO;AAAS,cAAY;AAChE,iBAAe;AAAK,WAAS,IAAI;AAAM,aAAW;AAAM,SAAO;AAAS,UAAQ;AAClF;AACA,CAJC,gBAIgB,MAAM,KAAK;AAAa,gBAAc;AAAS,SAAO;AAAS;AAChF,CALC,gBAKgB;AAAY,WAAS;AAAI,UAAQ;AAAa;AAC/D,CA9cC,KA8cK,CANL;AAMyB,gBAAc;AAAS,SAAO;AAAS;AAEjE,CAAC;AAAc,WAAS;AAAM,kBAAgB;AAAQ,OAAK;AAAK;AAChE,CAAC;AACD,CAAC;AAAmB,WAAS;AAAM,yBAAuB,IAAI,IAAI;AAAM,OAAK;AAAK,eAAa;AAAQ;AACvG,CAFC;AAEoB,aAAW;AAAM,kBAAgB;AAAW,kBAAgB;AAAO,SAAO;AAAS;AACxG,CAAC;AAA0B,SAAO;AAAS,cAAY;AAAQ;AAC/D,CArdC,KAqdK,CADL;AACgC,SAAO;AAAS;AAGjD,CAAC;AAAwB,WAAS;AAAK,aAAW;AAAO;AACzD,CADC,sBACsB,CAtFtB;AAsFyC,SAAO;AAAM;AAGvD,CAAC;AAAkB,WAAS;AAAM,kBAAgB;AAAQ,OAAK;AAAK;AACpE,CAAC;AACC,UAAQ,IAAI,MAAM;AAAS,iBAAe;AAAK,YAAU;AACzD,cAAY;AAAO,cAAY;AACjC;AACA,CAjeC,KAieK,CAJL;AAI+B,gBAAc;AAAS,cAAY;AAAS;AAC5E,CAAC;AACC,UAAQ,IAAI,OAAO;AAAS,iBAAe;AAAK,WAAS;AACzD,aAAW;AAAM,SAAO;AAAS,eAAa;AAChD;AACA,CAteC,KAseK,CAJL;AAIqC,gBAAc;AAAS,SAAO;AAAS;AAC7E,CALC,6BAK6B;AAC5B,aAAW;AAAM,cAAY;AAAS,WAAS,IAAI;AAAK,iBAAe;AACzE;AACA,CA1eC,KA0eK,CARL,6BAQmC;AAAO,cAAY;AAAS;AAChE,CAAC;AAAyB,aAAW;AAAM,eAAa;AAAK,SAAO;AAAS;AAC7E,CA5eC,KA4eK,CADL;AAC+B,SAAO;AAAS;AAIhD,CAAC;AACC,aAAW;AACX,SAAO;AACP,UAAQ;AACV;AAEA,CAAC,0BAA0B,CAAC;AAAO,gBAAc,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAAO;AACtE,CADC,0BAC0B,CAAC;AAC1B,SAAO;AAAK,UAAQ;AAAK,iBAAe;AAAK,UAAQ,IAAI,MAAM;AACjE;AACA,CA1fC,KA0fK,CAJL,0BAIgC,CAJL;AAIa,gBAAc,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAAO;AAClF,CA3fC,KA2fK,CALL,0BAKgC,CAJL;AAIe,gBAAc;AAAS;AAMlE,CAAC;AACC,SAAO;AACP,UAAQ;AACR,cAAY;AACZ,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAChC,UAAQ,IAAI,OAAO;AACnB,iBAAe;AACf,YAAU;AACZ;AACA,CAAC;AAAoB,gBAAc;AAAO;AAC1C,CAAC;AACC,WAAS;AACT,eAAa;AACb,UAAQ;AACR,WAAS,EAAE;AACX,SAAO;AACP,aAAW;AACX,eAAa;AACb;AAAA,IAAa,aAAa;AAAA,IAAE,SAAS;AAAA,IAAE;AACvC,iBAAe,IAAI,IAAI,EAAE;AAC3B;AACA,CAAC;AAAiB,YAAU;AAAQ,iBAAe;AAAU,eAAa;AAAQ;AAKlF,CA7aC;AA8aC,SAAO;AACP,UAAQ;AACR,cAAY;AACZ,WAAS,IAAI;AACb,UAAQ,IAAI,MAAM;AAClB,iBAAe;AACf;AAAA,IAAa,aAAa;AAAA,IAAE,SAAS;AAAA,IAAE;AACvC,cAAY,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACpC,YAAU;AACV,WAAS;AACT,kBAAgB;AAChB,OAAK;AACP;AACA,CA9aC;AA8aoB,cAAY,EAAE,EAAE,EAAE,IAAI;AAAc;AACzD,CA9aC;AA+aC,aAAW;AACX,eAAa;AACb,kBAAgB;AAChB,kBAAgB;AAClB;AACA,CAnbC;AAobC,QAAM;AACN,cAAY;AACZ,aAAW;AACX,eAAa;AACb,SAAO;AACP,eAAa;AACb,YAAU;AACZ;AACA,CAzjBC,KAyjBK,CA5bL;AA4bsB,SAAO;AAAS;AACvC,QAAO,sBAAuB;AAC5B,GA9bD,aA8be,KAAK,CAzjBH,iBAyjBqB;AAAK,WAAO;AAAS;AAC5D;AACA,CAAC;AAAuB,SAAO;AAAS,cAAY;AAAQ;AAC5D,CAAC;AACC,QAAM;AACN,cAAY;AACZ,SAAO;AACP,UAAQ;AACR,UAAQ;AACR,WAAS;AACT,cAAY;AACZ,QAAM;AACN,aAAW;AACX,eAAa;AACb,SAAO;AACT;AAGA,CAAC;AACC,UAAQ;AACR,WAAS,IAAI,KAAK;AAClB,aAAW;AACX;AAAA,IAAa,YAAY;AAAA,IAAE,SAAS;AAAA,IAAE,KAAK;AAAA,IAAE;AAC7C,SAAO;AACP,YAAU;AACV,iBAAe;AACf,eAAa;AACf;AACA,CAvlBC,KAulBK,CAVL;AAUwB,SAAO;AAAS;AAGzC,CAAC;AAAiB,cAAY;AAAS;AACvC,CA3lBC,KA2lBK,CA1FL;AA0FgB,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAAO,gBAAc;AAAS;AAC/E,QAAO,sBAAuB;AAC5B,GA5FD,OA4FS,KAAK,CA3lBG,iBA2lBe;AAAK,gBAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAAO,kBAAc;AAAS;AACpG;","names":[]}
|
|
@@ -4,7 +4,7 @@ import { P as PortDescriptor, N as NodeExecutor, a as FlowNode } from './types-C
|
|
|
4
4
|
import { P as PauseAwaiting } from './pause-9iT4tCEV.js';
|
|
5
5
|
|
|
6
6
|
/** Categories used by the palette for grouping. */
|
|
7
|
-
type NodeCategory = "trigger" | "logic" | "data" | "ai" | "io" | "human" | "output" | "layout" | "custom";
|
|
7
|
+
type NodeCategory = "trigger" | "logic" | "data" | "ai" | "io" | "human" | "output" | "layout" | "annotation" | "custom";
|
|
8
8
|
/**
|
|
9
9
|
* Tagged-union of config-field shapes the auto-form knows how to render.
|
|
10
10
|
* Each variant has a `key` (the config object property it writes to) and
|
|
@@ -271,6 +271,13 @@ type NodeKindDefinition<TConfig = Record<string, unknown>, TIn = any, TOut = any
|
|
|
271
271
|
* xyflow's `NodeProps`.
|
|
272
272
|
*/
|
|
273
273
|
component?: ComponentType<NodeProps<FlowNode>>;
|
|
274
|
+
/**
|
|
275
|
+
* Opt this kind into reactive data flow: during a run, a node's computed
|
|
276
|
+
* output is written back into its `data.output`, so its card reflects the
|
|
277
|
+
* value live ("computing flows"). Default off — non-reactive kinds are
|
|
278
|
+
* untouched, so this is purely additive.
|
|
279
|
+
*/
|
|
280
|
+
reactive?: boolean;
|
|
274
281
|
};
|
|
275
282
|
|
|
276
283
|
export type { ConfigField as C, DocumentConfigField as D, ExpressionConfigField as E, JsonConfigField as J, KeyValueConfigField as K, NodeCategory as N, PortSpec as P, RenderBodyContext as R, SelectConfigField as S, TextConfigField as T, NodeKindDefinition as a, CredentialConfigField as b, NumberConfigField as c, RepeaterConfigField as d, RepeaterRowField as e, SwitchConfigField as f, TextareaConfigField as g };
|